Skip to content

How-about-over-there/server

Repository files navigation

🏡 저기어때 : 대규모 트래픽 처리 숙박 예약 서비스

Modern App Portfolio Mockup Presentation (3) (1)

👋 서비스/프로젝트 소개

  • 대규모 트래픽 처리 E-Commerce 숙박 예약 서비스
    • 사용자가 다양한 숙소를 검색하고 예약하며 결제를 완료할 수 있도록 지원하는 플랫폼
    • MSA(마이크로서비스 아키텍처)를 통해 각 기능을 독립적으로 관리하며 확장성, 유연성, 그리고 장애 복구 능력을 높임

👑 서비스/프로젝트 목표

  • 대규모 트래픽 대응

    • MSA 아키텍처 도입으로 각 기능 독립 관리, 확장성 및 장애 복구 능력 강화
    • Redis와 Kafka를 활용하여 대규모 트래픽에 안정적으로 대응
    • 주요 API 처리량 200.0/sec 이상 달성
    • 동시성 문제 해결로 안전한 서비스 제공
  • 모니터링 시스템 구축

    • Prometheus, Grafana로 실시간 메트릭 모니터링으로 안정성 있는 프로젝트 구축

    • Loki로 알람 상황에 맞춰 설정 → 빠른 파악

      알람
      Dashboard 설정 변경
  • 데이터 일관성 및 트랜잭션 관리

    • TransactionSynchronizationManager로 데이터 일관성 관리
    • 중복 및 데이터 손실을 방지하는 Kafka Batch Listener 구현
  • 운영 및 배포 효율화

    • Docker와 Github Actions를 이용한 CI/CD 파이프라인 구축으로 배포 자동화

🤝 역할 분담 및 협업 방식

🧑‍💻 CONTRIBUTORS

이름 포지션 담당 Github 링크
김성훈 리더 ▶ Coupon 도메인 개발
▶ Gateway 통합 swagger 설정 완료
▶ 모니터링(Promethues, Grafana, Loki)설정, Kafka, Redis
▶Docker-compose 파일 설정
https://github.com/kimsung3113
강찬욱 팀원 ▶ Auth/User 도메인 개발
▶ Gateway 개발
▶ 깃 서브모듈 구현
▶ 인프라 및 CI/CD 구축
https://github.com/chanwookK
김지수 팀원 ▶ Payment 도메인 개발
▶ 포트원 API 연동을 통해 실제 결제 환경 제공
▶ Point 도메인 개발
https://github.com/jelliclesu
문시원 팀원 ▶ Lodge 도메인 개발
▶ S3 이미지 업로드 구현
▶ 협업을 위한 컨벤션 설정
https://github.com/muncool39
조우석 팀원 ▶ Reservation 도메인 개발
▶ Review 도메인 개발
▶ S3 이미지 업로드 구현
https://github.com/wooseok50

🖌 인프라 설계도

인프라 설계도

🖼 ERD

ERD

📄 주요 기능

예약-결제 Flow

