POCU/후기

POCU 아카데미 COMP3500 후기, 알고리즘과 자료구조 제대로 공부하기

성수아자 2022. 12. 26. 23:53

POCU 아카데미 COMP3500 후기


▶ 후기 시작하기에 앞서

▶ 포큐 아카데미를 선택하기 까지

▶ 지금 하고 있는 일

▶ 많은 선택지 중에 알고리듬 강의를 선택한 이유

▶ 비싼 가격과 높은 난이도에도 COMP3500을 추천하는 지

▶ 코딩 테스트를 준비하는 사람은?

▶ 회고

▶ 이전 과목들을 생략하고 들어도 되는지?

▶ 앞으로의 계획

▶ 수강생 미세팁


후기 시작하기에 앞서

https://sungsuaza.tistory.com/47

 

POCU 아카데미 COMP1500 후기

수강 동기 군 전역 후 방황하다 여러 매체에서 광고하는 마케팅에 넘어가 21년 5월에 개발자가 되기로 마음 먹었다. 국비 지원과 부트캠프 중 고민하던 중 국비 지원에서 떨어져 어쩔 수 없이 부

sungsuaza.tistory.com

https://sungsuaza.tistory.com/74

 

POCU 아카데미 COMP2200 후기, C언어 제대로 공부하기

POCU 아카데미 COMP2200 후기 ▶ POCU 아카데미 간단 소개 ▶ 자기 소개 ▶ 나에게 C 언어란? ▶ POCU 아카데미의 C 언어 ▶ 제대로 배우는 언매니지드 언어 ▶ 수강 후 달라진 점 ▶ 풀코스를 마치며 ▶

sungsuaza.tistory.com

나는 강의를 듣기 전 후기를 참고할 때 항상 수강한 사람의 배경을 가장 중요하게 생각한다. 누군가는 비슷한 내용을 학습한 경험이 있을 것이고 누군가는 기반 지식은 있지만 내용 자체는 처음일 것이고 또 누군가는 기반 지식도 부족하고 해당 강의 내용도 처음일 것이다. 아는 만큼 보인다고 가정하면 같은 강의라도 수강생마다 받아들이는 학습량과 이해도는 천차만별일 것이다. 그래서 항상 후기를 쓸 땐 처음으로 내 배경과 상황을 적는다. 위 후기에서 COMP3500 알고리듬 과목 듣기 전의 나의 상태가 적혀 있지만 지금 내가 생각하는 현재의 나와 지금까지 위 강의들이 얼마나 도움이 되었고 어떤 생각들을 했는지 적어보고자 한다.

 

포큐 아카데미를 선택하기 까지

프로그래밍(코딩)을 시작한 지 벌써 1년 6개월 정도 되었다. 21년 6월 처음 부트캠프를 시작하여 1인 스타트업 비슷한 현재 회사까지 오게 되었다. 부트캠프에 리액트, 노드, 자바 트렉이 있었는데 나는 리액트를 선택했다. 리액트가 적성이라기보단 코딩을 처음 하는데 서버보단 프런트를 하는 것이 좀 더 수월할 거라고 생각했다. 나의 큰 착각이었다. 지금 생각해보면 프런트나 서버나 프레임워크, 라이브러리의 문서를 보고 복붙 그 이상을 원한다면 반드시 컴퓨터 공학 기반이 있어야 한다. 부트캠프에선 라이브러리, 프레임워크 사용법들을 알려주어 스타트업에 취직을 시키는 방법을 제시하고 인도한다. 그리고 나는 그걸 토대로 취직을 했고 회사에서 서비스를 만들며 돈을 받고 있다. 이 방법이 취직이 되는 이유는 회사 입장에선 검은 고양이든 흰 고양이든 쥐만 잘잡으면 된다고 생각하기 때문이다. 스타트업에서 필요한 건 대기업같은 큰 서비스의 유지 보수를 원하지 않는다. 당장 투자금이 마르기 전에 매출을 올리든 투자자를 설득하든 고양이보단 쥐에 집중하는 입장이다. 고양이 입장에선 당장의 쥐에 급급하여 기본에 쓸 시간을 잃게 된다. 내부 구조 이해 없이 작동하게 하는 스킬만 는다. 이 스킬이 중요하지 않다는 건 절대 아니다. 다만 내부 구조가 잘못 되었을 경우 고칠 수 없거나 다른 서비스를 찾게 되어 결국 더 큰 문제가 생길 수 있기에 컴퓨터  공학 기반은 개발자 입장에서 필수라고 생각한다. 다만 이미 일을 하고 있고 나이도 어리지 않는 상황에서 퇴사를 하고 다시 학교에 들어가는 건 매우 비효율적이라고 생각을 했고 나의 선택지는 일을 하며 따로 시간을 내어 기본 지식을 익히는 것이었다. 여러 가지 선택지가 있을 것이다. 무료 유튜브 대학 강의를 본다거나 코세라나 MOOC 같은 플랫폼, 학점 은행제, 방통대 등 여러 많은 학습 수단이 있고 나는 그 중 POCU 아카데미를 선택하게 되었다.

 

 

