๐ŸŒˆ [Section2] 16. Spring Framework ๊ธฐ๋ณธ 1

ํ˜„์ฃผยท2022๋…„ 10์›” 12์ผ
0

bootcamp

๋ชฉ๋ก ๋ณด๊ธฐ
35/71

๐Ÿ“• ์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ!

  • Framework
  • Framework vs Library
  • Spring Framework
  • Spring Triangle / POJO
  • Spring Framework์˜ 3๋Œ€ ํ•ต์‹ฌ ๊ฐœ๋…

โœ๏ธ Framework

  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์–ด๋– ํ•œ ํ‹€, ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ
    Ex. Java์—์„œ์˜ Collection
    โžœ Map, Set, List์™€ ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ทธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„์ฒด๋“ค์˜ ์ง‘ํ•ฉ
    ( ๊ทธ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” ๊ตฌํ˜„์ฒด๋“ค์„ ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ์Œ )

โœ” ์žฅ์ 

  • ํšจ์œจ์ ์ธ ์ฝ”๋“œ ์ž‘์„ฑ ๊ฐ€๋Šฅ
    โžœ Framework๊ฐ€ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜•ํƒœ๋กœ ์ œ๊ณต
    ( ๊ฐœ๋ฐœ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ๋กœ์ง ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ )

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

  • ๊ธฐ๋ณธ์ ์ด ์„ค๊ณ„์™€ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ œ๊ณตํ•ด ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ

  • ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ ๋†’๊ณ , ํ™•์žฅ์„ฑ ์ข‹์Œ

โœ” ๋‹จ์ 

  • ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” Framework์˜ ๊ทœ์•ฝ๋“ค์„ ํ•™์Šตํ•  ์‹œ๊ฐ„ ํ•„์š” ( ๋Ÿฌ๋‹์ปค๋ธŒ ์กด์žฌ )

  • ์ž์œ ๋กญ๊ณ  ์œ ์—ฐํ•œ ๊ฐœ๋ฐœ ์–ด๋ ค์›€
    โžœ Framework์˜ ๊ทœ์•ฝ์„ ๋ฒ—์–ด๋‚˜๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฏธ ๋งŒ๋“  ๊ตฌ์กฐ ์ž์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ, ๋งŒ๋“  ๊ฒƒ๋“ค์„ ๋ชจ๋‘ ํ—ˆ๋ฌผ๊ณ  ์ƒˆ๋กญ๊ฒŒ ๊ตฌ์กฐ๋ถ€ํ„ฐ ๋‹ค์‹œ ์งœ์•ผํ•จ

โœ๏ธ Framework vs Library

โœ” Library

  • ๋„์„œ๊ด€์— ์ฑ…๋“ค์„ ๋ชจ์•„๋‘” ๊ฒƒ ์ฒ˜๋Ÿผ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋‘์–ด ์ œ๊ณตํ•˜๋Š” ๊ฒƒ

  • ๊ตฌ์กฐ ์•ˆ์˜ ์š”์†Œ๋“ค์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” ๊ตฌํ˜„์ฒด๋“ค์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ

  • ์‰ฝ๊ฒŒ ๊ต์ฒด ๊ฐ€๋Šฅ

  • ๊ทธ ๋•Œ ๊ทธ ๋•Œ ํ•„์š”ํ•œ Library๋“ค์„ ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    ( ์งœ ๋†“์€ ์ฝ”๋“œ ๋‚ด์—์„œ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด ์žˆ์œผ๋ฉด ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉ )

โžœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ๋ฆ„์˜ ์ฃผ๋„๊ถŒ์ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์žˆ์Œ

โœ” Framework

  • ๋ผˆ๋Œ€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” ๊ตฌํ˜„์ฒด๋“ค์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ
  • ๊ต์ฒด๊ฐ€ ์–ด๋ ค์›€
  • ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฉ”์„œ๋“œ ๋‚ด์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋‘๋ฉด, Spring Framework์—์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ๋ฆ„์„ ๋งŒ๋“ค์–ด ๋ƒ„

โžœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ๋ฆ„์˜ ์ฃผ๋„๊ถŒ์ด Framework์— ์žˆ์Œ (IoC (Inversion Of Control))

โ— ๋‘˜ ๋‹ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ, ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•ด๋†“์€ ์ง‘ํ•ฉ์ฒด๋ผ๋Š” ๊ฒƒ์€ ๋™์ผํ•˜์ง€๋งŒ, ์“ฐ์ด๋Š” ์ƒํ™ฉ์ด ๋‹ค๋ฆ„
โ €
โ— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์ œ์–ด๊ถŒ์˜ ์ฐจ์ด๊ฐ€ ์žˆ์Œ

