Back-End ์ž‘์—…์‹ค/Spring Framework

[Spring] Spring์ด๋ž€?

์ฃผ๋‹ˆ์“ฐ๐Ÿง‘‍๐Ÿ’ป 2022. 4. 7. 14:26
728x90
๋ฐ˜์‘ํ˜•

 

 

๐Ÿš€ Spring Framwork

    ๐Ÿ”ฝ  ๊ฐœ์š”

`Spring Framwork`๋Š” ์˜คํ”ˆ ์†Œ์Šค ๊ธฐ๋ฐ˜์˜ `JAVA Web Application`์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” Framwork์ธ ๊ฒƒ์ด์—์š”. ์ฆ‰, JAVA์˜ ๊ธฐ์ˆ ๋“ค์„ ๋” ์‰ฝ๊ฒŒ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“  JAVA์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค์˜ ์ง‘ํ•ฉ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”. 

 

 

 

 

๐Ÿš€ Spring Boot

    ๐Ÿ”ฝ  ๊ฐœ์š”

`Spring Boot`๋Š” `Spring Framwork` ์œ„์˜ `Spring`์„ ๋” ์‰ฝ๊ฒŒ ์ด์šฉํ•˜๋„๋ก ์ƒ์šฉํ™” ๊ฐ€๋Šฅํ•œ Application์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ๋„๊ตฌ์ธ ๊ฒƒ์ด์—์š”. `Spring Framwork`์€ ์ดˆ๊ธฐ์— ์„ค์ •ํ•ด์•ผ ํ•  ๊ฒƒ์ด ๋งŽ์€ ๋‹จ์ ์ด ์žˆ๋Š”๋ฐ, ์ด ๋‹จ์ ์„ ๋ณด์™„ํ•œ ๊ฒƒ์ด `Spring Boot`์ธ ๊ฒƒ์ด์—์š”.

 

 

 

    ๐Ÿ”ฝ  ํŠน์ง•

Spring์€ `๊ฒฝ๋Ÿ‰ ์ปจํ…Œ์ด๋„ˆ`๋กœ JAVA ๊ฐ์ฒด์™€ Library ๋“ฑ์„ ์ง์ ‘ ๊ด€๋ฆฌํ•ด์ฃผ๋ฉฐ, WAS(์˜ˆ: Tomcat)์ด ๋‚ด์žฅ ๋˜์–ด ์žˆ์–ด Application์„ ์†์‰ฝ๊ฒŒ ๊ตฌ๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด ์ฃผ๋Š” ๊ฒƒ์ด์—์š”.

JAVA ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๋ฐ ์†Œ๋ฉธ๊ณผ ๊ฐ™์€ `์ƒ๋ช…์ฃผ๊ธฐ(Life Cycle)`์„ ๊ด€๋ฆฌํ•˜๊ณ , ํ•„์š”ํ•œ ๊ฐ์ฒด๋Š” `Spring Container`์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ JAVA ๊ฐ์ฒด๋ฅผ ์ง์ ‘ `Spring` ์•ˆ์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

`Spring`์€ ๋ณต์žกํ•œ ํŠธ๋žœ์žญ์…˜์„ Annotaion ํ˜น์€ XML์„ ์ด์šฉํ•ด ์„ค์ •ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งค๋ฒˆ ์ƒํ™ฉ์— ๋งž๋Š” Code๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ฒŒ ๋„์™€์ฃผ๋Š” ๊ฒƒ์ด์—์š”.

`Spring`์€ `Web Programming` ๊ฐœ๋ฐœ ํ‘œ์ค€์ธ `MVC(Mode-View-Controller)` Pattern์„ ์ด์šฉํ•œ๋‹ต๋‹ˆ๋‹ค.

`Maven`, `Gradle`์˜ `Dependency`์— stater Library๋งŒ ์ž‘์„ฑํ•ด์ฃผ๋ฉด `Spring`์—์„œ๋Š” ์ง์ ‘ ์„ค์ •ํ•˜๋˜ ์ดˆ๊ธฐ ์ž‘์—…๋“ค์˜ ์„ค์ •์„ ์ž๋™์ ์œผ๋กœ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด์—์š”. ๋˜ํ•œ starter Library๋Š” `Dependency`์— ํ•„์š”ํ•œ Library๋“ค์˜ Version ๊ด€๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ํ•ด์ฃผ์–ด Version์— ๋งž์ง€ ์•Š๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ง‰์•„์ฃผ๋Š” ๊ฒƒ์ด์—์š”.

์ด๋•Œ, `Maven`์ด๋ž€? JAVA์šฉ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ Tool ๋ฐ Build Tool๋กœ JAVA์—์„œ๋งŒ ์ด์šฉ ๊ฐ€๋Šฅํ•œ Tool์ธ ๊ฒƒ์ด์—์š”. `Gradle` ๋˜ํ•œ, ๊ด€๋ฆฌ Tool์ด์ง€๋งŒ, JAVA ์ด์™ธ์—๋„ Python, C++๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

`Spring Boot`๋Š” ๋‹จ๋… ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Application์„ ์ƒ์„ฑํ•ด ์ฃผ๋Š” ์นœ๊ตฌ์ธ ๊ฒƒ์ด์—์š”.

๋ฐ˜์‘ํ˜•

 

        ๐Ÿ“ฆ IoC(Inversion of Control) - ์ œ์–ด์˜ ์—ญ์ „

