[사이드 프로젝트] 서비스 분석

개요

  • 사이드 프로젝트를 수행하기 위해 타켓 서비스를 분석한 내용을 정리한다

 

목적 및 방향성

  • 서비스 분석을 통해 도메인 이해도를 높인다
    • 어떤 프로젝트를 수행하든 내가 만들고자 하는 제품의 방향성과 가치를 명확히 이해하고 있어야함으로
  • 이 프로젝트의 목표는 단순한 토이 프로젝트가 아니라, 실무에서 활용할 수 있는 깊이 있는 경험을 쌓는 것이다
    면접에서 어떤 질문을 받더라도 좋은 답변을 할 수 있도록, 기술적 도전 과제를 포함하여 개발할 계획이다

  • 기획 단계부터 실제 서비스를 분석하고, 이를 기반으로 기능을 구현하며, 점진적으로 성능을 개선해 나갈 예정이다
    최종적으로는 대규모 트래픽을 고려한 설계와 고도화된 비즈니스 로직을 적용한 프로젝트로 발전시키는 것이 목표다

 

벤치마킹 대상

  • 숙박 서비스를 제공하는 여러 기업들

    (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로 빠르게 구현 후 개선하는 방식 고려