Ex. ์ž๋™์ฐจ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์˜ˆ์‹œ๋กœ ๋“ ๋‹ค๋ฉด,

  • Framework โžœ ์ž๋™์ฐจ์˜ ๋ผˆ๋Œ€
  • Library โžœ ์ž๋™์ฐจ์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ถ€ํ’ˆ

โœ๏ธ Spring Framework

  • ์—ฌ๋Ÿฌ Framework ์ค‘ ํ•œ ์ข…๋ฅ˜

  • ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™์— ์ž˜ ๋งž๋Š” ์žฌ์‚ฌ์šฉ๊ณผ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์Šคํ‚ฌ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ

  • ๋ณด๋‹ค ๋‚˜์€ ์„ฑ๋Šฅ๊ณผ ์„œ๋น„์Šค์˜ ์•ˆ์ „์„ฑ์ด ํ•„์š”ํ•œ ๋ณต์žกํ•œ ๊ธฐ์—…์šฉ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šคํ…œ์„ ์ œ๋Œ€๋กœ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ๋Šฅ๋ ฅ ๊ธฐ๋ฅผ ์ˆ˜ ์žˆ์Œ

โœ” Spring Framework๋งŒ์˜ ์žฅ์ 

  • POJO(Plan Old Java Object)๊ธฐ๋ฐ˜์˜ ๊ตฌ์„ฑ

  • DI(Dependency Injection) ์ง€์›

  • AOP(Aspect Oriented Programming, ๊ด€์ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ) ์ง€์›

  • Java ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์–ป๋Š” ์žฅ์ 
    โžœ ๋ณ€์ˆ˜ ํƒ€์ž…, ๋ฉ”์„œ๋“œ ์ž…์ถœ๋ ฅ์ด ์–ด๋–ค ํƒ€์ž…์„ ๊ฐ€์ ธ์•ผํ•˜๋Š”์ง€ ๊ฐ•์ œํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ฝ”๋“œ์˜ ์ˆ˜์ •/๋ณด์•ˆ์ด ์šฉ์ดํ•˜๊ณ  ์›น์„œ๋ฒ„ ๊ตฌ์ถ• ์‹œ ๋Ÿฐํƒ€์ž…์— ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ์‚ฌ์ „์— ๋ฐฉ์ง€ ๊ฐ€๋Šฅ

โ— Java ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ Framework๋“ค๋„ ๋งŽ์Œ
Ex. Apache Struts2, Apache Wicket, JSF(Java Server Faces), Grails ๋“ฑ
โ €
โ— But, ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ์—…๋“ค์ด ๊ธฐ์—…์šฉ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šคํ…œ์šฉ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœ ํ•  ๋•Œ,
๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์ด ์ข‹๊ณ  ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์ข€ ๋” ์šฉ์ดํ•œ Framework์ธ Spring Framework๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉ

โœ”๏ธ ๊ธฐ์—…์šฉ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šคํ…œ

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

โœ๏ธ Java ๊ธฐ๋ฐ˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์˜ ํ๋ฆ„

1. ์ดˆ์ฐฝ๊ธฐ -> JSP(Java Server Page) ์‚ฌ์šฉ

  • ํด๋ผ์ด์–ธํŠธ ์ธก HTML/JS ์ฝ”๋“œ์™€ ์„œ๋ฒ„ ์ธก Java ์ฝ”๋“œ๊ฐ€ ๋’ค์„ž์—ฌ์žˆ๋Š” ๋ฐฉ์‹

  • ๊ฐ€๋…์„ฑ๋„ ๋–จ์–ด์ง€๊ณ  ๋„ˆ๋ฌด ๋ณต์žก ( ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์œ ์ง€ ๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ ์ตœ์•…์˜ ๋ฐฉ์‹ )

  • ํ˜‘์—…์˜ ๊ฑฐ์˜ ๋ถˆ๊ฐ€๋Šฅ

2. ์„œ๋ธ”๋ฆฟ(Servlet) ์‚ฌ์šฉ

  • JSP ์ฝ”๋“œ์—์„œ Java ์ฝ”๋“œ๋งŒ ๋ณ„๋„์˜ ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌํ•œ ๋ฐฉ์‹
    ( ํด๋ผ์ด์–ธํŠธ ์›น ์š”์ฒญ ์ฒ˜๋ฆฌ์— ํŠนํ™”๋œ Java ํด๋ž˜์Šค์˜ ์ผ์ข… )
    ( JSP ๋ฐฉ์‹๋„ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” Servlet ๋ฐฉ์‹ ์‚ฌ์šฉ )

  • ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณ„๋„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด์˜ค๋Š” ์ž‘์—…์„ ์ง์ ‘ ์ฝ”๋“œ๋กœ ์ž‘์„ฑ๋„ ํ•ด์•ผ ํ•˜๊ณ  ์บ๋ฆญํ„ฐ์…‹๋„ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•จ

  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋„ ์—†๊ณ  ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๋กœ์ง๋„ ์—†๋Š”๋ฐ ์ฝ”๋“œ ์ž์ฒด๊ฐ€ ๋„ˆ๋ฌด ๊ธบ

