๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Spring

Spring์˜ DI, IoC ์ปจํ…Œ์ด๋„ˆ, ์Šคํ”„๋ง ๊ณ„์ธต๊ตฌ์กฐ

DI, IoC ์ปจํ…Œ์ด๋„ˆ, ์Šคํ”„๋ง ๊ณ„์ธต๊ตฌ์กฐ

์ŠคํŒŒ๋ฅดํƒ€ ์ฝ”๋”ฉ ํด๋Ÿฝ์˜ Spring ์‹ฌํ™”๋ฐ˜ 1์ฃผ ์ฐจ ๋‚ด์šฉ์ธ DI, IoC ์ปจํ…Œ์ด๋„ˆ, ์Šคํ”„๋ง ๊ณ„์ธต๊ตฌ์กฐ์„ ์ •๋ฆฌํ•œ๋‹ค.

ํ•ต์‹ฌ ๋‚ด์šฉ

  • ์Šคํ”„๋ง์˜ ํ•ต์‹ฌ ๊ฐœ๋…์ธ DI์™€ ์Šคํ”„๋ง IoC ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฐœ๋…
  • ์Šคํ”„๋ง์˜ Controller, Service, Repository์˜ ํ•„์š”์„ฑ

DI, IoC

์ค‘๋ณต ์ฝ”๋“œ์™€ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•

DI (์˜์กด์„ฑ ์ฃผ์ž…)

๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•œ ์ƒํƒœ์—์„œ๋Š” ๋ณดํ†ต ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•œ๋‹ค.

์ด๋•Œ, ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์ด๋ฏธ ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ž‘์—…์„ ์˜์กด์„ฑ ์ฃผ์ž…(DI: Dependency Injection)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

IOC (์ œ์–ด์˜ ์—ญ์ „)

์˜์กด์„ฑ ์ฃผ์ž…์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , ์ด๋ฏธ ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์™”๋‹ค.

์ด๋•Œ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์ด ๊ฐ€์ ธ์˜จ ๊ฐ์ฒด๋ฅผ ์–ด๋””์„œ, ์–ด๋– ํ•œ ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๋Š”์ง€ ์•Œ ํ•„์š” ์—†์ด ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ๋‹ค.

์ด์ฒ˜๋Ÿผ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ œ์–ด๋ฅผ ํ•˜๋Š” ํ๋ฆ„์ด ๋’ค๋ฐ”๋€๋‹ค๊ณ  ํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ์ œ์–ด์˜ ์—ญ์ „(IoC: Inversion of Control)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์Šคํ”„๋ง์—์„œ๋Š” ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์Šคํ”„๋ง์ด ์ƒ์„ฑํ•ด ์ฃผ๋Š” ๊ฐ์ฒด์ธ Bean์„ ์Šคํ”„๋ง IoC ์ปจํ…Œ์ด๋„ˆ์— ๋ชจ์•„์„œ ์ œ์–ด์˜ ์—ญ์ „ ์—ญํ• ์„ ํ•ด์ค€๋‹ค.

Controller, Service, Repository

๊ฐ์ฒด์ง€ํ–ฅ

  • ์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ํ”„๋กœ๊ทธ๋žจ์ด ์ฒ˜๋ฆฌํ•  ๋‚ด์šฉ์„ ์ญˆ์šฑ ๋‚˜์—ดํ•ด ๋†“์€ ์ฝ”๋”ฉ ๋ฐฉ์‹
  • ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ํ•˜๋‚˜์˜ ์‚ฌ๋ฌผ(๊ฐ์ฒด)์— ํ•˜๋‚˜์˜ ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•˜๋“ฏ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰(์ฃผ์ œ๋ณ„๋กœ ์ •๋ฆฌ) ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•จ

์Šคํ”„๋ง์€ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™์„ ์ž˜ ์ค€์ˆ˜ํ•˜์—ฌ ์„ค๊ณ„๋˜์—ˆ๊ณ , ์„œ๋ฒ„์—์„œ์˜ ์ฒ˜๋ฆฌ๋ฅผ Controller, Service, Repository 3๊ฐœ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐ๊ฐ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ์„ค๊ณ„๋˜์—ˆ๋‹ค.

Controller

  • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›๋Š”๋‹ค. (์š”์ฒญ Body์˜ JSON์„ ์ž๋ฐ” ๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.)
  • ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋Š” ์„œ๋น„์Šค์—๊ฒŒ ์ „๋‹ดํ•œ๋‹ค. (3๊ณ„์ธต์˜ Service)
  • ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ตํ•ด ์ค€๋‹ค. (์ž๋ฐ” ๊ฐ์ฒด๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•ด ์ค€๋‹ค.)

Service

  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ)์„ ๋‹ด๋‹นํ•œ๋‹ค. (ex. ์š”์ฒญ๋ฐ›์€ DTO๋ฅผ ํ†ตํ•ด DB์— ์ €์žฅํ•  ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ)
  • DB๊ฐ€ ํ•„์š”ํ•œ ์—ญํ• ์€ 3๊ณ„์ธต ์ค‘ Repository์—๊ฒŒ ์ „๋‹ดํ•œ๋‹ค.

Repositroy

  • DB์˜ ์—ฐ๊ฒฐ, ํ•ด์ œ, ์ž์›์„ ๊ด€๋ฆฌํ•œ๋‹ค.
  • DB์˜ CRUD(Create, Read, Update, Delete) ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.