![image](https://private-user-images.githubusercontent.com/101460733/300186307-d2b9c662-3e0c-44d1-965a-0b1a15b54ac4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTY0NjEzNzksIm5iZiI6MTcxNjQ2MTA3OSwicGF0aCI6Ii8xMDE0NjA3MzMvMzAwMTg2MzA3LWQyYjljNjYyLTNlMGMtNDRkMS05NjVhLTBiMWExNWI1NGFjNC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNTIzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDUyM1QxMDQ0MzlaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kY2M3OTU0ZjBiYThlNzBhYzc4ZDRkYjY1YzkwNWIxNGU2YzBhMmQwM2MyNWVhMDQzNDM1MGZjOGFiZTg1OTJhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.VIORFrTvuBf0vD4he_lISd-BZEB-iFTYPPKxrtDDUYA)
이 프로젝트는 네고왕 선착순 이벤트를 참고하여 개발된 서비스로, 선착순 쿠폰 발행 및 사용 기능을 중점적으로 다루고 있습니다.
- 고가용성 선착순 쿠폰 발행 및 사용 서비스를 구현하는 것이 목표입니다.
- 객체지향 원칙에 준수하며 유지 보수 용이한 코드를 작성하는 것을 목표로 합니다.
- Slice Test를 활용하여 각 모듈의 기능을 단위별로 테스트하는 것이 목표입니다.
- 대규모 트래픽에도 데이터 정합성을 유지하고 서비스 안정성을 보장하는것이 목표입니다.
✅ master : 릴리스 버전을 관리하는 메인 브랜치
✅ develop : 개발이 진행되는 통합 브랜치
✅ feature : 새로운 기능을 개발하는 브랜치
✅ hotfix : 실제 프로덕션에서 발생한 버그를 수정하는 브랜치
Reference : 우아한 형제들 기술블로그 : gitFlow
![image](https://private-user-images.githubusercontent.com/101460733/317137461-1ccb49c7-91b4-4e28-b6b9-d529f794ee9b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTY0NjEzNzksIm5iZiI6MTcxNjQ2MTA3OSwicGF0aCI6Ii8xMDE0NjA3MzMvMzE3MTM3NDYxLTFjY2I0OWM3LTkxYjQtNGUyOC1iNmI5LWQ1MjlmNzk0ZWU5Yi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNTIzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDUyM1QxMDQ0MzlaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lMGNlZTg2Yzk5YTQ1MGU5ZTUxNTFmYzc1OWQ3OWM3YmRkNWY2ODZlYjNlYTlkNDI4N2U5OTFlZjUzMjRhZGExJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.XPMLrnur_Cf2O4kY5MmAOeNJJ-BidHC9BxSu1c5Xs3Y)
1000만건의 데이터를 대상으로 쿼리최적화 with. 복합인덱스, 커버링인덱스
쿼리 최적화를 했지만 부족하다면, Parallel Stream을 사용해보자
쿠폰 발급에 대한 동시성 처리 (1) - synchronized, pessimisti Lock, optimistic Lock
쿠폰 발급에 대한 동시성 처리 (2) - MySQL의 NamedLock, Redis의 분산락(Lettuce, Redisson)
NCP환경에서 Jenkins와 Docker로 CICD Pipeline 구축하기
@RequestBody는 어떻게 바인딩 되는걸까? (with. 디버깅 과정)
Request에 대한 validation과 Exception 처리에 대한 고찰
DATETIME vs TIMESTAMP 둘 중 어느것이 더 나을까?
private 메소드를 테스트하려 했지만, 문제는 테스트 코드 로직이었다.
Junit 테스트 중 Lock wait timeout exceeded 에러 발생
테스트코드도 코드이므로 합성을 통해 중복을 없애자
- feat : 새로운 기능 추가
- fix : 버그 수정
- docs : 문서 수정
- style : 코드 포맷팅, 세미콜론 누락, 코드 변경이 없는 경우
- refactor : 코드 리팩토링
- test : 테스트 코드, 리팩토링 테스트 코드
- chore : 빌드 업무 수정, 패키지 매니저 수정