Skip to content

Latest commit

ย 

History

History
203 lines (163 loc) ยท 7.77 KB

README.md

File metadata and controls

203 lines (163 loc) ยท 7.77 KB

BE-HandTris

๐Ÿ‘‰ ํ•ธ๋“œ ๋ชจ์…˜ ์บก์ฒ˜๋กœ ์ฆ๊ธฐ๋Š” ์‹ค์‹œ๊ฐ„ 1:1 ๋Œ€๊ฒฐ ํ…ŒํŠธ๋ฆฌ์Šค

ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ณ

แ„’แ…ขแ†ซแ„ƒแ…ณแ„แ…ณแ„…แ…ตแ†จแ„‰แ…ณ_แ„Œแ…ฎแ†ผแ„€แ…กแ†ซแ„‡แ…กแ†ฏแ„‘แ…ญ_แ„‹แ…กแ„แ…ตแ„แ…ฆแ†จแ„Žแ…ฅ

ERD

image

Use Case

image

0. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ, ์–ธ์–ด, ๋„๊ตฌ

  • Intellij
  • Data JPA
  • JDK 21
  • Mysql
  • Redis (Cache DB)
  • Docker
  • Terraform
  • Github Action
  • Junit
  • Mockito
  • Prometheus
  • Grafana
  • PostMan (API Test)

1. ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜

Entity Class

  • ํ•„๋“œ๋ช…์€ ์ „๋ถ€ camelCase ๋กœ ์ž‘์„ฑ
  • Class Name์€ PascalCase ๋กœ ์ž‘์„ฑ

Package Naming

  • Domain ๋ณ„๋กœ ํŒจํ‚ค์ง€๋ฅผ ๋ถ„๋ฆฌํ•œ๋‹ค.
    • ex.) ํšŒ์›, ์ฑ„ํŒ…๋ฐฉ์ด ์กด์žฌํ•œ๋‹ค๋ฉด member,chat๋“ฑ์˜ ํฐ ๋‹จ์œ„์˜ Domain์œผ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค.
  • Controller๋Š” api,Service๋Š” application,Repository๋Š” repo๋กœ Namingํ•˜์—ฌ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ถ„๋ฆฌ
    • Service์˜ ๊ฒฝ์šฐ impl๊ณผ service๋กœ ๋‚˜๋ˆ„์–ด DIP ์ค€์ˆ˜
  • DTO์™€ Entity๋Š” ๋ณ„๋„์˜ ํŒจํ‚ค์ง€์—์„œ ๊ด€๋ฆฌํ•˜๋ฉฐ, DTO๋‚ด๋ถ€๋Š” Request์™€ Response ์šฉ๋„์— ๋”ฐ๋ผ ํŒจํ‚ค์ง€๋ฅผ ๋”ฐ๋กœ ๋‘์–ด ๋ถ„๋ฆฌํ•œ๋‹ค.
    • DTO๋Š” Inner Class ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.
    • Naming์˜ ๊ฒฝ์šฐ MemberDTO์˜ ๊ฒฝ์šฐ, ํšŒ์›๊ฐ€์ž…๊ณผ ์ •๋ณด์กฐํšŒ DTO๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด SignUp,CheckInfo๋กœ ์ •์ •ํ•œ๋‹ค.
  • ex)