์ผ๋ฐ˜์ ์œผ๋กœ JAVA๋ฅผ ๋ฐฐ์šธ ๋•Œ, ์šฐ๋ฆฌ๋Š” ๊ฐ ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๊ณ , ๊ฐ์ฒด์˜ Method๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋“ฑ ์ง์ ‘ ๊ฐ์ฒด๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ์ž‘์—… (์˜ˆ: A ๊ฐ์ฒด๊ฐ€ B ๊ฐ์ฒด์˜ Method๋ฅผ ์ด์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด A ๊ฐ์ฒด์—์„œ B ๊ฐ์ฒด๋ฅผ ์„ ์–ธ)ํ–ˆ๋˜ ๊ฒƒ์ด์—์š”.

IoC๋Š” ์ด๋ ‡๊ฒŒ ์ด์šฉ์ž๊ฐ€ ์ž‘์—…์„ ์ œ์–ดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ `Spring`์—์„œ ์˜์กด์„ฑ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ , ํ•„์š”ํ•œ ๊ณณ์— ๋„ฃ์–ด ๊ธฐ์กด์— ์ด์šฉ์ž๊ฐ€ ๊ฐ€์กŒ๋˜ ์ œ์–ด๊ถŒ์„ `๋‹ค๋ฅธ ์ฃผ์ฒด`์—๊ฒŒ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด์—์š”.

 

 

        ๐Ÿ“ฆ DI(Dependency Injection) - ์˜์กด์„ฑ ์ฃผ์ž…

DI๋ž€? ํ•„์š”๋กœ ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ž์‹ ์—๊ฒŒ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์™ธ๋ถ€(Spring)์—์„œ ์ƒ์„ฑํ•˜์—ฌ ์ด์šฉํ•˜๋ ค๋Š” ๊ฐ์ฒด์— ์ฃผ์ž… ์‹œ์ผœ ์ฃผ๋Š” ๊ฒƒ์„ ๋งํ•˜๋Š” ๊ฒƒ์ด์—์š”.

์ง์ ‘ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ์˜์กด์„ฑ์ด ๋†’์ง€๋งŒ, DI์™€ ๊ฐ™์ด ์™ธ๋ถ€์—์„œ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•˜๊ฒŒ ๋˜๋ฉด ์˜์กด์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์—์š”.

 

 

        ๐Ÿ“ฆ POJO(Plain Old Java Object)

POJS๋ž€? ๋ง ๊ทธ๋Œ€๋กœ ํ‰๋ฒ”ํ•˜๊ณ , ์˜ค๋ž˜๋œ JAVA ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด์—์š”. ์ด๋Š” `Spring`์—์„œ ๊ฐ์ฒด๊ฐ„ ๊ด€๊ณ„๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ, ๋ณ„๋„์˜ API๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š๊ณ , JAVA Code๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Œ์„ ๋œปํ•˜๋Š” ๊ฒƒ์ด์—์š”. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ Code์„ ์ž‘์„ฑํ•  ๋•Œ, ํŠน์ • Library๋‚˜, Container ๊ธฐ์ˆ ์— ์ข…์†๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๊ฒƒ์ด์—์š”.

 

 

        ๐Ÿ“ฆ AOP(Aspect Oriented Programming)

AOP๋ž€? ๊ฐœ๋ฐœ์ž๊ฐ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—๋งŒ ์ง‘์ค‘ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ˜๋“œ์‹œ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๋ถ€๋ถ„(์˜ˆ: ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ = cross-cutting concerns)์„ Module๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์ผ์ปซ๋Š” ๊ฒƒ์ด์—์š”. `Spring`์—์„œ๋Š” AOP๋ฅผ `AspectJ`์˜ ๋ฌธ๋ฒ•์„ ํ†ตํ•ด ๊ตฌํ˜„ํ•˜๋Š”๋ฐ, ์ด๋ฅผ ํ†ตํ•ด ์•„๋ž˜์˜ ํšจ๊ณผ๋ฅผ ์–ป๋Š” ๊ฒƒ์ด์—์š”.

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

 

 

 

    ๐Ÿ”ฝ  Spring VS Spring Boot

`Spring Boot`๋Š” Tomcat๊ณผ ๊ฐ™์€ ๋‚ด์žฅ Server๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด์—์š”. `Spring`์˜ ๊ฒฝ์šฐ Tomcat์— ํ•ด๋‹นํ•˜๋Š” jar ํŒŒ์ผ์„ ์ง์ ‘ ๋‚ด๋ ค ๋ฐ›์•„ ์„ค์น˜ํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ Server ์„ค์ • ๋ฐ Version ๊ด€๋ฆฌ๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•˜์ง€๋งŒ, `Spring Boot`๋Š” ๋‚ด์žฅ Tomcat์œผ๋กœ ์ธํ•ด ์„ค์น˜์™€ Version ๊ด€๋ฆฌ๋ฅผ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋˜๋Š” ๊ฒƒ์ด์—์š”.

`Spring`์—์„œ๋Š” `Servlet-context`, `root-context`์™€ ๊ฐ™์€ XML ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜์—ฌ Web๊ณผ ๊ด€๋ จ๋œ ์„ค์ • ๋ฐ ํ”„๋กœ์ ํŠธ ๋‚ด ์˜์กด์„ฑ์„ ์ง์ ‘ ๊ด€๋ฆฌํ•ด์ฃผ์–ด์•ผ ํ–ˆ์œผ๋‚˜, `Spring Boot`๋Š” ์ž๋™์œผ๋กœ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด์—์š”. 

 

 

 

 

 

 

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•