[spring] Spring ๊ณผ Spring Boot ์˜ ์ฐจ์ด

    'Java'์˜ ๋Œ€ํ‘œ์ ์ธ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ํ”„๋ ˆ์ž„์›Œํฌ(Framework)์ธ 
    "spring"๊ณผ "spring boot"

     

    ๊ทธ๋ž˜์„œ ๊ทธ๊ฒŒ ๋ญ” ์ฐจ์ด์ธ๊ฑด๋ฐ? ์˜€๋˜ ์ดˆ๊ธฐ ๋‚ด ๊ถ๊ธˆ์ฆ์„ ์œ„ํ•ด ์ •๋ฆฌํ–ˆ๋˜ ๋‚ด์šฉ์ด๋‹ค.


    Spring

    spring(= spring framework) ์€ Java ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์ง€์›ํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.

     

    spring ๊ณต์‹๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด, 

    ๋”๋ณด๊ธฐ

    " the fact that Spring represented a fresh start after the "winter" of traditional J2EE. "

    -> ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ฒจ์šธ์ด ๋๋‚˜๊ณ  ๋ด„์ด ์ฐพ์•„์™”๋‹ค ๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ((((((๊ฝค๋‚˜ ๊ท€์—ฌ์›Œ,,,ใ…Ž)))))))

     

    ์ด ์Šคํ”„๋ง์„ ์กฐ๊ธˆ ๋” ์ •๋ฆฌํ•˜์ž๋ฉด

    : ์ˆœ์ˆ˜ ์ž๋ฐ” ๊ฐ์ฒด์ธ POJO ๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์žก์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋‹จ์ˆœํ•˜๊ณ  ๊ฐ€๋ฒผ์šด ์ฝ”๋“œ๋กœ ๊ธฐ์—…์šฉ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ๊ฐœ๋ฐœ๋œ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.

    ๋”๋ณด๊ธฐ

    ์ด๋•Œ POJO ๋Š”  Plain Old Java Object ์˜ ์•ฝ์–ด๋กœ 

    ํŠน์ •ํ•œ ๊ทœ์•ฝ์ด๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ์— ์ข…์†๋˜์ง€ ์•Š๋Š” ๊ฐ„๋‹จํ•˜๊ณ  ์ˆœ์ˆ˜ํ•œ ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

    ๊ฐ์ฒด์ง€ํ–ฅ ๊ฐœ๋ฐœ์˜ ์›์น™์— ์ถฉ์‹คํ•œ ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ํŠน์ •ํ•œ ์ œ์•ฝ์ด๋‚˜ ์š”๊ตฌ์‚ฌํ•ญ์— ์ข…์†๋˜์ง€ ์•Š๊ณ  ์œ ์—ฐํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

     

    ์ด spring ์˜ ํŠน์ง•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ฉด ํฌ๊ฒŒ 4๊ฐ€์ง€ ์ •๋„๋กœ ์ด์•ผ๊ธฐ ํ•  ์ˆ˜ ์žˆ๋‹ค.

    Spring ์˜ ํŠน์ง• 

    1. ์ œ์–ด ์—ญ์ „ : IoC ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ฐ์ฒด์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•œ๋‹ค. 

    2. ์˜์กด์„ฑ ์ฃผ์ž… : ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•ด ์œ ์—ฐ์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค. 

    3. AOP ์ง€์› (๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ) : ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ(๋กœ๊น… ์ด๋‚˜ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋“ฑ)์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ชจ๋“ˆํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. 

    4. ์›น ๊ฐœ๋ฐœ ์ง€์› : ๋‹ค์–‘ํ•œ ์›น ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต์„ ์ œ๊ณตํ•˜๋ฉฐ MVC ์•„ํ‚คํ…์ฒ˜์˜ ์ง€์›์œผ๋กœ ์œ ์—ฐํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์›น ๊ฐœ๋ฐœ์„ ์ง€์›ํ•œ๋‹ค. 

     

    ํ•˜์ง€๋งŒ, ์ด Spring Framework๋Š” ๋ฌธ์ œ์ ์ด ๊ฝค ์žˆ๋‹ค.

    Spring ์˜ ๋ฌธ์ œ์ 

    ๋”๋ณด๊ธฐ

    spring์€ 

     

    1. ๋งŽ์€ ์„ค์ •๊ณผ ๊ตฌ์„ฑ์ด ํ•„์š”ํ•ด ๋งค์šฐ ๋ณต์žกํ•˜๋‹ค. 

    2. ํ•™์Šต์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์ด ๋„ˆ๋ฌด ๋งŽ๋‹ค.

    3. ์˜์กด์„ฑ ์ฃผ์ž…์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด XML ์„ค์ • ํŒŒ์ผ์— ์ˆ˜๋งŽ์€ ๋นˆ(Bean)์„ ๋“ฑ๋กํ•˜๋Š” ๋“ฑ ์˜์กด์„ฑ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ต๋‹ค.

    4. ๋ณ„๋„์˜ WAS๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ํ•ด์„œ ์„œ๋ฒ„ ๊ตฌ์„ฑ์ด ๋ฒˆ๊ฑฐ๋กญ๊ณ  ์–ด๋ ต๋‹ค. 


    Spring Boot 

    ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” "์Šคํ”„๋ง์˜ ๋ฌธ์ œ์ "์„ ํ•ด๊ฒฐํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๋œ ํ”„๋ ˆ์ž„์›Œํฌ๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. 

    ๊ฐ„๋‹จํ•œ ์„ค์ •๊ณผ ๊ตฌ์„ฑ์„ ํ†ตํ•ด ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐœ๋ฐœ์„ ๋น ๋ฅด๊ฒŒ ๋„์™€์ค€๋‹ค. 

    ์ฆ‰, Spirng Framework์˜ ์ƒ์œ„๋ฒ„์ „ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜๋„ ์žˆ๋‹ค.

     

    Spring Boot ํŠน์ง• 

    ๋”๋ณด๊ธฐ

    spring boot ๋Š” 

    ๊ธฐ๋ณธ์ ์ธ ์„ค์ •๊ณผ ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ(=์—ฌ๋Ÿฌ๋ฒˆ ์žฌ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ)์˜ ์ž‘์„ฑ์„ ์ตœ์†Œํ™” ์‹œํ‚ค๋ฉฐ, 

    ์ž๋™ ์„ค์ •๊ณผ ์ปจ๋ฒค์…˜์„ ์ง€์›ํ•ด์ค€๋‹ค. 

     

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

    ๋‹ค์–‘ํ•œ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ๋Šฅ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ ๋“ฑ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

    1. ์˜์กด์„ฑ ๊ด€๋ฆฌ ๊ฐ„์†Œํ™” : ์—ฌ๋Ÿฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์˜ ๋ฌถ์Œ ํŒจํ‚ค์ง€๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์˜์กด์„ฑ ์„ธํŠธ๋ฅผ ํ†ตํ•ด ๋ฒ„์ „ ์ถฉ๋Œ์ด๋‚˜ ๋ณต์žกํ•œ ์˜์กด์„ฑ ์„ค์ •์˜ ๋ถ€๋‹ด์„ ์ค„์ธ๋‹ค. 

    2. ๋‚ด์žฅ ์„œ๋ฒ„ : ๋‚ด์žฅ Tomcat, Jetty, Undertow ๋“ฑ ๋‚ด์žฅ๋œ ์„œ๋ฒ„๋“ค์„ ์ œ๊ณตํ•˜์—ฌ ๋ณ„๋„์˜ ์„œ๋ฒ„ ์„ค์น˜์—†์ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋‹ค. 

    3. ๊ฐ„๊ฒฐํ•œ ์„ค์ • : ๋ฒˆ๊ฑฐ๋กœ์šด XML ์„ค์ •์ด ํ•„์š”์—†์œผ๋ฉฐ, ์ตœ์†Œํ•œ์˜ ์„ค์ •์œผ๋กœ spring ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

     

     

    ๊ทธ๋ ‡๋‹ค๋ฉด ์ด spring boot๋Š” ์–ด๋–ค ์ƒํ™ฉ์— ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ• ๊นŒ? 

    Spring Boot ์˜ ํ™œ์šฉ

    1. ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ : ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ์ผ๊ด„์ž‘์–ธ, ์ •๊ธฐ์ ์ธ ์Šค์ผ€์ค„๋ง ์ž‘์—…๋“ฑ์„ ํšจ๊ณผ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

    2. ๋ณด์•ˆ๊ณผ ์ธ์ฆ : "์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ" ์˜ ์ œ๊ณต์œผ๋กœ ์‚ฌ์šฉ์ž ์ธ์ฆ, ๊ถŒํ•œ ๋ถ€์—ฌ, ์„ธ์…˜ ๊ด€๋ฆฌ๋“ฑ ๋ณด์•ˆ๊ณผ ์ธ์ฆ์— ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. 

    3. ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ : ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜, ์ปจํ…Œ์ด๋„ˆํ™”, ์Šค์ผ€์ผ๋ง, ๋กœ๊น… ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ๋“ฑ์„ ์ง€์›ํ•˜์—ฌ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ์˜ ๊ฐœ๋ฐœ๊ณผ ๋ฐฐํฌ๊ฐ€ ์šฉ์ดํ•˜๋‹ค. 

    4. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ : RESTful API, ์›น ์„œ๋น„์Šค, ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ๋“ฑ ๋‹ค์–‘ํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋‚ด์žฅ๋œ ํ†ฐ์บฃ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ ์„œ๋ฒ„์— ๋ฐฐํฌ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. 

    5. ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์•ก์„ธ์Šค : JDBC, JPA, Spring Data JPA ๋“ฑ์„ ํ†ตํ•ด DB ์•ก์„ธ์Šค๊ฐ€ ๊ฐ„๋‹จํ•˜๋ฉฐ ์—ฐ๋™์— ํ•„์š”ํ•œ ์„ค์ •๊ณผ ๊ด€๋ จ ์ž‘์—…๋“ค์„ ์ž๋™ํ™” ์‹œ์ผœ์ค€๋‹ค.

    ๋Œ“๊ธ€