root
โ”œโ”€โ”€ README.md
โ”œโ”€โ”€ build
โ”‚ย ย  โ”œโ”€โ”€ classes
โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ java
โ”‚ย ย  โ”‚ย ย      โ””โ”€โ”€ main
โ”‚ย ย  โ”‚ย ย          โ””โ”€โ”€ jungle
โ”‚ย ย  โ”‚ย ย              โ””โ”€โ”€ HandTris
โ”‚ย ย  โ”‚ย ย                  โ”œโ”€โ”€ HandTrisApplication.class
โ”‚ย ย  โ”‚ย ย                  โ”œโ”€โ”€ application
โ”‚ย ย  โ”‚ย ย                  โ”‚ย ย  โ”œโ”€โ”€ impl
โ”‚ย ย  โ”‚ย ย                  โ”‚ย ย  โ””โ”€โ”€ service
โ”‚ย ย  โ”‚ย ย                  โ”œโ”€โ”€ domain
โ”‚ย ย  โ”‚ย ย                  โ”‚ย ย  โ”œโ”€โ”€ exception
โ”‚ย ย  โ”‚ย ย                  โ”‚ย ย  โ””โ”€โ”€ repo
โ”‚ย ย  โ”‚ย ย                  โ”œโ”€โ”€ global
โ”‚ย ย  โ”‚ย ย                  โ”‚ย ย  โ”œโ”€โ”€ config
โ”‚ย ย  โ”‚ย ย                  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ log
โ”‚ย ย  โ”‚ย ย                  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ security
โ”‚ย ย  โ”‚ย ย                  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ ws
โ”‚ย ย  โ”‚ย ย                  โ”‚ย ย  โ”œโ”€โ”€ discord
โ”‚ย ย  โ”‚ย ย                  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ model
โ”‚ย ย  โ”‚ย ย                  โ”‚ย ย  โ”œโ”€โ”€ dto
โ”‚ย ย  โ”‚ย ย                  โ”‚ย ย  โ”œโ”€โ”€ exception
โ”‚ย ย  โ”‚ย ย                  โ”‚ย ย  โ”œโ”€โ”€ filter
โ”‚ย ย  โ”‚ย ย                  โ”‚ย ย  โ”œโ”€โ”€ handler
โ”‚ย ย  โ”‚ย ย                  โ”‚ย ย  โ”œโ”€โ”€ jwt
โ”‚ย ย  โ”‚ย ย                  โ”‚ย ย  โ”œโ”€โ”€ util
โ”‚ย ย  โ”‚ย ย                  โ”‚ย ย  โ””โ”€โ”€ validation
โ”‚ย ย  โ”‚ย ย                  โ””โ”€โ”€ presentation
โ”‚ย ย  โ”‚ย ย                      โ””โ”€โ”€ dto
โ”‚ย ย  โ”‚ย ย                          โ”œโ”€โ”€ request
โ”‚ย ย  โ”‚ย ย                          โ””โ”€โ”€ response
โ”‚ย ย  โ”œโ”€โ”€ resources
โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ main
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ db
โ”‚ย ย  โ”‚ย ย      ย ย  โ””โ”€โ”€ migration
โ”œโ”€โ”€ build.gradle
โ”œโ”€โ”€ docker
โ”‚ย ย  โ”œโ”€โ”€ Dockerfile
โ”‚ย ย  โ”œโ”€โ”€ docker-compose.yml
โ”‚ย ย  โ””โ”€โ”€ monitor
โ”‚ย ย      โ”œโ”€โ”€ grafana
โ”‚ย ย      โ”‚ย ย  โ””โ”€โ”€ dashboards
โ”‚ย ย      โ”‚ย ย      โ””โ”€โ”€ dashboards.yml
โ”‚ย ย      โ””โ”€โ”€ prometheus
โ”‚ย ย          โ””โ”€โ”€ prometheus.yml
โ”œโ”€โ”€ docs
โ”‚ย ย  โ”œโ”€โ”€ API_Documentation.md
โ”‚ย ย  โ”œโ”€โ”€ ERD.md
โ”‚ย ย  โ”œโ”€โ”€ UseCase.md
โ”‚ย ย  โ””โ”€โ”€ images
โ”‚ย ย      โ”œโ”€โ”€ ApiDocumentation.png
โ”‚ย ย      โ”œโ”€โ”€ ERD.png
โ”‚ย ย      โ””โ”€โ”€ UseCase.png
โ”œโ”€โ”€ infra
โ”‚ย ย  โ”œโ”€โ”€ alb.tf
โ”‚ย ย  โ”œโ”€โ”€ ec2.tf
โ”‚ย ย  โ”œโ”€โ”€ handtris.pem
โ”‚ย ย  โ”œโ”€โ”€ network.tf
โ”‚ย ย  โ”œโ”€โ”€ provider.tf
โ”‚ย ย  โ”œโ”€โ”€ rds.tf
โ”‚ย ย  โ”œโ”€โ”€ route.tf
โ”‚ย ย  โ”œโ”€โ”€ variable.tf
โ”‚ย ย  โ””โ”€โ”€ version.tf
โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ resources
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ application-S3.yml
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ application-dev.yml
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ application-jwt.yml
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ application-prod.yml
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ application.yml
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ console-appender.xml
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ db
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ locust_dummy.sql
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ””โ”€โ”€ migration
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย      โ”œโ”€โ”€ V1__init.sql
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย      โ””โ”€โ”€ V2__delete_avg_time_member_record.sql
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ discord-appender.xml
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ logback-dev.xml
โ”‚ย ย  โ”‚ย ย      โ””โ”€โ”€ logback-prod.xml

File Naming

  • YMLํŒŒ์ผ์€ Kebab Case ๋กœ Namingํ•œ๋‹ค.
  • DB ์„ค์ • ๋ฐ ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ์„ค์ •๋“ค์€ application.yml ์— ์ €์žฅํ•˜์—ฌ์ค€๋‹ค.
  • jwt,aws,mail๋“ฑ์„ ๋ณ„๋„์˜ ymlํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ๊ด€๋ฆฌํ•œ๋‹ค.

API ์š”์ฒญ URl

  • ๋™์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • RestFulํ•œ ๋„ค์ด๋ฐ์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ex.) ${domain_name}s/

DB & CI/CD

  • AWS EC2์— ์šด์˜์„œ๋ฒ„๋ฅผ ์šด์˜ํ•˜๋ฉฐ Github Action๊ณผ Docker๋ฅผ ์ด์šฉํ•˜์—ฌ CI/CD๋ฅผ ๊ตฌ์ถ•
  • Mysql DB๋Š” RDS์— ์šด์˜์ค‘์ด๋ฉฐ, ๊ฐ™์€ VPC๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์ ‘๊ทผ๋ถˆ๊ฐ€

2. ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋ฒ•

Organization์—์„œ BackEnd ๋ณ„๋„์˜ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

