๐Ÿ“š Study/Spring

Spring์ด๋ž€?

kkh1902 2022. 8. 6. 19:04
728x90
๋ฐ˜์‘ํ˜•

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

 

1.1 ์Šคํ”„๋ง์˜ ๊ฐœ๋…

Spring Logo

Spring์€ ๋ฌด์—‡์ผ๊นŒ์š”? ์Šคํ”„๋ง์€ ์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. spring.io ์‚ฌ์ดํŠธ์—์„œ ํ™•์ธํ•˜๋ฉด ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ํ˜„๋Œ€ ์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐ Configuration Model ์ œ๊ณตํ•œ๋‹ค๋ผ๊ณ  ์–ธ๊ธ‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Python์„ ์ด์šฉํ•œ Django, Ruby๋ฅผ ์ด์šฉํ•œ Ruby on Rails, Javascript๋ฅผ ์ด์šฉํ•œ Node.js ๊ธฐ๋ฐ˜์˜ ์›น ์„œ๋ฒ„ ๊ฐœ๋ฐœ๊ณผ ๊ฐ™์ด Java ๊ฐœ๋ฐœ์ž๋“ค์€ Spring์„ ์‚ฌ์šฉํ•˜์—ฌ ์›น ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Spring ์€ ์ˆ˜๋งŽ์€ ๊ตญ๋‚ด ๊ธฐ์—…๊ณผ ํ•ด์™ธ ๊ธฐ์—…์—์„œ ๋งค์šฐ ๋งŽ์€ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž๋ฐ” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ, ๋Œ€๋ถ€๋ถ„ ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์Šคํ”„๋ง์˜ ๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ์Šต๋‹ˆ๋‹ค.

Spring Architect

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

Spring์˜ ํŠน์ง•๋“ค์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Spring์€ ์ž๋ฐ” ๊ฐ์ฒด์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ๊ด€๋ฆฌํ•ด์ฃผ๋ฉฐ, ํ†ฐ์บฃ๊ณผ ๊ฐ™์€ WAS ๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ์–ด ์ž๋ฐ” ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Spring์€ ๊ฒฝ๋Ÿ‰ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ์ง์ ‘ Spring ์•ˆ์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๋ฐ ์†Œ๋ฉธ๊ณผ ๊ฐ™์€ ์ƒ๋ช… ์ฃผ๊ธฐ(Life cycle)์„ ๊ด€๋ฆฌํ•˜๋ฉฐ, Spring ์ปจํ…Œ์ด๋„ˆ์—์„œ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Spring์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์œผ๋กœ IOC์™€ DI๊ฐ€ ๋งŽ์ด ์–ธ๊ธ‰๋ฉ๋‹ˆ๋‹ค. IOC์™€ DI์˜ ๊ฐ„๋‹จํ•œ ๊ฐœ๋…์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    • ์ œ์–ด์˜ ์—ญ์ „ (IOC, Inversion Of Control)
      • ์ผ๋ฐ˜์ ์œผ๋กœ ์ฒ˜์Œ์— ๋ฐฐ์šฐ๋Š” ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ๊ฐ ๊ฐ์ฒด๋“ค์ด ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ๊ฒฐ์ •ํ•˜๊ณ  ๊ฐ ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๊ณ  ์กฐ์ž‘ํ•˜๋Š” ์ž‘์—…(๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜์—ฌ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ)์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ชจ๋“  ์ž‘์—…์„ ์‚ฌ์šฉ์ž๊ฐ€ ์ œ์–ดํ•˜๋Š” ๊ตฌ์กฐ์˜€์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด A ๊ฐ์ฒด์—์„œ B ๊ฐ์ฒด์— ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์œผ๋ฉด, B ๊ฐ์ฒด๋ฅผ ์ง์ ‘ A ๊ฐ์ฒด ๋‚ด์—์„œ ์ƒ์„ฑํ•˜๊ณ  ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
      • ํ•˜์ง€๋งŒ IOC๊ฐ€ ์ ์šฉ๋œ ๊ฒฝ์šฐ, ๊ฐ์ฒด์˜ ์ƒ์„ฑ์„ ํŠน๋ณ„ํ•œ ๊ด€๋ฆฌ ์œ„์ž„ ์ฃผ์ฒด์—๊ฒŒ ๋งก๊น๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๋Š” ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์ปจํŠธ๋กคํ•˜๋Š” ์ฃผ์ฒด๋Š” ๋‹ค๋ฅธ ์ฃผ์ฒด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์‚ฌ์šฉ์ž์˜ ์ œ์–ด๊ถŒ์„ ๋‹ค๋ฅธ ์ฃผ์ฒด์—๊ฒŒ ๋„˜๊ธฐ๋Š” ๊ฒƒ์„ IOC(์ œ์–ด์˜ ์—ญ์ „) ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
      • ์š”์•ฝํ•˜๋ฉด Spring์˜ Ioc๋ž€ ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ๊ฐ์ฒด ์ƒ์„ฑ -> ์˜์กด์„ฑ ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์ด ์•„๋‹Œ, ์Šคํ”„๋ง์—๊ฒŒ ์ œ์–ด๋ฅผ ์œ„์ž„ํ•˜์—ฌ ์Šคํ”„๋ง์ด ๋งŒ๋“  ๊ฐ์ฒด๋ฅผ ์ฃผ์ž… -> ์˜์กด์„ฑ ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์Šคํ”„๋ง์—์„œ๋Š” ๋ชจ๋“  ์˜์กด์„ฑ ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง์ด ์‹คํ–‰๋ ๋•Œ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ํ•„์š”ํ•œ ๊ณณ์— ์ฃผ์ž…ํ•ด์ค๋‹ˆ๋‹ค.
    • ์˜์กด์„ฑ ์ฃผ์ž… (DI, Dependency Injection)
      • ์–ด๋–ค ๊ฐ์ฒด(B)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์ฒด(A)๊ฐ€ ๊ฐ์ฒด(B)๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๊ฐ์ฒด๋ฅผ ์™ธ๋ถ€(Spring)์—์„œ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์ฃผ์ฒด ๊ฐ์ฒด(A)์— ์ฃผ์ž…์‹œ์ผœ์ฃผ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์ฒด(A)๊ฐ€ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฐ์ฒด(B)๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ์˜์กด์„ฑ(๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์„œ๋กœ์—๊ฒŒ ์˜ํ–ฅ์„ ๋งŽ์ด ์ค€๋‹ค)์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์™ธ๋ถ€(Spring)์—์„œ ์ง์ ‘ ์ƒ์„ฑํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” A์™€ B์˜ ์˜์กด์„ฑ์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

2. Spring Boot๋ž€?

Spring Boot Logo

์Šคํ”„๋ง ๋ถ€ํŠธ(Spring Boot)๋Š” ์Šคํ”„๋ง(Spring)์„ ๋” ์‰ฝ๊ฒŒ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ง ์ด์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ, ์ด๊ฒƒ์ €๊ฒƒ ์„ธํŒ…์„ ํ•ด์•ผ ๋  ์š”์†Œ๋“ค์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ์„ธํŒ…ํ•ด์•ผ๋˜๋Š” ์ง„์ž… ์žฅ๋ฒฝ์ด ์กด์žฌํ•˜์—ฌ Spring ์„ ์ฒ˜์Œ ๋ฐฐ์šฐ๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์€ ์ค‘๋„์— ๊ทธ๋งŒ๋‘๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. Spring Boot๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ, Spring ๊ฐœ๋ฐœ์„ ์กฐ๊ธˆ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Spring Boot ๊ตฌ์กฐ

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

728x90
๋ฐ˜์‘ํ˜•