3. Spring MVC ์‚ฌ์šฉ

  • ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š์ง€๋งŒ ์„œ๋ธ”๋ฆฟ์—์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ํ•ด์•ผํ–ˆ๋˜ ์ผ๋“ค์„ Spring์—์„œ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•ด์คŒ

  • ์ด ๋ฐฉ์‹์ด ๋„์ž…๋จ์œผ๋กœ์จ Java ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ œ์ž‘๋ฐฉ์‹์ด ํš๊ธฐ์ ์œผ๋กœ ๋ณ€ํ•จ

  • But, Spring ๊ธฐ๋ฐ˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์žก๋Š” ์„ค์ • ์ž‘์—…์ด ์—ฌ์ „ํžˆ ๋ถˆํŽธ
    ( Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ •์ƒ์ ์œผ๋กœ ๊ตฌ๋™ํ•˜๊ธฐ ์œ„ํ•ด ์จ์•ผํ•˜๋Š” ์„ค์ • ํŒŒ์ผ๋“ค์ด ๋ณต์žก )

4. Spring Boot ์‚ฌ์šฉ

  • ์ด ์ „์˜ ๋ฌธ์ œ๋“ค์ด ๋Œ€๋ถ€๋ถ„ ๊ฐœ์„ ๋จ

  • Spring MVC ์„ค์ •์˜ ๋ณต์žกํ•จ๊ณผ ์–ด๋ ค์›€์˜ ๊ทน๋ณต์„ ์œ„ํ•ด ํƒ„์ƒ

  • ์ด ์ „ ๋ฐฉ์‹๋“ค์„ ๋ชจ๋‘ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „๋‹ฌํ•œ ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ํ…Œ์ŠคํŠธ ๋ชฉ์ ์œผ๋กœ ๋‹จ์ˆœํžˆ List์— ๋‹ด์•˜๋Š”๋ฐ, ์ด ๋ฐฉ์‹์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•ด์„œ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ์ฒ˜๋ฆฌ๊นŒ์ง€ ํ•˜๋„๋ก ํ•จ

  • ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์ œ๋กœ ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

  • ์ฝ”๋“œ ๊ธธ์ด๋Š” ํฌ๊ฒŒ ๋ฐ”๋€ ๊ฒƒ์ด ์—†๊ณ  ์˜คํžˆ๋ ค ๋” ๊น”๋”ํ•ด์ง

  • ์„ค์ •ํŒŒ์ผ๋„ Spring์ด ๋Œ€์‹  ์ฒ˜๋ฆฌํ•ด์ฃผ์–ด ์•„์ฃผ ๊ฐ„๋‹จ
    โžœ ๊ฐœ๋ฐœ์ž๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—๋งŒ ์ง‘์ค‘ ๊ฐ€๋Šฅ


โœ๏ธ Spring ์‚ผ๊ฐํ˜• (Spring Triangle)


โฌ†๏ธ POJO๋ผ๋Š” ๊ฒƒ์„ IoC/DI, AOP, PSA๋ฅผ ํ†ตํ•ด์„œ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ


โœ๏ธ POJO (Plain Old Java Object)

  • Java๋กœ ์ƒ์„ฑํ•˜๋Š” ์ˆœ์ˆ˜ํ•œ ๊ฐ์ฒด

โœ” POJO ํ”„๋กœ๊ทธ๋ž˜๋ฐ

  • POJO๋ฅผ ์ด์šฉํ•ด์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ

  • But, ๋‹จ์ˆœํžˆ ์ˆœ์ˆ˜ ์ž๋ฐ” ๊ฐ์ฒด๋งŒ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๋ง์ด ์•„๋‹ˆ๋ผ,
    ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์›๋ฆฌ์— ์ถฉ์‹คํ•˜๋ฉฐ ๋‹ค๋ฅธ ํ™˜๊ฒฝ๊ณผ ๊ธฐ์ˆ ์— ์ข…์†๋˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ๊ธฐ์ˆ ๊ณผ ๊ทœ์•ฝ์— ์–ฝ๋งค์ด์ง€ ์•Š์€ ๊ฐ์ฒด

โœ” POJO ๊ทœ์น™

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

