서론
- 7/9 ~ 7/15의 미니프로젝트 기간이 종료되었습니다.
- 7/16 ~ 7/22의 클론코딩 기간이 시작되었습니다.
- 풀 스택 개발자 튜터님의 면담이 진행되었습니다.
일정
- 7/9 (금) ~ 7/15 (목) : 미니프로젝트 진행
- 7/13 (화) : 1회 협력사 발표 진행
- 7/16 (금) ~ 7/22 (목) : 클론코딩 진행
5주 차 미니프로젝트
- 7/9 ~ 7/15 미니프로젝트 주차가 종료되었습니다.
- 핀터레스트를 모티브로 한 클론코딩으로 진행되었습니다.
- 코드 최적화를 위주로 작성하였습니다.
- 총 17개의 API를 구현하였습니다.
- Sequelize와 mysql 모듈을 이용한 MySQL DB 통신을 진행하였습니다.
- AWS EC2에 미니프로젝트 서버를 업로드 하였습니다.
- Notion : https://www.notion.so/12-fd2b9e26805f4e9a908f1e5f791d7838
- Github : https://github.com/archepro84/Bohemian_Rhapsody
- Youtube : https://youtu.be/lUjD6D7hPKA
5주 차 미니프로젝트 이야기
- 이번 미니 프로젝트에서는 기능을 많이 추가하는 것 보다 프로젝트의 전반적인 구조를 이해하고, 완벽한 DB의 구조를 구성해 최적화를 시키는 것이었기 때문에 DB에서 중복된 데이터들을 배제해 필요한 데이터들만 사용하도록 DB 테이블을 구성하였고, Express로 구성된 Node.js 서버 파일을 기능별로 분리해 해당하는 기능이 최적의 방법인가? 라는 생각을 하며 구현하였습니다.
- API의 기능 구현은 화요일경 마무리가 되었기 때문에 2일간의 시간이 남았습니다. 이후 어떠한 기능을 구현할까 라는 생각을 하였고, 현재 가장 중요하다고 생각되는 부분인 코드 최적화, SQL 최적화를 중점적으로 수정하였습니다. 그리고 프로젝트에는 포함되지 않았지만, Socket.io를 이용한 간단한 접속 알람 이벤트를 구현하였습니다.
- 프로젝트 API 구현을 끝내고 남은 2일간의 기간 동안 기능을 추가로 구현해야 할지, 아니면 미니프로젝트의 코드 구조를 확실하게 이해하고 견고한 구조를 작성하는 게 중요한지 모호하였습니다. 미니프로젝트 기간 중 튜터님과 매니저님에게 상담해보았고, 결과적으로는 간단한 기능을 여러 개 추가하는 것보다 확실한 프로젝트의 이해와 구현이 중요하다는 의견을 들었습니다.
- API 구현 도중 DB 통신을 반복적으로 여러 번 하지 않도록 SQL 문을 작성하는데 가장 많은 시간을 할애한 것 같습니다.
6주 차 클론코딩
- 7/16 ~ 7/22 클론코딩 기간이 시작되었습니다.
- 팀장을 맡게 되었습니다.
- Node.js 백 엔드 2명, React 프론트 엔드 2명으로 팀이 구성되었습니다.
- tumblr를 주제로 클론코딩을 진행하였습니다.
- 클론코딩 첫날 와이어 프레임, API, ERD를 작성하였습니다.
6주 차 클론코딩 이야기
- 목표 사이트를 지정해 핵심적인 기능을 분리해 구현하는 클론코딩 기간이 시작되었습니다. 처음 주제를 선정할 때 리디북스, 인스타그램, 텔레그램, 텀블러 총 4개의 주제가 제시되었지만, 기술적인 성장과 구현의 완성도, 다른 팀에서 하지 않을 사이트를 소거법으로 정리하여 텀블러 사이트로 정하게 되었습니다.
- DB 구조가 엄청 복잡해졌습니다. 미니프로젝트에서는 4개의 테이블로 프로젝트가 정의되었다면, 클론코딩에서는 총 7개의 테이블로 구성되었습니다. 여러 개의 이미지, 태그를 표기하기 위해 테이블이 추가되었고, 팔로우 기능을 위해 테이블이 추가되었습니다.
- DB를 관리하는 능력과 SQL을 작성하는 지식이 많이 필요한 것 같습니다. 프로젝트의 규모가 커질수록 DB의 구조도 복잡해지고 최적화가 필요해지는데 SQL을 단순히 단일 테이블만 조회가 가능하다면 Server와 DB 간의 통신 횟수는 우후죽순 늘어날 것입니다. DB와의 통신을 최대한 줄이고, DB에서 처리되는 SQL 문을 최소한의 시간으로 조회할 수 있게 하는 것이 프로젝트의 핵심인 것 같습니다.
- 아직 확실한 구상은 하지 못했지만, DB의 Trigger를 프로젝트에서 사용해야 할 것 같습니다. 알람 기능을 구현하면서 Reblog, 좋아요, 팔로우를 추가할 때마다 Alarm 테이블에 데이터를 추가할 수 있도록 구현해 Server와 DB의 통신을 하지 않고도 데이터 추가가 가능해지면 좋을 것 같습니다.
- 프로젝트 구상을 1일, 프로그램 코드작성을 1일밖에 하지 못했지만 남은 동안 어느 것을 구현할지 벌써 기대가 됩니다.
배운 점
- 멘탈 관리 방법
- Socket.io, Cookie-Parser 모듈
- Sequelize.query를 이용한 Raw Query 사용법
- Email, Password 정규표현 식
- MySQL 스칼라 함수, JOIN, Sub Query, LIMIT
- 코드 정리 및 최적화 방법
나의 생각과 이야기
- 매 주차마다 팀장을 맡았지만, 처음으로 프로젝트 도중에 팀원이 하차 하였습니다. 자신이 배운 능력이 부족하고, 프로젝트를 진행하면서 따라가는 것이 힘들다고 말씀하시면서 하차를 하셨지만, "제가 더 열심히 케어하였다면 나가지 않았을 텐데"라는 생각이 머릿속에 맴돌았습니다. 이러한 걱정으로 인해 며칠간 마음가짐이 풀어졌고, 멘탈 관리의 중요성을 깨달았습니다.
- SQL을 작성하는 능력이 많이 필요하겠다는 생각이 가장 많이 든 6주 차였습니다. 프로젝트를 구현하면서 CRUD는 가볍게 작성할 수 있었지만, DB 데이터 조회 및 검색에서 가장 많은 시간을 사용하였습니다. Server에서 DB와의 통신을 최소화하고, DB에서 사용하는 SQL을 최적화하여 최적의 프로젝트를 구현하는 것을 목표로 하였습니다.
- 미니프로젝트 주차와 동일하게 프로젝트를 시작한 첫날의 구조를 잡는 것이 가장 중요하다고 생각하였습니다. 첫날 잡은 구성을 기반으로 Server를 구현할 때 어떠한 방식으로 구현을 하는 것이 맞는지 고민하는 시간이 사라지고, 확실한 예시가 작성되어있기 때문에 큰 걱정 없이 프로그램을 구현할 수 있었습니다.
- DB 공부를 열심히 해야겠습니다.
'항해99 > WIL' 카테고리의 다른 글
[항해99] WIL 8주차 - 실전 프로젝트 2주차 (후기) (0) | 2021.08.01 |
---|---|
[항해99] WIL 7주차 - 실전 프로젝트 1주차 (후기) (0) | 2021.07.25 |
[항해99] WIL 5주차 - Node.js 미니프로젝트 기간(후기) (0) | 2021.07.11 |
[항해99] WIL 4주차 - Node.js 주특기 심화 기간 (후기) (0) | 2021.07.04 |
[항해99] WIL 3주차 - Node js 주특기 기간 (후기) (0) | 2021.06.27 |