๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’Š Java & Kotlin & Spring/- spring framework +

[Spring Framework] ์™œ Spring์ธ๊ฐ€? Spring์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์•Œ์•„๋ณด์ž

by Wonit 2020. 9. 3.

์ด๋ฒˆ ๊ธ€์€ GDG Spring Framework Study์—์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  Spring ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๊ณตํ†ต์ ์œผ๋กœ ์•Œ์•„์•ผํ•  Spring์˜ ์—ญ์‚ฌ์— ๋Œ€ํ•ด์„œ ์ž ์‹œ ์ด์•ผ๊ธฐํ•ด๋ณด๋ ค ํ•œ๋‹ค.

Framework vs Library

์ผ๋‹จ Spring์„ ์‚ฌ์šฉํ•˜๊ธฐ์ „์— ๋ฌด์—‡์ด Library์ด๊ณ  ์™œ Framework์„ ์™œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ํƒ„์ƒํ–ˆ๋Š”์ง€๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋‹จ์ˆœ ํ™œ์šฉ ๊ฐ€๋Šฅํ•œ ๋„๊ตฌ๋“ค์˜ ์ง‘ํ•ฉ์„ ๋งํ•œ๋‹ค.

 

Library
์šฐ๋ฆฌ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์‹œ์— ๊ธฐ์กด์— ๋งŒ๋“ค์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ์žฌํ™œ์šฉํ•จ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์ œ์ž‘ํ•œ๋‹ค.

 

Framework
์™œ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํƒ„์ƒํ–ˆ๋Š”์ง€๋Š” ํ•œ ๋‹จ์–ด๋กœ ์ •๋ฆฌํ•˜์ž๋ฉด Choas State -> Reusable State ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
๊ฒฐ๊ตญ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์—ฌ๋Ÿฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๋กœ ํ•˜๋‚˜์˜ ๋ผˆ๋Œ€๋ฅผ ๋งŒ๋“ค์–ด ๋†“์€ ๊ฒƒ์œผ๋กœ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Library vs Framework

ํ•˜์ง€๋งŒ ๋‹จ์ˆœํžˆ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ผˆ๋Œ€๋ฅผ ๊ตฌ์„ฑํ•˜๋ƒ ํ•˜์ง€ ์•Š๋ƒ์˜ ์ฐจ์ด๋Š” ์•„๋‹ˆ๋‹ค.


ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฐจ์ด๋Š” ๋ฐ”๋กœ ์ฃผ๋„๊ถŒ์—์„œ ๋‚˜์˜จ๋‹ค.


ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ Flow๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ Container์— ์œ„์ž„ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ์ด ๋œ๋‹ค.

 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”ํ•œ ๊ฐœ๋…์ด ์žˆ์„๋•Œ ๋Šฅ๋™์ ์œผ๋กœ ์‚ฌ์šฉํ•  ๋ฟ์ด์ง€๋งŒ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ทธ์™€ ๋ฐ˜๋Œ€๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ํ”„๋ ˆ์ž„์›Œํฌ์— ์˜ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.


์ด๋Ÿฐ ์˜๋ฏธ์—์„œ ๋‹ค์Œ์— ๋ฐฐ์šฐ๊ฒŒ๋  ๋‚ด์šฉ์ธ IoC(Inverse Of Control)์ธ ๊ฐœ๋…์ด ๋“ฑ์žฅํ•˜๊ณ  Spring์„ ๋ฐฐ์šธ๋•Œ ์ค‘์š”ํ•œ ๊ฐœ๋…์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์œ„์—์„œ ๋ง ํ–ˆ๋“ฏ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋‚ด๊ฐ€ ํ•„์š”ํ•œ ๋„๊ตฌ๋“ค์„ ์ง์ ‘ ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜์ง€๋งŒ ๊ทธ์™€ ๋‹ฌ๋ฆฌ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ •ํ•ด์ง„ ๋ฃฐ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ๋งŒํผ ์ง„์ž… ์žฅ๋ฒฝ์ด ๋†’๋‹ค๊ณ  ํ•œ๋‹ค.


ํ•˜์ง€๋งŒ Algorithm์—์„œ ์šฐ๋ฆฌ๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฐ์›€์ด ์žˆ์—ˆ๋‹ค.

Divided And Conquer, ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์€ ๊ฒƒ ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ๋‚˜๋ˆ ์„œ ์ •๋ณตํ•ด๋‚˜๊ฐ€๋ณด์ž.


์ด์ œ Spring์— ๋Œ€ํ•ด์„œ ์ด์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ์„ ์ •๋„์˜ ์ˆ˜์ค€์ด ๋˜์—ˆ์œผ๋ฏ€๋กœ Spring์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

Spring

Wikipedia

์œ„ํ‚คํ”ผ๋””์•„์—์„œ๋Š” ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋™์ ์ธ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ ๊ธฐ์ˆ ์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

์ด๋Ÿฌํ•œ Spring ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ํ•˜๋‚˜์˜ Target์ด ์žˆ๋Š”๋ฐ ๋ฐ”๋กœ Enterprise project์ด๋‹ค.