2. ํŠน์ • ํ™˜๊ฒฝ์— ์ข…์†์ ์ด์ง€ ์•Š์•„์•ผํ•จ

  • ํŠน์ •ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋งŒ ๋™์ž‘์ด ๊ฐ€๋Šฅํ•˜๋ฉด ์•ˆ๋จ
    โžœ ๊ทธ ํ™˜๊ฒฝ ๋ณ€ํ•˜๋ฉด ๋‹ค ๊ฐˆ์•„์—Ž์–ด์•ผ ํ•˜๋‹ˆ๊นŒ

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

3. ๊ฐ์ฒด ์ง€ํ–ฅ ์›๋ฆฌ ๋”ฐ๋ผ์•ผ ํ•จ

  • ๋‹จ์ˆœํžˆ Java๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค๊ณ  ํ•ด๋„ ๋ชจ๋‘ ๊ฐ์ฒด ์ง€ํ–ฅ์  ์„ค๊ณ„๊ฐ€ ์ ์šฉ๋๋‹ค๊ณ  ํ•˜๊ธด ์–ด๋ ค์›€

  • ์ฑ…์ž„ / ์—ญํ• ์ด ๋ถ„๋ช…ํžˆ ๋‚˜๋ˆ„์–ด์ ธ์•ผ ํ•จ (๊ฐ์ฒด์ง€ํ–ฅ์˜ 5๋Œ€ ์›๋ฆฌ SOLID )
    โžœ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์—๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„ / ์—ญํ• ๋งŒ ์กด์žฌํ•ด์•ผ ํ•จ
    โžœ ์ƒ์†, ๋‹คํ˜•์„ฑ์„ ํ™œ์šฉํ•ด์•ผ ํ•จ
    โžœ ์กฐ๊ฑด๋ฌธ๋งŒ์„ ํ™œ์šฉํ•˜์—ฌ ์„ค๊ณ„๋œ ์˜ค๋ธŒ์ ํŠธ๋Š” POJO๊ฐ€ ์•„๋‹˜

โœ” POJO ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ํ•„์š”ํ•œ ์ด์œ 

  • ํŠน์ • ํ™˜๊ฒฝ์ด๋‚˜ ๊ธฐ์ˆ ์— ์ข…์†์ ์ด์ง€ ์•Š์œผ๋ฉด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ , ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์œ ์—ฐํ•œ ์ฝ”๋“œ ์ž‘์„ฑ ๊ฐ€๋Šฅ

  • ์ €์ˆ˜์ค€ ๋ ˆ๋ฒจ์˜ ๊ธฐ์ˆ ๊ณผ ํ™˜๊ฒฝ์— ์ข…์†์ ์ธ ์ฝ”๋“œ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์—์„œ ์ œ๊ฑฐ
    โžœ ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•ด์ง
    โžœ ๋””๋ฒ„๊น…๋„ ์ƒ๋Œ€์ ์œผ๋กœ ์‰ฌ์›Œ์ง

  • ํŠน์ • ๊ธฐ์ˆ ์ด๋‚˜ ํ™˜๊ฒฝ์— ์ข…์†์ ์ด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ๋„ ๋‹จ์ˆœ

  • ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์„ค๊ณ„๋ฅผ ์ œํ•œ์—†์ด ์ ์šฉ ๊ฐ€๋Šฅ (๊ฐ€์žฅ ์ค‘์š”)

โœ” POJO์™€ Spring์˜ ๊ด€๊ณ„

Spring Framework ์‚ฌ์šฉ ์ „์—๋Š” ์›ํ•˜๋Š” ํŠน์ • ๊ธฐ์ˆ ์ด ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์„ ์ง์ ‘์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•จ
But, ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์ง€๋ฉด์„œ ์œ ์ง€, ๋ณด์ˆ˜, ํ™•์žฅ์ด ์–ด๋ ค์›Œ์ง€๊ณ  Java ์–ธ์–ด๋Š” ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์˜ ๋ณธ์งˆ์„ ์žƒ์–ด๋ฒ„๋ฆฌ๋Š” ๋ฌธ์ œ์ ์ด ์ƒ๊น€
โžœ POJO ๊ฐœ๋… ๋“ฑ์žฅ

  • ์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„๋ฅผ ์œ„ํ•œ Spring์€ POJO ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€ํ–ฅํ•˜๋Š” Framework์ด๊ณ ,
    ์ด POJO ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด IoC/DI, AOP, PSA ๊ธฐ์ˆ ์„ ์ง€์›
    ( ์ตœ๋Œ€ํ•œ ๋‹ค๋ฅธ ํ™˜๊ฒฝ, ๊ธฐ์ˆ ์— ์ข…์†์ ์ด์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด )

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


โœ๏ธ Spring Framework์˜ 3๋Œ€ ํ•ต์‹ฌ ๊ฐœ๋…

