Jaekyeong1 / Bullet-Box

๐ŸŒ€ ๋ถˆ๋ ›๋ฐ•์Šค Backend

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

๐Ÿ“ฆ Bullet Box(๋ถˆ๋ › ๋ฐ•์Šค)

๋‚ด๊ฐ€ ์ง์ ‘ ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ๋‚˜๋งŒ์˜ ํˆฌ๋‘ ๋ฆฌ์ŠคํŠธ

20230206_163404

๋ชฉ์ฐจ

  1. ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ
  2. ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ฒ˜
    2-1. ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜
    2-2. ํŒจํ‚ค์ง€ ๊ตฌ์กฐ
  3. ์ฝ”๋“œ ์ปจ๋ฒค์…˜
  4. ERD
  5. API ๋ช…์„ธ
  6. ๊ธฐ์ˆ ์  ์˜์‚ฌ๊ฒฐ์ •
    6-1. builder์˜ privateํ™”/์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ ํ™œ์šฉ
    6-2. FACADE ํŒจํ„ด
    6-3. ๊ณ„์ธต ๋ณ„ DTO ๋ถ„๋ฆฌ

1.ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

ํ•ญํ•ด 10๊ธฐ A๋ฐ˜ 1์กฐ [Bullet Box]

  • ๋ถˆ๋ ›์ €๋„์„ ํ†ตํ•œ ์Šค์ผ€์ค„๋Ÿฌ + ๋‹ค์ด์–ด๋ฆฌ ์„œ๋น„์Šค
  • ๋‹จ์ˆœํžˆ ํ•  ์ผ, ์™„๋ฃŒ๋งŒ ์žˆ๋Š” TODOLIST๊ฐ€ ์•„๋‹Œ ๋‹ค์–‘ํ•œ ์†์„ฑ์„ ๊ฐ€์ง„ TODOLIST
  • ์„œ๋น„์Šค ํ™˜๊ฒฝ: ์›น/๋ชจ๋ฐ”์ผ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค

2.ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ฒ˜

๐Ÿ› ๊ธฐ์ˆ  ์Šคํƒ

Git GitHub GitHubActions SpringBoot AmazonAWS AmazonS3 AmazonRDS AmazonEC2 Gradle SpringSecurity JSONWebTokens MySQL Redis Docker NGINX Swagger Slack Notion

2-1.์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜

์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜

2-2.ํŒจํ‚ค์ง€ ๊ตฌ์กฐ

ํŒจํ‚ค์ง€ ๊ตฌ์กฐ

ํŒจํ‚ค์ง€๊ตฌ์กฐ

3.์ฝ”๋“œ ์ปจ๋ฒค์…˜

4.ERD

ERD

5.API ๋ช…์„ธ

API ๋ช…์„ธ์„œ

20230206_204331

6.๊ธฐ์ˆ ์  ์˜์‚ฌ๊ฒฐ์ •

6-1

builder์˜ privateํ™”/์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ ํ™œ์šฉ

๋ณธ ํ”„๋กœ์ ํŠธ์—์„  ๊ฐ์ฒด ์™ธ๋ถ€์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ƒ์„ฑ์ž ๋Œ€์‹  static ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
static ๋ฉ”์†Œ๋“œ์—์„  Builder๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ด๋•Œ Builder๋Š” Lombok์˜ @Builder ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ๊ตฌํ˜„ํ•˜๋ฉฐ, ์ƒ์„ฑ์ž์™€ Builder๋Š” ๋ชจ๋‘ private์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ ‡๊ธฐ์— ๊ฐ์ฒด ์™ธ๋ถ€์—์„  ํ•ด๋‹น ๊ฐ์ฒด์˜ ์ƒ์„ฑ์ž์™€ Builder๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ ,
์˜ค๋กœ์ง€ static ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Untitled (1)
Builder์™€ ์ƒ์„ฑ์ž์˜ privateํ™”

Untitled (2)
static ๋ฉ”์†Œ๋“œ์—์„œ์˜ Builder ์‚ฌ์šฉ

Untitled (3)
์™ธ๋ถ€์—์„œ static ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ชจ์Šต

Builder๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ ๋•Œ ๊ฐ€๋…์„ฑ์ด ๋†’๊ณ , ์ž‘์„ฑํ•˜๊ธฐ๊ฐ€ ์‰ฝ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ƒ์„ฑ์ž์™€ static ๋ฉ”์†Œ๋“œ์ฒ˜๋Ÿผ ๊ฐ์ฒด์˜ ํ˜•ํƒœ๋ฅผ ๊ฐ•์ œํ•  ์ˆ˜ ์—†๊ธฐ์— ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ Builder๋Š” ๋ณดํ†ต public์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๊ธฐ์— ์™ธ๋ถ€์—์„œ ์ด์ƒํ•œ ํ˜•ํƒœ์˜ ๊ฐ์ฒด๊ฐ€ ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿด ๊ฒฝ์šฐ Builder๊ฐ€ ์–ด๋””์„œ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ธฐ์— ๋””๋ฒ„๊น…ํ•˜๊ธฐ๊ฐ€ ๋”์šฑ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ Builder๋ฅผ private์œผ๋กœ ํ•œ๋‹ค๋ฉด Builder์˜ ์žฅ์ ์€ ์‚ด๋ฆฌ๋ฉด์„œ๋„ ๋‹จ์ ์€ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ˜น์—ฌ๋‚˜ Builder๋กœ ์ธํ•œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋”๋ผ๋„ ํ•ด๋‹น ๊ฐ์ฒด๋งŒ ๋””๋ฒ„๊น…ํ•˜๋ฉด ๋˜๊ธฐ์— ์œ ์ง€/๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

