[Springboot] Spring์ด๋ž€?๐ŸŒธ

๋ฐ•์ •ํ˜„ยท2023๋…„ 9์›” 27์ผ
1
post-thumbnail

1. ์Šคํ”„๋ง(Spring)์ด๋ž€?

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ์šฉ Java์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ํŽธํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์˜คํ”ˆ์†Œ์Šค ๊ฒฝ๋Ÿ‰๊ธ‰ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ

(1) Java์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ํŽธํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š”

  • ๊ธฐ์—…์—์„œ ์šด์˜ํ•˜๋Š” ์›น ์„œ๋น„์Šค์—๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด๋ผ๋Š” ๊ฒƒ์ด ์žˆ์Œ
  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด๋ž€, ๊ธฐ์—…์ด ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ์œผ๋กœ ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์‹ค์งˆ์ ์ธ ์ฝ”๋“œ๋“ค์„ ์˜๋ฏธํ•จ
  • ์Šคํ”„๋ง์ด ๋“ฑ์žฅํ•˜๊ธฐ ์ „์—๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๊ธฐ์œ„ํ•œ ๊ธฐ์ˆ  ์ž์ฒด์— ๋Œ€ํ•œ ๊ณต๋ถ€๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ํ•ด์•ผ๋งŒ ํ–ˆ์Œ (๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ธฐ์ˆ ์ด ๋ณต์žกํ•˜๊ณ  ์–ด๋ ค์›€)
  • ์Šคํ”„๋ง์€ ์ด์ „ ๊ธฐ์ˆ ์— ๋น„ํ•ด ์‚ฌ์šฉ๋ฐฉ๋ฒ•์ด ์ƒ๋Œ€์ ์œผ๋กœ ๋œ ๋ณต์žกํ•จ
  • ๊ฐœ๋ฐœ ์ดˆ๊ธฐ์— ๊ธฐ๋ณธ์ ์ธ ์„ค์ •๊ณผ ์ ์šฉ์‹œํ‚ฌ ๊ธฐ์ˆ ๋งŒ ์ž˜ ์„ ํƒํ•œ๋‹ค๋ฉด ๊ธฐ์ˆ ๋ณด๋‹ค๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง ์ž์ฒด์— ๋” ์ง‘์ค‘ํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ /์ƒ‰

(2) ์˜คํ”ˆ์†Œ์Šค

  • ์Šคํ”„๋ง์€ ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฌด๋ฃŒ๋กœ ์—ด๋ ค ์žˆ์Œ
  • ์ฆ‰, ์–ด๋–ค ๊ธฐ์—…๋„ ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜์—ฌ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ณ  ํ•„์š”ํ•˜๋‹ค๋ฉด ์Šคํ”„๋ง์˜ ์ฝ”๋“œ๋ฅผ ์ผ๋ถ€ ์ˆ˜์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Œ
  • ์˜คํ”ˆ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ์ด์ง€๋งŒ, ์•ˆ์ •์ ์ธ ๊ฐœ๋ฐœ๊ณผ ๊ฐœ์„ ์ด ๋ณด์žฅ๋จ

(3) ๊ฒฝ๋Ÿ‰๊ธ‰

  • ์Šคํ”„๋ง์€ ์ˆ˜์‹ญ๊ฐœ์˜ ์„ธ๋ถ€ ๋ชจ๋“ˆ๊ณผ ์ˆ˜์‹ญ๋งŒ์ค„์˜ ๋ฐฉ๋Œ€ํ•œ ์ฝ”๋“œ๋กœ ์ด๋ฃจ์–ด์ง„ ํ”„๋ ˆ์ž„์›Œํฌ โฉ ์™œ ๊ฒฝ๋Ÿ‰๊ธ‰์ด๋ผ๋Š” ๊ฒƒ์ผ๊นŒ?
  • ์Šคํ”„๋ง์„ ์ •์˜ํ•˜๋Š” ๋ฐ ์žˆ์–ด ๊ฒฝ๋Ÿ‰๊ธ‰์ด๋ผ๋Š” ๊ฒƒ์€ ๊ธฐ์กด์— ์Šคํ”„๋ง ๋Œ€์‹  ์‚ฌ์šฉํ•˜๋˜ ๊ธฐ์ˆ ๊ณผ ๋น„๊ตํ•˜์—ฌ, ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•ด์•ผํ•  ์ฝ”๋“œ๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋‹จ์ˆœํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•จ

(4) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ

  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•ด ๋จผ์ € ์•Œ์•„์•ผ ํ•จ

    ํ”„๋ ˆ์ž„์›Œํฌ

    • ์ž๋™์ฐจ๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

    • ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ž๋™์ฐจ๋ฅผ ์†์ˆ˜ ๋งŒ๋“œ๋Š” ๊ฒƒ๋ณด๋‹ค ์ž๋™์ฐจ ์ฐจ์ฒด๋งŒ ๋งŒ๋“œ๋Š” ํšŒ์‚ฌ์—์„œ ๋ถ€ํ’ˆ์„ ์‚ฌ์™€์„œ ๋ถ™์ด๋Š” ๊ฒƒ์ด ๋” ํŽธ๋ฆฌํ•  ๊ฒƒ์ž„

    • ์ฆ‰, ์ž๋™์ฐจ ํšŒ์‚ฌ์—์„œ ๋ฏธ๋ฆฌ ์ž๋™์ฐจ์˜ ์ฐจ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋’€๊ณ , ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋จ

    • ์—ฌ๊ธฐ์„œ ์ž๋™์ฐจ ์ฐจ์ฒด์— ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ์ด ํ”„๋ ˆ์ž„์›Œํฌ์ž„

    • ์›น ๊ฐœ๋ฐœ์— ์žˆ์–ด ํ”„๋ ˆ์ž„์›Œํฌ๋ž€, ์–ด๋– ํ•œ ๋ชฉ์ ์„ ์‰ฝ๊ฒŒ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด๋‹น ๋ชฉ์ ๊ณผ ๊ด€๋ จ๋œ ์ฝ”๋“œ์˜ ๋ผˆ๋Œ€๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋‘” ๊ฒƒ์„ ์˜๋ฏธํ•จ

      ์—ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ

    • ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ํŠน์ • ์—…๋ฌด ๋ถ„์•ผ ํ˜น์€ ํ•˜๋‚˜์˜ ๊ธฐ์ˆ ์„ ์ง‘์ค‘ํ•œ๋‹ค.

    • ์ฆ‰, ์–ด๋– ํ•œ ํŠนํ™”๋œ ๋ชฉ์ ์„ ํŽธ๋ฆฌํ• ๊ฒŒ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ธฐ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง

    • ๋ฐ˜๋ฉด, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ํŠน์ • ์—…๋ฌด ๋ถ„์•ผ ํ˜น์€ ํŠน์ • ๊ธฐ์ˆ ์ด ์•„๋‹ˆ๋ผ, ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ๋ชจ๋“  ๊ณผ์ •์— ์ง‘์ค‘

    • ๋‹ค์‹œ๋งํ•ด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ์— ์žˆ์–ด ํ•„์š”ํ•œ ๋ชจ๋“  ์—…๋ฌด๋ถ„์•ผ ๋ฐ ๊ธฐ์ˆ ๊ณผ ๊ด€๋ จ๋œ ๋ผˆ๋Œ€๋ฅผ ์ œ๊ณตํ•จ


2. ์Šคํ”„๋ง์˜ ํŠน์ง•

(1) POGO ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€ํ–ฅ

  • ์Šคํ”„๋ง์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์ž„
  • POJO๋ž€ Plain Old Java Object. ์ฆ‰, ์ˆœ์ˆ˜ Java๋งŒ์„ ํ†ตํ•ด์„œ ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋ฅผ ์˜๋ฏธ
  • ์ˆœ์ˆ˜ Java๋งŒ์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์€ Java ๋ฐ Java์˜ ์ŠคํŽ™์— ์ •์˜๋œ ๊ธฐ์ˆ ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์˜๋ฏธ
  • ์ฆ‰, ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ์™ธ๋ถ€์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ์™ธ๋ถ€์˜ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ๊ทธ ๊ฐ์ฒด๋Š” POJO๋ผ๊ณ  ํ•  ์ˆ˜ ์—†์Œ
  • POJO๋Š” ๋ง ๊ทธ๋Œ€๋กœ, ๋‹ค๋ฅธ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ์ˆœ์ˆ˜ํ•œ Java๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“  ๊ฐ์ฒด

    POGO์˜ ์žฅ์ 

    • ๋งŒ์•ฝ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ importํ•˜์—ฌ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ€์ •ํ•˜์ž. (POGO๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ)

    • ์ด๋•Œ, ๊ฐ์ฒด๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ธฐ์ˆ ์ด Deprecated(๋”์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ)๋˜๊ฑฐ๋‚˜ ์‹ ๊ธฐ์ˆ ์ด ๋“ฑ์žฅํ•˜๋ฉด ํ•ด๋‹น ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๊ฐ์ฒด๋“ค์˜ ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ๋ฐ”๊ฟ”์ฃผ์–ด์•ผ ํ•จ

    • ๋ฐ˜๋ฉด, POGO๋Š” ์ˆœ์ˆ˜ Java๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“  ๊ฐ์ฒด์ด๋ฏ€๋กœ ํŠน์ • ๊ธฐ์ˆ ์ด๋‚˜ ํ™˜๊ฒฝ์— ์ข…์†๋˜์ง€ ์•Š์Œ

    • ๋”ฐ๋ผ์„œ, ์™ธ๋ถ€ ๊ธฐ์ˆ ์ด๋‚˜ ๊ทœ์•ฝ์˜ ๋ณ€ํ™”์— ์–ฝ๋ฉ”์ด์ง€ ์•Š์•„ ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€ํ™”์™€ ํ™•์žฅ์— ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ์Œ

    • POJO๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋ฉด, ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„๋ฅผ ์ œํ•œ์—†์ด ์ ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฝ”๋“œ๊ฐ€ ๋‹จ์ˆœํ•ด์ € ํ…Œ์ŠคํŠธ์™€ ๋””๋ฒ„๊น… ๋˜ํ•œ ์‰ฌ์›Œ์ง„๋‹ค.

      ๐Ÿ’—์ด์ฒ˜๋Ÿผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ์— POGO๋ฅผ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์„ POGO ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๊ณ  ํ•œ๋‹ค.

3. Spring์ด ์ง€์›ํ•˜๋Š” ๊ธฐ์ˆ 

๐Ÿ’—Spring์ด POJO ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•ด ์ง€์›ํ•˜๋Š” ๊ธฐ์ˆ  IoC/DI, AOP, PSA์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์ž.

  • ์Šคํ”„๋ง์€ IoC/DI(์ œ์–ด์˜ ์—ญ์ „/์˜์กด์„ฑ์ฃผ์ž…), AOP(๊ด€์ ์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ)์„ ํ†ตํ•ด ๋Š์Šจํ•œ ๊ฒฐํ•ฉ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Œ
  • ๋Š์Šจํ•œ ๊ฒฐํ•ฉ์€ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ

(1) IoC (์ œ์–ด์˜ ์—ญ์ „)

  • Java๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์–ธ์–ด์ด๋ฏ€๋กœ ๊ฐ์ฒด๋“ค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ ์ ˆํžˆ ๋งบ์–ด์ฃผ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•จ

๐ŸŸฃ ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ œ์–ด๊ถŒ

  • ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋žจ์„ ์ƒ๊ฐํ•˜๋ฉด ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ(๊ฐ์ฒด์˜ ์ƒ์„ฑ, ์ดˆ๊ธฐํ™”, ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ, ์†Œ๋ฉธ)์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ํ•œ๋‹ค.
    public class A {
    	private B b;
    	// ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐํ™”
    	public A(){
    		b = new B();
    }
    • โ€œA๊ฐ์ฒด๋Š” B๊ฐ์ฒด์—๊ฒŒ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค.โ€๋ผ๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ํ‘œํ˜„
    • ์ฆ‰, ์ œ์–ด๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ด€๋ฆฌ

๐ŸŸฃ ์Šคํ”„๋ง์—์„œ ์ œ์–ด๊ถŒ

  • Spring์—์„œ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์š”๊ตฌํ•˜๋Š”๋Œ€๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ๋‹ค ์ƒ์„ฑํ•˜๊ณ , ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ์†Œ๋ฉธ์‹œํ‚ด
    public class A {
    	@Autowired
    	private B b;
    )
    • @Autowired๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…๋ฐ›์Œ
    • B๊ฐ์ฒด๊ฐ€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—๊ฒŒ ๊ด€๋ฆฌ๋˜๊ณ  ์žˆ๋Š” Bean์ด๋ผ๋ฉด @Autowired๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…๋ฐ›์„ ์ˆ˜ ์žˆ์Œ
    • ์ด๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ง์ ‘ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ฐ์ฒด์— ์ฃผ์ž…์‹œํ‚จ ๊ฒƒ์ž„
    • ์ฆ‰, ์ œ์–ด๊ฐ€ ์—ญ์ „๋œ ๊ฒฝ์šฐ ( ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•ด์•ผ ํ•  ์ œ์–ด๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋Œ€์‹  ํ•ด์ฃผ๊ณ  ์žˆ์Œ)
    • ๊ธฐ์กด์—๋Š” ๊ฐ์ฒด๋ฅผ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์šฉํ–ˆ์ง€๋งŒ IoC๋ฅผ ์ ์šฉํ•˜๋ฉด ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด๋†“์€ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…๋ฐ›์•„ ์‚ฌ์šฉํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋จ

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

  • IoC์—์„œ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด๋†“์€ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ–ˆ์Œ
  • ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•˜์ž.
    • ์—ฌ๊ธฐ์„œ Bํด๋ž˜์Šค๊ฐ€ ๋ณ€๊ฒฝ์ด ๋œ๋‹ค๊ณ  ํ•˜๋ฉด Aํด๋ž˜์Šค์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋ฅผ ์˜์กด์„ฑ์ด๋ผ๊ณ  ํ•จ

๐ŸŸฃ ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์˜์กด์„ฑ ์ฃผ์ž…

  • โ€œA๊ฐ์ฒด๋Š” B๊ฐ์ฒด์—๊ฒŒ ์˜์กดํ•˜๊ณ  ์žˆ๋‹คโ€ new()๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ํ‘œํ˜„
    public class A {
    	private B b;
    	// ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐํ™”
    	public A(){
    		b = new B();
    }
    

๐ŸŸฃ ์Šคํ”„๋ง์—์„œ ์˜์กด์„ฑ์ฃผ์ž…

  • โ€œA๊ฐ์ฒด๋Š” B๊ฐ์ฒด์—๊ฒŒ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค.โ€๋ฅผ @Autowired๋กœ ํ‘œํ˜„
    public class A {
    	@Autowired
    	private B b;
    )
    

- DI(Dependency Injection)๋ž€ ์Šคํ”„๋ง์ด ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ์ฐจ๋ณ„ํ™”๋˜์–ด ์ œ๊ณตํ•˜๋Š” ์˜์กด ๊ด€๊ณ„ ์ฃผ์ž… ๊ธฐ๋Šฅ์œผ๋กœ, **๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์™ธ๋ถ€์—์„œ ์ƒ์„ฑํ•œ ํ›„ ์ฃผ์ž… ์‹œ์ผœ์ฃผ๋Š” ๋ฐฉ์‹**
- ์—ฌ๊ธฐ์„œ ์™ธ๋ถ€๋Š” IoC Container๋ฅผ ์˜๋ฏธ

๐ŸŸฃ IoC Container

์—…๋กœ๋“œ์ค‘..


  • ๊ฐ์ฒดA๋Š” ๋กœ์ง์ด ํ—ˆ์šฉํ•˜๋Š” ํ•œ B, C๋ฅผ ๋งˆ์Œ๋Œ€๋กœ ๊ฐˆ์•„๋ผ์šธ ์ˆ˜ ์žˆ์Œ
  • ์ฆ‰, ์˜์กด๋„์™€ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์•„ ์œ ์—ฐํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ
  • ์Šคํ”„๋ง์—์„œ๋Š” ๊ฐ์ฒด๋ฅผ Bean์ด๋ผ๊ณ  ํ•จ
  • ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์‚ฌ์šฉ์ž๊ฐ€ ์†Œ๋ฉธ์— ๊ด€๋ จ๋œ ์ž‘์—…์„ ์ž๋™์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ด์ฃผ๋Š”๋ฐ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ณณ์„ ์Šคํ”„๋ง์—์„œ Bean์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ํ•จ

(3) AOP (๊ด€์‹ฌ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค์€ ํฌ๊ฒŒ ๊ณตํ†ต๊ด€์‹ฌ์‚ฌํ•ญ๊ณผ ํ•ต์‹ฌ๊ด€์‹ฌ์‚ฌํ•ญ์œผ๋กœ ๋ถ„๋ฅ˜ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•ต์‹ฌ ๊ด€์‹ฌ์‚ฌํ•ญ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ๊ธฐ๋Šฅ๊ณผ ๊ด€๋ จ๋œ ์‚ฌํ•ญ๋“ค์„ ์˜๋ฏธ
  • ๊ณตํ†ต๊ด€์‹ฌ์‚ฌํ•ญ์€ ๋ชจ๋“  ํ•ต์‹ฌ ๊ด€์‹ฌ ์‚ฌํ•ญ์— ๊ณตํ†ต์ ์œผ๋กœ ์ ์šฉ๋˜๋Š” ๊ด€์‚ฌํ•ญ๋“ค์„ ์˜๋ฏธ
  • ํ•ต์‹ฌ๊ด€์‹ฌ์‚ฌํ•ญ๋“ค์— ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉด ๊ณตํ†ต๊ด€์‹ฌ์‚ฌํ•ญ์ด ์ค‘๋ณต ๋  ์ˆ˜ ์žˆ์Œ
  • ๋งŒ์•ฝ ๊ณตํ†ต๊ด€์‹ฌ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋กœ์ง์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๋ชจ๋“  ์ค‘๋ณต์ฝ”๋“œ๋ฅผ ์ฐพ์•„์„œ ์ˆ˜์ •ํ•ด์ฃผ์–ด์•ผ ํ•จ
  • ๋”ฐ๋ผ์„œ ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ๋“ค์„ ๋ณ„๋„์˜ ๊ฐ์ฒด๋กœ ๋ถ„๋ฆฌํ•ด๋‚ธ ๋‹ค์Œ, ๋ถ„๋ฆฌํ•ด๋‚ธ ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ์„ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•จ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋ฐ˜์— ๊ฑธ์ณ ์ ์šฉ๋˜๋Š” ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์œผ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌํ•ด๋‚ด๋Š” ๊ฒƒ์„ AOP(Aspect Oriented Programming, ๊ด€์‹ฌ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)๋ผ๊ณ  ํ•จ

(4) PSA (์ผ๊ด€๋œ ์„œ๋น„์Šค ์ถ”์ƒํ™”)

  • PSA ( Portable Service Abstranction, ์ผ๊ด€๋œ ์„œ๋น„์Šค ์ถ”์ƒํ™”)
  • ์Šคํ”„๋ง์€ Java ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์— ์žˆ์–ด ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ
  • ๋˜ํ•œ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋—„ ์ˆ˜ ์—†๋Š” ์‚ฌ์ด
  • ์›น ์„œ๋ฒ„๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์†Œํ†ตํ•˜๋ฉฐ ์›น ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž„
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ข…๋ฅ˜๋Š” MySQL, Oracle, Maria DB, Mongo DB ๋“ฑ ๋‹ค์–‘ํ•จ
  • ๋งŒ์•ฝ MySQL์„ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ Maria DB๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค๋ฉด ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์ƒˆ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•จ
  • ๊ทธ๋Ÿฌ๋‚˜, ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜๋ฉด ๋™์ผํ•œ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์„ ์œ ์ง€ํ•œ ์ฑ„๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Œ
  • ์Šคํ”„๋ง์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋น„์Šค๋ฅผ ์ถ”์ƒํ™”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅ
  • ์ฆ‰, ์Šคํ”„๋ง์€ Java๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ทœ์ •ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ JDBC(Java DataBase Connectivity)๋ผ๊ณ  ํ•จ.
  • ์ด๋Ÿฌํ•œ JDBC์ฒ˜๋Ÿผ ํŠน์ • ๊ธฐ์ˆ ๊ณผ ๊ด€๋ จ๋œ ์„œ๋น„์Šค๋ฅผ ์ถ”์ƒํ™”ํ•˜์—ฌ ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ ๊ฒƒ์„ PSA(์ผ๊ด€๋œ ์„œ๋น„์Šค์˜ ์ถ”์ƒํ™”)๋ผ๊ณ  ํ•จ

๐Ÿ“š Reference

CODEBLOG, https://www.codestates.com/blog/content/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8 ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

profile
๊ฐœ๋ฐœ์„ ๊ฐœ๋ฐœ๊ดด๋ฐœํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ

0๊ฐœ์˜ ๋Œ“๊ธ€