$ ./gradlew clean build -x test
$ docker compose up --build -d
----> 서비스 링크 <----
- 프로젝트 이름: Coupong
- 프로젝트 설명: 선착순 쿠폰 이벤트 플랫폼
진명인 | 백효석 | 심지혜 | 강희준 |
---|---|---|---|
BE | BE | BE | BE |
GitHub | GitHub | GitHub | GitHub |
-
인증/인가:
- 일반 유저는 쿠폰 이벤트 메인페이지, 관리자는 이벤트 등록 페이지로 이동합니다.
Security
- 카카오톡, 네이버 그리고 플랫폼 자체 로그인 총 3가지의 로그인 방식이 있습니다.
OAuth
- 일반 유저는 쿠폰 이벤트 메인페이지, 관리자는 이벤트 등록 페이지로 이동합니다.
-
쿠폰 이벤트:
- 매일 밤 자정, 이벤트 목록이 초기화됩니다.
스케줄러 동적 할당
- 이벤트는 카테고리별로 동일한 날짜, 동일한 시간대에 여러 이벤트가 진행될 수 있습니다.
멀티 스케줄러
- 매일 밤 자정, 이벤트 목록이 초기화됩니다.
-
실시간 채팅:
- 이벤트가 진행 중이거나 진행 중이지 않을 때에도, 유저끼리 실시간 채팅 서비스를 즐길 수 있습니다.
Web Soket
- 금칙어 필터링 시스템이 실시간으로 부적절한 챗 메시지를 잡아냅니다. 허용어는 예외처리하고 우회단어는 금칙어와 동일하게 잡아냅니다.
아호-코라식
- 이벤트가 진행 중이거나 진행 중이지 않을 때에도, 유저끼리 실시간 채팅 서비스를 즐길 수 있습니다.
-
리더보드:
- 쿠폰 이벤트에 당첨된 사람은 실시간으로 리더보드에 등록됩니다.
SSE
- 이벤트 카테고리별로 당첨자들의 순위를 매깁니다. 기준은 발행 요청 시각입니다.
Sorted Set
- 쿠폰 이벤트에 당첨된 사람은 실시간으로 리더보드에 등록됩니다.
진명인 |
|
|
백효석 |
|
|
심지혜 |
|
|
강희준 |
|
JAVA | ![]() |
Spring Boot | ![]() |
Spring Security | ![]() |
JUnit | ![]() |
React | ![]() |
latest |
CSS3 | ![]() |
latest |
Javascript | ![]() |
latest |
Redis | ![]() |
latest |
MySQL | ![]() |
latest |
AWS | |
Docker | |
Stomp | ![]() |
SSE | ![]() |
Git | ![]() |
Figma | |
Notion | ![]() |
main
└── java
└── com
└── onepage
└── coupong
├── chat
└── coupon
├── api
├── config
├── domain
├── dto
├── exception
├── repository
└── service
├── global
├── infrastructure
├── leaderboard
└── user
└── CoupongApplication
resources
test
└── java
└── com
└── onepage
└── coupong
└── couponEventTest
├── CouponEventSchedulerTest.java
├── CouponEventServiceIntegrationTest
└── CoupongApplicationTests
우리의 브랜치 전략은 Git Flow를 기반으로 하며, 다음과 같은 브랜치를 사용합니다.
-
main
- 배포 가능한 상태의 코드를 유지합니다.
- 모든 배포는 이 브랜치에서 이루어집니다.
-
develop/{feature/release/refactoring...}
- 팀원 각자의 개발 브랜치입니다.
- 모든 기능 개발은 이 브랜치에서 이루어집니다.
![React](https://private-user-images.githubusercontent.com/113578420/376030694-6e6238ea-3994-4eec-a1ad-d533b26a8971.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDk0NzEsIm5iZiI6MTczOTIwOTE3MSwicGF0aCI6Ii8xMTM1Nzg0MjAvMzc2MDMwNjk0LTZlNjIzOGVhLTM5OTQtNGVlYy1hMWFkLWQ1MzNiMjZhODk3MS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEwJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMFQxNzM5MzFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kNmIwZGYxOGRmZjVmOTY3YzI1MWFkNWE2ZWE0ZWMwZDNmMzJjZGNhYjA1NjY2ODJkZjc3ZTZjMjcyNWY0Y2RmJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.QozmnkO2Wy94woZp558tZZ1ibo8Zlff60xMfn64V3MI)
![React](https://private-user-images.githubusercontent.com/113578420/376030704-0516008c-7991-4cd5-b089-daac5b4611aa.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDk0NzEsIm5iZiI6MTczOTIwOTE3MSwicGF0aCI6Ii8xMTM1Nzg0MjAvMzc2MDMwNzA0LTA1MTYwMDhjLTc5OTEtNGNkNS1iMDg5LWRhYWM1YjQ2MTFhYS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEwJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMFQxNzM5MzFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1jMjEwZjI1NjZmMjFjMjU3YjQxNWY2MTViMjI2NGZkYWE0ZjcxYzAxNTU4MWE1ZWQxMTM3YjdiYjJkYzM5MTlhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.wIgCSob-I56qwNJzh3aQnLxaNtYyQmLYzHrl4mj3-AI)
![React](https://private-user-images.githubusercontent.com/113578420/376030718-6185929c-0a1a-4250-94b8-d776ab0eca7c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDk0NzEsIm5iZiI6MTczOTIwOTE3MSwicGF0aCI6Ii8xMTM1Nzg0MjAvMzc2MDMwNzE4LTYxODU5MjljLTBhMWEtNDI1MC05NGI4LWQ3NzZhYjBlY2E3Yy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEwJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMFQxNzM5MzFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kNGIwYzRkNzJlM2Q2OWQ3YjM1NWJmM2U4NmRiZTdiODUxOTY3OWRmNDQzZWI2OGEyODUwOTk2ZWViYWRmNWE1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.67R99kiNc601jVvNGTLSmboaZUyv-HgIEPM9yuSwb_E)
![React](https://private-user-images.githubusercontent.com/113578420/376033469-8df53e98-8da1-46fe-8830-e8914b587fb6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDk0NzEsIm5iZiI6MTczOTIwOTE3MSwicGF0aCI6Ii8xMTM1Nzg0MjAvMzc2MDMzNDY5LThkZjUzZTk4LThkYTEtNDZmZS04ODMwLWU4OTE0YjU4N2ZiNi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEwJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMFQxNzM5MzFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1mZDczMjBjMTkyNmRhZDU4MDA5OTRkM2RkMjFlZmY0YmVmZjJlY2Q0OTk2NGZjNDRhZDc4MDg3MWQ5OGJmY2UxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.5mIwNDz8xXRBHNGjksg2IdYiPOsGqxykJ5Hk8wSVfwg)
![React](https://private-user-images.githubusercontent.com/113578420/376033524-187da3cf-ffdc-47ed-beb5-1211146bfa4f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDk0NzEsIm5iZiI6MTczOTIwOTE3MSwicGF0aCI6Ii8xMTM1Nzg0MjAvMzc2MDMzNTI0LTE4N2RhM2NmLWZmZGMtNDdlZC1iZWI1LTEyMTExNDZiZmE0Zi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEwJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMFQxNzM5MzFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iOGJmZjk1MjljMWNmZDRjYTE4NDk0NmQ3MTI0YTI4MzJhZDMzNDgyMWZlMjFlMmUzMWU0MWFkNjYyODQwZTQ1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.L2ooyQ6xddyW_INKPmHNn6vO893n7tFBRBuQb8xGcEk)