Skip to content

Latest commit

ย 

History

History
164 lines (99 loc) ยท 10.9 KB

Why Spring Boot.md

File metadata and controls

164 lines (99 loc) ยท 10.9 KB

J2EE๋ž€? (=Java EE)

Java 2 Enterprise Edition์œผ๋กœ ์ž๋ฐ” ๊ธฐ์ˆ ๋กœ ๊ธฐ์—… ํ™˜๊ฒฝ์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ๋ฐ ํ•„์š”ํ•œ ์ŠคํŽ™์˜ ์ง‘ํ•ฉ์ด๋‹ค. J2EE๋ฅผ ๋งŒ๋“ ๊ฒƒ์€ Sun Microsystems์ด๊ณ  SUN์—์„œ J2EE์ŠคํŽ™์„ ์‹œ๋ฒ”์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜์ง€๋งŒ Java์ง„์˜ ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ฐ™์ด ๋งŒ๋“ค์–ด๊ฐ€๊ณ  ๊ณต์œ ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋ผ๊ณ  ๋ณผ์ˆ˜์žˆ๋‹ค.

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šคํ…œ์ด๋ž€?

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


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

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋Š” (๋น„์ฆˆ๋‹ˆ์Šค์™€ ๊ด€๋ จ๋œ) ๊ฐ์ฒด๊ฐ€ ๋งŽ๋‹ค. ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค์–ด ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์ปจํ…Œ์ด๋„ˆ๋กœ๋ถ€ํ„ฐ ๊ฐ์ฒด๋ฅผ ๋ฐ›๋Š” ์‹์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉด ์ข‹๊ฒ ๋‹ค๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ EJB๊ฐ€ ํƒ„์ƒํ•˜์˜€๋‹ค. EJB์˜ ๋“ฑ์žฅ์œผ๋กœ ๊ฐœ๋ฐœ์ž๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๊ฐ–์ถ”์—ˆ์ง€๋งŒ ๊ทธ๋Ÿผ์—๋„ ๊ธฐ์—…ํ˜• ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ EJB๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ค์› ๋‹ค.

  1. ๋„ˆ๋ฌด ๋งŽ์€ ์ž‘์—… ์ˆ˜ํ–‰์„ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์š”๊ตฌํ–ˆ๋‹ค.

  2. ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ํŠน์ง•๊ณผ ์žฅ์ ์„ ํฌ๊ธฐํ•ด์•ผ ํ–ˆ๋‹ค.

    EJB ๋นˆ์€ ์ƒ์†๊ณผ ๋‹คํ˜•์„ฑ๋“ฑ์˜ ํ˜œํƒ์„ ์ œ๋Œ€๋กœ ๋ˆ„๋ฆด ์ˆ˜๊ฐ€ ์—†๋‹ค.

  3. ์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋ณด๋‹ค EJB ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๋“ค์ด ๋งŽ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

    EJB๋Š” ์นจํˆฌ์ ์ด๋‹ค. EJB ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ฐœ๋ฐœ์˜ ๋ณต์žก๋„๋ฅผ ์ œ๊ฑฐํ–ˆ์ง€๋งŒ ํ•œํŽธ์œผ๋กœ ๋” ๋งŽ์€ ๋ฌธ์ œ์™€ ๋ณต์žก์„ฑ์„ ๊ฐ€์ง€๊ณ  ์™”๋‹ค.

    ์นจํˆฌ์ ์ด๋ผ๋Š” ๊ฒƒ์€ ํŠน์ • ๊ธฐ์ˆ ์„ ์ ์šฉํ•˜๋ ค๋ฉด ๊ทธ ๊ธฐ์ˆ ์—์„œ ํ•˜๋ผ๋Š” ๋Œ€๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•ด ์ฃผ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Spring์€ ๋น„์นจํˆฌ์ ์ธ ๋ฐ˜๋ฉด EJB๋Š” ์นจํˆฌ์ ์ด๋‹ค.

์ปจํ…Œ์ด๋„ˆ๋กœ๋ถ€ํ„ฐ ๊ฐ์ฒด๋ฅผ ๋ฐ›๋Š” ์‹์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉด ์ข‹๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ. ๐Ÿ‘‰ Enterprise ๊ฐœ๋ฐœ์„ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด EJB ํƒ„์ƒ. ๐Ÿ‘‰ ์—ฌ์ „ํžˆ ๊ฐœ๋ฐœ์ด ์–ด๋ ค์›€.