1. IoC (Inversion of Control)

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ๋ฆ„์˜ ์ฃผ๋„๊ถŒ์ด ๋’ค๋ฐ”๋€ ๊ฒƒ
    Ex. Framework์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ๋ฆ„์˜ ์ฃผ๋„๊ถŒ์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ Framework์— ์žˆ๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ

  • ํด๋ž˜์Šค ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•œ ์ค‘์š”ํ•œ ๋ฐฉ๋ฒ• ( ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ )

โœ”๏ธ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ œ์–ด๊ถŒ์„ ๊ฐ–๋Š”๋‹ค

  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ ์•ˆ์˜ ๊ฐ์ฒด๋ฅผ ๋‚ด ๋ง˜๋Œ€๋กœ ๊ฐˆ์•„ ๋ผ์šธ ์ˆ˜ ์Œ
  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ ๋Œ€๋กœ ์ฝ”๋“œ์˜ ํ๋ฆ„์ด ์ง„ํ–‰๋จ
  • ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์˜์กดํ•˜๊ณ  ์žˆ๋Š”์ง€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•Œ๊ณ  ํ™œ์šฉํ•ด์•ผํ•จ

โœ”๏ธ ์ œ์–ด๊ถŒ์„ ์™ธ๋ถ€๋กœ ๋„˜๊ธด๋‹ค ( IoC ) ( ๊ฐœ๋ฐœ์ž -> ์™ธ๋ถ€ )

  • ๊ฐ์ฒด์˜ ์ƒ๋ช… ์ฃผ๊ธฐ์— ๋Œ€ํ•œ ๊ด€๋ฆฌ๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ํ•˜์ง€ ์•Š์Œ
    Ex. ์‚ญ์ œ, ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…, ์ƒ์„ฑ
  • ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์˜์กดํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋ชฐ๋ผ๋„ ๋จ

Ex 1. ์—ฌํ–‰์„ ๊ฐ€๋ ค๊ณ  APackage ๊ตฌ๋งคํ•จ
( ์—ฌ๊ธฐ์„œ APackage์˜ ์—ฌํ–‰๊ฒฝ๋กœ๋Š” Acourse โžœ Bcourse โžœ Ccourse ๋กœ ์ •ํ•ด์ ธ ์žˆ์Œ )

  • ์ด ๊ฒฝ์šฐ์—๋Š” ์ƒ์„ฑ์ž์— ์ง์ ‘ ๊ฐ์ฒด๋ฅผ ๋„ฃ์–ด์ฃผ๊ฒŒ ๋จ
    โžœ APackage๋ผ๋Š” ์ œ์–ด๊ถŒ์ด ๊ฐ์ฒด ๋‚ด๋ถ€์— ์žˆ๋Š” ๊ฒƒ
    โ €
  • ์—ฌ๊ธฐ์„œ ๊ณ ๊ฐ์ด ๋‹ค๋ฅธ ์ฝ”์Šค๋ฅผ ๋„ฃ์–ด๋‹ฌ๋ผ๊ณ  ํ•˜๋ฉด ๋ถˆ๊ฐ€๋Šฅ
    โžœ ์œ„์™€ ๊ฐ™์ด ์งœ์—ฌ์ง„ ์ฝ”๋“œ์—์„œ๋Š” ํฐ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜์•ผํ•จ

Ex 2. ์œ„์˜ ์˜ˆ์‹œ๋ฅผ Spring Framework๋กœ ๋งŒ๋“ ๋‹ค๋ฉด,

  • ์ด ๊ฒฝ์šฐ์—๋Š” ์ƒ์„ฑ์ž๊ฐ€ ์ถ”์ƒํ™”๋œ TourGuide๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์š”์†Œ๋กœ ๋ฐ›๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ›๊ณ  ์žˆ์Œ
    โ €
  • ์›ํ•˜๋Š” course์˜ ๊ฐ์ฒด๋ฅผ ๋ฆฌ์ŠคํŠธ์— ์ง์ ‘ ๋„ฃ์–ด์ฃผ๋ฉด APackage์— ๊ทธ course๋“ค์ด ๋‹ด๊น€
    ( ์—ฌ๊ธฐ์„œ ์ฃผ์ž…๋˜๋Š” ๊ฐ course๋“ค์€ TourGuide๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„ ํด๋ž˜์Šค๋“ค )
    โ €
    โžœ APackage๋ผ๋Š” ์ œ์–ด๊ถŒ์ด ์™ธ๋ถ€์—(๊ณ ๊ฐ์—๊ฒŒ) ์žˆ์Œ
    ( ์ƒ์„ฑ์ž ๋ถ€๋ถ„์—์„œ ์˜์กด์„ฑ ์ฃผ์ž…์ด ์ด๋ฃจ์–ด์ง )

