티스토리 뷰
Objective
1. CS
2. 백엔드 로드맵 순서로 공부하기
3. 노션 정리한 내용 전부 반복해서 보기
4. 자료구조와 알고리즘
Result
1. '면접을 위한 CS 전공지식 노트' / '노션'에 정리한 내용 반복하기
*프로그래밍을 하는 것과 프로그래밍의 이론은 별개의 개념이 아니다. 둘 중 하나만 잘해서는 프로그래밍을 할 수가 없다. 둘 다 잘해야한다. 나는 이론 보다는 코드 작성하는걸 먼저 공부했는데 당장에는 이해가 됐지만 금방 사라지는 느낌이었다. 하지만 이론을 함께 공부하다보니 휘발성이 적어진다는 느낌을 많이 받았다. 결국 두가지는 함께 공부를 하는 것이고 어떤걸 우선 순위로 공부하거나 후순위로 두거나 할 문제가 아니다.
*CS는 'CS 전공지식 노트' 책에 훨씬 더 자세하게 정리되어 있는건 맞지만 노션에 따로 내가 정리한 것도 공부하기에 괜찮다고 생각이 든다. 생소한 내용이기에 스스로 최대한 쉽게 적어놨기 때문에 이해가 더 잘 되고 무엇보다 책과 연결이 되는 부분들이 하나씩 보이면서 빠르게 복습하기 좋은것 같다.
2-1. Learn a Language -> Node.JS
-JS를 처음 공부했을 때 당장 코드 짜는 것부터 배우고 구현을 시키는데에 중점을 두고 공부했었는데 잘못 됐다는 것을 느끼고 Node.js를 공부할 때는 다르게 접근을 해보려고 한다. JS의 기본적인 특성도 모른채 공부를 하니 당장 이해는 되고 코드를 짜서 어떠한 기능을 구현시킬 수는 있었지만 본질적으로 JS를 이해하지 못하니 Logic을 짜는 단계에 와서야 잘못 되었다는 것을 알게 되었다.
-드디어 배포를 완료했다. 프론트엔드는 Netlify로 배포했고, 서버는 Heroku에서 배포를 했다. Heroku는 기존에는 무료로 호스팅을 해주다가 현재는 유료로 운영을 하고 있는데 일단 가장 작은 플랜을 결제해서 배포를 진행했다. 추후에 상황을 보고 변경을 할 예정이다.
하지만 완벽하게 한 것은 아니다. signup 할 때 Auth 관련 오류가 하나 있다. 그 이후에는 정상적으로 동작하지만 이 부분을 디버깅 해야 한다. 개발자 도구에서 Network 탭을 통해 어디서 오류가 나는지 살펴보고 코드에서 console로 출력해가면서 문제점을 좁혀나가 보려고 한다.
=> 드디어 해결했다. 거의 일주일 정도는 해결하려고 엄청 고민하고 찾고 이것저것 시도해 본것 같다. 프로젝트를 해오면서 작은 오류들은 계속 발생했었지만 지금처럼 일주일 정도 해결을 못할 정도의 오류는 처음이었다. 처음 2일 정도는 개발자 도구에서 콘솔과 네트워크 부분을 통해 어디서 오류가 나는지 확인을 했는데 코드를 아무리 살펴봐도 오류가 나는 부분이 보이질 않았다. 더군다나 postman에서는 잘 동작을 했기 때문에 더더욱 찾기 힘들었다. DB를 바꿔가면서 오류가 나는 부분을 해결하려고 해도 해결 되지 않았다. 공식 문서들을 찾아보면서 이런 저런 시도도 많이 해봤는데 이 또한 해결을 해주지 못했다.
조금 더 깊게 살펴보기로 마음을 먹고 정말 하나하나 천천히 보면서 근본적인 문제에 대해서 생각해보게 되었다. 가입을 한 뒤에 곧바로 로그인이 되는데 이 때는 제대로 동작하지 않지만 새로고침을 한 뒤 가입한 계정으로 로그인을 하면 그 때는 전부 제대로 동작을 하는게 문제인데 그렇다면 가입 - 로그인 과정 중에 무엇인가 제대로 동작하지 않겠구나 하는 생각이 들었다. 그렇다면 가입을 한 뒤에 로그인을 할 때 token이 제대로 전달이 되지 않아서 이런 문제가 생기지 않았을까 하는 생각이 들었고 이 코드를 더 자세히 살펴보니 가입을 하는 코드를 작성한 부분에서 arrow function을 사용했는데 이 때 실행 코드에 {}를 작성해주면서 return을 해주지 않아서 이런 문제가 생겼다는 것을 발견했다. return이 없기 때문에 return 값을 받아 로그인을 해야하는데 이게 이루어지지 못 했고 return이 없어도 가입 자체는 되기 때문에 DB에는 저장이 되면서 새로고침 후에는 잘 동작하는 상황이 생겼던 것이었다.
글로 표현할 수 없을 만큼 너무 스트레스 받고 힘들었지만 이걸 해결했을 때의 쾌감은 엄청났다. 기존에 JS로 웹사이트를 만들었을 때도 비슷한 경험을 했었는데 그 때에 비하면 고민했던 시간이 훨씬 길었고 그만큼 쾌감도 몇배로 돌아왔던것 같다.
로컬에서 잘 동작하는거 확인 후, 오늘 다시 클라이언트와 백엔드 각각 재배포 완료했다.
-Node 강의 처음부터 스스로 해보고, 프로젝트도 스스로 처음부터 끝까지 만들어 볼 것이다.
=> 진행 중이다. 기본 세팅 해놓고 두가지의 API 중에 게시글에 대한 API를 구현해볼 것이다.
-Node.js 지금 듣는 강의 보다 조금 더 기본적인 내용을 설명하는 강의가 있어서 듣고 있다. 현재 듣고 있던 강의가 분량이 많다보니 디테일한 내용에 대한 설명이 조금 부족한것 같아서 새로운 보충 강의를 들으려고 하는건데 앞으로 보충 강의를 조금씩 추가적으로 매일 들으려고 한다.
=> 진행중이다. 기존에는 서버의 입장에서 코드를 작성하는 방식 위주로 배웠기 때문에 클라이언트 코드가 잘 이해되지 않았는데 이 강의를 통해서 조금씩 이해가 되고 있다.
*Event 마지막 부분이 좀 이해가 안 된다. 여러번 돌려봐도 이해가 안 되는데 일단 여긴 넘어가고 나중에 다시 듣기로 하자.
(아마 on과 emit 관계 때문에 그럴 것이다. 프로젝트가 끝난 뒤 다시 가서 볼 때 on은 event를 만드는 것이고 emit는 그걸 실행 해준다 라고 일단 생각하고 그 때 다시 가서 집중적으로 공부해보자.)
=> 다시 듣고 확실하게 이해했다. 하나의 API를 만들 때 서로 다른 파일에서 같은 event를 emit, on 하고 싶은 경우 EventEmitter class에 extends를 해주면 가능하고 emit 인자 값에 있는 데이터를 '방출' 하면 on이 받아서 on의 인자 값에 있는 코드에 넣어지면서 실행이 된다.
2-2. JS에 대한 보충 공부 및 프로젝트
-웹사이트 프로젝트 리팩토링을 진행하고 있다. 어느정도 공부를 더 하고 보니 더 많이 보이는것 같다. 특히나 동기와 비동기에 대한 개념이 프로젝트를 만들 당시에는 부족했는데 알고나니 어떤점이 부족했는지 보여서 리팩토링을 하게 되었고 무엇보다 복습을 하면서 조금 더 빠르고 간결하게 복습을 하고싶어서 리팩토링을 진행하게 되었다.
=> 리팩토링 완료했고 복습할 내용만 따로 정리까지 완료했다. 리팩토링은 조금 더 깔끔하고 효율적이게 할 수 있을것 같은데 다른 공부 하면서 천천히 진행하자.
-Portfolio 웹페이지를 만들고 있다. 지금까지 했던 코드를 가지고 처음부터 아예 스스로 해볼 생각이다. 최대한 깔끔한 디자인으로 만들 예정이고 다른 사람의 사이트를 참고해서 만들어볼 예정이다.
=> contents 들은 거의 완성해서 올려놨고 최대한 깔끔하게 정리해서 완성하면 된다. 프로젝트 목록을 어떻게 보여줄지에 대한 고민만 끝나면 완성될것 같다.
-JS 보충 및 심화 강의는 마무리 했다. 이제 복습하면서 실제로 사용해보는 경험을 쌓는게 중요하다.
코딩테스트 풀이를 통해서 Web APIs나 여러 함수들을 사용하면서 잘 익히고 있는데 promise, acync await, class의 경우에는 아무래도 사용하기 적합하지 않다보니 능숙하지는 못하기 때문에 더더욱 반복해서 읽으면서 익숙해져야 한다. 앞으로 JS를 사용해서 프로젝트를 만들 때 위에 언급한 기능들을 최대한 사용해서 익숙해져야 한다. 웹페이지 프로젝트에서도 리팩토링을 진행할 때 가능하다면 사용해보는 것도 좋을것 같다.
-AJAX도 결과적으로는 브라우저에서 사용되는 기능인 것이고 JS와도 연관이 있기 때문에 공부를 할 예정이다.
=> 조금씩 듣고 있다. AJAX는 웹페이지의 일부분만을 바꾸기 위한 도구인 것이다. 일부분을 바꾸기 위해 전체를 다시 다운로드 하거나 리로드가 된다면 이는 자원 낭비이다.
-정규표현식에 대해서 공부를 하고있다. 코딩테스트 문제 풀다가 특정 문자열을 찾는 문제가 있었는데 정규표현식을 사용해서 쉽게 해결하는걸 보고 필요성을 느끼게 돼서 공부하게 되었다.
=> 영상 전부 다 봤고 익숙해지기 위해 정규표현식 퀴즈 푸는 사이트에서 여러번 풀고 있다. 나중에 코딩테스트 할 때 참고해서 해봐야겠다.
2-3. Git and Terminal
-git stash에 대해서 배웠다. 프로젝트 리팩토링을 진행하면서 잠시 코드를 어딘가에 보관하고 필요할 때 다시 불러올 수 있으면 좋겠다 라고 생각했던 적이 있다. 이 때 나는 branch를 새로 만들어서 진행했는데, git stash로도 이를 해결할 수 있었다. git stash는 코드를 잠시 보관해주는 역할을 한다. 그 후 코드를 작성하다가 다시 꺼내오고 싶을 때 pop을 통해 가져오면 된다. 유용해보이지만 개인적으로는 branch로 나눠서 관리를 하는게 더 편하게 느껴진다.
=> 여기를 기점으로 강의를 다 들었다. 이제 실전에서 활용하면서 익숙해질 수 있도록 하는 것이 중요하다.
-Terminal 관련해서 간단한 강의가 있는데 concept을 넘어 사용법까지 디테일하게 공부해야 하기 때문에 이것도 조금씩 공부해야한다.
=> 강의 자체는 다 들었지만, 주기적으로 복습하면서 실제로 사용도 많이 해보면서 익숙해져야 한다.
=> 그리고 Terminal 명령어에 대해서 많이 익숙해져야 한다. 따로 핵심적인 명령어를 정리해놓은걸 찾아서 공부하자.
3. Node.js 강의 듣고 있는거 정리한 내용 매일 보기 + JS 관련 정리한 내용 전부 복습 중.
-Node.js npm들에 대해서 복습, 에디터에서 디버깅 하는 팁에 대해서 복습, 간단한 스크립트 만드는거 복습.
4-1. 유튜브 영상 노션에 정리한 내용 반복해서 보기
4-2. 관련 책 읽기
-그림으로 배우는 알고리즘
=> 완독 후에 다시 읽으면서 여러번 돌려볼 때 어느 부분만 볼지 체크를 해놨다. 여러번 읽다보니 확실히 이제는 어느정도 이해가 되고 프로그래밍을 하면서 이런 부분들까지 신경을 써야 좋은 코드를 만들 수 있겠다 라는 생각이 든다.
앞으로도 여러번 돌려보긴 하겠지만 워낙 기본적인 내용을 담고 있는 책이라서 조금 더 심화된, 예제가 가미된 책을 구매해서 읽어봐야 한다.
-면접을 위한 CS 전공지식 노트
=> 처음에는 진짜 무슨 말인지 아예 몰랐었는데 이제는 어느정도 이해가 되고 많이 익숙해졌다. 누군가가 이 책을 보는 방법을 물어본다면 프로그래밍 기술을 공부하면서 함께 정독할 것을 권하고싶고 추가적으로 MVC, DB, 자료구조 파트는 당장 보기를 추천하지는 않는다고 할 것 같다. 그리고 자료구조와 알고리즘은 처음부터 어렵게 공부하기 보다는 쉽게 공부할 수 있는 방법을 먼저 찾아서 정독한 뒤 이 책의 자료구조 파트를 읽으면 더욱 도움이 될 것이라고 생각한다.
-현재 진행중인 프로젝트가 끝나면 자료구조와 알고리즘에 대해서 조금 더 깊게 공부를 해보려고 한다. 코딩테스트를 풀다보면 자연스럽게 학습이 될거라 생각했지만 괴리감이 조금 있다는 것을 느끼고 개념을 확실하게 공부해야 할 필요성이 있다고 판단이 들었다.
이 부분은 유튜브 보다는 책을 하나 더 구매해서 공부를 진행해보려고 한다. JS를 기반으로 설명이 되어 있고 예제까지 포함한 책을 구매할 예정인데 여러가지 찾아놨으니 오프라인으로 직접 눈으로 보고 구매를 할 예정이다.
4-2. 코딩테스트 문제 풀이
-프로그래머스 기초 단계부터 하루에 3-4 문제씩 풀고 있는 중이다. 초반에는 쉬웠는데 기초 단계이지만 꽤 어렵다고 느껴지는 문제들이 나오기 시작했다. 코딩테스트 준비 목적을 떠나서 이렇게 문제를 풀면서 직접 로직을 만드는 과정은 매우 의미있다고 생각한다.
-프로그래머스 0단계는 거의 다 풀었다. 0단계지만 뒤로 갈수록 1단계 보다 더 어려운 난이도의 문제가 있어서 이 문제들은 체크해두고 넘어가려고 한다.
지금은 1단계 문제를 풀고 있다. 사실 0단계랑 별 차이가 없는것 같다. 중간 중간에 어려운 난이도는 있지만 이건 풀이 자체가 어렵기 보다는 효율성 문제 때문에 막히고 있다. 이제 알고리즘에 대해서 제대로 된 학습을 할 때인것 같다.
-문제를 풀다보니 이제는 알고리즘을 공부해야 할 때가 왔다고 느껴진다. 또한 정규표현식에 대해서 공부를 하면 좋을것 같다.
=> 정규표현식은 공부해서 조금씩 해보고 있다. / 알고리즘과 자료구조를 배우고 이를 코딩테스트에 직접 대입해서 사용하는 강의를 찾아서 듣고 있다.
-블로그에 프로그래머스 0단계 문제 풀이 글을 한 개 올렸다. 지금까지 문제를 풀다가 막히면 구글링을 했는데 조금 더 쉽게 설명된 글이 있다면 좋을것 같다는 생각에 최대한 쉽고 직관적이게 작성해보려고 한다. 물론 지금 공부할게 많아서 매일 올리기는 힘들수도 있지만 그래도 꾸준히 올려보려고 한다.
(추가적으로 어떤 개념에 대해서도 쉽게 설명한 글을 올려볼 예정이다.)
*어플을 통해서 수시로 보면서 자주 노출시켜서 익숙해지기
**자료구조와 알고리즘은 중요한 부분인건 맞다. 하지만 내가 지금 당장 이 부분에만 너무 집중을 해버린다면 정작 현재 중요한걸 놓칠 수 있기 때문에 많은 코딩테스트 문제 푸는데에 집중을 하기 보다는 하나를 풀더라도 확실하게 이해를 하고 개념적인 부분을 알도록 초점을 맞추는게 중요하다.
=> 개발하는데 사용하는 JS나 Node나 DB 등과 같은 부분에 대해서는 많이 이해했고 실제로 서비스도 만들어봤다. 지금까지 공부하고 만든 내용들을 복습하고 다시 만들어보고 하면서 다지는 과정이 필요하다. CS에 대한 내용도 전반적으로 공부했는데 반복하면서 더 익숙해져야 하고 필요시 심화적인 부분을 따로 조금씩 공부하면 될것 같다.
이제는 자료구조와 알고리즘에 대해서 조금 더 공부하는 시간을 늘려야 한다. 적어도 자료구조와 알고리즘에 대한 개념적인 부분들은 정확하게 알고 있어야 한다.
Keep and Holding
영어 공부
-회화적인 부분을 포함해서 프로그래밍에 맞는 영어를 공부해야하는데 일단 많이 읽어봐야한다. 지금은 읽는 공부에 비중을 두고 해야하고 회화는 비중을 좀 적게 두면서 계속 가져가야한다.
(다행히 지금까지 영어를 꽤 많이 해왔고 수험 영어가 아니기에 실력 늘리기 더 쉬울것)
크롤링
-누가 추천해준 코드를 복사해서 붙여넣기를 하더라도 하나하나 잘 깊게 보면서 어떻게 이루어져 있는가, 왜 이런 코드를 추천을 해줬는가를 따져가면서 해야한다. 그리고 후에 작은 프로젝트를 하나 스스로 만들 때도 크롤링을 통해서 많은 코드 데이터를 쌓아야 한다.
나중에는 협업 경험을 쌓기 위해서 사이드 프로젝트도 찾아보자. 개발자 커뮤니티에서 찾아보면 꽤 나온다고 한다.
풀스택
-항상 큰 목표를 두고 작은 목표들을 설정해가며 진행해야한다. 현재로서는 웹개발에서 풀스택 개발자가 되는 것이 목표이다. 모든걸 다 할 수는 없을 것이다. 하지만 중요한 부분들을 하나씩 채워나가다보면 분명 이뤄낼 수 있을 것이다.
*JS가 어느정도 숙달이 된다면 TS도 이어서 배우면 좋을 것이다. JS를 공부하다보니 data type 때문에 오류도 많이 나고 디버깅 할 때 찾아내기가 힘들 때가 있었다. TS는 JS에서 이 점을 보안해서 나온 언어이다. JS가 어느정도 숙달이 된 후에는 꼭 배우자. 그리고 TS를 Node에서 사용하는 경우도 꽤 있다고 하니 같이 배워두면 좋을 것 같다.
**아래 내용은 첫 웹사이트를 만들면서 느낀점인데 매일 보면서 상기하고 싶어서 이곳에 넣었다.
todo-list까지 완료했다. 어제 하루 종일 막혀서 고생했고 오늘도 거의 하루 종일 해결을 못해서 6시간 이상을 앉아서 계속 구글링하고 대입해보면서 시간을 보냈다. 그리고 결국 해결했다. filter 함수를 사용하는게 조금 헷갈려서 그 부분만 노트를 참고했다.
=> 지금까지 개발 공부를 하면서 내가 정말 잘 할 수 있을지 많은 고민을 했었다. 개발 자체가 재미있다고 느껴졌고 이론적인 부분을 공부할 때도 어렵지만 하나씩 알아갈 때마다 큰 성취감을 느껴왔었지만, 그와 별개로 평생 개발자로서 살아간다는 것에 대해서는 확신을 갖게 되는 계기가 없었다. 하지만 오늘 확신을 갖게 되었다.
이 작은 기능을 하나 구현하기 위해서 스스로 해결하는 그 과정과 해결을 했을 때 느꼈던 그 성취감은 말로 표현할 수 없이 크고 벅찼다. 총 10시간 정도를 구글링 하면서 직접 구현해보면서 해결하는 그 과정은 힘들었지만 그 시간 동안 내가 포기 하지 않고 집중을 할 수 있었다는것 자체가 스스로에게 확신을 주었다.
드디어 배포를 완료했다. 프론트엔드는 Netlify로 배포했고, 서버는 Heroku에서 배포를 했다. Heroku는 기존에는 무료로 호스팅을 해주다가 현재는 유료로 운영을 하고 있는데 일단 가장 작은 플랜을 결제해서 배포를 진행했다. 추후에 상황을 보고 변경을 할 예정이다.
하지만 완벽하게 한 것은 아니다. signup 할 때 Auth 관련 오류가 하나 있다. 그 이후에는 정상적으로 동작하지만 이 부분을 디버깅 해야 한다. 개발자 도구에서 Network 탭을 통해 어디서 오류가 나는지 살펴보고 코드에서 console로 출력해가면서 문제점을 좁혀나가 보려고 한다.
=> 드디어 해결했다. 거의 일주일 정도는 해결하려고 엄청 고민하고 찾고 이것저것 시도해 본것 같다. 프로젝트를 해오면서 작은 오류들은 계속 발생했었지만 지금처럼 일주일 정도 해결을 못할 정도의 오류는 처음이었다. 처음 2일 정도는 개발자 도구에서 콘솔과 네트워크 부분을 통해 어디서 오류가 나는지 확인을 했는데 코드를 아무리 살펴봐도 오류가 나는 부분이 보이질 않았다. 더군다나 postman에서는 잘 동작을 했기 때문에 더더욱 찾기 힘들었다. DB를 바꿔가면서 오류가 나는 부분을 해결하려고 해도 해결 되지 않았다. 공식 문서들을 찾아보면서 이런 저런 시도도 많이 해봤는데 이 또한 해결을 해주지 못했다.
조금 더 깊게 살펴보기로 마음을 먹고 정말 하나하나 천천히 보면서 근본적인 문제에 대해서 생각해보게 되었다. 가입을 한 뒤에 곧바로 로그인이 되는데 이 때는 제대로 동작하지 않지만 새로고침을 한 뒤 가입한 계정으로 로그인을 하면 그 때는 전부 제대로 동작을 하는게 문제인데 그렇다면 가입 - 로그인 과정 중에 무엇인가 제대로 동작하지 않겠구나 하는 생각이 들었다. 그렇다면 가입을 한 뒤에 로그인을 할 때 token이 제대로 전달이 되지 않아서 이런 문제가 생기지 않았을까 하는 생각이 들었고 이 코드를 더 자세히 살펴보니 가입을 하는 코드를 작성한 부분에서 arrow function을 사용했는데 이 때 실행 코드에 {}를 작성해주면서 return을 해주지 않아서 이런 문제가 생겼다는 것을 발견했다. return이 없기 때문에 return 값을 받아 로그인을 해야하는데 이게 이루어지지 못 했고 return이 없어도 가입 자체는 되기 때문에 DB에는 저장이 되면서 새로고침 후에는 잘 동작하는 상황이 생겼던 것이었다.
글로 표현할 수 없을 만큼 너무 스트레스 받고 힘들었지만 이걸 해결했을 때의 쾌감은 엄청났다. 기존에 JS로 웹사이트를 만들었을 때도 비슷한 경험을 했었는데 그 때에 비하면 고민했던 시간이 훨씬 길었고 그만큼 쾌감도 몇배로 돌아왔던것 같다.