๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Project ESG+AI/Tech Basics

์Šคํ”„๋ง(Spring) ๊ธฐ๋ฐ˜ ๋ฐฑ์—”๋“œ ๊ตฌ์กฐ์˜ ์ „๋ฐ˜์ ์ธ ํ๋ฆ„๊ณผ ์—ญํ•  ๊ด€๊ณ„

by GreenJin_S2 2025. 11. 4.

๐Ÿซ ์˜ˆ์‹œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ๊ตฌ์กฐ: "๊ธ‰์‹ ์ฃผ๋ฌธ ์‹œ์Šคํ…œ"

๊ตฌ์„ฑ์š”์†Œํ•˜๋Š” ์ผํ•™๊ต ๊ธ‰์‹ ๋น„์œ 
Controller (์ปจํŠธ๋กค๋Ÿฌ) ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๋ฐ›์Œ ํ•™์ƒ์ด “์˜ค๋Š˜ ์ ์‹ฌ ๋ญ์˜ˆ์š”?” ํ•˜๊ณ  ๋ฌผ์–ด๋ด„
Service (์„œ๋น„์Šค) ์‹ค์ œ ์ผ์„ ์ฒ˜๋ฆฌํ•จ ๊ธ‰์‹์‹ค ์•„์คŒ๋งˆ๊ฐ€ “์˜ค๋Š˜์€ ๊น€์น˜์ฐŒ๊ฐœ๋ž‘ ๋ถˆ๊ณ ๊ธฐ์•ผ~”๋ผ๊ณ  ํ™•์ธ
Repository (๋ ˆํฌ์ง€ํ† ๋ฆฌ) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(DB)์— ์ ‘๊ทผ ๊ธ‰์‹ํ‘œ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์žˆ๋Š” ‘๊ธ‰์‹ํ‘œ ํŒŒ์ผ’์—์„œ ์˜ค๋Š˜ ๋ฉ”๋‰ด๋ฅผ ์ฐพ์•„๋ด„
Entity (์—”ํ‹ฐํ‹ฐ) DB์— ์ €์žฅ๋˜๋Š” ์ง„์งœ ๋ฐ์ดํ„ฐ ํ˜•ํƒœ ๊ธ‰์‹ํ‘œ์— “11์›” 4์ผ - ๊น€์น˜์ฐŒ๊ฐœ, ๋ถˆ๊ณ ๊ธฐ” ์ด๋ ‡๊ฒŒ ์ ํžŒ ์‹ค์ œ ๋ฐ์ดํ„ฐ
DTO (๋ฐ์ดํ„ฐ ์ „์†ก์šฉ) Controller ↔ Service ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์šฉ ์•„์คŒ๋งˆ๊ฐ€ ๋ฉ”๋‰ด๋ฅผ ์ข…์ด์— ์จ์„œ ์„ ์ƒ๋‹˜๊ป˜ ๋ณด์—ฌ์ฃผ๋Š” ์ „๋‹ฌ ์ชฝ์ง€
VO (๊ฐ’ ๊ฐ์ฒด) ์˜๋ฏธ ์žˆ๋Š” ๊ฐ’๋งŒ ๋‹ด๋Š” ๊ฐ์ฒด ์˜ˆ: ๊ฐ€๊ฒฉ, ์ฃผ์†Œ, ๋‚ ์งœ ๊ฐ™์€ ‘ํ•œ ๋ฉ์–ด๋ฆฌ์˜ ์ •๋ณด’
application.yml ์ „์ฒด ์„ค์ • ํŒŒ์ผ “์˜ค๋Š˜์€ 8์‹œ๋ถ€ํ„ฐ ๊ธ‰์‹ ์‹œ์ž‘, ๋ถˆ ๋„๊ธฐ ์‹œ๊ฐ„ 9์‹œ” ๊ฐ™์€ ์šด์˜ ๊ทœ์น™ํ‘œ
HomeController ํ™ˆํŽ˜์ด์ง€ ๊ฐ™์€ ๊ธฐ๋ณธ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•™๊ต ์ •๋ฌธ – “์–ด์„œ ์˜ค์„ธ์š”!” ์—ญํ• 
Messenger (๋ฉ”์‹ ์ €) ์„œ๋ฒ„๋ผ๋ฆฌ, ํ˜น์€ ์‹ค์‹œ๊ฐ„ ๋Œ€ํ™”์šฉ “์„ ์ƒ๋‹˜, ๋ฐ˜ 3๊ฐœ๊ฐ€ ๋” ์ฃผ๋ฌธํ–ˆ์–ด์š”!”๋ผ๊ณ  ๋‹ค๋ฅธ ๋ถ€์„œ์— ์•Œ๋ฆผ ๋ณด๋‚ด๊ธฐ

 

