Skip to content

wonsongleejo/monkey

Repository files navigation

🐵 monkey 팝업 스토어 🙊

LOGO LOGO2

🐵 프로젝트 목표 & 소개

  • 본 프로젝트는 팝업스토어 예약 및 한정 상품 예약 기능을 제공하는 플랫폼을 개발하는 것을 목표로 한다.
  • 사용자는 다양한 팝업스토어를 확인하고 예약할 수 있으며, 스토어 예약 완료 후 한정 상품도 별도로 예약할 수 있다.
  • 운영자는 팝업스토어 등록과 예약 관리를 효율적으로 수행할 수 있다.

🍌 사용자에게 다양한 팝업스토어 정보 제공, 간편한 스토어 예약 기능 지원

🍌 팝업스토어 예약자에 한해 한정 상품 예약 기회 제공

🍌 스토어 운영자가 팝업스토어 등록 및 예약 관리를 쉽게 할 수 있도록 운영 편의성 제공


🐵 팀원 소개 및 담당역할

역할 담당자 세부 업무
상품,
상품 예약 API
지윤
- 상품, 상품예약 CRUD 구현
- 공통 모듈에 예외/응답, JPA Auditing, AuditorAware 구현 및 JitPack 배포
- Redis 캐싱을 통해 상품 조회 성능 최적화
- 상품 예약 시 분산 락을 적용하여 재고 동시성 문제 해결
- 예약 취소 시 재고 복구를 위한 보상 트랜잭션 적용
스토어 예약,
슬랙 알림 API
예지
(팀장)
- 스토어 예약 CRUD 구현
- Redis 캐싱 및 Redisson 락을 활용한 동시성 제어
- JMeter 테스트 기반으로 최적의 락 방식 적용
- 예약 기능별 서비스 버전 분리 및 관리
- Slack 포맷터 기반 메시지 템플릿 구성 및 Slack 알림 전송
스토어 API 태훈 - 스토어, 스토어 시간대 CRU 구현
- 스토어 전체 조회 시 캐싱하여 조회
인증인가,
사용자 API
수빈 - 회원가입, 로그인, 회원정보 수정 및 예약 내역 조회 기능 구현
- JWT 기반 인증 및 토큰 발급, 인증 필터로 사용자 요청 검증
- AOP와 @CheckUserRole을 통한 역할 기반 접근 제어 구현
- Redis 캐싱으로 사용자별 예약 내역 조회 성능 최적화
- 재고 감소 시 락을 활용한 동시성 제어 처리

🐵 프로젝트 설계

ERD erd

인프라 설계 infra

도메인 주도 설계 ddd

🐵 주요 기능

1. MSA 아키텍처 설계 및 구축

  • 멀티모듈 기반 마이크로서비스 아키텍처 설계
  • 각 도메인은 독립적인 Spring Boot 애플리케이션으로 구성
  • 서비스 간 통신은 FeignClient를 활용한 RESTful API 기반 인터페이스로 처리
  • Spring Cloud Eureka를 이용한 서비스 디스커버리 및 Spring Cloud Gateway를 통한 API 라우팅

2. 캐싱 도입을 통한 조회 응답 속도 개선

  • 반복되는 요청을 줄이기 위해 Redis 캐시를 적용하여 응답 속도 개선
  • 캐싱 적용 전후 JMeter 기반 성능 측정을 통해 응답 속도 및 처리량 개선 확인

3. 비동기 이벤트 기반 시스템 구성

  • Kafka를 통한 예약 프로세스 비동기 연동
  • Producer-Consumer 구조로 서비스 간 결합도를 낮추고 확장성을 높임

4. 데이터 정합성 및 동시성 제어

  • Redis 기반 분산 락을 도입하여 스토어/상품 예약 및 상품 재고 차감 시 동시 접근 제어
  • 상품 예약에 비관적 락을 적용하여 데이터 정합성 문제 해결

5. Docker 기반 통합 개발 환경 구성

  • docker-compose로 개발 환경 구축: 모든 마이크로서비스, Kafka, Redis, PostgreSQL 등을 한 번에 실행
  • 서비스 간 의존성을 최소화한 실행 및 테스트 환경 구성

6. 보안 및 인증 체계 구현

  • JWT 기반 사용자 인증 및 권한 검증 로직 구현
  • 사용자 요청 시 토큰에서 사용자 정보를 파싱하여 권한 기반 접근 제어 적용

7. API 명세 및 테스트 자동화

  • Swagger 기반의 API 문서 자동 생성
  • FeignClient 모킹을 통해 테스트 구현

🐵 기술 스택

  • Language

  • Backend Framework

  • Database

  • Messaging

  • Auth

  • Infra

  • IDE


🐵 기술적 의사결정


🐵 트러블슈팅


🐵 협업

🍌 GIT Branch

  • main : 서비스 운영 브랜치
  • dev : 개발 환경 브랜치 - 개별적으로 작업했던 내용을 검토 후 dev에 merge
  • feat/[이슈번호]-[서비스명] : 서비스별 세부 브랜치
  • fix/[이슈번호]-[서비스명] : 서비스별 수정되는 작업들을 위한 브랜치

🍌 Commit & Pull-Request Message

Division Message
"feat: ~ " 새로운 기능 추가
"fix: ~ " 버그 수정
"refactor: ~ " 기능이나 성능 개선 및 수정
"style: ~ " 주석 제거, 코드 줄바꿈 등의 사소한 변경
"delete: ~ " 파일을 삭제만 한 경우

🍌 GitHub 관리 및 소통

  • Pull Request를 통한 코드 리뷰
    • dev에 pr을 올린 후 두 명 이상의 승인을 거쳐야 merge 할 수 있음
    • 코드 변경 사항에 대해 팀원들과 공유하고 검토
  • GitHub Issues를 통한 이슈 관리
    • 이슈 트래킹을 통해 진행사항을 효율적으로 파악
  • 데일리 스크럼을 통한 커뮤니케이션
    • 매일 스크럼을 진행하여 모든 팀원의 진행 상황 공유

About

지금 가장 핫한 팝업스토어 예약은 MONKEY POP에서!

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors