2 ๋ถ„ ์†Œ์š”

[10๋ถ„ ํ…Œ์ฝ”ํ†ก] ๐Ÿ‘จโ€๐Ÿ”ง์œ ์•ˆ์˜ Spring IoC/DI ๋ฅผ ์ฝ๊ณ  ์ •๋ฆฌ

์Šคํ”„๋ง์˜ ๋Œ€ ์‚ผ๊ฐํ˜•

  • IoC/DI: Inversion of Control / Dependency Injection
  • AOP: Aspect Oriented Programming
  • PSA : Portable Service Abstraction

IoC/ DI๋ž€

  • ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ทผ๊ฐ„
  • ์˜ค๋ธŒ์ ํŠธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ์˜์กด๊ด€๊ณ„์— ๋Œ€ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ
  • ์œ ์—ฐํ•˜๊ณ  ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ

์œ ์—ฐํ•˜๊ณ  ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚˜๋‹ค

โ‡’ ๋ณ€๊ฒฝ์ด ์žˆ์„ ๋•Œ ์ˆ˜์ •์ด ์‰ฝ๋‹ค

โ‡’ ์ˆ˜์ €ํ•  ๋ถ€๋ถ„๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค

โ‡’ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๊ฐ€ ์ž˜ ์ด๋ฃจ์–ด์กŒ๋‹ค.

์ „๋žตํŒจํ„ด

๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ? ๊ด€๋ จํ•œ ๋งŽ์€ ๋””์ž์ธ ํŒจํ„ด์ด ์žˆ๋‹ค. ๊ทธ์ค‘ ๋Œ€ํ‘œ์ ์ธ ๊ฒƒ์ด ๋ฐ”๋กœ ์ „๋žตํŒจํ„ด

Untitled

MovingStrategy๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ์ด์—๋Œ€ํ•œ ๊ตฌํ˜„์ฒด๋ฅผ ๋”ฐ๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ์›€์ง์ž„์— ๋Œ€ํ•œ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์ž๋™์ฐจ์— ๋Œ€ํ•œ ์ˆ˜์ •์„ ํ•˜์ง€ ์•Š๊ณ  MovingStrategy๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค ํ˜น์€ ๊ตฌํ˜„์ฒด๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.

ํ•˜์ง€๋งŒ ๋‹ค์‹œ ๋Œ์ด์ผœ ์ƒ๊ฐํ•ด๋ณด์ž

Car ๊ฐ์ฒด๋Š” ์Šค์Šค๋กœ ์–ด๋–ค MovingStrategy๋ฅผ ์‚ฌ์šฉํ• ์ง€ ์„ ํƒํ•  ์ˆ˜ ์—†๋‹ค. ์ž์‹ ์ด ์‚ฌ์šฉํ•  MovingStrategy๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๊ณ  ์žˆ์ง€๋„ ์•Š๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ๋ณด๋‹ˆ ์ž์‹ ์ด ์–ด๋–ค MovingStrategy๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž‘๋™์„ ํ•˜๊ฒŒ ๋ ์ง€ ์กฐ์ฐจ Car ๊ฐ์ฒด ์Šค์Šค๋กœ๋„ ๋ชจ๋ฅธ๋‹ค.

์ „๋žตํŒจํ„ด์˜ ์‚ฌ์šฉ์ด ๊ณง ์ œ์–ด๊ฐ€ ์Šค์Šค๋กœ์—๊ฒŒ ์—†์Œ์„ ์•”์‹œํ•œ๋‹ค.

์ œ์–ด๊ถŒ์€ Car ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด์ธ Client์— ์กด์žฌํ•œ๋‹ค.

Client๊ด€์ ์—์„œ์˜ ์ „๋žตํŒจํ„ด

Untitled

Racing์ด๋ผ๋Š” ํด๋ผ์ด์–ธํŠธ ๊ฐ์ฒด์ด๋‹ค. ์—ฌ๊ธฐ์„œ Car ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋ชจ๋“  ์ œ์–ด๋ฅผ ํ•˜๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. Car ๊ฐ์ฒด์— ์–ด๋–ค movingStrategy๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ์ง€ ์ •ํ•ด์„œ ์ƒ์„ฑํ•ด์ฃผ๊ณ  ์žˆ์œผ๋ฉฐ ์–ด๋–ค ํ–‰๋™์„ ํ•  ๊ฒƒ์ธ์ง€(๋ฉ”์†Œ๋“œ์˜ ์‚ฌ์šฉ)๋„ ์ œ์–ดํ•˜๊ณ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์ด ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋Š” ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๊ฐ€ ์ ์ ˆํžˆ ์ด๋ฃจ์–ด์ง„ ์ฝ”๋“œ๋ผ๊ณ  ๋ณด๊ธฐ ํž˜๋“ค๋‹ค. Racing ์ด๋ผ๋Š” ๊ฐ์ฒด์˜ ์ฑ…์ž„์€ Racing์„ ํ•˜๋Š” ๊ฒƒ์ธ์ง€ ์ž๋™์ฐจ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ์ฆ‰ Racing ๊ธฐ๋Šฅ๊ณผ ์ž๋™์ฐจ ์ƒ์„ฑ์˜ ์ฑ…์ž„์ด ์„ž์—ฌ์žˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ œ์–ด์˜ ๋‘ ๊ฐ€์ง€ ๊ด€์ 

์œ„ ์˜ˆ์‹œ์—์„œ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์ œ์–ด์— ๋‘ ๊ฐ€์ง€ ๊ด€์ ์ด ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. Car ์ƒ์„ฑ์— ๋Œ€ํ•œ ์ œ์–ด์˜ ๊ด€์ ๊ณผ Car์˜ ํ—น๋™์—๋Œ€ํ•œ ์ œ์–ด์˜ ๊ด€์  ๋‘๊ฐ€์ง€์ด๋‹ค.

