개요
- 사이드 프로젝트를 수행하기 위해 타켓 서비스를 분석한 내용을 정리한다
목적 및 방향성
- 서비스 분석을 통해 도메인 이해도를 높인다
- 어떤 프로젝트를 수행하든 내가 만들고자 하는 제품의 방향성과 가치를 명확히 이해하고 있어야함으로
- 이 프로젝트의 목표는 단순한 토이 프로젝트가 아니라, 실무에서 활용할 수 있는 깊이 있는 경험을 쌓는 것이다
면접에서 어떤 질문을 받더라도 좋은 답변을 할 수 있도록, 기술적 도전 과제를 포함하여 개발할 계획이다 - 기획 단계부터 실제 서비스를 분석하고, 이를 기반으로 기능을 구현하며, 점진적으로 성능을 개선해 나갈 예정이다
최종적으로는 대규모 트래픽을 고려한 설계와 고도화된 비즈니스 로직을 적용한 프로젝트로 발전시키는 것이 목표다
벤치마킹 대상
- 숙박 서비스를 제공하는 여러 기업들
(25.03.15 수정) -> 업체명을 밝히는 것은 좋지 않겠다는 피드백 반영
❓ 이 서비스가 추구하고자 하는 가치가 무엇일까
(25.03.15 수정) -> 업체명을 밝히는 것은 좋지 않겠다는 피드백 반영
- 결국 필자가 느끼기엔,
다양한 여가 활동을 고객들이 쉽고 편리하게 예약할 수 있도록 하자는게 최우선 가치인 듯하다 - 반대로 여가 활동을 제공하는 업체 또한 고객으로서,
그들을 위한 차별화된 예약 관리 시스템 제공도 추구하고자 하는 가치가 되지 않을까
🤔 사이드 프로젝트로서 어떠한 관점을 세워야 할까
- 나는 숙박 서비스를 하는 회사 소속이 아니고, 해당 플랫폼을 창업할 계획도 없다.
따라서 동일한 가치를 부여하기 어렵다 (팀으로서 함께한다면 얘기가 다르다) - 하지만 사이드 프로젝트로서 내게 어떠한 가치도 없는게 말이 되겠는가? 나도 스스로 가치를 부여해야한다
따라서 아래와 같이, 사이드 프로젝트에 대한 관점을 갖고자 한다
✅ 내가 사이드 프로젝트를 왜 하는가?
- 내가 원하는 회사로 이직하기 위해서는 단순 CRUD가 아닌, 실무에서 기대하는 수준의 백엔드 아키텍처를 경험해봐야 한다
- 즉, 사이드 프로젝트를 통해 설계, 성능 최적화, 대용량 트래픽 처리, 비동기 처리 등을 적용한 경험을 해볼 수 있다
✅ 이 프로젝트에 어떠한 가치를 부여할 것 인가
- 핵심은 사람이 읽기 좋은 코드를 작성하고 상황에 따라 점진적으로 아키텍처를 녹여낸다
- OOP
- 동시성 트랜잭션 처리
- 비동기 예약 시스템 (결제 & 예약 확정 시점)
- 높은 트래픽을 견디는 구조
- 실무와 같이 고객 관점에서 제품을 만든다
- 사용자는 숙소를 쉽고 빠르게 예약할 수 있어야 한다 (사용자 경험 최적화)
- 숙소 제공 업체는 예약 관리 시스템을 편리하게 사용할 수 있어야 한다 (B2B 관점도 고려)
✅ 기술적인 부분에서 집중해야 할 것
- 점진적 아키텍처 설계
- 모놀리식 vs MSA 아키텍처 고민
- 점진적으로 Spring Cloud / Redis / Kafka 등 실무에서 쓰이는 기술 적용
- 대용량 트래픽을 고려한 설계
- 동시 예약 시 트랜잭션 처리
- 캐싱 & 성능 최적화
- 테스트 코드 및 배포 자동화
- CI/CD 구축
✅ 최종적으로 사이드 프로젝트가 내게 주는 의미
- 단순한 CRUD 경험이 아니라 백엔드 최적화 경험을 쌓을 수 있다
- 면접에서 “이 프로젝트를 통해 어떤 기술적 문제를 해결했는가?”에 대한 답변이 강력해진다
- 포트폴리오가 단순한 "이력서"가 아니라 내 개발 역량을 증명하는 무기가 된다
🥇 핵심 기능
- 핵심 기능은 이 프로젝트를 수행하는데 있어 필수로 구현해야할 기능이다
회원 관련 기능
두 종류의 회원으로 나눠짐
- 일반 회원 (로그인 /회원 가입)
- 비즈니스 회원 (로그인 /회원 가입)
- 플랫폼 성격상, 비즈니스 회원의 기능이 먼저 구현되어야 할지도 모르겠다
- WHY? 기본적으로 예약 가능한 숙소를 비즈니스 회원이 등록해야하기 때문
- 즉, 기획적으로 기능의 우선 순위는 비즈니스 회원의 기능일지도 모른다
- 그러나 현재 필자의 경우, 비즈니스 회원을 등록하기 어려운 상태로, 비즈니스 회원의 기능을 직접 눈으로 파악하기 어렵다
- 따라서 비즈니스 회원의 숙소 관리 기능은 일반 회원으로 숙박 예약하는 시스템을 파악해서 추측할 수 밖에 없다
- 이로 인해 역설적일 수 있으나, 당장은 비즈니스 회원의 기능을 간소화하여 진행한다
숙소 관련 기능
숙소 검색 기능
- 숙소 조회는 최상위 범주로 [국내 숙소, 해외 숙소]로 나눠지며 [위치, 날짜, 인원] 정보가 필수 입력되어야한다
- 위 스크린 샷은 위에서 언급한 [국내/해외]=>[위치, 날짜, 순서] 정보를 기준으로 조회된 결과다
- 최소한 아래와 같은 기능들이 추가되어야한다
- 검색 결과에 따른 페이징 기능
- 필터링 및 정렬 기능
- 조회 결과에 대한 정렬 기준은 아래와 같이 제공된다
- 추천순 (어떤 기준으로 추천하는지 명확하지 않다)
- 평점 높은 순 (각 숙소마다 평점을 매길 수 있어야한다는 뜻이다)
- 리뷰 많은 순 (각 숙소마다 리뷰를 쓸 수 있어야한다는 뜻이다)
- 낮은 가격 순 (당연히 각 숙소마다 가격 정보가 있어야한다)
- 높은 가격 순 (낮은 가격 순과 동일한 로직에서 순서만 바뀌면 된다)
- 거리순 (거리순으로 조회해도 어디를 기준으로 몇 m인지 나와있지 않다)
- 위 숙박 검색에 대한 API 구조까지 참고해볼 수 있었다
Request URL:
https://www.yeogi.com/_next/data/j4v84i7bgb_9kqVc1SFR3/domestic-accommodations.json?keyword=%EA%B0%95%EB%A6%89&autoKeyword=&checkIn=2025-03-06&checkOut=2025-03-07&personal=2&freeForm=false
Request Method: GET
Request Parameter
keyword: String
autoKeyword: String <= Nullable
checkIn: DateString
checkOut: DateString
personal: Integer
freeForm: Boolean
Response

