항해 99 12

항해 99 12주차를 끝내며

이번 주에는 promise에 대한 이야기를 조금 적어볼까 한다. Javascript는 논 블로킹 IO를 채택한 언어로 다른 블로킹 IO 언어처럼 한줄 한줄 읽어나가며 실행 코드가 콜 스택에 쌓이고, 이것이 하나씩 하나씩 실행하는 구조로 이루어져 있다. 다만, 비동기 code를 만날 경우, 이런 코드들을 백그라운드로 넘기고, 백그라운드에서 실행이 되어 콜백 큐에 쌓인다. 테스크 큐에 쌓인 동작들은 콜 스택이 빌 경우, 콜 스택으로 이동하여 실행되게 되고, 이 과정은 콜백 큐에 쌓인 동작들이 모두 완료될 때까지 반복된다. 이것을 이벤트 루프라고 하는데, 이런 이벤트 루프가 작동하기 때문에 Javascript에서는 손쉽게 비동기 코드를 작성할 수 있는 큰 장점이 있다. 내가 promise에 대해서 오해했던 것..

항해 99 2022.04.04

항해 99 11주차를 끝내며

항해 99 11주차를 끝마쳤다. 이번 주차는 프론트 엔드 서버와 본격적으로 합치는 과정이었다. 그 과정 중에 NestJS에서 지원하는 스웨거 문서 제작 툴?을 이용해 API 문서를 기초적이나마 만들었다. NestJS에서는 Data Transfer Object의 준말인 DTO를 만들어 이를 활용해 프론트엔드 서버에서 송신한 데이터를 검증할 수 있고, 이는 validationPipe를 통해 이루어진다. 이외에도 parseIntPipe, parseUUIDPipe 등등 다양한 pipe들이 존재하여 controller단에서 데이터를 안정적으로 받아올 수 있으며, 이것은 자동적으로 스웨거 문서에서 보여진다. 현재는 컨트롤러를 기준으로 하여 API들을 분류해두고, 기초적인 input에 대한 instruction만이 ..

항해 99 2022.03.28

항해 99 10주차를 끝내며

이번 주는 소셜 로그인을 최정적으로 마무리짓고, 소켓 통신에 대해서 알아보고 구현해보았다. 내가 당담하는 백엔드 쪽에서 계속 api 구축 계획이 늦춰지면서 전체적으로 팀의 진행 상황이 딜레이되고 점점 미궁 속으로 빠지는, 참으로 미안하고 괴로운 한 주였다. 그 사이 토큰을 다루는 로직이 조금 변화했다. 처음 구현하려 했던 방향은, 모든 요청에 대해서 엑세스 토큰을 재발급해주는 것이다. 즉, 엑세스 토큰만을 이용한 요청에 대해서도 새로운 엑세스 토큰을 다시 발급하는 것이다. 유효기간이 많이 남은 엑세스 토큰을 왜 재발급해 주는 이유는 유저가 최대한 엑세스 토큰만으로 요청을 처리하는 것이 사용자 경험에 좋을 수 있다고 판단했기 때문이다. 엑세스 토큰과 리프레시 토큰을 사용하여 구현하는 로그인의 경우, 필연적..

항해 99 2022.03.21

항해 99 9주차를 끝내며

이번 주는 실전 프로젝트가 본격적으로 시작되는 한 주였다. 실질적으로 처음으로 다른 사람들과 함께 개발을 진행해본 것이다. 지금까지 혼자서 이것저것 만져가며 주먹구구식으로 해왔던 것들이 얼마나 문제가 있었던 것인지 알게 되었다. 지금까지는 그냥 과제가 있으면 정해진 것들을 보고, 그 활용 방식을 찾아보거나 강의를 통해 습득한 후에 내가 이해한 바를 검증하는 과정에 불과했던 것 같기까지 하다. 실전프로젝트는 정말로 내가 원하는 것을 만들어보는 경험을 하며 내가 원하는 것을 진짜로 구현해보는 경험이라는 것에서 전혀 별개의 경험인 것 같다. 내가 지금까지 꺠달은 팀 프로젝트에 대해서 말해보자면. 프로젝트는 최초에 원하는 것을 구상하고, 이것을 점점 더 구체화시켜 나가며 시작된다. 서비스에 대해서 명확하고 명료..

항해 99 2022.03.15

항해 99 8주차를 끝내며

8주차에 들어서며, 실전 프로젝트가 시작되었다. 디자이너 두 분을 포함하여 총 7명으로 이루어진 조를 이루어 진행하게 되었고, 기획과 개략적인 DB 설계를 진행하고 있다. NestJS와 TypeORM을 이용할 것이라고 생각하고 있고, 이 부분들에 대한 공부가 시급하다. 처음에 Sequelize를 적용할 때에는 빨리 TypeORM을 사용하고 싶었는데, Sequelize가 익숙해지고 다시 TypeORM을 시작하려니 새로운 것이 많고 헷갈린다. NestJS에 대해서 계속 찾아보고 있는데, express와는 대척점에 있는 느낌이다. express의 경우 정말 최소한의 tool이 주어졌다면, NestJS의 경우 아주 친절하여 너무 많은 걸 준비해둔 것 같다. 맨땅에서 시작하여 하나하나 기능을 익혀나가야 하는데, ..