2000๋…„๋Œ€ ์ดˆ๋ฐ˜์˜ Enterprise Project์—์„œ๋Š” 80ํผ์„ผํŠธ์˜ ์‹คํŒจ ํ™•๋ฅ ์„ ์•ˆ๊ณ  ์žˆ์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค.


Enterprise๊ธ‰์˜ ์›น ์„œ๋น„์Šค๋Š” ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ด์™ธ์—๋„ ํƒ€ ์‹œ์Šคํ…œ๊ณผ์˜ ์—ฐ๊ณ„, ๋ถ„์‚ฐ, ํŠธ๋žœ์žญ์…˜, ๋ณด์•ˆ์— ๋Œ€ํ•œ Issue๋ฅผ ์ž˜ ๋‹ค๋ค„์•ผ ํ–ˆ๊ณ  ๊ทธ ๋ถ€๋ถ„ ๋งŒํผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋ณต์žกํ•ด์ง€๊ณ  ์žฆ์€ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚ฌ๋‹ค.


์ด๋Ÿฌํ•œ ๋ณต์žกํ•จ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Spring์€ DI, AOP, PSA๋ฅผ ์ด์šฉํ•ด์„œ Enterprise๊ธ‰์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง€์›ํ•œ๋‹ค.


๋˜ํ•œ ์ด๋Ÿฌํ•œ Spring์€ ํ•œ๊ตญ์˜ ์›น์„ ์ ๋ นํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๋งŽ์€ ํ˜น์ž๋“ค์ด ์ด์•ผ๊ธฐํ•˜๊ณค ํ•œ๋‹ค.


์ด์™€ ๊ด€๋ จํ•ด์„œ๋Š” ์™œ ์ž๋ฐ” Spring๋งŒ ๋ฝ‘๋‚˜์š”? ๊ผญ ๋ฐฐ์›Œ์•ผ ํ•˜๋‚˜์š”?์˜ ๊ธ€์„ ํ™•์ธํ•ด๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์„ ๊ฒƒ์ด๋‹ค.

๋‹ค๋ฅธ Framework์™€ Spring์˜ ์ฐจ์ด์ 

์ƒ์šฉ๋˜๋Š” ๋งŽ์€ Framework์—๋Š” Spring๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Python์ง„์˜์˜ Django, Flask, Tornado๋“ฑ์ด ์žˆ๊ณ  Javascript ์ง„์˜์—๋Š” Express, Next.js, Nuxt.js ๊ทธ๋ฆฌ๊ณ  C๊ณ„์—ด์—๋Š” .NET ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ์ด ์žˆ๋‹ค.


ํ•˜์ง€๋งŒ ๋งŽ๊ณ  ๋งŽ์€ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์™œ ์šฐ๋ฆฌ๋Š” Spring์„ ์„ ํƒํ–ˆ๋Š”์ง€ ์•Œ์•„๋ณด์ž.

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 2018 ๊ฐœ๋ฐœ์ž ๋ฆฌํฌํŠธ

์œ„์—์„œ๋„ ๋ง ํ–ˆ๋“ฏ์ด Spring์€ Enterprise๊ธ‰์— ์ ํ•ฉํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋ผ๊ณ  ํ–ˆ๋‹ค.


๋Œ€ํ•œ๋ฏผ๊ตญ์˜ Enterprise๊ธ‰์˜ ๋Œ€๊ธฐ์—…์—์„œ๋Š” Spring์ด ์•„๋งˆ ์ ์ ˆํ•œ ์„ ํƒ์ด ์•„๋‹๊นŒ ์‹ถ๋‹ค.


ํ•˜์ง€๋งŒ ๊ทธ ์™ธ๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ์Šคํƒ€ํŠธ์—… ๊ธฐ์—…์—์„œ๋Š” ๊ตณ์ด Enterprise๊ธ‰์˜ ๋ณต์žกํ•จ์„ ๋‹ค๋ฃจ๋Š” Spring์ด ์ตœ์„ ์˜ ์„ ํƒ์€ ์•„๋‹ˆ๋ผ๊ณ ๋“ค ํ•œ๋‹ค.


์ „ ๋ถ€ํ„ฐ์„œ Django๋ฅผ ๋ฐฐ์›Œ๋ณด๊ณ  ์‹ถ์—ˆ๋˜ ๋‚˜์™€ ๋น„์Šทํ•œ ๋…์ž๊ฐ€ ์žˆ๋‹ค๋ฉด Why we use django framework์— ๊ฐ€์„œ ์™œ ์žฅ๊ณ ๋ฅผ ์จ์•ผํ•˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ ํ™•์ธํ•ด๋ณด๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

Spring ๋งŒ์˜ ํŠน์ด์ 

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

  • ๊ฒฝ๋Ÿ‰ ์ปจํ…Œ์ด๋„ˆ
  • ์ œ์–ด์˜ ์—ญ์ „
  • ์˜์กด์„ฑ ์ฃผ์ž…
  • ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ
  • MVC Pattern
    ๋“ฑ์ด ์žˆ๋‹ค.

๊ฒฝ๋Ÿ‰ ์ปจํ…Œ์ด๋„ˆ