์ด๋Ÿฐ ์–ด๋ ค์›€์ด ์žˆ๋˜ ์‹œ๊ธฐ๋ฅผ ๊ฐœ๋ฐœ์ž๋“ค์€ Java์˜ ๊ฒจ์šธ์— ๋น„์œ ํ–ˆ๊ณ  ์ƒˆ๋กœ ๋‚˜์˜จ J2EE Framework๋ฅผ ๊ทธ ๊ฒจ์šธ์ด ๋๋‚˜๊ณ  ๋ด„์ด ์ฐพ์•„์˜ค๊ฒŒ ๋  ๊ฒƒ์ด๋ผ๋Š” ์˜๋ฏธ๋กœ ๐ŸŒฑ ์Šคํ”„๋ง์ด๋ผ๊ณ  ์ด๋ฆ„ ์ง“๋Š”๋‹ค. ํŠน์ • ๊ธฐ์ˆ ์— ์ข…์†๋˜์ง€ ์•Š๊ณ  (๊ธฐ์ˆ  ๋น„์นจํˆฌ์ ) ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์Šคํ”„๋ง์˜ ๊ธฐ๋ณธ ์ฒ ํ•™์ด๋‹ค.


Spring Framework

์ž๋ฐ” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ฐœ๋ฐœ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์˜คํ”ˆ ์†Œ์Šค ๊ฒฝ๋Ÿ‰๊ธ‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํŠน์ • ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ถˆํŽธํ•จ์„ ํ•ด์†Œ์‹œํ‚ค๊ณ ์ž ๋“ฑ์žฅํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์Šคํ”„๋ง์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„ ์›Œํฌ๋ผ๋Š” ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ? ์ด๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ถˆํŽธํ•จ์„ ํ•ด์†Œํ•˜๊ณ ์ž ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

๊ฒฝ๋Ÿ‰๊ธ‰? ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ฌด๊ฒ์ง€ ์•Š๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด ์ฝ”๋“œ ์ˆ˜๋Š” ์—„์ฒญ๋‚˜๋‹ค. ํ•˜์ง€๋งŒ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ตœ์†Œํ•œ์˜ ์ฝ”๋“œ๋งŒ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

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

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ์˜ ๊ฐœ๋ฐœ์ด ํŽธ๋ฆฌํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šคํ”„๋ง์ด ๋‚˜ํƒ€๋‚ฌ๋‹ค. ์—ญ์‹œ ์Šคํ”„๋ง์˜ ๋ชฉ์ ์€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ํŽธํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ˜„์žฌ ์ „์ž์ •๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ (eGov)๊ฐ€ ์Šคํ”„๋ง์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์—ฌ ๋งŒ๋“ค์–ด์กŒ๋‹ค.

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

๋ณต์žกํ•จ์„ ์ƒ๋Œ€ํ•˜๋Š” ์Šคํ”„๋ง ์ „๋žต์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ๋ถ„์ด ์ •๋ฆฌํ•œ ๊ธ€์ด๋‹ค.

์™œ ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ• ๊นŒ์— ๊ด€ํ•ด ๋‹ค๋ฅธ ๋ถ„์ด ์ •๋ฆฌํ•œ ๊ธ€์ด๋‹ค.


DI์™€ IOC

์Šคํ”„๋ง์˜ ๊ฐ€์žฅ ์ข‹์€ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋Š” DI๋ฅผ ์ง€์›ํ•ด ๋Š์Šจํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•œ ํด๋ž˜์Šค๋ฅผ ์ˆ˜์ •ํ–ˆ์„ ๋•Œ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์„ ๋ง‰์•„์ค€๋‹ค. (๋Š์Šจํ•˜๊ฒŒ ๊ฐœ๋ฐœ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์‰ฝ๊ฒŒ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.) ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋˜ ๊ฒƒ์„ Spring์˜ IOC Container๊ฐ€ ๋Œ€์‹  ํ•ด ์ค€๋‹ค.

<์˜์กด์„ฑ ์ฃผ์ž…์ด ์—†๋Š” ์˜ˆ์‹œ>

์•„๋ž˜๋ฅผ ๋ณด๋ฉด A๋Š” new๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ B์— ์˜์กดํ•œ๋‹ค.

class A {
    private B b;
    
    public A() {
        this.b = new B();
    }
}

<์˜์กด์„ฑ ์ฃผ์ž…์ด ์žˆ๋Š” ์˜ˆ์‹œ>

@Component๋‚˜ @Autowired ๊ฐ™์€ ์• ๋…ธํ…Œ์ด์…˜์œผ๋กœ ์‰ฝ๊ฒŒ B๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

@Autowired
private B b;
public class A {
	private final B b;

	@Autowired
	public A(B b) {
		this.b = B;
	}
}

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด B๊ฐ€ ๋ณ€ํ™”๋˜๋”๋ผ๋„ A๋Š” ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ง„๋‹ค.


์Šคํ”„๋ง์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์žฅ์  ์ž˜ ์•Œ์•˜๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Spring Boot๋Š” ์™œ ์“ธ๊นŒ?