๐Ÿง  ์‰ฝ๊ฒŒ ๊ธฐ์–ตํ•˜๋Š” ๋ฐฉ๋ฒ•

  • Controller → “๋ง์„ ๋“ค์–ด์ฃผ๋Š” ์‚ฌ๋žŒ”
  • Service → “์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์‚ฌ๋žŒ”
  • Repository → “์ž๋ฃŒ๋ฅผ ๊บผ๋‚ด์˜ค๋Š” ์‚ฌ๋žŒ”
  • Entity → “์ง„์งœ ๋ฐ์ดํ„ฐ”
  • DTO → “๋ฐ์ดํ„ฐ ์ „๋‹ฌ ์ชฝ์ง€”
  • VO → “ํ•œ ๋ฉ์–ด๋ฆฌ ๊ฐ’”
  • application.yml → “์„ค์ •ํ‘œ”
  • Messenger → “๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์•Œ๋ฆผ ๋ณด๋‚ด๋Š” ๋ฉ”์‹ ์ €”
  • HomeController → “์ž…๊ตฌ(ํ™ˆํŽ˜์ด์ง€)”


์ „์ฒด ๊ฐœ๋… ์š”์•ฝ

์Šคํ”„๋ง(Spring) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ณดํ†ต ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ ˆ์ด์–ด(layer) ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค:

 
Controller → Service → Repository → Database
                     
                   DTO/VO/Entity

 

๊ทธ๋ฆฌ๊ณ  application.yml์€ ์„ค์ • ํŒŒ์ผ, Messenger๋‚˜ HomeController๋Š” ํŠน์ • ๊ธฐ๋Šฅ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ดํ•ดํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿงฉ ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ ์—ญํ• ๊ณผ ๊ด€๊ณ„

1๏ธโƒฃ Controller (์ปจํŠธ๋กค๋Ÿฌ)

  • ์—ญํ• : ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ(Request)์„ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๊ณ , ์‘๋‹ต(Response)์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ: /home, /api/message ๊ฐ™์€ URL ์š”์ฒญ์„ ๋ฐ›์Œ
  • ํ๋ฆ„:
    • ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ €๋‚˜ ์•ฑ์—์„œ ์š”์ฒญ → ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ฐ›์Œ
    • ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ DTO๋กœ ๋งคํ•‘
    • Service ํ˜ธ์ถœ → ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์‘๋‹ต์œผ๋กœ ๋ฐ˜ํ™˜


2๏ธโƒฃ DTO (Data Transfer Object)

  • ์—ญํ• : ํด๋ผ์ด์–ธํŠธ ↔ ์„œ๋ฒ„ ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์šฉ ๊ฐ์ฒด
  • ํŠน์ง•: DB ์—”ํ‹ฐํ‹ฐ(Entity)์™€๋Š” ๋ณ„๋„.
  • ์ด์œ : ๋ณด์•ˆ ๋ฐ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์œ„ํ•ด DB ๋ชจ๋ธ์„ ๊ทธ๋Œ€๋กœ ๋…ธ์ถœํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•จ.

