2021년 회고(를 위한 2020 회고) [1]

Seungwoo Kim·2022년 1월 30일
1

회고록

목록 보기
1/1
post-thumbnail

정말 다이나믹하고 많은 경험을 할 수 있었던 2021년. 커리어의 방향을 잡고 다시 달려가기 위해 지난 날들을 기록해 보려고 한다.
(이 글은 사실 2021년 회고를 위한 2019-2020년 회고록이다...😅)

👮‍♀️ 개발과 함께한 군생활

2019년 9월에 입대해 2021년 4월까지 의무경찰로 군복무를 마치고 전역했다. 입대 직전부터 막연하게 프로그래밍으로 무언가를 만들어보고 싶었다. 학교에서 배운 c/c++로 찔끔찔끔 프로젝트를 진행한 것 말고는 프로그래밍에 대해 아무것도 모르는 상태였다. 맨땅에 헤딩식으로 동기형들과 약속시간을 잡아주는 안드로이드 앱을 개발해보려 했는데 실패했다. 내가 어떤걸 해야하는 지 파악을 하기도 전에, 내가 무엇을 모르는지 조차 몰랐기 때문이다. 흐지부지 된 채로 논산훈련소로 향했다.

💻 첫 웹 개발 공부 시작

잠깐 2019~2020년을 먼저 회고해보겠다. 자대배치를 받고 의경 생활을 하며 개인정비시간이 생각보다 많다는 것을 알게됐다. 1년 반이 넘는 시간동안 성장해서 나오고 싶었기 때문에 무작정 웹 공부를 시작하게 됐다. 시작은 니꼴라스 노마드 코더쌤 강의로 시작했다.

👍 노마드 코더 강의

바닐라 JS로 시작해 프론트엔드와 백엔드에 대해 알게되고, React와 React-Native라는 JS 라이브러리도 공부했다. 짧은 길이의 여러 강의들을 계속해서 수강하며 뭔가 해내고 있다는 생각에 굉장히 흥미롭고 재밌었다. 웹에 대한 니꼬쌤의 무료 강의를 다 들어갈 때 쯤 조금 더 딥한 강의를 듣고싶었다. 그래서 인스타그램 클론 강의를 의경 월급의 대부분을 주고 큰 맘 먹고 구매했다. 프론트엔드 스택으로 React와 React-Native를 사용하며 Hook, ES6 문법, 클린 코드를 작성하는 스킬, 비동기 처리 등등에 대해 배웠다. 백엔드 스택으로는 nodeJs Express, GraphQL을 사용하며 Apollo, GraphQL 문법 등에 대해 익히고 Heroku로 배포했던 것 같다. 거의 첫 백엔드 개발 공부를 한건데 당시에 너무 어려워서 힘들었던 걸로 기억한다..ㅠㅠ

생활관 내부 컴퓨터로 공부하다 찍었던 기록이다. 에러로 힘들어하는 것 같다ㅋㅋㅋㅋ

단순히 클론코딩이라 해서 무지성으로 따라하는게 아니라 제대로 이해하고 처음부터 끝까지 스스로 개발해보고 싶었다. 그래서 잊을만한 내용이나 이해가 안되는 것들을 노트에 꾸준히 끄적이고 다시 돌려봤다. 비싼 돈 주고 산 강의라 더 정성스럽게 공부한 것 같다ㅠ

React Native 파트를 제외하고(생활관 컴퓨터에서 애뮬레이터가 작동 안해서 포기..ㅠㅠ) 웹 프론트, 백엔드 파트를 완강하고 난 뒤 알 수 없는 자신감이 생겼다. 내 손으로 무언가를 만들 수 있고 입대 전부터 그토록 바라던 프로그래밍을 할 수 있구나:) 니꼬쌤의 강의가 명강이었지만 클론코딩을 하다보니 100% 이해 없이 따라 친 코드도 많았다. 나름 배운 내용을 복습하고 내가 모르는 내용을 다시 캐치해보고 싶어서 혼자서 프로젝트를 진행해보려 했다.

