티스토리 뷰
Objective
1. CS 공부
2. 기술 공부
3. 노션 정리한 내용 반복해서 보기
4. 자료구조와 알고리즘
5. 노트에 정리한 내용 블로그에 업로드
Result
1-1. '면접을 위한 CS 전공지식 노트' / '노션'에 정리한 내용 반복하기
*프로그래밍을 하는 것과 프로그래밍의 이론은 별개의 개념이 아니다. 둘 중 하나만 잘해서는 프로그래밍을 할 수가 없다. 둘 다 잘해야한다. 나는 이론 보다는 코드 작성하는걸 먼저 공부했는데 당장에는 이해가 됐지만 금방 사라지는 느낌이었다. 하지만 이론을 함께 공부하다보니 휘발성이 적어진다는 느낌을 많이 받았다. 결국 두가지는 함께 공부를 하는 것이고 어떤걸 우선 순위로 공부하거나 후순위로 두거나 할 문제가 아니다.
-노션에 정리된 CS 관련 내용들은 하루를 잡고 쭉 읽으면서 정리할건 정리하고 보완할건 보완하면서 공부를 해나가려고 한다. 이론적인 부분이 완벽한건 아니지만, 지금은 기술적인 부분에 대해서 부족함을 느꼈기 때문에 기술적인 공부에 더욱 시간을 투자하려고 한다.
고로 이 책은 주기적으로 한 번에 몰아서 보면 될것 같고 지금은 기술적인 부분에 조금 더 집중하자.
1-2. CS 관련 내용 추가적으로 공부하기
-지금까지는 '면접을 위한 CS 전공지식 노트', '노션에 정리한 CS 내용' 위주로 반복을 해서 보는 것을 진행했다. 지금까지의 내용도 충분히 많고 모든 부분을 정확히 습득했다고 보기엔 어렵지만, 그래도 이제는 많이 익숙해졌고 무엇보다 공부는 모든 것을 머리에 넣는 것이 아니라 최대한 익숙해짐으로써 시간이 지나서 다시 해당 내용을 봤을 때 금방 복구를 할 수 있는게 중요하다고 생각하기 때문에, 이 시점에서는 추가적인 내용을 공부하는게 맞다고 생각이 들었다.
=> OS에 대해 조금 더 디테일한 내용을 공부했고, 가상 메모리와 RAID와 스토리지 관련 내용에 대해 공부했다.
-그리고 면접을 보면서 부족했던 부분이나, 몰랐던 부분에 대해서 찾아보고 정리해보는 시간을 가지려고 한다.
=> 쿠키와 세션 내용을 공부했고, 이후에 트래픽 과부하에 대한 예방, 대처 방법에 대해 공부했다. 결국에는 하나의 서버에 오는 트래픽들을 여러 곳에 분산하는게 핵심이고, 이를 위한 다양한 방법들을 활용하는 것이 중요하다. 그리고 최대한 주고 받는 데이터들의 용량을 작게 만드는 것이 중요하다. 이 내용은 따로 업로드 했고 쉬운 개념이 아니기에 향후에 추가적인 내용에 대해 지속적으로 보완해나갈 것이다.
그리고 보안 관련해서 TLS/SSL에 대한 내용도 따로 찾아봐서 정리했다. 이후에 해당 내용도 따로 업로드 할 예정이다.
2-1. Learn a Language -> Node.JS, DB
-JS를 처음 공부했을 때 당장 코드 짜는 것부터 배우고 구현을 시키는데에 중점을 두고 공부했었는데 잘못 됐다는 것을 느꼈다. JS의 기본적인 특성도 모른채 공부를 하니 당장 코드를 짜서 어떠한 기능을 구현시킬 수는 있었지만 본질적으로 JS를 이해하지 못하니 Logic을 짜는 단계에 와서야 잘못 되었다는 것을 알게 되었다. 그래서 Node.js를 공부할 때는 다르게 접근을 해보려고 한다.
(A) 배포를 완료했다. 프론트엔드는 Netlify로 배포했고, 서버는 Heroku에서 배포를 했다. Heroku는 기존에는 무료로 호스팅을 해주다가 현재는 유료로 운영을 하고 있는데 일단 가장 작은 플랜을 결제해서 배포를 진행했다. 추후에 상황을 보고 변경을 할 예정이다.
=> 처음에 auth 관련 오류가 났었는데 이를 해결한 뒤, cors 관련 오류가 발생했었다. 며칠 내내 앉아서 해결해보려고 했었는데 잠깐 다른 일에 집중하고 조금 휴식을 한 뒤 천천히 해보니 해결이 됐다. 앞으로도 당장 해결이 안 될것 같으면 잠시 쉬면서 생각을 정리한 뒤 디버깅을 하는게 좋을것 같다.
결과적으로 호스팅 사이트에서 설정한 config vars의 내용과 server에 작성한 .env 파일 내의 config vars가 일치하지 않아서 발생한 오류였다. 다른 호스팅 사이트를 사용해보려고 시도하던 중에 우연히 이렇게 해줘야 한다는 것을 알게 되어 곧바로 적용했더니 해결이 되었다. 이제 천천히 하나씩 다시 만들어보면서 완전히 내 것으로 만들어야 한다.
클라이언트 코드는 내가 작성한 것이 아니라 아쉬운 마음이 크다. server를 어떤 식으로 만들어야 하는지 큰 그림은 그려지지만 클라이언트 쪽의 코드는 감이 잘 안 잡힌다. 리액트까지 당장 공부하기에는 비효율적인것 같아서 일단 크게 어떻게 서버와 통신을 할 수 있는지 알아볼 것이다.
=> Heroku 대신 AWS를 사용해서 배포를 시도해보려고 한다. 그리고 최근에 이 프로젝트에 주석처리를 아예 안 해놓은걸 발견했는데 주석 처리 완료 했고 다시 코드를 살펴보면서 리마인드 했다.
(B) 프로젝트 처음부터 혼자 다시 만들어 보기
=> 로그인 API을 만드는 중이다. JWT를 만드는 것까지는 원활하게 했지만 이를 실제로 클라이언트와 서버가 인식할 수 있도록 하는 과정에서 추가적으로 알아야 하는 내용이 있어서 이를 정리하고 있다. 스스로 프로젝트를 만들어보는 과정을 얼른 끝내고 조금 더 간단한 todo-list 프로젝트를 얼른 진행해야 한다.
원래는 ORM이 아닌 Mysql을 사용해서 배포해 볼 생각이었지만, 북 바인더 프로젝트를 하면서 굳이 Mysql을 사용해볼 이유는 없어진것 같다. 차라리 오히려 ORM을 사용해서 다시 만들어보자.
(C) 도서 관리 어플리케이션 프로젝트
=> Node.js와 express, MySQL을 활용하여 도서 관리 어플리케이션을 만들어보려고 한다. 이번에는 MVC 패턴을 만드는건 최대한 빨리 만들고, DB 구조를 기존과 다른 방법으로 시도해보려고 한다. 지금까지는 테이블이 더 이상 생성될 여지가 거의 없는 프로젝트 위주로 만들어봤기 때문에 이후에 테이블이 추가로 생성될 때를 염두할 필요가 없었다.
하지만 이번에 만들고자 하는 도서 관리 어플리케이션의 경우 새로운 분야의 책이 입고될 때마다 이에 따른 테이블 생성을 해주어야 하는데, 이렇게 일일이 테이블을 수동적으로 생성할 필요 없이 Post 요청 하나만으로 처리가 되도록 계층적 테이블 구조로 만들어보려고 한다.
이는 장단점이 존재한다. 하지만 지금처럼 추후에 추가적인 테이블이 생성될 여지가 있을 때는 이러한 방식을 통해서 하는 것이 좋다.
프로젝트를 만들기 전에 작성한 스키마에 맞춰서 모든 API들을 생성했고 문서화까지 완료했다. 지속적으로 리팩토링을 하면서 실제로 실제로 많은 사람들이 사용하고 있는 애플리케이션처럼 만들어보려고 한다.
그리고 오랜만에 다시 프로젝트를 살펴봤는데, 해당 프로젝트에 주석 처리가 제대로 되어 있지 않은 것을 발견해서 주석 처리를 했다.
그리고 이후에 Sequelize ORM을 사용한 버전으로 프로젝트를 다시 만들어 볼 계획이다.
=> 코드는 전부 다 작성했고, 그에 따른 주석도 전부 다 작성했고, 리드미까지 작성 완료 했다.
(D) SQL 문제를 풀면서 이 또한 많이 부족하다고 느껴졌다. 다행히 원래 알던 내용을 기반으로 약간의 새로운 개념만 따로 찾아보면 됐었기에 다행이긴 했지만 과제 외에 새로운 SQL 문제들을 풀어봤는데 많이 부족하다고 느꼈다. 제대로 된 강의를 들은 적이 없기 때문에 이 부분에 대해서 강의를 들으면서 문제들을 많이 풀어보려고 한다.
=> 강의는 다 들었고 이제는 여러번 반복해서 보고 직접 작성도 하고 프로젝트에 적용도 해보면서 능숙해져야 한다. DB 파트가 스스로 너무 부족하다고 느꼈고 어느정도 공부를 한 뒤에 기존에 프로젝트 처음부터 다시 만들어 보는 과정을 계속 해나가고 추가적으로 todo-list, 연관 게시물 프로젝트를 MVC 패턴에 맞춰서 만들어 보자.
-DB에서 관계형 데이터 모델링에 대한 내용을 공부하고 있다. ERD의 대한 지식이 너무 부족하다고 느꼈고 이를 보완하기 위해 전체적인 관계형 데이터 모델링에 대해 공부하게 되었는데, 전부를 이해하기 보다는 ERD에 대해서 자세히 공부하면서 실제로 Diagram을 그려보는 연습을 통해 최대한 익숙해지려고 노력해보자.
=> 관계형 데이터 모델링에 대한 전반적인 지식에 대해 공부했고 ERD를 실제로 그려보는 연습을 해보려고 한다. 아직은 ERD에 많은 시간 투자를 못 하고 있는데, 향후 SQL 문법 강의를 다 수강한 뒤에는 본격적으로 공부를 할 예정이다.
2-2. JS에 대한 보충 공부 및 프로젝트
(A) 웹사이트 프로젝트 리팩토링을 진행하고 있다. 어느정도 공부를 더 하고 보니 더 많이 보이는것 같다. 특히나 동기와 비동기에 대한 개념이 프로젝트를 만들 당시에는 부족했는데 알고나니 어떤점이 부족했는지 보여서 리팩토링을 하게 되었고 무엇보다 복습을 하면서 조금 더 빠르고 간결하게 복습을 하고싶어서 리팩토링을 진행하게 되었다.
=> 리팩토링 완료했고 복습할 내용만 따로 정리까지 완료했다. 리팩토링은 조금 더 깔끔하고 효율적이게 할 수 있을것 같은데 다른 공부 하면서 천천히 진행하자.
(B) Portfolio 웹페이지를 만들고 있다. 지금까지 했던 코드를 가지고 처음부터 아예 스스로 해볼 생각이다. 최대한 깔끔한 디자인으로 만들 예정이고 다른 사람의 사이트를 참고해서 만들어볼 예정이다.
=> 스스로 웹사이트를 통해 포트폴리오를 만드는게 가장 좋은 방법이라고 생각을 해서 이 방법으로 포트폴리오를 만들었지만, 조금 부족한것 같아서 다른 방식으로 바꿔보려고 한다. 노션을 통해서 만들어 보려고 하는데, 여러가지 샘플들을 참고해서 기존에 작성한 내용들을 토대로 만들어 보려고 한다.
(C) AJAX도 결과적으로는 브라우저에서 사용되는 기능인 것이고 JS와도 연관이 있기 때문에 공부를 할 예정이다.
=> 조금씩 듣고 있다. AJAX는 웹페이지의 일부분만을 바꾸기 위한 도구인 것이다. 일부분을 바꾸기 위해 전체를 다시 다운로드 하거나 리로드가 된다면 이는 자원 낭비이다.
(D) 정규표현식에 대해서 공부를 하고있다. 코딩테스트 문제 풀다가 특정 문자열을 찾는 문제가 있었는데 정규표현식을 사용해서 쉽게 해결하는걸 보고 필요성을 느끼게 돼서 공부하게 되었다.
=> 실제로 많이 써보려고 노력하고 있다. 기존에 코딩테스트 문제 풀이 할 때 정규표현식으로 작성해서 풀이가 가능한 문제들은 따로 다시 풀어보면서 최대한 익숙해지기 위해 노력 중이다.
(E) 과제를 만들면서 이미 알고 있던 내용과 새롭게 알게 된 내용들이 있다. 새롭게 알게 된 내용들에 대해서 다시 작성해보면서 디테일하게 어떤 동작을 하는지, 어떤 원리인지에 대해 공부하고 있다. HTML로 table을 만들 때의 모든 과정과, 여러가지의 input text가 있을 때 이들을 어떻게 localStorage에 저장할지, 태그 안에 value 값을 통해 어떤 식으로 JS에서 동적으로 만들어줄 수 있는지 등에 대한 내용을 하나씩 뜯어 볼 것이다. 또한 완성시키지 못한 부분에 대해서도 해결을 할 것이다.
=> JS에 대한 코드를 다시 살펴보면서 리마인드 하고, 개선되어야 할 코드는 개선을 진행하고 있다. 코드를 작성하다 보니 없어도 될 코드가 하나씩 있는 것을 발견해서 지우는 작업을 했고, 앞으로 구현하지 못했던 기능에 대해서도 구현할 계획이라 이를 관리할 수 있도록 깃허브에 올렸다.
(F) git에 대한 기본적인 강의는 다 들었고 실제로 많이 사용 되는 부분은 어떻게든 해보려고 노력하고 있다. git repo와 github에 올리는 것 외에 branch를 만들거나 git pull을 통해 로컬 git과 github 간에 차이가 있을 때 해결하는 방법, merge를 통해 branch를 합치는 것 등의 연습을 해보고 있다.
(G) Terminal 관련해서 간단한 강의가 있는데 컨셉을 넘어 사용법까지 디테일하게 공부해야 하기 때문에 이것도 조금씩 공부해야한다.
=> 강의 자체는 다 들었지만, 주기적으로 복습하면서 실제로 사용도 많이 해보면서 익숙해져야 한다.
=> 그리고 Terminal 명령어에 대해서 많이 익숙해져야 한다. 따로 핵심적인 명령어를 정리해놓은걸 찾아서 공부하자.
2.3 TS 공부하기
-TS에 대해 공부를 하고 있다. 가장 먼저 TS에 대해 간단하고 빠르게 유튜브를 통해 정보를 얻은 뒤에, 공식 문서를 보면서 중요한 부분들을 체크했다. 그 이후 짧은 강의를 듣고 있다. 더 심화적인 내용은 나중에 필요하면 따로 찾아보면서 공부를 할 예정이다.
=> 어느정도 필수적인 문법이나 기능들에 대해서는 충분히 배운것 같아서 이를 곧바로 기존 프로젝트를 TS로 변환하는 작업을 진행하고 있다. 아직 강의 자체는 조금 더 남았지만, TS 변환 작업을 중심으로 하면서 실제로 많이 사용해보려고 하고 있다. 그리고 중간에 1-2개씩 강의 들으면서 정리한 뒤에 나중에 필요하면 곧바로 찾아볼 수 있도록 해놓으려고 한다.
-기존에 JS로 만든 웹사이트를 TS로 변환해보기
=> 기존에 만든 웹사이트의 경우 특별히 복잡한 로직은 없어서 곧바로 TS를 적용해서 변환하는 과정을 진행해봤다. 중간에 작은 오류들을 경험하거나 막히는 부분들이 있었지만 그래도 공식문서 또는 구글링을 통해 어렵지 않게 해결할 수 있었던것 같다. 이제 NestJS를 통해 프로젝트를 만들면서 서버 관련해서 TS에 대한 부족한 내용이 있다면 그 때도 공식문서나 구글링을 통해 하나씩 찾아나가면서 공부해나가면 될것 같다. 그리고 막상 직접 TS를 사용해보니깐 기존에 JS의 문제점이 확실하게 느껴지기도 했고, 실제로 JS로 프로젝트를 만들었을 때 타입 관련해서 따로 처리해줘야할 로직이 있었는데, 이 부분을 따로 해주지 않아도 돼서 더욱 간결한 코드를 작성할 수 있었다.
-NestJS를 통해 board 프로젝트를 만들고 있는데, 이 과정에서 TS를 주로 사용해서 만들다보니 자연스럽게 TS에 대해 익숙해지고 있는것 같다.
2.4 Nest 공부하기
-지금까지 express.js로 MVC 패턴에 맞춰서 프로젝트들을 만들어 봤는데, 조금 더 OOP를 경험해보면서 layered architecture에 대해서 배워보고 싶어서 이 스킬을 공부하기로 마음을 먹게 되었다.
-그래도 큰 틀 자체는 MVC와 유사하지만, 더욱 세분화하여 단일책임 원칙을 극대화 할 수 있는 방법을 공부하면서 더욱 고품질의 프로젝트를 만들어 보려고 한다. 현재 북 바인더 라는 프로젝트를 express.js로 진행 중이었는데, 이것도 완성을 하겠지만 향후에 이를 NestJS를 사용해서도 만들어 볼 예정이다.
-간단한 게시판을 만드는 강의 / 이론적인 부분을 빠르게 설명해주는 강의 2개를 함께 듣고 있다. 다 완료한 뒤에 기존에 만든 북 바인더 프로젝트를 NestJS로 변환해보려고 한다.
=> 프로젝트 코드 작성 완료 후 주석 처리까지 작성 완료했고 리드미 및 API 문서화 작업 중이다. 어떤 오류가 발생했었고, 이를 어떻게 해결했는지에 대한 내용과 이 프로젝트를 만들면서 어떤 부분을 배웠는지에 대해 작성하고 있다.
-위 프로젝트를 완성한 뒤에 피트니스 트래커라는 프로젝트를 시작해보려고 한다. 지금까지 배운 내용을 포함하여 조금 더 심화적인 로직을 공부하면서 천천히 완성시켜나갈 계획이다.
=> diet 모듈을 만들고 있다. 컨트롤러, 서비스, 엔티티, 레포지토리 등 기본적인 파일 생성을 했고, 하나씩 코드를 작성하고 있다. diet 모듈은 사용자가 음식의 이름과 칼로리를 입력하면 해당 데이터를 저장함과 동시에 총 칼로리 소모량을 계산할 수 있도록 구현할 예정인데, 향후에는 foods 모듈을 통해 diet에서 음식의 이름을 통해 foods에서 칼로리 계산 등을 수행하도록 만들 예정이다.
3. Node.js는 매일 보고 / 나머지 내용들 순환하면서 보기
-HTTP에 대한 내용 복습 완료(이건 블로그에 따로 올릴 예정)
=> 진행 중이다. 정리가 덜 된것 같아서 정리를 한 뒤에 올릴 것이다.
-정리해놓은 모든 내용을 다시 한 번 리마인드 하면서 수정 및 보완하는 작업을 했다. 생소한 개념들에 대해서는 여러번 계속 반복해서 읽다보면 자연스레 이해가 되고 다른 개념들과 연결이 되는것 같다.
-코딩테스트 내용 복습 완료
4-1. 유튜브 영상 노션에 정리한 내용 반복해서 보기
4-2. 관련 책 읽기
-그림으로 배우는 알고리즘
=> 완독 후에 다시 읽으면서 여러번 돌려볼 때 어느 부분만 볼지 체크를 해놨다. 여러번 읽다보니 확실히 이제는 어느정도 이해가 되고 프로그래밍을 하면서 이런 부분들까지 신경을 써야 좋은 코드를 만들 수 있겠다 라는 생각이 든다.
앞으로도 여러번 돌려보긴 하겠지만 워낙 기본적인 내용을 담고 있는 책이라서 조금 더 심화된, 예제가 가미된 책을 구매해서 읽어봐야 한다.
-면접을 위한 CS 전공지식 노트
=> 처음에는 진짜 무슨 말인지 아예 몰랐었는데 이제는 어느정도 이해가 되고 많이 익숙해졌다. 누군가가 이 책을 보는 방법을 물어본다면 프로그래밍 기술을 공부하면서 함께 정독할 것을 권하고싶고 추가적으로 MVC, DB, 자료구조 파트는 당장 보기를 추천하지는 않는다고 할 것 같다. 그리고 자료구조와 알고리즘은 처음부터 어렵게 공부하기 보다는 쉽게 공부할 수 있는 방법을 먼저 찾아서 정독한 뒤 이 책의 자료구조 파트를 읽으면 더욱 도움이 될 것이라고 생각한다.
-현재 진행중인 프로젝트가 끝나면 자료구조와 알고리즘에 대해서 조금 더 깊게 공부를 해보려고 한다. 코딩테스트를 풀다보면 자연스럽게 학습이 될거라 생각했지만 괴리감이 조금 있다는 것을 느끼고 개념을 확실하게 공부해야 할 필요성이 있다고 판단이 들었다.
=> 이 부분은 유튜브 보다는 책을 하나 더 구매해서 공부를 진행해보려고 한다. JS를 기반으로 설명이 되어 있고 예제까지 포함한 책을 구매할 예정인데 여러가지 찾아놨으니 오프라인으로 직접 눈으로 보고 구매를 할 예정이다.
4-3. 코딩테스트 문제 풀이
-기존에 프로그래머스 0단계 문제를 풀어봤었고, 1단계로 넘어가서 공부하던 중에 조금 어려운 내용을 접하게 되면서 알고리즘에 대해 공부할 수 있는 강의를 찾게 되었다. 그 후 괜찮은 강의를 하나 발견해서 수강하고 있었는데, 이론적인 부분이나 JS, Node.js, MySQL과 같은 기술 그 자체에 대한 공부가 미흡하다고 판단하여 잠시 중단을 해놓은 상태였다. 하지만 하루에 단 1강이라도 들으면서 지속적으로 해나가야 한다고 판단이 들었다.
=> 코딩테스트도 하루에 3-4 문제씩 풀면서 공부를 하고 있다. 또한 관련 강의 영상을 통해 알고리즘 자체에 대해서도 공부를 하고 있다.
-블로그에 코딩테스트 0단계, 1단계 문제 풀었던거 업로드 하고 있다.
*어플을 통해서 수시로 보면서 자주 노출시켜서 익숙해지기
5-1. 프로그래밍 언어와 관련된 글 업로드
*언어나 CS를 포함한 기술 공부를 할 때 노션에 정리해놓은 내용이 많다. 매일 반복해서 보면서 리마인드 하면서 보완점이 있으면 수정해나가고 있다. 매일 반복해서 보다보니 점점 익숙해지고 공부가 잘 되는건 맞지만 종종 잘못된 정보를 적게 되는 경우가 많은 것을 발견했다.
혼자만 볼 내용이다보니 이 부분을 크게 신경 안 쓰게 되는 것 같아서 블로그에 하나씩 올리면서 최대한 제대로 된 정보를 얻고자 한다.
그리고 누군가에게 설명을 할 수 있어야만 제대로 이해했다고 간주할 수 있다. 블로그에 글을 올리면서 이 부분에 대한 연습도 될것 같다.
-DB의 index에 대한 내용을 업로드 했다. 기존에 B+Tree에 대해서는 약간 헷갈리는 내용이 있었는데 다시 천천히 찾아보면서 수정할건 수정하고 보충할건 보충하면서 보완을 했다. 그 후 업로드를 했는데 항상 느끼는거지만 업로드를 하면서 누군가에게 설명한다는 느낌 덕분인지 기존 보다 확실히 더 이해가 되는 효과가 있는것 같다. 앞으로도 계속 올리면서 이론적인 부분에 있어서도 많은 공부를 할 것이다.
5-2. CS 등의 내용 글 업로드
-IPC에 대한 내용 업로드 완료. 이제 DNS에 대한 내용을 정리한 뒤에 업로드 할 예정이다.
단순히 글을 작성하는 그 시간 자체도 오래 걸렸지만, 제대로 된 정보를 찾는 그 과정에서 걸리는 시간도 많은것 같다. 하지만 이렇게 열심히 찾아서 완성하는 순간 그 뿌듯함은 무엇과도 바꿀 수 없는것 같다.
Keep and Holding
영어 공부
-회화적인 부분을 포함해서 프로그래밍에 맞는 영어를 공부해야하는데 일단 많이 읽어봐야한다. 지금은 읽는 공부에 비중을 두고 해야하고 회화는 비중을 좀 적게 두면서 계속 가져가야한다.
(다행히 지금까지 영어를 꽤 많이 해왔고 수험 영어가 아니기에 실력 늘리기 더 수월할 것이다.)
추가적인 언어 공부
-프론트엔드의 코드까지 다룰 수 있으려면 JS를 활용한 React를 배워야 한다. 프로젝트를 만들 때 리액트를 몰라서 이해 못 했던 부분이 많다. 꼭 리액트가 아니어도 프론트엔드 쪽에서 코드를 어떤 식으로 작성해서 서버와 통신을 할 수 있는지 이해하고 직접 작성할 줄 알아야 한다.
=> 리액트 기본적인 강의를 천천히 들어보려고 했는데 먼저 DB에 대해 많이 부족한것 같아서 리액트는 잠시 접어두려고 한다. 하지만 그 동안에도 시간 될 때마다 천천히 할 것이다.
-타입스크립트를 향후에 배워 볼 예정이다. 아직까지는 JS와 이를 활용한 Node.js나 express와 같은 도구들을 활용하는데 있어서 더 공부를 하고 싶고 해야 한다는 필요성을 느끼고 있기 때문에 지금 보다 더 능숙해지게 된다면 타입스크립트를 배워 볼 예정이다.
=> TS 공부를 시작했다.
**아래 내용은 첫 웹사이트를 만들면서 느낀점인데 매일 보면서 상기하고 싶어서 이곳에 넣었다.
todo-list까지 완료했다. 어제 하루 종일 막혀서 고생했고 오늘도 거의 하루 종일 해결을 못해서 6시간 이상을 앉아서 계속 구글링하고 대입해보면서 시간을 보냈다. 그리고 결국 해결했다. filter 함수를 사용하는게 조금 헷갈려서 그 부분만 노트를 참고했다.
=> 지금까지 개발 공부를 하면서 내가 정말 잘 할 수 있을지 많은 고민을 했었다. 개발 자체가 재미있다고 느껴졌고 이론적인 부분을 공부할 때도 어렵지만 하나씩 알아갈 때마다 큰 성취감을 느껴왔었지만, 그와 별개로 평생 개발자로서 살아간다는 것에 대해서는 확신을 갖게 되는 계기가 없었다. 하지만 오늘 확신을 갖게 되었다.
이 작은 기능을 하나 구현하기 위해서 스스로 해결하는 그 과정과 해결을 했을 때 느꼈던 그 성취감은 말로 표현할 수 없이 크고 벅찼다. 총 10시간 정도를 구글링 하면서 직접 구현해보면서 해결하는 그 과정은 힘들었지만 그 시간 동안 내가 포기 하지 않고 집중을 할 수 있었다는것 자체가 스스로에게 확신을 주었다.
드디어 배포를 완료했다. 프론트엔드는 Netlify로 배포했고, 서버는 Heroku에서 배포를 했다. Heroku는 기존에는 무료로 호스팅을 해주다가 현재는 유료로 운영을 하고 있는데 일단 가장 작은 플랜을 결제해서 배포를 진행했다. 추후에 상황을 보고 변경을 할 예정이다.
하지만 완벽하게 한 것은 아니다. signup 할 때 Auth 관련 오류가 하나 있다. 그 이후에는 정상적으로 동작하지만 이 부분을 디버깅 해야 한다. 개발자 도구에서 Network 탭을 통해 어디서 오류가 나는지 살펴보고 코드에서 console로 출력해가면서 문제점을 좁혀나가 보려고 한다.
=> 드디어 해결했다. 거의 일주일 정도는 해결하려고 엄청 고민하고 찾고 이것저것 시도해 본것 같다. 프로젝트를 해오면서 작은 오류들은 계속 발생했었지만 지금처럼 일주일 정도 해결을 못할 정도의 오류는 처음이었다. 처음 2일 정도는 개발자 도구에서 콘솔과 네트워크 부분을 통해 어디서 오류가 나는지 확인을 했는데 코드를 아무리 살펴봐도 오류가 나는 부분이 보이질 않았다. 더군다나 postman에서는 잘 동작을 했기 때문에 더더욱 찾기 힘들었다. DB를 바꿔가면서 오류가 나는 부분을 해결하려고 해도 해결 되지 않았다. 공식 문서들을 찾아보면서 이런 저런 시도도 많이 해봤는데 이 또한 해결을 해주지 못했다.
조금 더 깊게 살펴보기로 마음을 먹고 정말 하나하나 천천히 보면서 근본적인 문제에 대해서 생각해보게 되었다. 가입을 한 뒤에 곧바로 로그인이 되는데 이 때는 제대로 동작하지 않지만 새로고침을 한 뒤 가입한 계정으로 로그인을 하면 그 때는 전부 제대로 동작을 하는게 문제인데 그렇다면 가입 - 로그인 과정 중에 무엇인가 제대로 동작하지 않겠구나 하는 생각이 들었다. 그렇다면 가입을 한 뒤에 로그인을 할 때 token이 제대로 전달이 되지 않아서 이런 문제가 생기지 않았을까 하는 생각이 들었고 이 코드를 더 자세히 살펴보니 가입을 하는 코드를 작성한 부분에서 arrow function을 사용했는데 이 때 실행 코드에 {}를 작성해주면서 return을 해주지 않아서 이런 문제가 생겼다는 것을 발견했다. return이 없기 때문에 return 값을 받아 로그인을 해야하는데 이게 이루어지지 못 했고 return이 없어도 가입 자체는 되기 때문에 DB에는 저장이 되면서 새로고침 후에는 잘 동작하는 상황이 생겼던 것이었다.
글로 표현할 수 없을 만큼 너무 스트레스 받고 힘들었지만 이걸 해결했을 때의 쾌감은 엄청났다. 기존에 JS로 웹사이트를 만들었을 때도 비슷한 경험을 했었는데 그 때에 비하면 고민했던 시간이 훨씬 길었고 그만큼 쾌감도 몇배로 돌아왔던것 같다.