f-lab-edu / off-coupon

선착순 쿠폰 발행 서비스 입니다. (네고왕 이벤트 참고)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

off-coupon 프로젝트 개요

image
이 프로젝트는 네고왕 선착순 이벤트를 참고하여 개발된 서비스로, 선착순 쿠폰 발행 및 사용 기능을 중점적으로 다루고 있습니다.

프로젝트 목표

  • 고가용성 선착순 쿠폰 발행 및 사용 서비스를 구현하는 것이 목표입니다.
  • 객체지향 원칙에 준수하며 유지 보수 용이한 코드를 작성하는 것을 목표로 합니다.
  • Slice Test를 활용하여 각 모듈의 기능을 단위별로 테스트하는 것이 목표입니다.
  • 대규모 트래픽에도 데이터 정합성을 유지하고 서비스 안정성을 보장하는것이 목표입니다.

Git Flow

✅ master : 릴리스 버전을 관리하는 메인 브랜치
✅ develop : 개발이 진행되는 통합 브랜치
✅ feature : 새로운 기능을 개발하는 브랜치
✅ hotfix : 실제 프로덕션에서 발생한 버그를 수정하는 브랜치

Reference : 우아한 형제들 기술블로그 : gitFlow

프로젝트 기술 스택

  • Java
  • Spring Boot
  • MySQL
  • Redis
  • RabbitMQ
  • MyBatis
  • Gradle
  • JUnit
  • JaCoCo
  • Docker
  • IntelliJ
  • JMeter
  • Jenkins

서비스 아키텍처

image

쿠폰 발행 Flow

image image

쿠폰 사용 Flow

image

동시성 테스트

쿠폰 발급에 대한 동시성 처리 (1) - synchronized, pessimisti Lock, optimistic Lock
쿠폰 발급에 대한 동시성 처리 (2) - MySQL의 NamedLock, Redis의 분산락(Lettuce, Redisson)

CICD

NCP환경에서 Jenkins와 Docker로 CICD Pipeline 구축하기

회원가입

@RequestBody는 어떻게 바인딩 되는걸까? (with. 디버깅 과정)
Request에 대한 validation과 Exception 처리에 대한 고찰
DATETIME vs TIMESTAMP 둘 중 어느것이 더 나을까?

트러블 슈팅

private 메소드를 테스트하려 했지만, 문제는 테스트 코드 로직이었다.
Junit 테스트 중 Lock wait timeout exceeded 에러 발생
테스트코드도 코드이므로 합성을 통해 중복을 없애자

Commit Convention

  • feat : 새로운 기능 추가
  • fix : 버그 수정
  • docs : 문서 수정
  • style : 코드 포맷팅, 세미콜론 누락, 코드 변경이 없는 경우
  • refactor : 코드 리팩토링
  • test : 테스트 코드, 리팩토링 테스트 코드
  • chore : 빌드 업무 수정, 패키지 매니저 수정

About

선착순 쿠폰 발행 서비스 입니다. (네고왕 이벤트 참고)


Languages

Language:Java 99.2%Language:Python 0.4%Language:HTML 0.3%Language:Dockerfile 0.1%