Skip to content

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

Notifications You must be signed in to change notification settings

HandTris/BE-HandTris

Folders and files

NameName
Last commit message
Last commit date
Jul 3, 2024
Jul 1, 2024
Jun 20, 2024
Jun 17, 2024
Jun 20, 2024
Jul 17, 2024
Jun 24, 2024
Jul 24, 2024
Jul 6, 2024
Jun 17, 2024
Jun 17, 2024
Jun 17, 2024

Repository files navigation

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

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published