3๏ธโƒฃ VO (Value Object)

  • ์—ญํ• : “๊ฐ’ ๊ทธ ์ž์ฒด๋กœ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ๊ฐ์ฒด”
  • ์˜ˆ์‹œ: Money, Address, Email ๊ฐ™์€ ๋ถˆ๋ณ€ ๊ฐ์ฒด
  • ์ฐจ์ด์ : DTO๋Š” “๋ฐ์ดํ„ฐ ์ „๋‹ฌ์šฉ”, VO๋Š” “์˜๋ฏธ ์žˆ๋Š” ๊ฐ’ ํ‘œํ˜„์šฉ”

4๏ธโƒฃ Entity

  • ์—ญํ• : ์‹ค์ œ DB ํ…Œ์ด๋ธ”๊ณผ 1:1 ๋งคํ•‘๋˜๋Š” ๊ฐ์ฒด
  • ์˜ˆ์‹œ: @Entity ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค
  • DTO์™€์˜ ์ฐจ์ด: Entity๋Š” DB์šฉ, DTO๋Š” ํ†ต์‹ ์šฉ
 


5๏ธโƒฃ Service (์„œ๋น„์Šค)

  • ์—ญํ• : ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ณ„์ธต
  • ํ๋ฆ„: ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฐ›์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
 


6๏ธโƒฃ Repository (๋ ˆํฌ์ง€ํ† ๋ฆฌ)

  • ์—ญํ• : ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๋Š” ๊ณ„์ธต
  • ํ๋ฆ„: Service → Repository → DB


7๏ธโƒฃ Messenger (๋ฉ”์‹ ์ €, ์˜ˆ: Kafka, RabbitMQ, WebSocket)

  • ์—ญํ• : ์„œ๋ฒ„ ๊ฐ„ ๋ฉ”์‹œ์ง€ ์†ก์ˆ˜์‹  or ์‹ค์‹œ๊ฐ„ ํ†ต์‹  ์ฒ˜๋ฆฌ
  • ์œ„์น˜: Service ๋‹จ ๋˜๋Š” ๋ณ„๋„ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—์„œ ์‚ฌ์šฉ๋จ

๐Ÿ“ํ๋ฆ„ ์˜ˆ์‹œ

 
Controller → Service → (DB ์ €์žฅ + ๋ฉ”์‹œ์ง€ ๋ฐœํ–‰)
 

8๏ธโƒฃ HomeController

  • ์—ญํ• : ํ™ˆ ํ™”๋ฉด์ด๋‚˜ ๊ธฐ๋ณธ ๊ฒฝ๋กœ(/) ์ฒ˜๋ฆฌ์šฉ ์ปจํŠธ๋กค๋Ÿฌ
  • ๋ณดํ†ต: ํŽ˜์ด์ง€ ๋ฐ˜ํ™˜(view) ํ˜น์€ ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ์ „์†ก ๋‹ด๋‹น

9๏ธโƒฃ application.yml

  • ์—ญํ• : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์—ญ ์„ค์ • ํŒŒ์ผ
  • ์˜ˆ: DB ์—ฐ๊ฒฐ ์ •๋ณด, ํฌํŠธ ๋ฒˆํ˜ธ, ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ์„ค์ •, ๋กœ๊ทธ ์„ค์ • ๋“ฑ
 

๐Ÿ” ์ „์ฒด ํ๋ฆ„ ์š”์•ฝ ๋‹ค์ด์–ด๊ทธ๋žจ

 
[Client] ↓ (HTTP ์š”์ฒญ) [Controller] ↓ (DTO ๋ณ€ํ™˜) [Service] ↓ (๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง) [Repository][Database] ↑ (Entity ์ €์žฅ/์กฐํšŒ) [Service][Controller] ↑ (์‘๋‹ต DTO) [Client]

โš™๏ธ application.yml์€ ์ด ๋ชจ๋“  ๋™์ž‘์„ ์œ„ํ•œ ํ™˜๊ฒฝ ์„ค์ •์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
๐Ÿ’ฌ Messenger๋Š” ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์ด๋‚˜ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ์šฉ์œผ๋กœ ์ค‘๊ฐ„์— ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 