결론부터 말하면 다 실패했다. 아직 베이스가 충분하지도 않은데 무리하게 GraphQL을 써서 개발해보려 했고, 웹 디자인을 제대로 기획하지도 않았는데 프론트 개발하려고 하니 제대로 손에 잡히지 않았다. 그래서 백엔드 모델링이라도 조금 해보고 API를 개발하려 했는데 개발 중간에 번아웃이 왔다. 2년 전의 꽤 오래 전 일을 회상하는거라 정확히 기억은 나지 않지만 풀스택 개발이 어렵구나 라는걸 느꼈던 것 같다. 백엔드 개발도 어렵게 해냈는데 프론트로 넘어가려 하니 페이지 디자인도 해야하는 상황에 갑자기 숨이 막혔나보다ㅋㅋ 허탈하지만 번아웃이 온 채로 군생활을 이어 나아가며 중간 중간 다른 웹 개발 강의들도 많이 들으며 베이스를 채울려 했다.

💡 느낀점

그래도 몇 개월간의 개발 공부 기간 동안 느낀점이 많았다. 대표적으로
1. 프론트와 백엔드 개발이 어떤건지 조금이라도 이해했다
2. 견고한 프로젝트 구조 & 클린 코드가 너무 멋있었다...
3. 내가 무엇을 모르는지 알 수 있었다.
특히 제대로된 서비스를 운영하고 협업을 하기 위해 견고하게 프로젝트 구조를 짜고 클린 코드를 짜는 과정에 관심이 많아졌고 지금까지 개발 습관에도 영향을 준 것 같다.

📈 데이터 분석과 머신러닝/딥러닝 입문기

2020년 중반 맞후임 형과 커리어에 대해 이야기를 많이 했다. 서울대를 다니며 창업을 하고 많은 경험을 쌓고 군대로 온 것 같았다. 부대 안에서도 사업에 대한 회의를 팀원들과 하고 내게 개발 관련 얘기도 많이 해줬다. 번아웃이 온 내게 앞으로의 공부방향에 대해 조언해줬는데 머신러닝/딥러닝에 대해 공부를 해보라는 것 이었다. 입대 전 형이 창업했던 스타트업도 머신러닝 모델을 사용하는 아이템이었고 앞으로 인공지능이 더 중요해질 것이라고 계속해서 얘기했다. 막연히 관심은 갖고 있었지만 어디서부터 시작할지 감이 잡히지 않았는데 형이랑 오랜시간 대화를 하고 용기가 생겼다. 우리 부대는 공부용 노트북 반입도 가능해서 형이 공부하라고 노트북도 몇 개월동안 빌려줬다. 지금 돌이켜보면 정말 많이 도와줘서 너무 고마웠던 기억이 많다. 환경이 정말 중요한 것 같다.

👍 모두를 위한 딥러닝 강좌 시즌 1

시작은 김성훈 교수님의 DeepLearningZeroToAll 이라는 강의로 맛보기를 했다. 태어나서 처음 배우는 머신러닝/딥러닝 강의였지만 너무 흥미롭고 재밌게 들었다. 말로만 듣던 TensorFlow를 사용해보고 머신러닝의 기본 컨셉인 Linear Regression, Logistic Regression, Softmax Regression을 배웠다. Learning rate가 무엇이며 학습을 어렵게 하는 Overfitting이 어떤거고 이를 어떻게 방지할 수 있는지, train set과 test set을 나누는 전략 등등도 배웠다.

아 이게 머신러닝이구나. 인공지능이 어떻게 돌아가는지 베이식한 컨셉을 이해할 수 있어서 너무 좋았다. 공학도로서 지식이 채워지는 것에 대한 짜릿함(?)이었다.

딥러닝 파트로 넘어가서 MNIST 데이터셋도 다뤄보고 Back propagation의 컨셉과 Neural Net, ReLU, Dropout을 배우고 CNN, RNN까지 공부했다. 강의를 너무 잘해주셔서 이해하기 쉬웠고 정말 흥미로운 분야라 더 공부해보고 싶다는 생각이 들었다. 그리고 전에는 몰랐는데, 입대 직전 학교에서 들었던 선형대수학이 딥러닝에 사용되어 이해가 더 쉬웠다. 수강 신청 당시에 정수론, 선형대수학, 집합론 중에 택 1이라 아무 생각 없이 들었던건데 운이 좋았다...ㅎㅎ

한 번 컨셉을 이해했는데 이제 어떻게 공부해야하지? 인공지능 고수들이 모여있는 텐서플로우 코리아 페이스북 그룹을 찾아가 여러 글을 찾아봤다. 그러던 중 Kaggle의 존재를 알게 되었고 이로 인해 공부 방향을 다시 잡을 수 있었다.