항해 99 2022.03.07

항해 99 7주차를 끝내며

이번 7주차에서는 나만의 작은 사진 공유 사이트를 만들었다. Express.JS와 MySQL을 이용하여 백엔드 서버를 만들었다. MongoDB를 이용하기 위해 mongoose라는 ORM을 이용했다면, MySQL을 이용하기 위해서 Sequelize라는 ORM을 사용하였다. 또한, Docker를 사용하여 MySQL을 실행하였다. Docker에 대한 설명은 후술하겠지만, 가벼운 가상 머신을 떠올리면 이해가 빠를 것이다. MySQL workbench도 사용해본 적이 없는 입장에서 바로 docker를 활용한 MySQL과 Sequelize라는 생소한 ORM을 사용하는 것은 꽤나 힘든 일이었다. 관계 설정을 제대로 하는 방법을 몰라서 며칠을 끙끙대며 공식문서와 검색을 해야했고, 나중에 DataGrip을 이용하여 Ta..

항해 99 2022.02.28

항해 99 6주차를 끝내며

항해 99 6주차는 간단한 비 회원제 블로그의 게시글 및 댓글 CRUD 기능을 구현하였다. Node.js와 MongoDB를 이용하였는데, 라이브러리는 mongoose와 express를 이용하였다. 미들웨어와 라우터의 개념에 대해서 알게 되었고, mongoose 라이브러리를 통하면 model 객체를 상속하는 schema를 통해 마치 RDB를 이용하는 것처럼 각 collection의 형태를 조정할 수 있다는 것을 알게 되었다. DB는 보통 데이터를 저장하는 컴퓨터, 혹은 그 데이터의 저장과 사용을 도와주는 프로그램을 지칭한다. DB는 크게 SQL과 No SQL로 구분지을 수 있다. SQL DB는 관계형 데이터베이스라고도 하는데, My SQL과 Oracle DB로 대표된다. SQL DB에서는 모든 데이터를 2..

항해 99 2022.02.20

항해 99 5주차를 끝내며

알고리즘 4주 과정이 모두 끝나고, 드디어 주특기 주차에 들어섰다. Node.js에 대한 공부를 시작했고, 컴퓨터 공학적 지식을 쌓기 위한 스터디도 시작되었다. 파이썬만 써보았고, 비록 Javascript 문법에 대해서는 조금씩 알아보고는 있었지만 역시 실전에 들어가니 헷갈리는 것 투성이에 코드 읽는 것도 한세월이었다. 기본적인 함수들에서 return해주는 형식과 함수를 적어주어야 하는 위치, 프로퍼티라는 개념 등 여러가지 것들이 달랐는데, 적응을 위해서는 최대한 많은 코드를 읽어보고 작성해보는 것이 가장 좋을 것이라고 생각한다. 알고리즘 마지막 주차에서 배운 주제는 바로 이진 탐색과 분할 정복, 그리고 최단 경로 문제였다. 최단 경로 문제는 다양한 유형의 문제가 존재했는데, 그 중에서 내가 학습했던 것..

항해 99 2022.02.14

항해 99 4주차를 끝내며

알고리즘 4주 과정 중, 벌써 3주차가 끝이 났다. 이번 주차는 정렬과 함께한 주차였다. 버블 정렬, 선택 정렬, 삽입 정렬, 퀵 정렬, 병합 정렬, 그리고 힙 정렬까지 배웠다. 힙은 이번 주차 처음에 배웠던 힙 자료구조를 이용한 sort 방법이다. 각각의 정렬 방법들은 각기 다른 접근 방법을 통해 구현하였고, 이에 따라 서로 다른 시간 복잡도를 보인다. 여기서도 하나 개인적으로 특이하다고 느낀 점은, 같은 알고리즘으로 구현된 코드라고 할지라도, 최선의 경우와 최악의 경우에 따라서 그 시간 복잡도가 달라지는 것이었다. 버블 정렬의 경우, 모든 숫자 각각에 대하여, 그 외의 숫자들과 비교하여 제 자리를 찾아주는 식으로 접근하였다. 앞과 뒤를 비교하여 앞이 뒤보다 뒤에 있어야 하는 경우, 앞과 뒤의 위치를 ..

항해 99 2022.02.06

항해 99 3주차를 끝내며

알고리즘을 배운 지 벌써 2주를 넘어서고 있다. 이번 주에는 그래프와 이를 탐색하는 대표적인 방법 2가지, 그리고 트리에 대해서 학습하였다. 이런 기본적인 개념을 모르는 상태에서 그래프 탐색에 관련하여 전혀 감을 잡지 못 하고 있었다. 스택과 큐를 이용해서 DFS와 BFS를 배우고, 후에 재귀함수를 통해 DFS를 구현하는 방법을 배웠다. 트리는 그래프와 거의 같지만, 부모 노드와 자식 노드로 구별할 수 있고, 순환 구조를 가지지 않는 등 독특한 특징을 가진다는 것에서 다르다. 그래프 여기서의 그래프는 임의의 개수의 node들과 그 node들을 연결하는 edge로 구성된 것이다. 2차원 배열을 통해 각각의 node가 어떤 node와 연결 되었는지를 표기하는 방법과, dictionary 형태를 통해 각각의 ..

항해 99 2022.01.30