๐Ÿซ ์˜ˆ์‹œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ๊ตฌ์กฐ: "๊ธ‰์‹ ์ฃผ๋ฌธ ์‹œ์Šคํ…œ"

๊ตฌ์„ฑ์š”์†Œํ•˜๋Š” ์ผํ•™๊ต ๊ธ‰์‹ ๋น„์œ 
Controller (์ปจํŠธ๋กค๋Ÿฌ) ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๋ฐ›์Œ ํ•™์ƒ์ด “์˜ค๋Š˜ ์ ์‹ฌ ๋ญ์˜ˆ์š”?” ํ•˜๊ณ  ๋ฌผ์–ด๋ด„
Service (์„œ๋น„์Šค) ์‹ค์ œ ์ผ์„ ์ฒ˜๋ฆฌํ•จ ๊ธ‰์‹์‹ค ์•„์คŒ๋งˆ๊ฐ€ “์˜ค๋Š˜์€ ๊น€์น˜์ฐŒ๊ฐœ๋ž‘ ๋ถˆ๊ณ ๊ธฐ์•ผ~”๋ผ๊ณ  ํ™•์ธ
Repository (๋ ˆํฌ์ง€ํ† ๋ฆฌ) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(DB)์— ์ ‘๊ทผ ๊ธ‰์‹ํ‘œ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์žˆ๋Š” ‘๊ธ‰์‹ํ‘œ ํŒŒ์ผ’์—์„œ ์˜ค๋Š˜ ๋ฉ”๋‰ด๋ฅผ ์ฐพ์•„๋ด„
Entity (์—”ํ‹ฐํ‹ฐ) DB์— ์ €์žฅ๋˜๋Š” ์ง„์งœ ๋ฐ์ดํ„ฐ ํ˜•ํƒœ ๊ธ‰์‹ํ‘œ์— “11์›” 4์ผ - ๊น€์น˜์ฐŒ๊ฐœ, ๋ถˆ๊ณ ๊ธฐ” ์ด๋ ‡๊ฒŒ ์ ํžŒ ์‹ค์ œ ๋ฐ์ดํ„ฐ
DTO (๋ฐ์ดํ„ฐ ์ „์†ก์šฉ) Controller ↔ Service ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์šฉ ์•„์คŒ๋งˆ๊ฐ€ ๋ฉ”๋‰ด๋ฅผ ์ข…์ด์— ์จ์„œ ์„ ์ƒ๋‹˜๊ป˜ ๋ณด์—ฌ์ฃผ๋Š” ์ „๋‹ฌ ์ชฝ์ง€
VO (๊ฐ’ ๊ฐ์ฒด) ์˜๋ฏธ ์žˆ๋Š” ๊ฐ’๋งŒ ๋‹ด๋Š” ๊ฐ์ฒด ์˜ˆ: ๊ฐ€๊ฒฉ, ์ฃผ์†Œ, ๋‚ ์งœ ๊ฐ™์€ ‘ํ•œ ๋ฉ์–ด๋ฆฌ์˜ ์ •๋ณด’
application.yml ์ „์ฒด ์„ค์ • ํŒŒ์ผ “์˜ค๋Š˜์€ 8์‹œ๋ถ€ํ„ฐ ๊ธ‰์‹ ์‹œ์ž‘, ๋ถˆ ๋„๊ธฐ ์‹œ๊ฐ„ 9์‹œ” ๊ฐ™์€ ์šด์˜ ๊ทœ์น™ํ‘œ
HomeController ํ™ˆํŽ˜์ด์ง€ ๊ฐ™์€ ๊ธฐ๋ณธ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ํ•™๊ต ์ •๋ฌธ – “์–ด์„œ ์˜ค์„ธ์š”!” ์—ญํ• 
Messenger (๋ฉ”์‹ ์ €) ์„œ๋ฒ„๋ผ๋ฆฌ, ํ˜น์€ ์‹ค์‹œ๊ฐ„ ๋Œ€ํ™”์šฉ “์„ ์ƒ๋‹˜, ๋ฐ˜ 3๊ฐœ๊ฐ€ ๋” ์ฃผ๋ฌธํ–ˆ์–ด์š”!”๋ผ๊ณ  ๋‹ค๋ฅธ ๋ถ€์„œ์— ์•Œ๋ฆผ ๋ณด๋‚ด๊ธฐ

 

 

 