์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ์  ์ด์™ธ์—๋„ Spring์€ ์ผ๋ถ€๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  Spring์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š”๋‹ค.


์˜ˆ๋ฅผ ๋“ค์–ด Spring MVC์—†์ด Spring JDBC๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ฑฐ๋‚˜, ํ•„์š”ํ•œ ์˜์กด์„ฑ๋“ค์„ Maven์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋ฉฐ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•„์š”ํ•œ ์ผ๋ถ€๋งŒ ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ๋‹ค.

 

์‚ฌ์‹ค์ƒ ๊ฒฝ๋Ÿ‰์ด๋ผ๋Š” ๋‹จ์–ด๋Š” ์ƒ๋Œ€์ ์ธ ๊ฐœ๋…์ด ๊ผญ ๋ถ™๊ฒŒ ๋œ๋‹ค.

 

์—ฌ๊ธฐ์„œ Spring์˜ ๊ฒฝ๋Ÿ‰ ์ปจํ…Œ์ด๋„ˆ๋Š” Spring๋งŒ์˜ ๋…์ ์ ์ธ ๊ฐœ๋…์ด ์•„๋‹ˆ๋ผ J2EE์— ๋น„๊ต์  ๊ฒฝ๋Ÿ‰์ด๋ผ๋Š” ๋œป์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ํ•œ๋‹ค.

์ œ์–ด์˜ ์—ญ์ „๊ณผ ์˜์กด์„ฑ ์ฃผ์ž…

์œ„์—์„œ ๋ง ํ–ˆ๋“ฏ ์šฐ๋ฆฌ๋Š” ๊ฐ์ฒด์— ์ƒ์„ฑ, ์†Œ๊ฑฐ, ํ™•์žฅ์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ฒƒ์— ๊ด€์—ฌํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ๋‹จ์ง€ IoC ์ปจํ…Œ์ด๋„ˆ์—๊ฒŒ ๊ทธ ๊ถŒํ•œ์„ ์œ„์ž„ํ•˜์—ฌ ์šฐ๋ฆฌ๋Š” ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋”์šฑ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

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

Aspect Oriented Programming์ด๋ž€ ๋ง ๊ทธ๋Œ€๋กœ ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ด๋‹ค.


์ผ๋ฐ˜์ ์ธ ์›น ๊ฐœ๋ฐœ์—์„œ๋Š” OOP์ ์ธ ํŠน์„ฑ์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.


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


ํ•˜์ง€๋งŒ AOP๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ํ•œ ๊ณณ์— ๋ชจ์•„ ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๊ณตํ†ต๊ธฐ๋Šฅ์„ ํ•œ ๊ณณ์— ๋ณด๊ด€ํ•จ์œผ๋กœ ๊ณตํ†ต ๊ธฐ๋Šฅ ํ•˜๋‚˜๋ฅผ ์ˆ˜์ •ํ•ด์„œ ๊ฒฐ๊ณผ์ ์œผ๋กœ๋Š” ๋ชจ๋“  ๊ณตํ†ต ๊ธฐ๋Šฅ์ด ์ˆ˜์ •๋˜๋Š” ํšจ์œจ์„ฑ์„


์œ„์˜ OOP์— ๊ด€ํ•œ ๋ฌธ์ œ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด Spring์€ AOP๋ฅผ ๋ณด๋‹ค ๋” AOP ์Šค๋Ÿฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ง€์›์„ ํ•˜๊ณ  ์žˆ๋‹ค.

Spring framework Architecture

Spring Framework ์— ๊ตฌ์กฐ๋Š” ์œ„์™€ ๊ฐ™๋‹ค.


์šฐ๋ฆฌ๋Š” Spring Framework์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ € ๋ชจ๋“  ๊ฐœ๋…์„ ์•Œ์•„์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.


ํ† ๋น„์˜ Spring์— ๋งŽ์€ ๋„์›€์„ ์ฃผ์‹  ๋ฐฑ๊ธฐ์„ ๋‹˜์ด ๋ง์”€ํ•˜์‹œ๊ธธ ํ† ๋น„์˜ Spring ๊ทธ๋ ‡๊ฒŒ ๋ณด์ง€ ๋งˆ์„ธ์š”์— ๋™์˜์ƒ์„ ์ฐธ๊ณ ํ•˜๋ฉด
Spring์„ ๋ชจ๋‘ ์•Œ๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค ๋‚ด๊ฐ€ ํ•„์š”ํ•œ ๋ชฉ์ ์— ๋งž๊ฒŒ ์•Œ์•„์•ผ ํ•œ๋‹ค.

๋ผ๊ณ  ํ•˜์…จ๋˜ ๋ง์— ๋™์˜ํ•œ๋‹ค.


๋งˆ์น˜๋ฉฐ

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

Reference

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ(์œ„ํ‚คํ”ผ๋””์•„)
ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฐจ์ด์  webclub๋‹˜์˜ tistory
Why Framework is required
Why spring framework is popular-DZone
๊ฐ“๋Œ€ํฌ๋‹˜์˜ Spring์˜ ์ •์˜ ๋ฐ ํŠน์ง•

๋Œ“๊ธ€