[항해 플러스 LITE 1기] 서버 설계(2주차)
콘서트 예약 서비스 설계
2주 차에는 콘서트 예약 서비스의 설계와 초기 세팅, 그리고 문서화 작업을 진행했다.
이번 프로젝트의 주요 요구사항과 설계 과정에서 고민했던 점, 그리고 앞으로의 개선 방향을 정리했다
프로젝트 요구사항
이번 과제에서는 아래와 같은 기능을 구현해야 합니다.
- 유저 토큰 발급 API
서비스를 이용하기 위해 유저별 대기열 토큰을 발급한다. 이 토큰에는 유저의 UUID와 대기 순서, 잔여 시간 등 대기열 관리에 필요한 정보가 포함된다. 모든 API는 이 토큰을 통해 대기열 검증을 통과해야 이용할 수 있다. - 예약 가능 날짜/좌석 API
예약 가능한 날짜 목록과, 각 날짜별로 예약 가능한 좌석(1~50번)을 조회하는 기능을 제공한다. - 좌석 예약 요청 API
날짜와 좌석 정보를 입력받아 좌석을 임시로 예약한다. 예약과 동시에 해당 좌석은 약 5분간 임시 배정되며, 이 시간 내 결제가 완료되지 않으면 임시 배정이 해제된다. - 잔액 충전/조회 API
사용자는 미리 충전한 잔액으로만 좌석을 예약할 수 있다. 잔액 충전 및 잔액 조회 기능을 제공한다. - 결제 API
결제가 완료되면 해당 좌석의 소유권이 유저에게 넘어가고, 대기열 토큰은 만료된다.
Keep : 잘한 점
- 요구사항 분석과 설계 문서화
프로젝트 명세를 꼼꼼히 분석하고, ERD, 시퀀스 다이어그램, 인프라 구조도 등 설계 산출물을 작성했다.
처음에는 어떻게 시작해야 할지 막막했지만, Mermaid Live Editor 같은 다이어그램 툴을 활용하니 훨씬 수월하게 시각화할 수 있었다.
각 산출물은 프로젝트의 구조와 흐름을 한눈에 볼 수 있도록 정리해, 앞으로의 개발이나 리팩터링 때 큰 도움이 될 것 같다. - 초기 레포지토리 세팅과 관리
레포지토리 생성 후 PR 템플릿 추가, docs 폴더 분리 등 기본 환경을 갖추고 시작했다.
이런 준비 덕분에 이후 작업이 한결 체계적으로 진행되었고, 관리도 수월했다.
Problem : 아쉬웠던 점
- 시퀀스 다이어그램, ERD, 인프라 설계 등 각 산출물에 대한 세부 내용과 정의가 아직 부족해, 전체 흐름을 한 번에 파악하기 어렵다.
- 대기열 상태 확인 방식이나 토큰의 유효성 검증 절차, 각 state 값의 의미 등에 대해 고민해보지 않았다.
- 관련된 내용을 하나의 PR에 모아서 리뷰자가 좀 더 편하게 전체 맥락을 확인할 수 있도록 했으면 좋았겠다.
Try : 앞으로 시도할 것
- 리뷰를 통해 내가 고려하지 못했던 설계의 세부 요소(예: 대기열 상태 확인 방식, 토큰 유효성 검증, state 값 정의 등)에 대해 더 깊이 공부하고 보완할 예정이다.
- 앞으로는 각 설계 산출물에 상태 정의, 설계 의도를 기록할 계획이다.
- 마일스톤을 더 구체적으로 쪼개고, 인프라 확장 방안도 단계별로 정리해야겠다.
- 실무에서 발생할 수 있는 다양한 상황을 미리 고민하며, 실제로 도움이 되는 설계와 문서를 만들기 위해 노력할 예정이다.
느낀 점
피드백을 통해 설계 문서를 더 구체적으로 분리하고, 상태와 절차에 대한 정의를 명확히 해야겠다고 생각했다. 실제로 대기열 관리, 좌석 조회, 예약, 결제 등 주요 프로세스를 시퀀스 다이어그램으로 따로 분리해 그려보면 각 기능의 흐름과 책임이 훨씬 명확해진다는 점을 알게 되었다. 특히 “대기열 상태 확인 방식(폴링/소켓 등)”, “토큰 유효성 검증 절차”, 그리고 ERD에서 state 컬럼이 있는 경우 가능한 값과 의미를 명확히 정의해 두는 것이 설계 단계에서 꼭 필요한 점이다.
아쉬웠던 점은, 이번 프로젝트를 설계하면서 이런 세부적인 부분들을 미처 고려하지 못했다는 점입니다. 이전에도 서버 설계를 해본 경험은 있었지만, 시퀀스 다이어그램으로 요구사항을 명확하게 표현하는 것은 이번이 처음이라 부족한 부분이 많았다.
이번 경험을 통해 앞으로는 요구사항을 더 구체적으로 시각화하고, 상태 정의와 절차, 그리고 설계 의도를 명확히 드러내는 작업을 적극적으로 활용해야겠다는 생각이 들었다.
개인적으로 아쉬웠던 점은, 여러 설계 산출물을 하나의 PR에서 일괄적으로 정리하면서도, 각 산출물에 대해 추가적인 설명이나 정의가 부족했다는 것이다. 보는 사람이 전체 흐름을 쉽게 이해하기엔 부족할 수 있었고, 인프라 구조 역시 앞으로 어떻게 확장할지에 대한 고민이 더 보완되어야 한다고 느꼈다.