4월 중순부터 1달을 넘게 블로그 글을 작성하지 못했다. 이 기간동안 기획, UX/UI, 프론트, 백 4개의 팀이 모여 부트캠프 파이널 프로젝트를 진행했는데, 이렇게 큰 규모의 프로젝트는 처음이기도 했고, 기획을 거쳐 개발을 해본 적이 없었기 때문에 색다른 경험이었다.
글 작성일인 5월 22일 이후 2024년 6월 14일자로 프로젝트가 종료되어, 종료된 프로젝트의 내용을 추가하였다.
(프레젠테이션 표지를 가져왔다.)
미니 프로젝트 회고 기간에 협력 기업이 제공한 RFP를 토대로 선호도 조사를 실행하였다. MZ 세대를 겨냥한 금융 서비스, 공유 오피스 예약 및 커뮤니티 서비스, 아파트 및 오피스 관리 서비스가 있었는데, 나는 이 중에서 공유 오피스 예약 서비스와 금융 서비스를 고민하다 전자를 택했고, 그렇게 3조 백엔드 팀장을 맡게 되었다.
팀이 형성되고 난 후, PM팀과 UX/UI팀이 기업의 먼저 인터뷰 및 여러 방법론을 통해 기획 방향을 정하고, 와이어프레임까지 만들어서 개발팀에 전달하였다. 다만 기업과의 소통이 실시간으로 되는 건 아니어서, 기업 피드백을 반영하기 위해 약간의 시간차를 두고 기획이 진행되었기 때문에 실제 개발로 넘어온 것은 5주차였다.
PM 2명, UX/UI 4명, 프론트 3명, 백 3명으로 12명이었는데, 안타깝게도 4주차에 백엔드 한 명이 팀을 하차하게 되었다. 어느정도 기획이 진행되어 충원도 불가능한 시기였기 때문에 백엔드는 어쩔 수 없이 2명이서 진행했다.
기획 기간 동안에는 손을 놓고 있기보다는 매주 멘토링을 통해 예상 기능들에 대해 자문을 구하거나, 미리 인프라를 구상하고 필요한 부분은 추가로 공부하며, 공통적으로 필요한 인증/인가 기능을 미리 구현해두는 등 늦춰진 일정을 맞출 수 있도록 노력했다.
전달받은 와이어프레임과 화면 계획서를 토대로 API 명세서를 작성하고, DB를 설계한 후 본격적인 개발을 시작했다. 다만 기획 일정이 밀리면서 개발 일정도 살짝 밀리고, MVP 버전이 아닌 전체 기획의 화면 계획서를 받아 기획팀과 개발팀간의 개발 범위 소통미스가 있었다.
기획에서 1순위로 두는 기능은 예약이었고, 커뮤니티 기능 역시 RFP에 필수로 포함되어 있었다. 이에 기한과 인원을 고려하였을 때 실질적으로 개발 가능한 범위를 예약과 소모임으로 좁히기를 제안하였고, 전원 동의 하에 개발이 진행되었다.
크게 두 개의 도메인으로 나뉘었기 때문에 나는 예약, 팀원은 소모임 이렇게 각각 기능을 따로 구현하게 되었다. 계획했던 일정은 다음과 같았다.
- 4~5주차
화면 계획서 토대로 ERD, API 명세서 작성
기능 구현 시작- 6주차
중간배포 및 CI/CD 인프라 구축- 7주차
기능 구현 마무리- 8주차
프론트와 연결
다만 지연된 일정으로 인해 프론트와의 연결은 9주차까지 이어졌다.
9주차에는 발표 준비 및 최종 배포를 마무리하였다. 배포는 중간 배포때부터 https로 배포가 되어있었으나, API를 연결하는 과정에서 누락된 API가 있었다거나 제대로 작동하지 않는 경우가 있어서 프론트와의 연결이 지체되었다.
API 명세서는 노션으로 작성하여 프론트와 공유하였다. 포스트맨으로도 작성하여 리드미에 첨부할 계획이다.

예약과 커뮤니티의 두 도메인으로 나눠 작업하였다. 회원가입 후 하나의 지점에서 사용 가능한 멤버십을 구매하고 예약을 진행해야 하므로 이를 반영하여 테이블을 구성하고자 하였다.
멤버십은 기업과 개인의 2가지 종류가 있는데, 기업 멤버십은 회원가입 전에 생성되고, 개인 멤버십은 회원가입 후 생성되므로 두 멤버십의 테이블을 분리하였다.
멤버십 별로 예약을 수정하거나 삭제, 추가해야 하므로 예약 테이블을 분리하여 관리하였고, 지점 별 좌석, 공간도 테이블로 따로 관리하고, 예약할 때 이 테이블의 아이디를 받도록 설계하였다.

LinkUp은 aws ec2에 docker-compose로 spring boot, redis, nginx, certbot을 컨테이너로 띄워 배포하였다.
nginx는 certbot과 함께 사용하여 ssl 인증서를 발급 및 연장하고, 클라이언트에서 받은 요청을 스프링 부트로 전달하는 리버스 프록시로 사용했다.
redis로는 리프레시 토큰과 회원가입 인증코드 등을 캐싱하였으며, github actions로 수정사항이 푸시될 때마다 spring boot 컨테이너만 새로 빌드하여 다시 띄우도록 워크플로우를 작성하여 cicd를 적용하였다.