prgrms-web-devcourse/Team_DOKEV_GOLDDDUCK_BE🛎 프로젝트 설명☑️ 프로젝트 선정 배경👨🏻💻 팀원 소개🚀 기술스택개발 환경협업 툴기타🐮 ERD 설계🏗️ 프로젝트 구조🎁 패키지 구조💌 프로젝트 컨벤션코드 컨벤션Git 컨벤션Git Flow 전략 사용Commit Message 작성 규칙GitHub 컨벤션Jira 컨벤션이슈 생성자동화😈 CI/CDCI : Github ActionCD : Github Action + Docker🔒 보안인증 방법권한 모델https⚡ API
prgrms-web-devcourse/Team_DOKEV_GOLDDDUCK_BE
🛎 프로젝트 설명
저희 도깨비팀의 프로젝트인 금나와라 뚝딱은 이벤트 주최자가 만든 선물을 사용자가 수령하는 서비스 입니다.
☑️ 프로젝트 선정 배경
다수의 친구나 지인들에게 선물(ex 기프티콘)을 줄때 일일히 한명 한명 전달해주거나 전화번호를 물어봐야했던 경험이 있으신가요? 금나와라 뚝딱은 이러한 불편함을 없애고 선물을 편하고 재미있게 전달하면 어떨까? 라는 물음에서 탄생했습니다.
금나와라 뚝딱은 단순히 선물을 지목한 사람에게 주는 형식이 아니라, ‘랜덤’ 또는 ‘선착순(눈치게임)’의 방식을 통해 게임처럼 재미있게 선물을 나눌 수 있는 서비스입니다.
👨🏻💻 팀원 소개
ㅤ | 한맹희 | 최영권 | 신언주 |
역할 | 팀장 | 팀원 | 팀원 |
Github |
🚀 기술스택
개발 환경
- Java 11
- Spring Boot 2.5.6
- JPA, Spring Data JPA, QueryDSL, Spring Data Redis
- AWS EC2, S3, RDS(MySQL8)
- gradle 7
협업 툴
- Notion
- Slack
- Jira
기타
- ERDCloud
- Postman
- Mysql WorkBench, DataGrip
- Github Action
- Docker
🐮 ERD 설계

🏗️ 프로젝트 구조

Spring boot
백엔드 서버는 교육 과정에서 학습한 Java기반의 Spring Boot 애플리케이션으로 제작했습니다.
Github & Docker
버전 관리 툴로 Git과 Github를 사용했고 GithubAction과 Docker를 사용해서 CI/CD를 구축하였습니다.
EC2
교육 과정에서 배운 AWS 클라우드 서비스를 적극 사용하여 백엔드 서버는 EC2로 구축하고 EC2위에 docker를 구동시켜서 EC2 경량화를 시도했고 Spring Boot 서버와 Redis가 동작하도록 했습니다.
또한 선물 이미지를 저장하기 위해 AWS의 S3를 사용하여 이미지를 저장하고 받아오도록 했습니다.
RDS & MySQL & Redis
데이터베이스는 MySQL을 사용하였고 AWS의 RDS를 사용하여 MySQL Server를 구축하였습니다.
동시성 처리를 위해서는 DB의 트랜잭션을 최소화할 필요가 있었고 이를 위해 Redis 서버를 구축하여 메모리 기반의 빠른 처리를 유도 했습니다.
🎁 패키지 구조
gold-Dduck ├─classes └─java ├─main │ └─com │ └─dokev │ └─gold_dduck │ ├─aws │ │ ├─config │ │ └─service │ ├─common │ │ ├─error │ │ ├─exception │ │ └─util │ ├─config │ ├─event │ │ ├─controller │ │ ├─converter │ │ ├─domain │ │ ├─dto │ │ ├─repository │ │ └─service │ ├─gift │ │ ├─controller │ │ ├─converter │ │ ├─domain │ │ ├─dto │ │ ├─repository │ │ └─service │ ├─jwt │ ├─member │ │ ├─controller │ │ ├─converter │ │ ├─domain │ │ ├─dto │ │ ├─repository │ │ └─service │ └─oauth2 └─test └─com └─dokev └─gold_dduck ├─aws │ └─service ├─event │ ├─controller │ ├─repository │ └─service ├─factory ├─gift │ ├─controller │ └─service └─security
💌 프로젝트 컨벤션
코드 컨벤션
Git 컨벤션
Git Flow 전략 사용
특이사항
지라 1 티켓 = 1PR 원칙
- 티켓 마다 feature 브랜치를 생성하고 develop으로 PR
- feature 네이밍은
feature/{티켓번호}
ex) feature/GD-01
- 티켓 단위는 최대한 작게
Merge시 Squash
를 하거나 PR을 올릴때 로컬에서 Squash를 수행해서 commit graph를 최대한 단순하게 유지

Commit Message 작성 규칙
1- ⭐ feat : 새로운 기능에 대한 커밋 2- ⚙️ chore : 그 외 자잘한 수정에 대한 커밋 3- 🐞 fix : 버그 수정에 대한 커밋 4- 📖 docs : 문서 수정에 대한 커밋 5- 💅 style : 코드 스타일 혹은 포맷 등에 관한 커밋 6- ♻️ refactor : 코드 리팩토링에 대한 커밋 7- 🚦 test : 테스트 코드 수정에 대한 커밋 8- 🚀 CI : CI/CD 9- 🔖 Release : 제품 출시 10- 🎉 init : 최초 커밋 11- 🛠️ Config : 환경설정에 대한 커밋 12- 🦔 Revert : 리버트
GitHub 컨벤션
- PR로만 merge 가능 + 리뷰 approval이 2개 이상이여야만 merge 승인
- 테스트를 모두 통과해야 merge가 가능 + 최신 상태의 develop 브랜치에만 merge 가능
Jira 컨벤션
이슈 생성
백로그로 추가된 이슈는 단위를 작게 쪼개서 하위작업으로 추가

자동화
- 깃허브-지라 연동 스마트 커밋 기능 사용
- 에픽의 하위 작업이 완료되면, 상위 작업을 완료로 이동
- 깃허브 PR merge시 이슈 자동 완료 처리


😈 CI/CD
CI : Github Action
java ci with gradle을 사용하여 지속적인 Build 프로세스 체크
CD : Github Action + Docker
Github Action을 사용하여 Docker Image를 생성하고 Docker Hub로 push
그 후 Ec2에서 Docker Image를 pull 받아서 서버를 재실행하도록 구축
🔒 보안
인증 방법
Jwt 토큰 기반의 oauth2 카카오 소셜 로그인 구축
권한 모델
User : Group : Role 구조 채택
https
https 및 도메인 적용