๐Ÿง  ์‰ฝ๊ฒŒ ๊ธฐ์–ตํ•˜๋Š” ๋ฐฉ๋ฒ•

  • Controller → “๋ง์„ ๋“ค์–ด์ฃผ๋Š” ์‚ฌ๋žŒ”
  • Service → “์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์‚ฌ๋žŒ”
  • Repository → “์ž๋ฃŒ๋ฅผ ๊บผ๋‚ด์˜ค๋Š” ์‚ฌ๋žŒ”
  • Entity → “์ง„์งœ ๋ฐ์ดํ„ฐ”
  • DTO → “๋ฐ์ดํ„ฐ ์ „๋‹ฌ ์ชฝ์ง€”
  • VO → “ํ•œ ๋ฉ์–ด๋ฆฌ ๊ฐ’”
  • application.yml → “์„ค์ •ํ‘œ”
  • Messenger → “๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์•Œ๋ฆผ ๋ณด๋‚ด๋Š” ๋ฉ”์‹ ์ €”
  • HomeController → “์ž…๊ตฌ(ํ™ˆํŽ˜์ด์ง€)”

 


1. โš™๏ธ ์ปจํŠธ๋กค๋Ÿฌ (Controller)

  • ์—ญํ• : ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ(Request)์„ ๋ฐ›์•„๋“ค์ด๊ณ  ์‘๋‹ต(Response)์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ตœ์ƒ์œ„ ์ง„์ž…์ ์ž…๋‹ˆ๋‹ค.
  • ์ฃผ์š” ์ฑ…์ž„:
    • HTTP ์š”์ฒญ(GET, POST, PUT, DELETE ๋“ฑ)์„ ์ ์ ˆํžˆ ๋งคํ•‘ํ•˜๊ณ  ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.
    • ์š”์ฒญ์˜ ์œ ํšจ์„ฑ์„ ๊ฐ„๋‹จํžˆ ๊ฒ€์ฆํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ DTO(Data Transfer Object) ๋“ฑ์˜ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    • ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ๋Š” ์„œ๋น„์Šค ๊ณ„์ธต์— ์œ„์ž„ํ•ฉ๋‹ˆ๋‹ค.
    • ์„œ๋น„์Šค ๊ณ„์ธต์œผ๋กœ๋ถ€ํ„ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„ ์‚ฌ์šฉ์ž์—๊ฒŒ HTTP ์‘๋‹ต์œผ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ํŠน์ง•: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์™ธ๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค ์—ญํ• ์„ ํ•˜๋ฉฐ, ๊ฐ€๋ฒผ์šด ์—ญํ• (Thin Controller)์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

2. ๐Ÿ›ก๏ธ ์„œ๋น„์Šค (Service)

  • ์—ญํ• : ํ•ต์‹ฌ์ ์ธ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(Business Logic)์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณ„์ธต์ž…๋‹ˆ๋‹ค.
  • ์ฃผ์š” ์ฑ…์ž„:
    • ๋ฐ์ดํ„ฐ์˜ ๊ฐ€๊ณต, ๊ณ„์‚ฐ, ๊ทœ์น™ ์ ์šฉ ๋“ฑ ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ์—ฌ๋Ÿฌ ๋ ˆํฌ์ง€ํ† ๋ฆฌ(Repository)๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ๋ณต์žกํ•œ ํŠธ๋žœ์žญ์…˜์„ ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜ ์—ฌ๋Ÿฌ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • ์ปจํŠธ๋กค๋Ÿฌ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ์— ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ํŠน์ง•: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹ฌ์žฅ๋ถ€์ด๋ฉฐ, ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์‚ฌ์ด์—์„œ ์ค‘์žฌ์ž ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ '์™œ'์™€ '์–ด๋–ป๊ฒŒ'์— ๋Œ€ํ•œ ๋กœ์ง์ด ์—ฌ๊ธฐ์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