✏️ Kaggle 필사


Kaggle을 처음 알았을 때 엄청나게 많은 데이터와 공부 자료, 활발한 커뮤니티가 너무 마음에 들었다. 게다가 전부 영어를 사용하기 때문에 영어 공부하기에도 좋다고 느꼈다. 사진에서 볼 수 있듯이 Kaggle은 AI Competitions가 열리는 사이트다. 방대한 양의 Competitions들과 데이터셋들이 있으며, 각각 사람들이 어떻게 문제를 해결하고 어떤 인사이트를 도출했는지 영문 Notebook들을 활발하게 공유한다. 많은 사람들이 올려놓은 Notebook들을 하나씩 공부하고 필사하며 데이터 분석 공부를 시작했다.

Kaggle의 다양한 외국 고수들의 Notebook과 유튜브의 이유한님의 채널을 보며 공부를 많이 했다. 이 과정에서 모델학습을 위한 데이터를 전처리하고 시각화 하여 인사이트를 얻는 과정의 중요성을 알게됐다. 통계 지식도 거의 없고 인사이트를 도출하는 과정은 어색했지만 Pandas, Numpy, Matplotlib 등 데이터 분석 파이썬 패키지를 사용해 데이터를 시각화하고 인사이트를 위한 전처리 연습을 할 수 있는 좋은 기회였다.
또한 Kaggle 필사를 통해서 여러 데이터 간의 공선성(collinearity)을 제거하고 정규화를 하며, Outlier 등을 처리하는 등 통계적인 지식도 찍먹할 수 있었다. 왜 이런 전처리 과정이 필요한지 이론을 파악하고, 어떻게 전처리 하는지 직접 Jupyter Notebook에서 코딩하며 익히는데 집중했다.

위의 사진은 머신러닝의 "Hello World!"격인 Titanic Competition에 모델을 제출하고 기념으로 찍은거다.

동시에 머신러닝 책도 몇 권도 구매해서 빡세게 공부하기 시작한다. 왼쪽은 Numpy, Pandas, Matplotlib 같은 데이터 분석 패키지를 잘 다루기 위한 책이다. 오른쪽은 머신러닝계의 수학의 정석이란 얘기를 들어 구매했다.
사실 책을 보며 공부하는것보다 직접 코딩하고 영상을 보거나 구글링 하는것을 더 좋아한다. 그런데 군생활중에 컴퓨터에 하루종일 앉아있을 순 없으니까...ㅠ 근무 중간중간 쉴 때나, 취침 직전 컴퓨터를 못 쓸때 짬내서 읽어가며 공부했다.

파이썬 데이터 사이언스 핸드북으로 꼼꼼히 공부를 했다기 보단, 중간중간 메소드 사용법이나 헷갈리는 부분을 사전 찾아가듯 공부했다.

그리고 핸즈온 머신러닝... 진짜 공부하면서 토하는줄 알았다... 군생활 끝내기 전에 무조건 n회독은 끝내고자 마음 먹었는데 어림도 없었다;; 책 앞 절반 1부가 머신러닝, 뒷 절반 2부가 딥러닝이었는데 1부만 3~4회독 정도 한 것 같다. 그럼에도 다 이해하지 못하고 멘탈이 부서진채로 완독하지 못했다... 내용이 방대하고 상당히 Deep 해서 처음으로 좌절감을 느꼈다. 그래도 3~4번째 읽을 때는 처음 볼 때랑 확실히 달랐다.

🔥 번아웃

좌절감을 느낀 이 쯤에서 다시 한 번 번아웃이 온다. 내가 뭐때문에 이렇게까지 공부하고 있는거지? 사실 후임형의 말에 호기심을 느껴 시작한 머신러닝/딥러닝이었고, 김성훈 교수님 강의를 들으며 흥미가 커졌다. 그리고 내가 공부한 웹 개발 지식을 녹여내서 머신러닝/딥러닝을 사용한 서비스를 만들고 싶었다. 그런데 지금 깊게 파고들수록 오히려 괴롭고 흥미가 떨어지는 것 같고, 내가 하고 싶은 것과 거리가 멀어지는 것 같았다ㅠㅠ 머신러닝/딥러닝 공부는 이상과 다르게 피를 토하며 해야한다는데 정말 이런건가 하는 걱정이 들었다.