지금 하고 있는 일

현재 다니는 회사는 개발자가 나 혼자이고 대표님의 서비스 요청 사항에 맞춰 기능을 개발하며 주로 Node.js를 이용하여 서버를 다루지만 프런트 프로젝트 경험도 있기에 플러터로 어플 기능 구현과 유지 보수도 하고 있다. 시간적 압박이 크진 않지만 혼자다 보니 삽질과 여러 시행착오로 인한 예측할 수 없는 변수 때문에 최대한 빠르게 새로운 개념을 이해하고 적용해야한다. 컴퓨터의 원리를 모른 채 리액트, 자바스크립트를 조금 배우고 회사에 입사했을 때 나는 다음과 같았다. 우선 해당 기능을 구현해주는 강의가 있는지 찾아보았고 해당 강의가 있으면 강의를 참고해서 기능을 구현하고 넘겼고 만약 강의가 없다면 해당 프레임워크나 라이브러리 설명 페이지에 들어가 예제 코드를 복붙하고 이것저것 시도해본 후 적용했다. 이런 과정을 반복하여 최종 기능을 완성했다. 사용자가 거의 없는 관리자 페이지에선 문제되지 않았지만 문제는 실제 사용자가 존재하는 프로젝트에서 발생했다. 특정 순서로 행동을 하면 서버에서의 응답이 매우 느렸다. 이런 상황을 자주 접하자 감정적으로 일하게 되었다. 기능이 잘 구현되면 기분이 좋았고 구현되지 않으면 짜증이 몰려들었다. 감정이 있는 사람을 상대하는 일이 아닌 감정도 자아도 없는 컴퓨터를 다루는 것에 감정적이게 바뀐 건 오롯이 내 잘못이라고 생각했고 이를 해결하고자 POCU 아카데미를 찾았다. 원리를 모른다는 건 내부 동작을 모르는 것이고 이는 내가 불러온 모듈들끼리 큰 문제가 없기를 바라는 기도로 이르게 된다. 마법 도구가 아닌 컴퓨터에 종교적 개념인 기도가 쓰인다는 건 작동 원리 이해의 부족이라고 생각했다.

COMP1500은 프로그래밍 기본이란 이름답게 기본기를 알려준다. 영어의 기본은 단어의 정확한 쓰임과 뜻, 문법이다. 프로그래밍 기본에선 여러 용어들의 맥락과 개념을 알려주고 규칙들을 배울 수 있었다. 워낙 요즘은 기초 강의가 많다보니 다른 플랫폼을 통해서도 이 부분은 충분히 채울 수 있다고 생각한다. 내가 가장 도움이 많이 되었던 부분은 COMP2200 C 언매니지드 언어였다. 컴퓨터 구조 급으로 자세하게 메모리를 배우진 않지만 내 코드가 메모리와 cpu 등 여러 컴퓨터 자원에서 어떤 식으로 동작하는 지 자세하게 설명해준다. 자세한 건 위 링크를 보면 알 수 있다. 그 후 4개월 정도의 시간 동안 나는 실제 업무에서 많은 도움을 받았다. 이제는 특정 라이브러리, 프레임워크에 앞서 너무 큰 추상화가 되어있지 않은 이상 어떻게 도는지 적어도 문서를 볼 때 한 번은 생각하게 되었고 이는 내 기도 횟수를 줄여주었다. 아직 기도는 한다. 

 

 