예약-결제 Flow
  • 예약에 쿠폰, 포인트가 모두 사용된 경우를 나타내며, 사용되지 않았을 경우 유효성 검사 및 상태 변경 진행되지 않음
  • 현재 테스트 환경에서는 결제 URL 을 직접 브라우저에 입력해야 하지만, 최종적인 목표는 MVC 패턴
  • 모든 요청의 실패에 대한 롤백 로직이 작성되어 있으며, 다이어그램 간소화를 위해 생략함
  • 쿠폰 발급 Flow

    쿠폰 발급 Flow

    🏠 숙소 예약 서비스:

    • 숙소 정보 검색 및 숙박 날짜 예약
    • 예약 시 쿠폰 및 포인트 적용

    💰 결제 서비스:

    💵 포인트 서비스:

    🎫 쿠폰 서비스: Redis 및 Kafka를 통한 비동기 쿠폰 발급, 동시성 처리

    • 대용량 트래픽을 수용하기 위한 비동기 쿠폰 발급
    • Redis의 Lua Script로 동시성 제어 및 쿠폰 발급 상태 관리
    • Kafka 를 활용한 실시간 이벤트 & 병렬 처리 (시간 및 수량 제한)

    🚀 기술 스택

    🖥️ 언어 및 프레임워크
    • Java 17: 최신 기능과 안정성을 제공하는 언어.
    • Spring Boot 3.3.7: 빠르고 유연한 애플리케이션 개발.
    • Spring Cloud Gateway: API 게이트웨이 및 로드 밸런싱.
    • Spring Cloud Netflix Eureka: 서비스 디스커버리 및 로드 밸런싱.
    • Spring Cloud OpenFeign: 마이크로서비스 간 통신을 위한 HTTP 클라이언트.
    • JPQL & QueryDSL: 복잡한 데이터 조회와 효율적인 SQL 작성.
    • Mapstruct: DTO 변환 자동화.
    📩 메시징
    • Apache Kafka: 고성능, 실시간 스트리밍 데이터 플랫폼.
    🛠 툴 및 소스 관리
    • Git & Github: 소스 버전 관리.
    • Postman: API 테스트 및 디버깅.
    • IntelliJ IDEA: 강력한 개발 환경.
    • Slack: 팀 협업 및 커뮤니케이션.
    • Gradle: 프로젝트 빌드 및 의존성 관리.
    📊 로그 관리 및 모니터링
    • Prometheus: 모니터링 및 경보 시스템.
    • Grafana: 데이터 시각화 및 대시보드.
    • Zipkin: 분산 트레이싱.
    • Loki: 로그 관리.
    • Actuator: 애플리케이션 상태 모니터링.
    🔐 인증 및 보안
    • JWT: 안전하고 가벼운 인증 토큰.
    • Argon2: 강력한 비밀번호 해시 알고리즘.
    🌍 외부 API
    • PortOne API: 결제 처리 및 통합.
    🗄 ORM
    • Spring Data JPA: 객체-관계 매핑 및 데이터 액세스.
    💾 데이터베이스
    • PostgreSQL: 고성능 오픈소스 RDBMS.
    성능 최적화 및 캐싱
    • Redis & Redisson: 고속 데이터 캐싱 및 분산 잠금.
    • LuaScript: Redis 스크립팅 확장.
    ☁️ 인프라 및 배포
    • AWS EC2, RDS, S3, ECS, ECR, Elastic Cache: 클라우드 인프라 및 관리.
    • Docker & Docker Compose: 컨테이너 관리 및 오케스트레이션.
    • Github Actions (CI/CD): 지속적 통합 및 배포.
    테스트
    • Jacoco: 코드 커버리지 분석.
    • SonarQube: 코드 품질 관리.
    • JUnit5 & Mockito: 단위 테스트 및 목(Mock) 테스트.
    📈 성능 테스트
    • Apache JMeter: 부하 및 성능 테스트.
    📚 문서화
    • Notion: 프로젝트 관리 및 문서화.
    • Swagger: API 문서화 및 테스트.

    🗣️ 기술적 의사 결정

    💡 ELK Stack Vs Prometheus + Grafana + Loki

    💡 팩토리 메서드 생성 vs Mapstruct

    💡 Kafka, RabbitMQ 중 Kafka 선택

    💡 Redis 자료구조 SortedSet vs Set

    💡 숙소 날짜 예약 시의 동시성 문제 해결 방법 결정

    💡 보안 전략에 관한 기술적 의사 결정

    💡 특정 포인트 내역 조회에 Redis 캐싱 적용

    💡 포인트 만료 처리 설계: 분산 배치 처리

    🔥 트러블 슈팅

    🦄 서브 모듈 분리

    🌸 관리자 API와 유저 API 분리

    🐢 쿠폰 발급 동시 요청으로 인한 Consumer Lag 문제, Jmeter 부하테스트

    🐯 쿠폰 발급 동시성 문제 해결 및 기술 선택, Redis ‐ 분산락 vs LuaScript

    🐥 front가 있다는 가정: 요청 제한을 위해 front에 데이터 전송 = 로그 출력 시점 문제 해결

    🐻 Coupon, Event N+1 문제

    🦋 Kafka Exporter 자동 종료 문제 해결

    🐰 Kafka Consumer 역직렬화 문제

    🍀 Redis 역/직렬화 문제 해결 과정

    🎀 Feign Client 통신 문제

    🐸 Feign Client 예외 처리 문제

    🌟 문서 및 발표 자료

    💬 상태코드 명세서

    📃 최종발표자료

    About

    숙박 예약 서비스

    Resources

    Stars

    Watchers

    Forks

    Releases

    No releases published

    Packages

    No packages published

    Languages