페이스북 Tensorflow KR 그룹에 글을 올렸고 어떤 분이 본인이 학문을 공부하고 싶은지, 실무를 하고 싶은지 고민해보라 하셨다. 나는 후자다. 그럼에도 인공지능 분야의 실무를 위해서는 당연히 깊은 공부가 필요하다. 인공지능 공부를 시작한지 얼마 안된 핵초보 상황에서 당연히 이런 좌절감이 올 수 있는것인데 너무 naive하게 생각하고 투정을 부린 것 같다ㅋㅋ 그래도 흥미를 잃지 않게 다른 방향으로 공부를 해보고자 방식을 바꿔보았다.

🏃‍♂️ 사이드 프로젝트와 Dacon 경진대회 참여

Kaggle에서 가져온 데이터 셋을 이용해 취향에 맞는 음악 추천 서비스 프로젝트를 진행했다. 우선 캐글에서 1950 ~ 2020년 음악 데이터셋을 찾았다. Spotify가 음악의 여러 특징들을 수치로 분석하고, 이를 어떤 Kaggle 유저가 데이터셋으로 만들었던 것이다.(지금은 캐글에서 삭제됐는지 찾아볼 수 없다..ㅠㅠㅠㅠ)
csv 형태의 데이터셋을 Local MySQL 데이터베이스에 넣었다. 나중에는 AWS RDS를 생성하여 데이터를 RDS MySQL에 옮겼다. 이 때 MySQL과 AWS RDS를 처음 사용해보며 공부할 수 있었다. 프론트엔드는 공부했던 React를 사용했는데, 백엔드는 데이터 분석 파이썬 패키지를 사용해야 했기에 Flask를 처음으로 사용했다. 지금까지 백엔드로 nodeJs express를 사용하다 처음으로 다른 언어의 프레임워크를 주도적으로 찾아서 공부하고 사용한 경험이었다!

정말 허접하긴 하지만 나름 데이터를 전처리하고 정규화 한 뒤 음악을 추천하는 알고리즘을 백엔드 단에서 만들었다. 사용자의 취향에 해당하는 곡을 검색하면 해당 곡을 DB에서 조회해 여러 특징들의 유사도를 측정하여 새로운 곡을 추천하는 논리였다. 모든 과정을 스스로 해결한 것은 아니고 많은 Kaggle 유저들의 EDA를 참고했지만 원하는 결과가 나와서 너무 뿌듯했다.

그런데 이번에 회고록을 적으며 알게 된건데 이 프로젝트는 다시는 구동할 수 없는 코드만 깃헙에 남은 프로젝트가 되었다..ㅠㅜㅜㅜㅜ 군생활을 하며 사용했던 후임형의 노트북에 시크릿키 파일이 있었는데 그 파일이 삭제되었다. 그리고 프리티어를 사용하며 데이터셋을 RDS에 넣어뒀는데 시간이 지나고 다른 프로젝트를 진행하며 과금을 방지하고자 해당 데이터베이스를 RDS에서 삭제했다. 당시에 "나중에 Kaggle에서 다시 다운 받아서 업로드 하면 되지"라는 생각에 과감하게 삭제했는데 앞에서도 얘기했듯이 Kaggle에서 해당 데이터셋 게시글이 삭제됐다..ㅎㅎㅠ

(백엔드와 통신할 수 없는 눈물의 프론트엔드..)
여기에서 노래를 검색하면 nothing이라고 적힌 곳에 10개의 노래가 추천되며, 곡 하나를 클릭하면 그 노래의 특징에 대해서 분석해주는 페이지로 이동했다. 위에 백엔드 소스 코드 파일을 보면 "잔잔함", "에너지 넘침" 등등의 표현들이 있는데 추천한 노래 특징에 대해 태그 형태로 표현하고자 그렇게 개발 한 것이다.
그리고 분석 페이지에서 곡 제목을 클릭하면 바로 유튜브에 검색한 페이지가 팝업 되게끔 구현했었다.

그런데 지금 다시 코드를 보니까 분명 개발한 프론트 기능 일부가 테스트 코드로 깃헙에 올라가있다. 도대체 코드 관리를 어떻게 한거지...? 기록으로 남기고 싶은 프로젝트였는데 과거의 나는 아무 생각이 없었나보다.