Untitled

์ œ์–ด์˜ ๋‘๊ฐ€์ง€ ๊ด€์ ์„ ์ œ๋„ค๋ฆญํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜์ž๋ฉด ์œ„ ์Šฌ๋ผ์ด๋“œ์™€ ๊ฐ™๋‹ค. Racing ๊ฐ์ฒด๋Š” 2๋ฒˆ ๊ด€์ ์—์„œ์˜ ์ œ์–ด๊ฐ€ ์–ด์šธ๋ฆฌ๋ฉฐ ์ด์— ๋Œ€ํ•œ ์ฑ…์ž„์„ ์ค˜๋„ ๋œ๋‹ค.

ํ•˜์ง€๋งŒ ์ƒ์„ฑ ๊ด€์ ์—์„œ์˜ ์ œ์–ด๋Š” ๋ถ„๋ฆฌ๋˜๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ๋‹ค. โ†’ ํŒฉํ† ๋ฆฌ ํด๋ž˜์Šค์˜ ํ•„์š”์„ฑ!

์˜ค๋ธŒ์ ํŠธ ํŒฉํ† ๋ฆฌ

Untitled

์ด์ œ์•ผ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๊ฐ€ ์ ์ ˆํžˆ ์ด๋ฃจ์–ด์กŒ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋กœ, ์ƒ์„ฑ์— ๋Œ€ํ•œ ์ œ์–ด๊ถŒ์€ CarFactory๊ฐ€ ๋‹ด๋‹นํ•˜๊ฒŒ ๋˜์—ˆ๊ณ ,

๋‘๋ฒˆ์งธ์ธ Car ๊ฐ์ฒด ํ–‰๋™์— ๊ด€ํ•œ ์ œ์–ด๋Š” Racing ๊ฐ์ฒด๊ฐ€ ๋‹ด๋‹นํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค

์ž๋™์ฐจ์˜ ์›€์ง์ž„ ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•˜๊ณ ์‹ถ๋‹ค๋ฉด?

โ†’ Car factory์˜ ์ƒ์„ฑ์ž์— ์›ํ•˜๋Š” MovingStrategy์˜ ๊ตฌํ˜„์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค

Racing ๋ฐฉ์‹์„ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค?

โ†’ ๋ ˆ์ด์‹ฑ ๊ฐ์ฒด์—์„œ ์ž๋™์ฐจ์˜ ํ–‰๋™์— ๋Œ€ํ•œ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.

์Šคํ”„๋ง IOC/DI


์Šคํ”„๋ง์˜ IOC/DI ๊ธฐ๋Šฅ๊ณผ ์œ„์˜ ํŒฉํ† ๋ฆฌ ํด๋ž˜์Šค, ํด๋ผ์ด์–ธํŠธ๋Š” ๊ต‰์žฅํžˆ ์œ ์‚ฌํ•˜๋‹ค.

์–ด๋–ค ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์ƒ์„ฑ๋  ๊ฒƒ์ธ๊ฐ€?

  • ํŒฉํ† ๋ฆฌํด๋ž˜์Šค โ†’ ์Šคํ”„๋ง์˜ ๋นˆ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค.

์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋  ๊ฒƒ์ธ๊ฐ€?

  • ํด๋ผ์ด์–ธํŠธ ํด๋ž˜์Šคโ†’ ์Šคํ”„๋ง ๋‚ด๋ถ€ ์ฝ”๋“œ๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค.

์šฐ๋ฆฌ๋Š” ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ, Controller, Service ๊ทธ๋ฆฌ๊ณ  ๊ฐ์ข… Bean๋“ค์— ๋Œ€ํ•ด ๊ตฌํ˜„์ฒด๋“ค์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์ง€๋งŒ ์ด๊ฒƒ๋“ค์ด ์–ด๋–ป๊ฒŒ ์ƒ์„ฑ๋˜๊ณ  ์–ด๋–ป๊ฒŒ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๋งบ๋Š”์ง€ ์ „๋ถ€ Config ํŒŒ์ผ, ๊ทธ๋ฆฌ๊ณ  ๋นˆ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‹ด๋‹นํ•ด์ฃผ๊ณ  ์žˆ๊ณ  ์šฐ๋ฆฌ๋Š” ํฌ๊ฒŒ ๊ด€์‹ฌ์„ ๊ฐ–์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

++ ์šฐ๋ฆฌ๋Š” ์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ํ˜ธ์ถœ๋˜์–ด์„œ ์–ธ์ œ ๋™์ž‘ํ•˜๋Š”์ง€์— ๊ด€ํ•œ ์ฝ”๋“œ๋Š” ์ž‘์„ฑํ•ด๋ณธ์ ์ด ์—†๋‹ค.(ํด๋ผ์ด์–ธํŠธ ํด๋ž˜์Šค) ๋ชจ๋‘ ์Šคํ”„๋ง์˜ ๋‚ด๋ถ€์ ์ธ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๊ฐ€ ๋‹ด๋‹นํ•ด์ฃผ๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

๊ฒฐ๋ก 

IOC/DI๋Š” ์‚ฌ์‹ค ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์ฝ”๋”ฉ ํŒจํ„ด๋“ค์ด๋‹ค.

๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ์œ ์—ฐํ•˜๊ณ  ํ™•์žฅ์„ฑ์ด ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค๋‹ค ๋ณด๋‹ˆ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์ด๋‹ค.

ํƒœ๊ทธ: ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