많은 선택지 중에 알고리듬 강의를 선택한 이유

이 강의를 듣는 시점엔 일을 안하고 있었고 혼자 공부에 익숙하지 않던 나는 코드 스테이츠라는 부트캠프 수업을 듣고 있었다. 해당 프로그램은 자율적인 부분이 커서 알고리듬 강의를 듣기엔 충분 하다고 판단했다. 핑계지만 중간에 취직과 업무로 인해 알고리듬 과목은 Fail이다.

보통 알고리듬과 자료구조를 나눠서 수업하거나 코딩 테스트란 명목 하에 알고리듬으로 분류를 하고 필요하면 자료구조를 알려주는 식으로 짜여 있었지만 목차를 봤다 개인적으로 개념 설명이 있고 그에 해당하는 문제 풀이와 파생되는 개념을 배우는 방식을 선호한다. 물론 이 이유만으로 알고리듬을 선택한 건 아니다. 내 목표는 대기업에 지원 요건을 갖추는 것이어서 COMP2500(개체지향)을 듣고 COMP3500(알고리듬)을 들을 생각이었는데 부트캠프 과제에 밀려 시간이 있음에도 알고리듬을 미루게 되었다. 계획이 밀리다 보니 스트레스를 받았고 결국 현질로 해결하는 방법을 선택했다. 대부분 알고리듬 강의는 타 과목에 비해 수강생이 적은데 내 생각엔 아마 더 다양한 대체제가 많고 POCU 아카데미의 가격 진입장벽에 막힌 것 아닐까 생각이든다. 엄청나게 많은 알고리듬, 자료구조 강의가 존재한다.

 

 

비싼 가격과 높은 난이도에도 COMP3500을 추천하는 지

나는 결국 COMP3500을 통과하지 못했다. 중간고사 쯤부터 전에 회사 대표님과 다시 일하기 시작했고 편의를 많이 봐주셨지만 해야할 공부가 좀 있어서 COMP3500은 실습, 과제만 꾸역꾸역 하는 식으로 하다보니 결국 후반부에서 포기하게 되었다.. 그래프가 가장 어려웠는데 그래프 뒷부분에선 아예 못했다. 이는 뒷 부분 회고에서 좀 더 자세하게 이야기하겠다. 통과도 못하여 수료증도 없고 100만원 가량의 돈을 그냥 버린 거 같은 내가 이 강의를 추천하냐고 묻는다면 난 추천한다. 다만 대상은 알고리듬과 자료구조를 제대로 배우지 못한 대학생이나 비전공생들이다. 제대로 배운다는 건 개념도 이해하고 그로 인해 여러 문제를 풀어본 걸 뜻한다. 이미 어디서 과제까지 해봤다면 그건 개인의 선택이지 싶다. 이 강의를 듣기 전 알아야할 중요한 것은 이 강의는 코딩 테스트를 위한 강의가 아니란 것이다. 도움은 당연히 되겠지만 문제 풀이 스킬을 알려주는 것이 아니고 해당 알고리듬과 자료구조가 어떤 원리이고 어디에 쓰이는 지 깊게 알려준다. 목차를 보면 알겠지만 가장 좋았던 부분은 해시 알고리듬과 암호화 부분이었다. 이 부분을 듣고 싶어서 이 강의를 고른 이유도 꽤 크다. 대부분의 강의는 다루지 않는 부분이다. 서버 프로그래밍을 하게 되면 인증 부분과 자주 접하고 DB도 자주 다루게 된다. 또 https 통신에서도 비대칭 암호화를 이용한다. 그 중 jwt 라는 토큰 개념에서 개념을 깊이있게 이해할 수 있었다. jwt 토큰은 Header, Payload, Signature로 이루어진 문자열이다. 

JWT 토큰

 

 