Spring Boot

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ธฐ๋Šฅ์ด ๋งŽ์€ ๋งŒํผ ํ™˜๊ฒฝ ์„ค์ •์ด ๋ณต์žกํ•œ ํŽธ์ด๋‹ค. ์ด์— ์–ด๋ ค์›€์„ ๋Š๋ผ๋Š” ์‚ฌ์šฉ์ž๋“ค์„ ์œ„ํ•ด ๋‚˜์˜จ ๊ฒƒ์ด ๋ฐ”๋กœ ์Šคํ”„๋ง ๋ถ€ํŠธ๋‹ค. ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ •์˜ ๋งŽ์€ ๋ถ€๋ถ„์„ ์ž๋™ํ™”ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ •๋ง ํŽธํ•˜๊ฒŒ ์Šคํ”„๋ง์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค.

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run".


์„ค์ • ์ž๋™ํ™”: Spring Boot Starter

  1. ์„ค์ • ์ž๋™ํ™”.
  2. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „ ์ž๋™ ๊ด€๋ฆฌ.

Spring์—์„œ๋Š” ์—ฌ๋Ÿฌ ์˜์กด์„ฑ์„ xml ํŒŒ์ผ์— ์ง์ ‘ ์„ค์ •ํ•ด์•ผํ–ˆ๋‹ค. Spring Boot๋Š” Starter์„ ์ด์šฉํ•ด ํ”„๋กœ์ ํŠธ์— ์„ค์ •ํ•ด์•ผ ํ•  ๋‹ค์ˆ˜์˜ ์˜์กด์„ฑ๋“ค์„ ์‚ฌ์ „์— ๋ฏธ๋ฆฌ ์ •์˜ํ•ด ์ œ๊ณตํ•œ๋‹ค.

์˜ˆ) spring-boot-starter-jpa ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ jpa๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“ˆ์„ ๋”ฐ๋กœ ์ •๋ฆฌํ•˜๊ณ  ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. spring-boot-starter-web ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ json, webmbc์˜ ๋ชจ๋“ˆ์€ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฒ„์ „ ์ถฉ๋Œ ๋ฌธ์ œ๋„ ํ•ด๊ฒฐํ•ด ์ค€๋‹ค. ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ์‹œ ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „ ๊ฐ„ ์ถฉ๋Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ starter์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜์กด์„ฑ ๋ฒ„์ „๋„ ๊ถŒ์žฅ ๋ฒ„์ „์œผ๋กœ ์ž๋™ ์„ค์ •๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๋Š” ๋ฒ„์ „ ์ถฉ๋Œ ๋ฌธ์ œ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๊ณ  ์˜์กด์„ฑ์„ ์„ค์ •ํ•˜๊ธฐ ํ›จ์”ฌ ์‰ฌ์›Œ์ง„๋‹ค.

start์— ์žˆ๋Š” ์„ค์ •์ด ์–ด๋–ป๊ฒŒ ์ž๋™์œผ๋กœ ์ ์šฉ๋˜๋Š”๊ฑธ๊นŒ.


๋‚ด์žฅ ํ†ฐ์บฃ

์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ํฌํ•จ๋œ org.springframework.boot.autoconfigure.web.servlet ์—์„œ ServletWebServerFactoryAutoConfiguration.java ๋ฅผ ์—ด์–ด๋ณด๋ฉด ๋‚ด์žฅ Tomcat์„ ์‚ฌ์šฉํ• ์ง€, Jetty๋ฅผ ์‚ฌ์šฉํ• ์ง€, Undertow๋ฅผ ์‚ฌ์šฉํ• ์ง€์— ๋Œ€ํ•œ ์„ค์ •์ด ์žˆ๋‹ค.

org.springframework.boot.web.embedded.tomcat ์—์„œ TomcatServletWebServerFactory.java ๋ฅผ ์—ด์–ด๋ณด๋ฉด ํ†ฐ์บฃ์„ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค. ์ฆ‰, ์ž๋™ ์„ค์ • ์•ˆ์— ํ†ฐ์บฃ๊ณผ ์„œ๋ธ”๋ฆฟ ๋“ฑ ์›น ์„œ๋ฒ„ ๊ธฐ๋ณธ ์„ค์ •๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ๊ณ , ๋”ฐ๋ผ์„œ ๋‹จ์ง€ main()์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ†ฐ์บฃ์ด ์ƒ์„ฑ๋˜๊ณ  ์„œ๋ธ”๋ฆฟ์ด ์ถ”๊ฐ€๋˜์–ด ์„œ๋ฒ„๋ฅผ ๊ตฌ๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ†ฐ์บฃ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