static ๋ฉ”์†Œ๋“œ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ์บก์Šํ™” ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
static ๋ฉ”์†Œ๋“œ์™€ Builder๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๋‚ด๋ถ€ ๊ตฌํ˜„์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ๊ทธ ํŒŒ๊ธ‰ ํšจ๊ณผ๋ฅผ ์ตœ์†Œํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

6-2

FACADE ํŒจํ„ด

๋ณธ ํ”„๋กœ์ ํŠธ์—์„  ๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๊ธฐ์กด Spring ์›น ๊ณ„์ธต์—์„œ Facade ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Untitled (5)

๊ธฐ์กด์—๋Š” Service ๊ณ„์ธต์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์ผ์„ ํ•œ๊บผ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜์˜€๋Š”๋ฐ,
Facade ๊ณ„์ธต์„ ๋„์ž…ํ•˜์—ฌ ๋‘ ์—…๋ฌด๋ฅผ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Facade ๊ณ„์ธต์—์„œ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ƒˆ๋กœ์šด Service ๊ณ„์ธต์—์„œ๋Š” ๋ฐ์ดํ„ฐ ์ ‘๊ทผ๊ณผ ๊ด€๋ จ๋œ ์—…๋ฌด๋งŒ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด Service ๊ณ„์ธต๋งŒ Repository์— ์˜์กดํ•˜๋ฉฐ Controller์™€ Facade ๊ณ„์ธต์—์„œ๋Š” Repository์— ์˜์กดํ•˜์ง€ ์•Š๊ณ ,
Entity๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‘ ๊ณ„์ธต์—์„œ๋Š” ์˜ค๋กœ์ง€ DTO ๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ฐ”๋€ Service ๊ณ„์ธต์—๋Š” ๊ฐ Entity์™€ Repository๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ Service ํด๋ž˜์Šค๋“ค์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
ํ•ด๋‹น ํด๋ž˜์Šค๋“ค์˜ ์ด๋ฆ„์€ ํ•ด๋‹น Entity ์ด๋ฆ„ + Service๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Untitled (6)
Diary Entity๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ DiaryService

Facade ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ์–ป์€ ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. Entity ๋…ธ์ถœ์„ ์ตœ์†Œํ™”ํ•˜์—ฌ Entity ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ๋ฐ ์˜ˆ๋ฐฉํ•ฉ๋‹ˆ๋‹ค.
  2. ์—ฌ๋Ÿฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋“ค์„ ์ƒˆ๋กœ์šด Service ๊ณ„์ธต์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์—ญํ• ์ด ์„ธ๋ถ„ํ™”๋˜์–ด ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’๊ณ , ๊ธฐ์กด๋ณด๋‹ค ์œ ์ง€/๋ณด์ˆ˜๊ฐ€ ์ˆ˜์›”ํ•ด์ง‘๋‹ˆ๋‹ค.

6-3

๊ณ„์ธต ๋ณ„ DTO ๋ถ„๋ฆฌ

6-2์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋“ฏ์ด ์ €ํฌ์˜ ์›น ๊ณ„์ธต์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

Untitled (5)
๋ณธ ํ”„๋กœ์ ํŠธ์—์„  Presentation Layer, Business Layer ์—์„œ ์‚ฌ์šฉํ•˜๋Š” DTO๋“ค์„ ํฌ๊ฒŒ 3์ข…๋ฅ˜๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Untitled (7)

Controller์—์„œ ์™ธ๋ถ€ ์š”์ฒญ์„ ๋ฐ›๊ธฐ ์œ„ํ•œ RequestDto, ์™ธ๋ถ€์— ์‘๋‹ต์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•œ ResponseDto,
Business Layer์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ EntityDto ์ด๋ ‡๊ฒŒ 3 ์ข…๋ฅ˜๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

EntityDto๋Š” ํŠน์ • Entity๋ฅผ ๋Œ€์ฒดํ•˜๋Š” DTO์ด๋ฉฐ, Facade ๊ณ„์ธต์—์„œ ์š”์ฒญ์„ ๋ฐ›๊ฑฐ๋‚˜ ๋ณด๋‚ผ ๋•Œ๋Š” ์ฃผ๋กœ EntityDto๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

DTO๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ์‚ฌ์šฉํ•˜์—ฌ ์–ป๋Š” ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.


  1. Facade ๊ณ„์ธต์— ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋“ค์ด ๋ณดํŽธ์ ์ธ DTO (EntityDto)๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋ฉ”์†Œ๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค.
    ๋˜ํ•œ ๋ณดํŽธ์ ์ธ DTO๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํŒ€์›์ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ์˜ ํ๋ฆ„์„ ์ดํ•ดํ•˜๊ธฐ๊ฐ€ ์‰ฌ์›Œ์ ธ ํ˜‘์—… ๋Šฅ๋ฅ ์ด ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค.
  2. DTO๊ฐ€ ์„ธ๋ถ„ํ™”๋˜์–ด ์žˆ๊ธฐ์— ์œ ์ง€/๋ณด์ˆ˜๊ฐ€ ์ˆ˜์›”ํ•ด์ง‘๋‹ˆ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด Request ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ ํ•ด๋‹น ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ํŒŒ๊ธ‰ ํšจ๊ณผ๋Š” ๋ณดํ†ต Controller ๊ณ„์ธต์—๋งŒ ๋ฏธ์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ‘ฅํŒ€์›์†Œ๊ฐœ

BackEnd

๊น€๋ฏผํ˜ธ
ํ•œ๊ต์ง„
์ „์žฌ๊ฒฝ

About

๐ŸŒ€ ๋ถˆ๋ ›๋ฐ•์Šค Backend


Languages

Language:Java 99.8%Language:Shell 0.2%Language:Dockerfile 0.0%