간략하게 설명하면 특정 데이터를 해시 함수를 사용하여 signature를 만들고 이를 데이터와 합쳐 특정 문자열을 만드는 방식이다. 처음 Node.js로 인증 시스템을 구현할 때 그냥 별 생각 없이 jwt 패키지와 암호화하는 crypto 패키지를 불러와서 구현했다. 다음은 실제 프로젝트에서 사용한 코드이다.

 

 

해당 강의를 듣고 다시 들여다보니 아 HS512 라는 대칭 알고리듬, RSA256이라는 비대칭 알고리듬을 사용하여 구현했다는 걸 알게 되었다. jwt에 대한 자세한 건 COMP3500에서 해시, 암호화 부분을 듣고 jwt를 검색하면 깊이있는 학습이 가능하다. 

또한 http/https 통신에서 http는 대칭 키를 사용하지만 해당 키가 보안적으로 문제가 있어 https란 비대칭 키 개념을 이용하고 현재는 성능 상의 문제로 https는 대칭 키와 비대칭 키 섞어서 사용하는 것을 알 수 있었다.

트리도 아주 자세하게 다룬다. 재귀적인 개념은 COMP1500부터 강조했었고 나는 알고리듬 강의 와서 재귀를 더 자세히 이해할 수 있었다. 플러터와 리액트를 하다보면 UI는 DOM처럼 트리 형태로 구현되어 있는 걸 볼 수 있다. 트리와 재귀는 밀접한 관련이 있다.

플러터 구조
웹 브라우저 DOM

지금 생각나는 예만 추려서 적어봤다. 이처럼 강의에서 설명한 개념들이 실제 내가 하고 있는 일에서 본다는 것이 매우 좋았다. 강의에서 개념에 적용되는 더 많은 예를 설명하지만 난 게임 쪽은 몰라서 따로 찾아보진 않았다. 그래서 결국 난 COMP3500을 추천하는 것이다. 

 

코딩 테스트를 준비하는 사람은?

내가 코딩 테스트를 통과한 사람도 아니기에 이 궁금증에 대한 답을 줄 수 있을진 모르지만 해당 강의 수강생으로서 한 마디 적어 보자면 알고리듬과 자료구조를 모른다면 COMP3500으로 개념과 실습을 진행하고 복습 겸 백준이나 프로그래머스 문제 푸는 것이 좋아보인다. 개념을 안다면 이미 알아서 계획 세워서 문제 풀이에 집중하면 좋지 않을까?

 

회고

회사 일과 연말 약속들로 시간을 많이 못내었다곤 하지만 그래도 COMP1500, COMP2200 못지 않게 시간을 많이 썼다. 강의도 최대한 1주일 정도는 먼저 들었고 실습도 수요일부터는 시작하려고 노력했다. 여기서 문제는 실습과 과제만 했다는 것이다. 개념적으론 이해했지만 문제 풀이에서 부족한 부분이 있었는데 이를 무시하고 다음 주 차 개념을 학습했고 결국 초반에 부족했던 부분이 뒤에서 눈덩이 처럼 커져 몇 시간동안 푼다고 해결되지 않는 수준에 이르렀다. 적어도 해당 개념의 문제를 3개 정도는 따로 풀어봤어야 했다. 미니맥스 알고리듬을 이용하여 체스AI를 만드는 과제가 있는데 재귀를 이해하지 못하면 절대 해결할 수 없었다. 재귀 뿐만 아니라 여타 개념까지 섞여서 결국 통과하지 못하고 57점이란 점수를 받게 되었다. 당장은 POCU 강의를 들을 계획은 없지만 COMP3500을 다시 듣게 된다면 강의 뿐만 아니라 추가적인 문제 풀이를 반드시 병행할 것이다. 개념이 아무리 중요하다 하더라도 내가 직접 구현하는 것과 개념만 아는 것은 다르고 문제 풀이가 아니라면 실제 알고리듬과 자료구조를 연습해볼 곳이 거의 없다는 것이다. 아직 주니어 개발자인 나로선 문제만이 연습할 기회를 제공하였다. 

 

이전 과목들을 생략하고 들어도 되는지?