โœ”๏ธ ๋ณดํ†ต Java ์ฝ˜์†” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ œ์–ด ํ๋ฆ„

  • main() ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์–ด์•ผ ์‹คํ–‰
    โžœ System ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด static ๋ฉค๋ฒ„๋ณ€์ˆ˜์ธ out์˜ pritln() ํ˜ธ์ถœ
    ( main() ๋ฉ”์„œ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰๋„ ์ข…๋ฃŒ )

โœ”๏ธ ํ• ๋ฆฌ์šฐ๋“œ ๋ฒ•์น™ (Hollywood Principle)

  • Don't call us, we'll call you
  • ์ €ํฌ๋ฅผ ๋ถ€๋ฅด์ง€ ๋งˆ์„ธ์š” ์ €ํฌ๊ฐ€ ์•Œ์•„์„œ ๋ถ€๋ฅผ๊ฒŒ์š”

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

  • IoC ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•

  • ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด์„œ ์–ด๋–ค ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌ ๋ฐ›๋Š” ๊ฒƒ

    โœ”๏ธ ์™ธ๋ถ€์—์„œ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•œ๋‹ค
    โžœ ์ƒ์„ฑ์ž์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ

Ex. A ํด๋ž˜์Šค๊ฐ€ B ํด๋ž˜์Šค์˜ ๊ตฌํ˜„ ํด๋ž˜์Šค์ผ ๋•Œ,
<A ํด๋ž˜์Šค๋Š” B ํด๋ž˜์Šค์—๊ฒŒ ์˜์กดํ•œ๋‹ค> ๋ผ๊ณ  ํ•จ
( ๋„์›€์„ ๋ฐ›๋Š” ์ชฝ์ด A / ๋„์›€์„ ์ฃผ๋Š” ์ชฝ์ด B )

Ex. ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด ๋†“์€ A ํด๋ž˜์Šค์™€, main ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” B ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•  ๋•Œ,
B ํด๋ž˜์Šค์—์„œ new ํ‚ค์›Œ๋“œ๋กœ A ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด ๊ฐ์ฒด๋กœ A ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๋ฉด
์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ์ฐธ์กฐํ•˜๊ฒŒ ๋˜๋ฉด ์˜์กด๊ด€๊ณ„๊นŒ ์„ฑ๋ฆฝํ•œ ๊ฒƒ

โœ”๏ธ ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„๋ฅผ ์œ„ํ•ด ๊ต‰์žฅํžˆ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋‹ค์ด์–ด๊ทธ๋žจ
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌํ˜„์— ํ•„์š”ํ•œ ํด๋ž˜์Šค๋“ค์˜ ํฐ ๊ทธ๋ฆผ์„ ๊ทธ๋ ค๋ณด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
[์ฐธ๊ณ ] https://online.visual-paradigm.com/diagrams/features/

โœ” ๊ฐ•ํ•œ ๊ฒฐํ•ฉ

  • new ํ‚ค์›Œ๋“œ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์˜์กด์„ฑ ์ฃผ์ž…ํ•˜๋Š” ๊ฒƒ
    โžœ ์ˆ˜์ •ํ•  ๋‚ด์šฉ์ด ์žˆ์œผ๋ฉด ๋‹ค ์ผ์ผ์ด ์ˆ˜์ •ํ•ด์•ผํ•จ
    โžœ ์—…์บ์ŠคํŒ…์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉํ•ด์„œ ๋Š์Šจํ•œ ๊ฒฐํ•ฉ ํ•ด์•ผํ•จ

    โœ”๏ธ ์—…์บ์ŠคํŒ…
    โžœ ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์˜ ๋ณ€์ˆ˜์— ๊ทธ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ํ• ๋‹น

โœ” ๋Š์Šจํ•œ ๊ฒฐํ•ฉ

  • new ํ‚ค์›Œ๋“œ ์ œ๊ฑฐํ•˜๊ณ  Spring์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜์กด์„ฑ ์ฃผ์ž…ํ•˜๋Š” ๊ฒƒ
    ( new ํ‚ค์›Œ๋“œ๋กœ ๊ฐ์ฒด ์ƒ์„ฑํ•˜๋˜ ๊ฒƒ์„ Spring์ด ๋Œ€์‹  ํ•จ )

โžœ ์™„์ „ํžˆ Spring Framework ์˜์—ญ์˜ ํด๋ž˜์Šค์— ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•ด๋‘๊ณ  Spring์˜ ๋„์›€์„ ๋ฐ›์•„, ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ์˜์กด ๊ฐ์ฒด๋“ค์„ ์ฃผ์ž…ํ•˜๋Š” ๊ฒƒ
( Spring Framework ์˜์—ญ์˜ ํด๋ž˜์Šค๋Š” ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ๋กœ์ง์— ๊ด€์—ฌํ•˜์ง€ ์•Š์Œ )