=> Jar ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์›น ํ”„๋กœ์ ํŠธ๋ผ๋ฉด War ํŒŒ์ผ๋กœ ํŒจํ‚ค์ง•์„ ํ•ด์•ผํ•˜๋Š”๋ฐ Spring Boot๋Š” ๋‚ด์žฅ ํ†ฐ์บฃ์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Jar ํŒŒ์ผ๋กœ ํŒจํ‚ค์ง•ํ•ด์„œ๋„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

์ด ์™ธ์˜ ์žฅ์ ๋“ค.


Gradle vs Maven

Why do I use Gradle?

Maven์€ pom.xml์„ ์ด์šฉํ•œ ์ •ํ˜•ํ™”๋œ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด๋‹ค. Apache์˜ ์ด๋ฆ„ ํ•˜์— Ant๋ฅผ ์‚ฌ์šฉํ•˜๋˜ ๊ฐœ๋ฐ”์ž๋“ค์˜ ๋ถˆํŽธํ•จ์„ ํ•ด์†Œํ•˜๊ณ  ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

Gradle์€ Groovy ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ณ  Groovy๋Š” JVM์—์„œ ์‹คํ–‰๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋กœ ๋ฌธ๋ฒ•์ด ์ž๋ฐ”์™€ ๊ฐ€๊น๋‹ค.

XML์œผ๋กœ Build๋ฅผ ์ •์˜ํ•˜๊ธฐ์—” ์„ค์ • ๋‚ด์šฉ์ด ๊ธธ์–ด์ง€๊ณ  ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง„๋‹ค. ๋˜ Gradle์ด Maven๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๋‹ค.

๊ทธ๋Ÿผ์—๋„ ํ˜„์žฌ Maven์ด Gradle๋ณด๋‹ค ์‚ฌ์šฉ๋ฅ ์ด ์•ž์„œ๋Š” ์ด์œ ๋Š” ๋‹จ์ง€ ๋Ÿฌ๋‹์ปค๋ธŒ ๋•Œ๋ฌธ์ธ ๊ฒƒ ๊ฐ™๋‹ค.


WAR vs JAR

Java ARchive๋Š” path ์ •๋ณด๋ฅผ ์œ ์ง€ํ•œ ์ƒํƒœ๋กœ ์••์ถ•ํ•œ๋‹ค. Java ํด๋ž˜์Šค ํŒŒ์ผ๊ณผ, ๊ฐ ํด๋ž˜์Šค๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ๊ด€๋ จ ๋ฆฌ์†Œ์ŠคํŒŒ์ผ ๋ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์••์ถ•ํ•œ ํŒŒ์ผ์ด๋‹ค. = ํด๋ž˜์Šค ํŒŒ์ผ์„ ์••์ถ•.

์—ฌ๊ธฐ์„œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ž€?

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ฒ˜๋ฆฌํ•ด์•ผํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ ์ปดํŒŒ์ผ ๊ณผ์ •๊ณผ ์‹คํ–‰ ๊ณผ์ •์—์„œ ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ปดํŒŒ์ผํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ์ง€ ์•Œ๋ ค์ฃผ๋Š” ์ •๋ณด์ด๋‹ค. ex ์• ๋…ธํ…Œ์ด์…˜

Web application ARchive๋Š” ์›น ํ”„๋กœ์ ํŠธ์—์„œ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์ตœ์†Œํ•œ์˜ ๋‹จ์œ„์ด๋‹ค. ๊ทธ๋ž˜์„œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•  ์ง€์— ๋Œ€ํ•œ ์ •์˜๊ฐ€ ์žˆ๋Š” web.xml ํŒŒ์ผ์ด ์žˆ๊ณ , application์„ ๊ตฌ์„ฑํ•  ๋•Œ ํ•„์š”ํ•œ ์ž์›์„(์ž๋ฐ” ์„œ๋ธ”๋ฆฟ, ์ •์  ์›นํŽ˜์ด์ง€ ๋“ฑ) ์••์ถ•ํ•œ Jar ํŒŒ์ผ์ด๋‹ค. war๋กœ ์˜ฌ๋ฆฌ๋ฉด WAS (Web Application Server)๊ฐ€ ์••์ถ•์„ ํ•ด์ œํ•˜์—ฌ ๋ฐฐํฌํ•ด์ค€๋‹ค. (web.xml์ด ์žˆ๋Š” ์ด์œ .) = ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ†ต์งธ๋กœ ์••์ถ•.

Jar๊ฐ€ ๊ฐ€์žฅ ์ ์€ ์••์ถ• ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  War์€ Jar์˜ ๋ชจ๋“  ํŒŒ์ผ + War๋งŒ์˜ ํŒŒ์ผ์„ ๋” ์••์ถ•ํ•œ๋‹ค.