위 API 응답에 숙박 시설에 대한 정보 리스트부터, 회원 인증, 정렬 기준 등 여러 데이터가 응답됨
숙소 상세 조회
- 기본적으로 확인할 수 있는 숙소 상세 정보는 아래와 같다
- 숙소명
- 서비스 및 부대 시설 (정해진 형식이 존재하는 것으로 보임)
- 위치 정보 (지도 API가 활용되는 것 같음)
- 이벤트 정보 (숙소별로 별도의 이벤트를 표시함)
- 객실 정보
- 숙소 소개 글
- 숙소 이용 정보
- 평점
- 또한, 각 객실마다 객실에 대한 정보가 별도로 존재
- 당연히 숙소 하나 당 여러 객실을 선택할 수 있는 구조
- 객식 정보는 [입실과 퇴실 시간부터 가격, 인원, 추가 정보] 등이 표현 된다
- 위 숙박 상세 조회에 대한 API 구조까지 참고해볼 수 있었다
Request URL:
Request Method: GET
Request Parameter
checkIn: DateString
checkOut: DateString
personal: Integer
Response

위 API 응답에 숙소에 대한 객실 리스트부터, 위치 정보까지 자세한 정보가 다 포함됨
숙소 예약
- 객실 선택하면 즉시 위와 같은 화면으로 이동함. 예약 및 결제는 위와 같이 매우 간단한 프로세스로 이뤄짐
- 위 예약 및 결제에 대한 API 구조까지 참고해볼 수 있었다
Request URL:
Request Method: GET
https://platform.yeogi.com/domestic/checkout?orderSnapshotKey=수정
Request Parameter
orderSnapshotKey : String
-> 예약 및 결제 페이지로 넘어갈 때, 위와 같이 orderSnapshotKey 값이라는 키로,
예약 결제에 있어 임시 키가 존재함 (이 부분은 나에게 힌트가 되지 않을까?)
Response
기본 적인 위 객실에 대한 정보와 결제 가능한 수단을 응답함
🥈 다른 주요 기능
- 주요 기능은 핵심 기능 다음으로 우선 순위가 높은 구현 기능이다
리뷰 & 평점 시스템
- 리뷰 & 평점 시스템은 최소한 아래와 같은 기능들이 추가되어야함
- 작성 된 리뷰 리스트 조회 및 페이징
- 숙박 이용한 고객에 한해, 리뷰를 작성하고 수정할 수 있는 기능
- 평점 기능
- 정렬 기능 [추천 순, 최신 순, 평점 높은 순, 평점 낮은 순]
이벤트 & 쿠폰 발급 시스템
- 플랫폼에서 별도의 이벤트 페이지 존재
- 각 고객에게 선착순 쿠폰 발급
숙소 추천 기능
- 인기 숙소 추천 또는 개인화 추천 서비스 존재
- 특가 정보를 분류할 수 있는 기능 존재함
욕심 내고 싶은 부분
1️⃣ 고성능 예약 시스템 (동시성 제어 & 트랜잭션 처리)
WHY?
- 숙소 예약은 동시에 여러 사용자가 같은 방을 예약하려는 경쟁 상황이 자주 발생
- 이를 안전하게 처리하는 동시성 제어가 필수
2️⃣ 대용량 트래픽을 견딜 수 있는 아키텍처 설계
WHY?
- 숙박 플랫폼은 성수기(연말, 명절, 휴가철) 때 트래픽 폭증이 발생
- 이를 대비한 스케일링 & 성능 최적화가 중요
3️⃣ 검색 최적화 (빠른 숙소 검색 & 필터링)
WHY?
- 숙박 플랫폼은 숙소 검색이 핵심
- 사용자 경험을 개선하려면 빠르고 정교한 검색 기능이 필요
그럼 어떻게 진행할 것인가?
✅ 단계목표개선 포인트
단계 | 목표 | 개선 포인트 |
Step 1 | 모놀리식 + RDB | 핵심 기능 개발, API 구축, 기본 트랜잭션 처리 |
Step 2 | 비동기 이벤트 도입 | 예약/결제 확정 시, 메시지 큐(Kafka, RabbitMQ) 활용 |
Step 3 | 특정 서비스 분리 | 성능이 중요한 API(예약, 결제)를 마이크로서비스화 |
Step 4 | 캐싱 & 최적화 | Redis 활용, 트래픽 부하 분산 |
Step 5 | 완전한 MSA | API Gateway, 서비스 디스커버리 적용 |
다음 작업 및 예상 일정
- 구체적인 작업 범위 선정 및 요구 사항 정리 (~ 3/11 화)
- 클래스 모델링 (클래스 다이어그램 정리)
- 구체적인 요구 사항 정리
- 익숙한 모놀리식 구조 + RDB로 빠르게 구현 후 개선하는 방식 고려
'개발 일기' 카테고리의 다른 글
[이해하기] Lock 성능 테스트 (0) | 2025.03.18 |
---|---|
[이해하기] JVM에서의 Lock (0) | 2025.03.14 |
[이해하기] JVM에서의 스레드에 대한 이해 (0) | 2025.03.11 |
[고찰하기] 객체 생성에 관해 (0) | 2025.03.03 |
[이해하기] JVM 환경에서의 싱글톤 패턴 (1) | 2025.03.02 |