โš™๏ธ ๋ธŒ๋žœ์น˜ ๊ด€๋ฆฌ ์ „๋žต

โš™๏ธ Git-flow

trunked_base_development

โš™๏ธ ๋ธŒ๋žœ์น˜ ๊ตฌ์„ฑ

  • feat ๋ธŒ๋žœ์น˜๋Š” ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ๋ธŒ๋žœ์น˜์ž…๋‹ˆ๋‹ค. ๋ถ€๋ชจ๋Š”develop์ด๋ฉฐ, ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜๋ฉดdevelop์— mergeํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์€ ๋ณดํ†ตfeature/*์ด ๋ฉ๋‹ˆ๋‹ค.
  • dev ๋ธŒ๋žœ์น˜๋Š” ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋ธŒ๋žœ์น˜์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌfeature๋“ค์ด merge๋˜๋Š” ์žฅ์†Œ์ด๋ฉฐ, ์•„์ง release๋˜์ง€ ์•Š์€ ๊ธฐ๋Šฅ๋“ค์ด ๋ชจ์—ฌ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • main๋ธŒ๋žœ์น˜๋Š” ์‹ค์ œ ์šด์˜ ์ค‘์ธ ์„œ๋น„์Šค์˜ ๋ธŒ๋žœ์น˜์ž…๋‹ˆ๋‹ค.
  • hotfix๋ธŒ๋žœ์น˜๋Š” ์„œ๋น„์Šค์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ•ซํ”ฝ์Šค์— ํ•ด๋‹นํ•˜๋Š” ๋ธŒ๋žœ์น˜์ž…๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ(feature) ๋“ฑ๊ณผ ๋‹ฌ๋ฆฌ ๋น ๋ฅด๊ฒŒ ๋Œ€์ฒ˜ํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—,master๋ธŒ๋žœ์น˜์— ์ง์ ‘ mergeํ•˜๋Š” ์ „๋žต์„ ์ทจํ•ฉ๋‹ˆ๋‹ค.dev๊ณผ์˜ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‚˜์ค‘์— ์ฐจ์ด๋ฅผ mergeํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ›  Git Branch workflow

image

  • Squash and Merge ๋ฐฉ๋ฒ•์„ ์ฐจ์šฉํ•˜์—ฌ Issue,Feature ๋‹จ์œ„ ์ปค๋ฐ‹์„ ํ†ตํ•ด Merge์‹œ ์ง„ํ–‰ ์‚ฌํ•ญ ๊ตฌ์กฐ ์†์‰ฝ๊ฒŒ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉ์ ์œผ๋กœํ•œ๋‹ค.
  • ๊ฐ branch PR์‹œ ์ด์Šˆํ™”ํ•˜์—ฌ ์ฝ”๋“œ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ ๋ฐ ํ† ๋ก  ํ›„ ์ƒ๋Œ€๋ฐฉ์ด Merge

๋ธŒ๋žœ์น˜ ๋„ค์ด๋ฐ

โš™๏ธย ๋„ค์ด๋ฐ ํŒจํ„ด

#์ด์Šˆ๋ฒˆํ˜ธ

Ex) ์ด์Šˆ๋ฒˆํ˜ธ๊ฐ€ 67์ธ '๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ' ์ด์Šˆ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ, ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์„#67๋กœ ์ž‘์„ฑํ•œ๋‹ค.

์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€

โš™ ๋ฉ”์‹œ์ง€ ๊ตฌ์กฐ

Type : ์ œ๋ชฉ #์ด์Šˆ๋ฒˆํ˜ธ

๋ณธ๋ฌธ

**Ex)**์ด์Šˆ๋ฒˆํ˜ธ๊ฐ€ 67์ธ ์ด์Šˆ์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ ๋’ค ์ปค๋ฐ‹์„ ํ•˜๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์˜ ์ œ๋ชฉ์„feat : A๊ธฐ๋Šฅ ๊ตฌํ˜„ #67์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค.

โš™ Type

  • feat : ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ปค๋ฐ‹
  • fix : ๋ฒ„๊ทธ ์ˆ˜์ •์— ๋Œ€ํ•œ ์ปค๋ฐ‹
  • docs : ๋ฌธ์„œ ์ˆ˜์ •์— ๋Œ€ํ•œ ์ปค๋ฐ‹
  • style : ์ฝ”๋“œ ์Šคํƒ€์ผ ํ˜น์€ ํฌ๋งท ๋“ฑ์— ๊ด€ํ•œ ์ปค๋ฐ‹
  • refactor : ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง์— ๋Œ€ํ•œ ์ปค๋ฐ‹
  • test : ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •์— ๋Œ€ํ•œ ์ปค๋ฐ‹
  • chore : ํŒจํ‚ค์ง€ ๊ด€๋ จ ๋ฐ ๋นŒ๋“œ์ฝ”๋“œ ์ˆ˜์ •

3. ์†Œ๊ฐœ ํฌ์Šคํ„ฐ

  • ์‚ฌ์ง„

๊ฐœ๋ฐœ๊ธฐ๊ฐ„

2024 06 20 ~ 2024 07 20