🌻 파이널 프로젝트 모두 정말 고생 많으셨습니다. 🌻
4주간의 프로젝트가 끝났다. 시간이 정말 빠르게 지나갔다. 뮤직 페스티벌을 좋아하시는 팀원 분의 아이디어로 시작한 FESSPORT
프로젝트를 리뷰해보자. 그동안 팀원들과 열심히 달려온 프로젝트 기간을 되돌아보며 ✈️
Festival + Passport
의 합성어로 여권 형태의 마이페이지 구성최대한 다양한 아이디어를 모으고 협의를 거쳤다. 그 중 평소 뮤직 페스티벌을 좋아하시는 팀원 분의 아이디어로 세계 뮤직 페스티벌을 한 곳에서 볼 수 있는 서비스를 선택했다. 정말 수많은 페스티벌들이 있지만 이러한 서비스를 찾기 힘들었고, 팀원 모두 해당 주제에 흥미로워했기 때문이다.
추가적으로 티켓을 사고 팔 수 있는 커뮤니티와 함께 동행할 사람을 찾는 커뮤니티, 후기를 공유하는 커뮤니티를 차별점으로 더하기로 했다.
Wireframe
은 figma
를 사용했다.
Flowchart
는 miro
를 사용했다.
DB Schema
는 dbdiagram
을 사용하여 작성했고, 크게 페스티벌과 아티스트, 사용자, 커뮤니티 테이블로 구성하였다. 사용자는 뱃지 획득, 페스티벌 및 아티스트 좋아요(위시리스트)를 할 수 있게 연결했고, 커뮤니티쪽에서는 동행 참석, 댓글 등의 테이블도 작성하였다.
팀원들과 어떤 API
가 필요할지 상의하는 과정에서 팀원 모두가 생각했던 것보다 상당히 많은 API
가 필요한 것을 느꼈다. 하지만 이 과정에서 시간이 걸리더라도 엔드포인트와 입출력 관련 내용을 확실하게 정하고 넘어가기로 했고, 그 결과 API
문서를 보며 개발하는것이 프로젝트 내내 정말 편했다.
하나의 API
예시이고, gitbook
을 사용하여 작성했다. gitbook 링크
팀 규칙과 프로젝트 태스크 카드 작성 및 분배, 마일스톤 작성이 끝나고, 타입스크립트 기반의 Express
스타터 패키지(typescript-express-starter)를 사용하여 본격적인 서버 개발의 전체적 구조를 잡았다. 자세한 내용은 링크를 참고.
디렉토리 구조는 다음과 같다.
controllers
- services
에서 만든 함수들의 응답을 클라이언트에게 전달하는 역할을 하는 컨트롤러들을 모아놓은 폴더, 파일들은 기능별 정리interfaces
- 타입스크립트 적용을 위한 인터페이스들을 모아 놓은 폴더models
- 데이터베이스 스키마 모델들routes
- 라우터들과 엔드포인트들을 정의해 놓은 폴더services
- 실제 데이터베이스와 상호작용하는 로직을 담은 파일들app.ts
의 일부분이며 express
서버 클래스가 정의되어 있고, server.ts
에서는 router
클래스를 모두 import
하여 인스턴스를 생성하고, app
의 인스턴스에 자식으로 넘겨주어 서버를 실행한다.나만의 클라이언트 코드를 작성하여 API
를 테스트 하면서 백엔드를 개발했다. 팀원 분들도 열정을 칭찬해주셔서 기분이 좋았다. 이렇게 하면 내가 만든 API
가 잘 동작하는지 편하게 확인할 수 있을거 같아서 만들어봤는데 역시 편했다.
배포 이야기를 하지 아니하지 않을 수 없다. Typescript-Express-Starter
덕분에 다양한 것을 경험했다. 특히, 도커를 경험한 것이 너무 좋았다. 도커의 장점을 직접 사용하면서 알게 되었다. 이미지를 만들어 빌드하고 컨테이너를 생성하여 도커 허브에 올려 서버를 실행하기까지의 일련의 과정 자체가 그 장점이었다.
Nginx
가 외부의 요청을 받아 뒷단 서버로 요청을 전달하는 행위를 리버스 프록시라고 한다. 이런 리버스 프록시 서버(Nginx
)는 요청을 전달하고, 실제 요청에 대한 처리는 뒷단의 웹서버들이 처리한다. Nginx
가 실제 https
요청을 처리하는 작업은 함께 백엔드 개발을 맡은 팀원 분이 하셨지만 정말 많이 배웠다.
mongoDB
를 공부하게 된 것도 좋았다. 기획 단계에서 DB Schema
를 작성할 때 팀원 분과 join
이 많이 발생하는 구조여서 SQL
을 사용해야하나 고민을 많이 했지만 결국 mongoDB
를 사용하기로 했었다. 함께 백엔드 개발을 맡은 팀원 분과 정말 즐겁게 model
, schema
, interface
설계 및 디자인을 했던 기억이 생생하다. 새로운 것을 배우는 것은 역시 설레고 재밌다.
기획의 중요성은 첫 번째 프로젝트에서 깨달은 바가 있다. 기획을 다 같이 정말 꼼꼼히 했다. 그럼에도 중간 중간 수정이 필요한 API
, 기능 등은 생겨나기 마련이었다. 마음이 급하니 코드를 짜면서도 리팩토링이 필요하다고 느꼈다.
하지만 개발해야 할 내용이 많은 터라 코드를 효율적으로 작성하는 것의 중요성을 알고 있음에도 우선 기능을 모두 구현해야한다는 생각이 자꾸 들었다. 아직 구현하지 못한 후순위 기능도 있다. 앞으로는 코드 리팩토링에 신경을 쓰고 싶다.
프로젝트는 전체적으로 매우 만족스럽다. 결과물도 만족스럽고, 그 과정에 충분히 몰입한 나 자신도 만족한다. 팀원들과도 정말 매일매일 즐겁게 소통하며 개발한 것 같다. 힘든게 있으면 공유하고, 기능 하나도 구현에 성공하면 자랑하고 😂
이번 프로젝트 내내 정말 많이 배웠고, 많이 성장했다. 기분이 좋다. 난 역시 프론트엔드 개발이 아주 미세하게 조금 더 재밌는 것 같다. 이것을 몸소 느낀것만으로도 엄청난 수확이라고 생각한다. React
공부하러 가야겠다.