- 백엔드
- Java 21
- SpringBoot 3.2.5
- Spring Data JPA
- Spring Security
- JUnit5
- Gradle
- MySQL8.0
- Docker
- GitHub Actions
- 프론트
- React
기본경로 : main ──> java ──> yjh ──> devtoon
main...
├── devtoon
│ ├── auth
│ ├── bad_words_warning_count
│ ├── comment
│ ├── common
│ ├── cookie_wallet
│ ├── member
│ ├── application
│ ├── constant
│ ├── docs
│ ├── domain
│ ├── dto
│ ├── request
│ ├── response
│ ├── infrastructure
│ ├── presentation
│ ├── payment
│ ├── policy
│ ├── promotion
│ ├── webtoon
│ │
│ ├── DeliveryApplication.java
│
test...
├── devtoon
├── auth
├── bad_words_warning_count
├── comment
├── cookie_wallet
├── member
├── payment
├── policy
├── promotion
├── webtoon
- auth : 인증 도메인을 구현한다.
- bad_words_warning_count : 사용자 비속어 카운트 도메인을 구현한다.
- comment : 댓글 도메인을 구현한다.
- common : 모든 도메인에서 공통적으로 사용하는 기능(설정파일, Entity 공통필드, 예외처리)을 포함한다.
- cookie_wallet : 회원의 쿠키 지갑 도메인을 구현한다.
- member : 회원 도메인을 구현한다.
- payment : 결제 도메인을 구현한다.
- policy : 정책 도메인을 구현한다.
- promotion : 행사 도메인을 구현한다.
- webtoon : 웹툰 도메인을 구현한다.
- 도메인별로 테스트가 정의되어 있다.
- integration : 데이터베이스와 연동된 통합 테스트 작성.
- domain : 도메인별 핵심 비즈니스 로직 단위 테스트 작성.
- back-end 와 front-end 서버를 로컬환경에서 실행시키고 테스트할 수 있습니다.
- 아래의 단계에 따라 로컬환경에서 순차적으로 실행하면 됩니다.
- docker를 컨테이너로 애플리케이션을 실행시키기 때문에 docker가 설치되어 있어야 합니다.
git clone https://github.com/FreakPeople/freak-devtoon-back.git
- 터미널의 프로젝트 최상위 디렉토리에서 아래의 명령어를 실행합니다.
docker-compose up -d
- mac os 환경
./gradlew clean test
- window 환경
gradlew clean test
로그인
POST /v1/auth/authenticate
Request
{
"email" : "string",
"password" : "string"
}
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
웹툰 구독자 회원 등록
POST /v1/members
Request
{
"name" : "string",
"email" : "string",
"password" : "string"
}
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
웹툰 구독자 회원 조회
GET /v1/members/{id}
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
웹툰 구독자 회원 등급 변경
PATCH /v1/members/{id}
Request
{
"membershipStatus" : "string"
}
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
내 정보 조회
GET /v1/members/my
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
웹툰 등록
POST /v1/webtoons
Request
{
"request": {
"title": "string",
"writerName": "string",
"genre": "string"
},
"image": "string"
}
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
웹툰 이미지 조회
GET /v1/webtoons/{id}/images/{fileName}
Response / 200 OK
{
string
}
웹툰 조회
GET /v1/webtoons/{id}
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
웹툰 전체 조회
GET /v1/webtoons
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
인증한 회원이 게시한 웹툰 전체 조회
GET /v1/webtoons/my
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
댓글 등록
POST /v1/comments
Request
{
"webtoonId": 0,
"content": "string"
}
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
댓글 조회
GET /v1/comments/{id}
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
특정 웹툰의 모든 댓글 조회
GET /v1/comments
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
쿠키 지갑 조회
GET /v1/cookie-wallets
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
내 쿠키 지갑 조회
GET /v1/cookie-wallets/my
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
쿠키 증가
PUT /v1/cookie-wallets/increase
Request
{
"quantity": 0
}
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
쿠키 감소
PUT /v1/cookie-wallets/decrease
Request
{
"quantity": 0
}
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
비속어 카운트 조회
GET /v1/bad-words-warning-count
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
비속어 카운트 증가
PUT /v1/bad-words-warning-count/increase
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
내 비속어 카운트 조회
GET /v1/bad-words-warning-count/my
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
웹툰 미리보기 결제
POST /v1/webtoon-payments
Request
{
"memberId": 0,
"webtoonId": 0,
"webtoonDetailId": 0
}
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
특정 회원 웹툰 결제 내역 단건 조회
GET /v1/webtoon-payments/{memberId}
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
쿠키 결제
POST /v1/cookie-payments
Request
{
"getMemberId": 0,
"quantity": 2147483647
}
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
특정 회원 쿠키 결제 내역 단건 조회
GET /v1/cookie-payments/{memberId}
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
프로모션 등록
POST /v1/promotions
Request
{
"description": "string",
"discountType": "CASH_DISCOUNT",
"discountRate": 0,
"discountQuantity": 0,
"isDiscountDuplicatable": true,
"startDate": "2024-07-14T07:10:18.145Z",
"endDate": "2024-07-14T07:10:18.145Z",
"promotionAttributes": [
{
"attributeName": "string",
"attributeValue": "string"
}
]
}
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
프로모션 삭제(종료)
DELETE /v1/promotions/{id}
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
현재 적용 가능한 모든 프로모션 조회
GET /v1/promotions/now
Response / 200 OK
{
"statusMessage": "string",
"data": [
{
"promotionId": 0,
"description": "string",
"discountType": "CASH_DISCOUNT",
"discountRate": 0,
"discountQuantity": 0,
"isDiscountDuplicatable": true,
"startDate": "2024-07-14T07:39:29.607Z",
"endDate": "2024-07-14T07:39:29.607Z"
}
]
}
현재 적용 가능한 프로모션에 포함된 모든 프로모션 속성 조회
GET /v1/promotions/now/{id}
Response / 200 OK
{
"statusMessage": "string",
"data": [
{
"attributeId": 0,
"promotionId": 0,
"attributeName": "string",
"attributeValue": "string"
}
]
}
종료된 모든 프로모션 조회
GET /v1/promotions/ended
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
정책 등록
POST /v1/policies
Request
{
"policyName": "string",
"startDate": "2024-07-14T07:44:07.802Z",
"endDate": "2024-07-14T07:44:07.802Z",
"cookiePrice": 0,
"cookieQuantityPerEpisode": 0,
"warningThreshold": 0
}
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
쿠키 정책 조회
GET /v1/policies/cookie-policy
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
비속어 정책 조회
GET /v1/policies/bad-words-policy
Response / 200 OK
{
"statusMessage" : "string",
"data" : {}
}
회원가입 | 웹툰조회 |
웹툰등록 | 웹툰등록완료 |
댓글조회 | 댓글등록 |
정책 및 프로모션 조회 | 내정보조회 |
✏️ 프로젝트 기획부터 설계까지
✏️ Git 활용하여 자신있게 프로젝트 협업하기
✏️ 다양한 정책을 쉽게 등록하고 삭제하기
✏️ 이제 너만 믿는다, 테스트 코드 작성하기
✏️ 리팩토링 모음.zip
✏️ 리팩토링: 프로모션 조회 설계 개선 및 성능 최적화 도전하기 - 설계 편
✏️ 리팩토링: 프로모션 조회 설계 개선 및 성능 최적화 도전하기 - 성능 최적화 편
✏️ 리팩토링: 쿠키 결제 로직 4단계로 개선하기 (feat. 원시값 포장)
✏️ 스프링 환경에서 비동기 프로그래밍 적용해보기
✏️ CI 적용하기
BackEnd | BackEnd |
---|---|
황유정 | 정지훈 |