김영명 | 김희빈 | 박세연(PO) | 신재윤 | 홍혁준(SM) | 조셉 | 김훈기 |
---|---|---|---|---|---|---|
DEVELOPER | DEVELOPER | DEVELOPER | DEVELOPER | DEVELOPER | 멘토 | 서브멘토 |
ymkim97 | kmebin | parksey | DevUni | HongDosan | joseph-100 | HunkiKim |
웹툰 서비스
네이버 웹툰을 클론 코딩한 프로젝트 입니다.
저희 조셉팀에서는 멀티모듈을 기반으로 프로젝트를 설계해봤습니다.
도메인은 크게 회원, 결제, 웹툰으로 구성됩니다.
다양한 기능 구현에 초점을 두었다기 보다는
다양한 기술에 도전해보는 것과, 지속적인 리팩토링을 통한 코드 개선에 집중했습니다.
├── 회원
│ ├── 일반(JToon) 로그인
│ ├── 일반(JToon) 회원가입
│ ├── SMTP 기반 이메일 인증
│ └── OAuth 2.0 로그인 및 회원가입
│
├── 결제
│ ├── Portone-Iamport 기반 결제 승인 검증 및 생성
│ ├── Portone-Iamport 기반 결제 취소
│ └── 결제 내역 조회
│
├── 웹툰
│ ├── 웹툰 생성
│ ├── 회차 생성
│ ├── s3 이미지 업로드
│ ├── s3 이미지 삭제
│ ├── 웹툰 리스트 조회
│ ├── 웹툰 정보 조회
│ ├── 회차 리스트 조회
│ ├── 회차 정보 조회
│ └── 회차 구매
![image](https://private-user-images.githubusercontent.com/87688023/270543163-c395838c-bee5-4d51-9b64-256b53c2da3d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMzEwMDgsIm5iZiI6MTczOTAzMDcwOCwicGF0aCI6Ii84NzY4ODAyMy8yNzA1NDMxNjMtYzM5NTgzOGMtYmVlNS00ZDUxLTliNjQtMjU2YjUzYzJkYTNkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDE2MDUwOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTU3NzE3NTVkNzRiMzQxYjIyZjE0OWVhMWJhYzk0NjUxNDgzZmMyMTg0NTA0ZjM2Zjc0YTJhNzRhY2RiZjkxYzQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.R1fqIMtqvIilKfkdXqZAlJP7r5V0cBohgKNbg5Z6C6w)
![image](https://private-user-images.githubusercontent.com/87688023/270543232-e0804bec-2802-437d-ad32-0fcc1e439143.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMzEwMDgsIm5iZiI6MTczOTAzMDcwOCwicGF0aCI6Ii84NzY4ODAyMy8yNzA1NDMyMzItZTA4MDRiZWMtMjgwMi00MzdkLWFkMzItMGZjYzFlNDM5MTQzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDE2MDUwOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRiYzkyNWZjN2EwZmE5NTAxOTc1MDliNTk1MThlMWFiOGFhYTNhZjliODc3ZjE1NzA0ZWJlYmY4OTk0NzFjNDEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.laMlk6Gu0rMzL34YkK0Q5JDjKdA78xwvmPN0oXznZkU)
![image](https://private-user-images.githubusercontent.com/87688023/270570948-ab3963af-5a7b-40bb-9956-417be44d070b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMzEwMDgsIm5iZiI6MTczOTAzMDcwOCwicGF0aCI6Ii84NzY4ODAyMy8yNzA1NzA5NDgtYWIzOTYzYWYtNWE3Yi00MGJiLTk5NTYtNDE3YmU0NGQwNzBiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDE2MDUwOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTU2YWI0MDI0ZjgwZDg1OWVlMzhkNzE3MGM0ZGRmMThhNjdiODJlZDc2YjIyZWY3YTJiNmFmYTQ0NjllZTQ1MGYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.0naZJcPl_C9uyZUfjVKQ7aGTIuZPcuF63k6366AB4Lg)
![image](https://private-user-images.githubusercontent.com/87688023/270563864-4a138a68-e18d-43f5-bbd8-bdf95ffadc16.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMzEwMDgsIm5iZiI6MTczOTAzMDcwOCwicGF0aCI6Ii84NzY4ODAyMy8yNzA1NjM4NjQtNGExMzhhNjgtZTE4ZC00M2Y1LWJiZDgtYmRmOTVmZmFkYzE2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDE2MDUwOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWIzY2VkNGI4ZjZkYzRlM2FlNTRmNWFmNmY2ZmRlYWZiMWIzYzBkODVlNjM0MDZkYTExOTk2MjdmZWRjYTNiOWMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.9lsIHqt1GXIXYZoKMdj8C1WFuWZgPWNQhCVNnWgAjyM)
![image](https://private-user-images.githubusercontent.com/87688023/270548561-03d55a3e-9cdd-471a-b0e4-f6c1c915f97c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMzEwMDgsIm5iZiI6MTczOTAzMDcwOCwicGF0aCI6Ii84NzY4ODAyMy8yNzA1NDg1NjEtMDNkNTVhM2UtOWNkZC00NzFhLWIwZTQtZjZjMWM5MTVmOTdjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDE2MDUwOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTM0YWRiY2ZhODZiYmFhZmE2NTAzNzM1MmM3ZDA0MGMwZjg1ZmJhNGRhOTk2YTM0NmJlZWQwMjgwODAyNDIzMTgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.vbihkvDqM972APr8NHO74LlaHlEXJtkrJhhH1xYieXg)
해당 구조는 우아한 기술 블로그에서 권용근님의 멀티 모듈 설계 이야기를 참고 하였습니다.
├─ ...
├─ module-application
│ └── app-api
│ └── src.main.java.shop.jtoon
│ ├── global
│ ├── member
│ ├── payment
│ ├── security
│ └── webtoon
│
├── module-core
│ └── src.main.java.shop.jtoon
│ ├── util
│ ├── type
│ └── exception
│
├── module-domain
│ ├── domain-member
│ ├── domain-payment
│ ├── domain-webtoon
│ ├── domain-jpa
│ └── domain-redis
│
├── module-internal
│ └── core-web
│ ├── security
│ ├── annotation
│ ├── config
│ └── error
│ ├── iamport-client
│ ├── s3-client
│ └── smtp-client
│
└── settings.gradle
![image](https://private-user-images.githubusercontent.com/87688023/270553816-8ae19f50-9484-49bb-84a8-7097c065fe87.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMzEwMDgsIm5iZiI6MTczOTAzMDcwOCwicGF0aCI6Ii84NzY4ODAyMy8yNzA1NTM4MTYtOGFlMTlmNTAtOTQ4NC00OWJiLTg0YTgtNzA5N2MwNjVmZTg3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDE2MDUwOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTI0MzNmYTVhNjVkNzZhZmExN2QyOWIyMGMwOWY2YjA2M2E4ZmYyMGQ1YWU3MjdjMDQ4MmM0NjAwMmQ5ZTUyNmQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.2CGBcEaIkIFSMprNKzOmyMeFuYTwxAuZ3UKROno217E)
![image](https://private-user-images.githubusercontent.com/87688023/270572055-db950edb-df7a-455f-9980-d95ded1d5b4e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMzEwMDgsIm5iZiI6MTczOTAzMDcwOCwicGF0aCI6Ii84NzY4ODAyMy8yNzA1NzIwNTUtZGI5NTBlZGItZGY3YS00NTVmLTk5ODAtZDk1ZGVkMWQ1YjRlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDE2MDUwOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTI2OGFhYzA5OTg2MzQ5Y2FjZmU4ZTA3OTFkM2I1Y2NhZGM4ZGZmMjI4YjQ1N2FiMmZkYjFiZmQ2NTNkODYyZDkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.MdcVJ150zUJq0HrfzU3bF6Pxh6OAesaxQ4HlVeJ9oIE)
- 기본적으로 Git flow 전략 채택
- JIRA 티켓 발급을 통한 커밋 관리
[JT-1] Commit Name: Commit-Message
- Git convention 노션 링크
- 기본적으로 Naver Code Convention 채택
- 클래스 밑 무조건 한줄 띄우기, Builder 패턴, Validator, Lombok 등 구체적으로 명시
- Code convention 노션 링크