그래도 깃헙 레포 주소는 남겨본다
프론트 레포 : https://github.com/seungwooKim99/Music-Recommender-2
백엔드 레포 : https://github.com/seungwooKim99/Music-Recommender-2-backend

정말 기록의 중요성을 다시 한 번 느낀다. 하...

사이드 프로젝트 얘기는 이 쯤 하고 동시에 한국판 Kaggle로 불리는 Dacon의 AI 경진대회에 참여했다.

내가 나갔던 대회는 태양광 발전량 예측 AI 경진대회 였다. 데이터셋의 형태도 Kaggle에서 제공하는 데이터셋과 유사했고 충분히 도전해볼만하다고 생각했다. 주어진 데이터셋을 토대로 모델을 만들고 채점용 데이터셋을 넣은 결과를 csv파일로 만들어 제출하고, 오차가 가장 적은 사람이 우승하는 대회였다.

대회 초반에는 나름 상위권에서 선방한다고 생각했는데 더이상 모델을 최적화하기에 지식이 부족했고, 데이터셋 EDA에 한계에 도달했다. 당시에 상위권이라서 신나서 찍었던거같다ㅋㅋ;;


대회지만 캐글처럼 공유 문화가 강해다른 분들의 EDA도 참고하고, 진짜 별의 별 모델을 다 써가며 32번 제출 했지만 결과는 크게 나아지지 않았다..ㅠㅠ

결국 상위 41%로 마감하고 또다시 번아웃과 현타가 왔던거 같다..ㅋㅋㅋㅋㅋㅋ

💡 느낀점

반년정도 데이터 분석, 머신러닝과 딥러닝을 살짝 맛 본 수준이었지만 많은 경험을 하고 얻어간 것이 많았다. 우선 베이식한 AI 관련 이론들에 대해 이해했다는 사실이 너무 뿌듯했다. 나중에라도 정말로 AI에 큰 관심이 생겨 제대로 공부를 시작할 때 이 때의 경험이 도움이 될 것 같다. 내가 하고싶은게 무엇인지 찾아가는 과정에서 중요한 경험이었다.
또 영어 공부가 돼서 아주 좋았다ㅋㅋ 계속해서 Kaggle의 영문 Notebook들과 영문 구글 자료들을 보면서 영어에 대한 거부감이 크게 사라진 것 같다. 일부 단어들이나 표현들이 영어가 더 익숙할 때도 있었다. 계속 영어에 노출되니 영문 원서를 읽는 속도도 빨라져서 좋았다:)

🙃 마무리

사실 2021년이 다이나믹했어서 2021년 회고록을 쓰고 싶었는데 2021년이 2020년의 연장선이라는 생각이 들어 2020년 회고록을 썼다ㅋㅋㅋㅋ 이 이후에도 많은 일들이 일어나고 Coursera와 스탠퍼드 유튜브에서 Andrew Ng 교수님 강의도 듣다 말았다. 2022년이 된 기념으로 나를 돌아보는 시간을 갖고 싶었고 앞으로의 방향을 다시 잡고싶었다. 정말 군생활을 하며 길었지만 공부하기에는 짧은 시간이 아니었나 생각한다. 스스로 성장할 수 있던 좋은 시간이었고 결국 2021년과 현재를 봤을 때 밑거름이 된 시간이었다. 생각보다 내가 번아웃이 자주 온다는 것도 알았고 잘 기록하지 않는 안 좋은 습관이 있다는 것도 알게 되었다. 주변에서는 내가 기록을 잘 한다고 알고 있는데 나 혼자서 여기저기 메모해서 정보들이 흩어져있고 시간이 지나면 사라져 기록으로써 의미가 없어지기도 하는 것 같다. 번아웃을 극복하고 이런 습관을 바로잡고자 velog에 다시 글을 쓰게 된 것이기도 하다. 어쨋든 앞으로도 꾸준히 글을 쓸 생각이며(가능하면 일주일에 한 번 이상?) 2021년 회고록도 빠르게 업로드 해야겠다. 아래는 의경생활할 때 찍은 사진 몇 개ㅎㅎ

노예처럼 일했던 행정반... 여기에서는 코딩이 안돼서 책으로 공부했다

나름 카페 공부 감성 내볼려했다

0개의 댓글