choiyoungkwon12 / Team_DOKEV_GOLDDDUCK_BE

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

재미있는 선물 나눔 서비스, 금나와라뚝딱!

안녕하세요!👋
저희는 프로그래머스 데브코스 1기의 👹도깨비팀입니다
여러분! 혹시 다수의 친구나 지인들에게 선물(ex 기프티콘)을 줄 때 불편했던 경험이 있으신가요?
금나와라뚝딱은 이러한 불편함을 해소하고 재미있게 선물을 전달하기 위해 탄생하였습니다!
전화번호를 몰라도 링크를 알고 있는 누구에게나 선물이 가능하고,
랜덤 또는 선착순인 눈치게임을 통해 게임처럼 재미있게 선물을 나눌 수 있습니다!
지인들에게 재미있는 방식으로 기프티콘과 다양한 메세지들을 선물해보세요!

🎁 서비스 링크         📺 발표 및 시연 영상         🛰 API


목차

1. 프로젝트 소개
2. 팀원 소개
3. 기술 스택 및 협업 도구
4. 협업 규칙
5. 기술 적용
6. 데이터베이스 설계도
7. 패키지 구조


프로젝트 소개

금나와라 뚝딱은 친구들과 선물을 재미있게 나누기 위한 서비스 입니다.
이벤트를 생성한 주최자가 선물을 주고 싶은 사람들에게만 이벤트 링크를 나눠주고, 해당 링크로 접속하여 다양한 게임을 통해 선물을 획득하는 방법으로 진행됩니다.
서비스를 이용하기 위해서는 카카오톡 로그인을 진행한 후 이벤트에 참여하시거나 이벤트를 생성하시면 됩니다.
획득한 선물이나 생성한 이벤트는 오른쪽 상단의 자신의 카카오톡 프로필 사진을 누르면 마이페이지로 이동해 확인할 수 있습니다.


팀원 소개

한맹희 최영권 신언주
Github Github Github

기술 스택 및 협업 도구

🛠 개발 환경

  • Java 11
  • gradle 7
  • Spring Boot 2.5.6
  • JPA, Spring Data Jpa, QueryDSL
  • AWS EC2, S3, RDS(MySQL8)

🪢 협업 도구

  • Notion - 필요한 정보 정리를 위한 도구
  • Gather - 실시간 소통을 위한 도구
  • Slack - 실시간 소통을 위한 도구
  • Jira - 이슈를 관리하기 위한 도구

⚙️ 기타

  • ERD Cloud
  • Postman
  • Mysql WorkBench, DataGrip
  • Github Action
  • Docker

협업 규칙

📜 Rule

  1. 코어 타임에는 슬랙 활성화 및 게더에 접속해있기 (13:00 ~ 19:00)
  2. 프로젝트 진행 중 개발이 힘든 부분은 즉각적으로 해결하기
  3. 매주 주말에 회고 진행하기
  4. 매일 오후 1시에 데일리 스크럼 진행하기
  5. 서로 배려하며 의사소통 열심히 하기

📌 Branch Strategy

Git Workflow 전략

  • 추가적인 규칙
    • 지라 1 티켓 = 1PR 원칙
    • 티켓 마다 feature 브랜치를 생성하고 develop으로 PR을 날립니다.
    • feature 네이밍은 feature/{티켓번호} ex) feature/GD-01
    • 티켓 단위는 최대한 작게
    • Merge시 Squash를 하거나 PR을 올릴때 로컬에서 Squash를 수행해서 commit graph를 최대한 단순하게 유지

📥 Merge Rule

  • PR로만 Merge 가능 + 리뷰 Approval이 2개 이상만 Merge 승인
  • 테스트를 모두 통과해야 Merge가 가능 + 최신 상태의 develop 브랜치에만 Merge 가능

📝 Code Convention


🖍 Commit Message Convention


기술 적용

🌈 서비스 구현

Spring boot

  • 백엔드 서버는 Java를 사용하여 효율적인 프로젝트 진행을 위해 Spring Boot를 활용하였습니다.

Github & Docker

  • 버전 관리 툴로 Git과 Github를 사용했고 GithubActionDocker를 사용해서 CI/CD를 구축하였습니다.

EC2 & S3

  • 교육 과정에서 배운 AWS 클라우드 서비스를 적극 사용하여 백엔드 서버는 EC2로 구축하고 EC2위에 docker를 구동시켜서 EC2 경량화를 했습니다. 또한 선물 이미지를 저장하기 위해 AWS의 S3를 사용하여 이미지를 저장하고 받아오도록 했습니다.

RDS & MySQL & Redis

  • 데이터베이스는 MySQL을 사용하였고 AWS의 RDS를 사용하여 MySQL Server를 구축하였습니다. 동시성 처리를 위해서는 DB의 lock을 사용하여 동시성을 제어했습니다.

📈 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 및 도메인 적용

🌱 협업 도구 활용

Notion

  • 한 주의 계획 정리
  • 프론트엔드와의 회의 내용 기록
  • 한 주의 스프린트 종료 후 회고 기록

Jira

  • 이슈 생성

    • 백로그로 추가된 이슈는 단위를 작게 쪼개서 하위 작업으로 추가
  • 자동화

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

Slack

  • Slack과 Github 레포를 연동하여 새로운 Pull Request 알림

데이터베이스 설계도


패키지 구조

Click!
  **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
  

About


Languages

Language:Java 99.6%Language:Shell 0.4%