โžœ ์ˆ˜์ •์ด ๋งŽ์€ ๊ฒฝ์šฐ์—๋„ Spring Framework ์˜์—ญ์— ์žˆ๋Š” ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋จ

โ— ๊ฐ์ฒด์ง€ํ–ฅ์˜ 5๋Œ€ ์›์น™ SOLID ์ค‘ DIP(Dependency Inversion Principle)๋„ ๊ฐ™์ด ์ƒ๊ฐํ•ด ๋ณด๊ธฐ !

3. AOP (Aspect Oriented Programming)

  • ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

    โœ”๏ธ Aspect
    โžœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ณตํ†ต ๊ด€์‹ฌ์‚ฌ
    ( ๋ญ”๊ฐ€ ๊ณตํ†ต์ ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋… )

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ์—…๋ฌด ๋กœ์ง(๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง)์—์„œ ๊ณตํ†ต ๊ธฐ๋Šฅ ๋กœ์ง๋“ค์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ
    Ex. ๊ณตํ†ต ๊ธฐ๋Šฅ - ๋กœ๊น…์ด๋‚˜ ๋ณด์•ˆ, ํŠธ๋žœ์žญ์…˜, ๋ชจ๋‹ˆํ„ฐ๋ง, ํŠธ๋ ˆ์ด์‹ฑ ๋“ฑ

โžœ ๊ณตํ†ต ๋กœ์ง๋“ค์„ Aspect๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ํ•ด๋‹น Aspect๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์„œ๋“œ ๋งคํ•‘

โœ”๏ธ ๋ชจ๋“ˆํ™”
๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ์˜ ๋ถ„๋ฆฌ + ๋งคํ•‘

  • ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ชจ๋“ˆ์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๊ฒƒ์ด ๋ชฉ์ 
    Ex. ์ค‘๋ณต๋œ ์ฝ”๋“œ๋“ค์ด ๋งŽ๋‹ค๋ฉด, ์ด ์ค‘๋ณต๋œ ์ฝ”๋“œ๋ฅผ AOP๋ฅผ ์‚ฌ์šฉํ•ด ๊ณตํ†ตํ™”ํ•ด์„œ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ค์–ด์•ผ ํ•จ

โœ”๏ธ ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ(Cross-cutting concern)

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋ฐ˜์— ๊ฑธ์ณ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ณตํ†ต ๊ธฐ๋Šฅ๋“ค์— ๋Œ€ํ•œ ๊ด€์‹ฌ์‚ฌ
  • ํ•ต์‹ฌ ๋กœ์ง์— ์ „๋ฐ˜์ ์œผ๋กœ ๋‘๋ฃจ ์‚ฌ์šฉ๋จ
    Ex. ๋ณด์•ˆ

โœ”๏ธ ํ•ต์‹ฌ ๊ด€์‹ฌ ์‚ฌํ•ญ(Core concern)

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฃผ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ๋กœ์ง(๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง)์— ๋Œ€ํ•œ ๊ด€์‹ฌ์‚ฌ
    Ex. ๊ธฐ๋Šฅ
  • ํ•ต์‹ฌ ๊ด€์‹ฌ ์‚ฌํ•ญ์— ๋ฐ˜๋Œ€๋˜๋Š” ๊ฐœ๋…์œผ๋กœ ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ์„ ๋ถ€๊ฐ€์ ์ธ ๊ด€์‹ฌ ์‚ฌํ•ญ์ด๋ผ๊ณ  ํ‘œํ˜„ํ•˜๊ธฐ๋„ ํ•จ

[์ฐธ๊ณ ] https://velog.io/@geesuee/Spring-AOPAspect-Oriented-Programming%EC%99%80-%ED%94%84%EB%A1%9D%EC%8B%9C

โœ” AOP๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

  • ์ฝ”๋“œ์˜ ๊ฐ„๊ฒฐ์„ฑ ์œ ์ง€

  • ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™์— ๋งž๋Š” ์ฝ”๋“œ ๊ตฌํ˜„

  • ๊ณตํ†ต ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ
    ( ํ•ต์‹ฌ ๋กœ์ง์— ๊ณตํ†ต ๊ธฐ๋Šฅ๋“ค์ด ์—ฌ๊ธฐ์ €๊ธฐ ๋ณด์ด๋ฉด ์ฝ”๋“œ๋„ ๋ณต์žกํ•ด์ง€๊ณ  ์œ ์ง€/๋ณด์ˆ˜ ๋ชจ๋‘ ํž˜๋“ฆ )