3. ๐Ÿ“‚ ๋ ˆํฌ์ง€ํ† ๋ฆฌ (Repository)

  • ์—ญํ• : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(DB)์™€์˜ ํ†ต์‹ ์„ ์ „๋‹ดํ•˜๋Š” ๊ณ„์ธต์ž…๋‹ˆ๋‹ค.
  •      ์ฃผ์š” ์ฑ…์ž„:
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜์—ฌ CRUD (Create, Read, Update, Delete) ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • SQL ์ฟผ๋ฆฌ๋‚˜ ORM(Object-Relational Mapping) ๋ฉ”์†Œ๋“œ ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ, ์ €์žฅ, ์ˆ˜์ •, ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
    • ์„œ๋น„์Šค ๊ณ„์ธต์—๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜์—ฌ, ์„œ๋น„์Šค ๊ณ„์ธต์ด ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋ฐฉ์‹(DB ์ข…๋ฅ˜ ๋“ฑ)์— ๋Œ€ํ•ด ์•Œ ํ•„์š” ์—†๋„๋ก ์ถ”์ƒํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ํŠน์ง•: ๋ฐ์ดํ„ฐ ์˜์†์„ฑ(Persistence)์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ ๊ธฐ์ˆ ์ด ๋ณ€๊ฒฝ๋˜์–ด๋„ ์„œ๋น„์Šค ๊ณ„์ธต์— ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.

4. ๐Ÿ“ ์—”ํ‹ฐํ‹ฐ (Entity)

  • ์—ญํ• : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”๊ณผ 1:1๋กœ ๋งคํ•‘๋˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ž์ฒด๋ฅผ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฃผ์š” ์ฑ…์ž„:
    • ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค (ํ•„๋“œ, ๋ฐ์ดํ„ฐ ํƒ€์ž…).
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ **๋ ˆ์ฝ”๋“œ(row)**๋ฅผ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์ตœ์†Œํ•œ์˜ ๋กœ์ง(์˜ˆ: ๊ฐ’ ๊ฒ€์ฆ)์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ์„œ๋น„์Šค ๊ณ„์ธต์— ๋‘๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.
  • ํŠน์ง•: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์ด๋ฉฐ, ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ(Persistence Context, ORM ์‚ฌ์šฉ ์‹œ)์— ์˜ํ•ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ—บ๏ธ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์š”์•ฝ

์ด ๋„ค ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋ณดํ†ต ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž ์š”์ฒญ (HTTP) $\rightarrow$ ์ปจํŠธ๋กค๋Ÿฌ (์š”์ฒญ ์ˆ˜์‹  ๋ฐ ์œ ํšจ์„ฑ ๊ฒ€์ฆ)
  2. ์ปจํŠธ๋กค๋Ÿฌ $\rightarrow$ ์„œ๋น„์Šค (๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ ์œ„์ž„)
  3. ์„œ๋น„์Šค $\rightarrow$ ๋ ˆํฌ์ง€ํ† ๋ฆฌ (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ ์š”์ฒญ)
  4. ๋ ˆํฌ์ง€ํ† ๋ฆฌ $\rightarrow$ ์—”ํ‹ฐํ‹ฐ (DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉ)
  5. ๋ ˆํฌ์ง€ํ† ๋ฆฌ $\rightarrow$ ์„œ๋น„์Šค (์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด ๋ฐ˜ํ™˜)
  6. ์„œ๋น„์Šค $\rightarrow$ ์ปจํŠธ๋กค๋Ÿฌ (์ตœ์ข… ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜)
  7. ์ปจํŠธ๋กค๋Ÿฌ $\rightarrow$ ์‚ฌ์šฉ์ž ์‘๋‹ต (JSON/HTML ๋“ฑ)