나는 COMP2500을 듣지 않고 COMP3500을 들은 것이 조금은 후회한다. Java를 해당 과목으로 처음 배웠고 코딩에 대한 숙련도가 높지도 않은 상황에서 COMP3500을 들은 것은 조금은 이상적인 생각이었다. 따로 과제 없이 개체지향 강의를 동영상으로 70% 정도 들었다. 세일할 때 사놨다. POCU 아카데미는 보통 이전 내용을 뒤에서 알려주지 않으므로 전 강의를 듣지 않았는데 해당 개념까지 모르면 알아서 공부해야 하는 경우가 있다. 공부하면 해결될 문제이지만 유기적으로 연결된 강의에서 따로 공부하는 건 시간 소모가 꽤 되었다. 개인적으로 순서대로 공부하는 걸 추천한다. 적어도 다른 것을 병행하여 부족한 부분을 채워 다음 과목에 필요한 지식을 채워야 해당 강의를 수월하게 진행할 수 있다고 생각한다.

 

앞으로의 계획

COMP2200 수강 후기 중 어디에선가 C언어를 배워서 X-ray를 눈에 낀 것 같다고 한 걸 보았다. 지금까지 POCU 아카데미를 수강하면서 나는 더 깊이있는 곳까지 볼 수 있는 눈을 얻었다. 3과목 밖에 듣지 않은 내가 이 정도의 생각을 할 수 있었던 건 POCU 아카데미와 포프님의 철학이 있었기 때문이다. 포프TV 멤버십 회원인 나는 포프님의 코딩에 대한 철학을 꽤 많은 부분에서 옅볼 수 있었다. 가장 좋았던 건 예전부터 일관된 생각을 가지고 계시는 것이다. 배움에 있어서 여러 가지 의견은 꽤 큰 걸림돌이다. 이미 수많은 경험을 통해 통일된 의견을 가진 포프님은 수강생인 나를 혼란스럽게 하지 않았다. 앞으로 배워야할 것들이 많은데 가장 필요한 강의부터 들을 생각이다. 기회가 된다면 COMP3500 통과하고 싶다..!

 

수강생 미세팁

1. POCU에서 제공하는 강의 플랫폼은 Teachable과 Udemy가 있다. Udemy는 한국 화폐로 가격이 정해져 있는 반면 Teachable은 케나다 화폐로 결제하면 (카드사에서 지원해야 결제 가능) 환율이 낮은 경우 조금 더 싸게 살 수 있다. 다만 공부하는 입장에서 Teachable을 추천한다. 수강생들이 해당 강의 밑에 질문을 남기는데 프로그래밍 기본과 C언어, 개체지향 언어는 모두 수강생들의 질문과 포프님 답변에서 놓친 것들을 배웠는데 반해 알고리듬 강의는 질문이 여타 강의보다 적었다. 알고리듬만 해당되는 거 일수도..? 결국 돈 조금 더 내더라도 Teachable에서 사는 걸 추천한다. 가끔 강의 할인 이벤트도 하는데 이 때 사면 더 싸다. 저번엔 여름방학 쯤에 했다.

https://pocu-ko.teachable.com/?referral_code=C18JVD 강의가 처음이신 분들은 해당 링크에서 구매하면 15% 할인받을 수 있다! 나도!

 

2. 해당 주 차 끝날 때 쯤 설문 조사에서 모르는 부분이나 궁금한 것을 질문하면 포프님이 바로 답변을 주신다. 강의 댓글로 답변하는 것도 좋지만 그건 2주에서 1달 정도 소요되므로 풀코스 수강생의 특권을 잘 사용하자.

 

3. 알고리듬은 수강생이 적어서 다른 과목처럼 질문하면 조교님의 빠른 답변을 기대하기 어렵다. 미리 시행착오를 겪고 빠르게 질문을 하면 조교님과 다른 수강생들의 도움을 받을 수 있을 것이다. 

 

4. 예제 코드를 열심히 학습하자! 예제 코드 내용이 실습과 과제에 사용되기도 하고 시험에도 변형되서 나오기도 한다. 예제 코드는 개념에 가장 적합한 예제를 사용하신 이유가 아닐까 싶다.