Ex. ํด๋ž˜์Šค ๋‚ด๋ถ€์— ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ rollback(), commit() ๋“ฑ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ๋ชจ๋‘ ์‚ฌ๋ผ์ง€๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋งŒ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ๋งŒ ๋‚จ๊น€
๊ทธ๋ฆฌ๊ณ  ์ด ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋Š” ์• ๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ Spring ๋‚ด๋ถ€์—์„œ AOP ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ํŠธ๋žœ์žญ์…˜ ์ ์šฉํ•˜๋„๋ก ํ•จ

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

4. PSA (Portable Service Abstraction)

  • ์ผ๊ด€๋œ ์„œ๋น„์Šค ์ถ”์ƒํ™”

    โœ”๏ธ ์ถ”์ƒํ™”
    โžœ ์–ด๋–ค ํด๋ž˜์Šค์˜ ๋ณธ์งˆ์ ์ธ ํŠน์„ฑ๋งŒ ์ถ”์ถœํ•ด์„œ ์ผ๋ฐ˜ํ™” ํ•˜๋Š” ๊ฒƒ
    ( ์ถ”์ƒ ํด๋ž˜์Šค / ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ )

  • ์ถ”์ƒํ™”๋œ ์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ๋ฐ”๋ผ๋ณด๋ฉฐ ํ•˜์œ„ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ
    ( ์ƒ์œ„ํด๋ž˜์Šค๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ด์šฉํ•˜๋Š” ํ•˜๋‚˜์˜ ์„œ๋น„์Šค )

Ex. ํด๋ผ์ด์–ธํŠธ(main())๊ฐ€ ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•  ๋•Œ, ์ง์ ‘์ ์œผ๋กœ ์ด์šฉํ•˜์ง€ ์•Š๊ณ  ์ƒ์œ„ ํด๋ž˜์Šค ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ์ด์šฉ(๋Š์Šจํ•œ ๊ฒฐํ•ฉ) )
โžœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋Š” ๋ญ๊ฐ€ ์ˆ˜์ •๋˜์—ˆ๋Š”์ง€ ๋ชฐ๋ผ๋„ ๋จ

  • ์„œ๋น„์Šค์˜ ๊ธฐ๋Šฅ์„ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹ ์ž์ฒด๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ์œ ์ง€ํ•˜๋ฉด์„œ, ๊ธฐ์ˆ  ์ž์ฒด๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ

  • ํ™˜๊ฒฝ์˜ ๋ณ€ํ™”์— ์ƒ๊ด€ ์—†์ด ์ผ๊ด€๋œ ๋ฐฉ์‹(ํ™˜๊ฒฝ)์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ์ถ”์ƒํ™” ๊ตฌ์กฐ
    โžœ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค ๋“ฏ, ์ถ”์ƒํ™”๋œ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ํ™˜๊ฒฝ์ด ๋ฐ”๋€Œ์–ด๋„ ํ™ฉ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•จ
    โžœ DI๋ฅผ ํ™œ์šฉํ•ด ์‚ฌ์šฉํ•  ๊ฐ์ฒด๋งŒ ๋ฐ”๊ฟ”์ฃผ๋„๋ก ๊ตฌํ˜„

โœ” PSA๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

  • ์–ด๋–ค ์„œ๋น„์Šค๋ฅผ ์ด์šฉ์„ ์œ„ํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ์œ ์ง€ํ•จ์œผ๋กœ์จ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ์ด ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ์ตœ์†Œํ•œ์˜ ๋ณ€๊ฒฝ๋งŒ์œผ๋กœ ๋ณ€๊ฒฝ๋œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•จ
    โžœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ ๋ณ€๊ฒฝ์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์ฒ˜
    Ex. ํŠธ๋žœ์žญ์…˜ ์„œ๋น„์Šค, ๋ฉ”์ผ ์„œ๋น„์Šค, Spring Data ์„œ๋น„์Šค ๋“ฑ

๐ŸŒˆ ๋Š๋‚€์ 

๋ญ”๊ฐ€ ์•„์ง๊นŒ์ง€๋Š” ์ž˜ ๋จธ๋ฆฟ์†์— ์ •๋ฆฌ๊ฐ€ ๋˜์ง„ ์•Š๋Š”๋‹ค
๋จธ๋ฆฌ๊ฐ€ ์–ด์งˆ,,
ํ•˜์ง€๋งŒ ๊ทธ๋ž˜๋„ ๊ฐ ๊ฐœ๋…๋“ค์˜ ๋ชฉ์  ์ •๋„๋Š” ์ดํ•ด๋ฅผ ํ–ˆ์œผ๋‹ˆ ์•ž์œผ๋กœ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋ฐฐ์šฐ๋ฉด์„œ ์ฐจ์ฐจ ๋”์šฑ ์ดํ•ดํ•ด ๋‚˜๊ฐˆ ๊ฒƒ์ด๋‹ค

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