๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
SpringBoot/์ดํ•ด์™€ ์›๋ฆฌ

Containerless์™€ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ํ”„๋กœ๊ทธ๋žจ(standalone application)

by ๐Ÿณ Laboon 2024. 3. 4.

 

๋ณดํ†ต ๋ฌด์–ธ๊ฐ€๊ฐ€ ํ•„์š” ์—†์„ ๋•Œ less๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 

Containerless๋Š” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ Container๊ฐ€ ํ•„์š”์—†๋‹ค๋Š” ๋œป์„ ๊ฐ€์ง€๊ฒŒ ๋˜๋Š”๋ฐ,

์ด๊ฒƒ์ด ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ์‹œ์ž‘๋˜๋Š” ๋ฐฐ๊ฒฝ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

Container?

 

๋ชจ๋“ˆ๊ณผ ์ปดํฌ๋„ŒํŠธ, ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ํฌ์ŠคํŠธ๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๊ณ  ์˜ค๋ฉด ์ข‹๋‹ค.

์œ„ ํฌ์ŠคํŠธ์—์„œ ๋ชจ๋“ˆ๊ณผ ์ปดํฌ๋„ŒํŠธ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™์—์„œ ์ •์˜ํ•œ ๋‚ด์šฉ์ด๋‹ค.

์ด ํฌ์ŠคํŠธ์˜ ์ปดํฌ๋„ŒํŠธ๋Š” FrontEnd์—์„œ ์„ค๋ช…ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์™€ BackEnd์—์„œ ์„ค๋ช…ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํŒŒ์ƒ ๋œ ๊ฒƒ.

์šฐ๋ฆฌ๊ฐ€ ์›น, ์•ฑ์—์„œ ํŠน์ • ๊ธฐ๋Šฅ๋“ค(๊ธ€์“ฐ๊ธฐ, ๋ฉ”์ผ ์ž‘์„ฑ, ...)์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด FrontEnd์—์„œ ๋ณด์ด๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฐฑ์—”๋“œ์˜ ์ปดํฌ๋„ŒํŠธ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์šฐ๋ฆฌ์—๊ฒŒ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ฒŒ ๋œ๋‹ค.

 

SpringBoot๋Š”  Java ๊ธฐ๋ฐ˜ FrameWork์ด๋‹ค.

Java์—์„œ Container๋Š” Servlet Container๋ผ๊ณ  ๋ถ€๋ฅด๊ณ  Component๋ฅผ Servlet์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

Spring์—์„œ๋Š” Container๋ฅผ Spring Container๋ผ๊ณ  ๋ถ€๋ฅด๊ณ  Component๋ฅผ Bean์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์ฆ‰, ์›น์—์„œ Resource๋ฅผ Requestํ•˜๋ฉด Servlet Container์˜ Component๋ฅผ ํ†ตํ•ด Spring Container์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

Servlet Container๋ฅผ ํ†ตํ•ด Spring Container์—์„œ ์ž‘์—…์„ ์™œ ํ•˜๋Š”๊ฐ€?

Java์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ์›น ๊ธฐ์ˆ ์€ Servlet Container๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋„์‹ํ™”

์ฆ‰, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ํ•˜๋ฉด Spring Container์—์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  Response ๋ฐ›๋Š” ํ˜•ํƒœ์ด๋‹ค.

Spring ์ž…์žฅ์—์„œ Servlet์ด Bean์ด๋ผ๊ณ  ํ•ด์„œ Servlet = Bean์ด ์•„๋‹ˆ๋‹ค.

Servlet์€ Servlet Container์˜ Component ์ด๊ณ  Bean์€ Spring Container์˜ Component์™€ ๊ฐ™์€ ๊ฒƒ์ด๋‹ค.

์ฆ‰, servlet์€ bean๋“ค๋กœ ๊ตฌ์„ฑ์ด ๋˜์–ด client์—๊ฒŒ response ํ•˜๊ฒŒ ๋œ๋‹ค.

 

Containerless

 

๊ทธ๋Ÿผ ์šฐ๋ฆฌ๋Š” Spring์—์„œ Servlet์„ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด Spring์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Servlet Container์—์„œ ํ˜ธ์ถœํ•ด์•ผ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์šฐ๋ฆฌ๋Š” ์ €๋Ÿฐ Servlet Container๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์„ Was(WebApplicationServer)๋ผ๊ณ  ํ•œ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค ํฌ์ŠคํŠธ๋ฅผ ์ฐธ๊ณ ํ•ด๋ณด์ž.

Servlet Container๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ Spring์˜ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํ•˜๋‚˜์˜ Interface๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ, ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด?

1. ์šฐ๋ฆฌ๋Š” Spring ์ž‘์—…์„ ์‹œ์ž‘ํ•  ๋•Œ ๋งˆ๋‹ค Web.xml๊ณผ ๊ฐ™์ด ์ดˆ๊ธฐ ์„ค์ •์„ ํ•ด์•ผํ•œ๋‹ค.

2. ์šฐ๋ฆฌ๋Š” Spring ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด Servlet์„ Buildํ•˜๊ณ  Deploy ํ•ด์•ผ ํ•œ๋‹ค.

3. ๊ทธ ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ์ž‘์—…๋“ค์ด ์žˆ์ง€๋งŒ ์œ„ ๊ณผ์ •๋“ค์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ง€์‹์ด ํ•„์š”ํ•˜๋‹ค.

์ฆ‰, ์ง„์ž…์žฅ๋ฒฝ์ด ๋†’์•„์ง„๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ์ค‘์š”ํ•œ ์ ์€ ์ด ์ž‘์—…์€ ํ”„๋กœ์ ํŠธ ๊ธฐ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์ž‘์—…์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

์œ„ ๊ณผ์ •๋“ค์€ ๊ณตํ†ต๋œ ์ž‘์—…์ธ๋ฐ ์ง„์ž…์žฅ๋ฒฝ์ด ๋†’์œผ๋ฉด ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ• ๊นŒ?

ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„์ด ๊ธธ์–ด์งˆ์ˆ˜๋ก ์œ„ ๋‚ด์šฉ์„ ์žŠ๊ณ  ๋‹ค์‹œ ์ฐพ์•„๋ด์•ผํ•˜๋Š” ๋ฐ˜๋ณต ์ž‘์—…์ด ๋ฐœ์ƒํ•œ๋‹ค.

ํšจ์œจ์ด ๋„ˆ๋ฌด ๋–จ์–ด์ง€๊ฒŒ ๋˜๋Š” ๋ฌธ์ œ์ ์ด๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ Spring Frame Work๋ฅผ ์‚ฌ์šฉํ•  ์ค„ ์•ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

๋ณดํ†ต, Was๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด์„œ Tomcat์„ ์‚ฌ์šฉํ•ด์„œ ์ •์  ํŽ˜์ด์ง€๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

๊ทธ๋Ÿผ ์šฐ๋ฆฌ๋Š” Tomcat์„ ์‚ฌ์šฉํ•ด Servlet์„ ํ˜ธ์ถœํ•˜๊ณ  Spring ์œผ๋กœ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์‹ค๋ฌด์—์„œ Tomcat์ด ์•„๋‹Œ Jetty, Undertow์™€ ๊ฐ™์€ Servlet Conatiner๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด?

์šฐ๋ฆฌ๋Š” ๋˜ ๋‹ค์‹œ ๊ณต๋ถ€๋ฅผ ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฐ ์ด์œ  ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๋“ค์€ Spring ์ธก์œผ๋กœ๋ถ€ํ„ฐ ๋ถˆํŽธํ•จ์„ ํ˜ธ์†Œํ•˜๋Š” ISSUE๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.

์–ด์ฐจํ”ผ Container๋Š” ๊ณตํ†ต์ ์ธ ์ž‘์—…์ด๋ฏ€๋กœ ๋” ์ด์ƒ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๋„๋ก ๋งŒ๋“  ๊ฒƒ์ด Containerless๋ฅผ ์ฑ„ํƒํ•œ SpringBoot์ด๋‹ค.

 

์‡ผํ•‘์„ ํ•œ ๋ฒˆ ์ƒ๊ฐํ•ด๋ณด์ž.

1. ์šฐ๋ฆฌ๊ฐ€ ๋งˆํŠธ์—์„œ ๋ฌผ๊ฑด์„ ๊ตฌ๋งคํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

2. Container(์žฅ๋ฐ”๊ตฌ๋‹ˆ)๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋จผ์ € ๊ตฌ๋งคํ•˜๋ ค๋Š” ๋ฌผํ’ˆ๋“ค์„ ๊ณ ๋ คํ•ด์„œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ๋ฅผ ์„ ํƒํ•œ๋‹ค.

3. ๋ฌผ๊ฑด๋“ค์„ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด๊ณ  ํ•„์š” ์—†์„ ๊ฒฝ์šฐ ๋บ€๋‹ค. (๋ฌผ๋ฆฌ์ ์œผ๋กœ)

4. ์ง‘์— ๋„์ฐฉํ•  ๋•Œ๊นŒ์ง€ ์žฅ๋ฐ”๊ตฌ๋‹ˆ๋ฅผ ๋“ค๊ณ ์™€์•ผ ํ•œ๋‹ค.

Containerless๋ผ๋ฉด?

1. ๋ฌผ๊ฑด๋“ค์„ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด๊ณ  ๋บ„ ๋•Œ ๋ฌผ๊ฑด์„ ์ง์ ‘ ์˜ฎ๊ธธ ํ•„์š”๊ฐ€ ์—†๋‹ค. (ํด๋ฆญ๋งŒ)

2. ๋ฌผ๋ฆฌ์ ์ธ ์žฅ๋ฐ”๊ตฌ๋‹ˆ๊ฐ€ ํ•„์š”์—†๋‹ค. ํƒ๋ฐฐ๊ธฐ์‚ฌ๊ฐ€ ์•Œ์•„์„œ ์ฑ™๊ฒจ์ค€๋‹ค.

 

standalone application

 

๊ทธ๋Ÿผ, Containerless๋Š” ์•Œ๊ฒ ๋Š”๋ฐ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ํ”„๋กœ๊ทธ๋žจ์€ ๋ฌด์—‡์ธ๊ฐ€?

SpringBoot์—์„œ Containerless ์„ฑ์งˆ์ด ์žˆ์–ด๋„ ์–ด์จŒ๋“  Spring์˜ bean๋“ค์ด ๋™์ž‘ํ•˜๋ ค๋ฉด

Servlet Container๋Š” ์‹คํ–‰์ด๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋Ÿผ Containerless๊ฐ€ ์•„๋‹ˆ์ง€ ์•Š๋ƒ?

Containerless๋Š” container์— ๋Œ€ํ•œ ํˆฌ์ž๊ฐ€ ํ•„์š”์—†๋Š” ๊ธฐ์ˆ ์ด์ง€ container๊ฐ€ ์—†์–ด๋„ ๋˜๋Š” ๊ธฐ์ˆ ์ด ์•„๋‹ˆ๋‹ค.

SpringBoot๋Š” ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋“ค์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด tomcat๊ณผ ๊ฐ™์€ ServletContainer ๊ธฐ์ˆ ์ด ์‚ฌ์šฉ๋œ๋‹ค.

container์™€ ๊ด€๋ จ๋œ ๋‚ด์šฉ์„ ๋”ฐ๋กœ ์ž‘์„ฑํ•˜๊ณ  buildํ•˜์ง€ ์•Š์•„๋„(Containerless)

SpringBoot Project๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ˆœ๊ฐ„์— Container๋ฅผ ๊ฐ™์ด ๋„์šฐ๋Š” ์ž‘์—…์„ ํ•˜๋Š”๋ฐ

์ด๋Ÿฐ ๊ฒƒ์„ ๋…๋ฆฝ์‹คํ–‰ํ˜• ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๊ณ  ํ•œ๋‹ค.

 


์ฐธ๊ณ 

 

์ธํ”„๋Ÿฐ ํ† ๋น„์˜ ์Šคํ”„๋ง ๋ถ€ํŠธ - ์ดํ•ด์™€ ์›๋ฆฌ

 

ํ† ๋น„์˜ ์Šคํ”„๋ง ๋ถ€ํŠธ - ์ดํ•ด์™€ ์›๋ฆฌ ๊ฐ•์˜ - ์ธํ”„๋Ÿฐ

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

www.inflearn.com

https://inpa.tistory.com/entry/TOMCAT

 

[TOMCAT] ๐Ÿฑ ์•„ํŒŒ์น˜ ํ†ฐ์บฃ ๊ฐœ๋… ๊ตฌ์„ฑ & ์„ค์ • ๐Ÿ’ฏ ์ •๋ฆฌ

์•„ํŒŒ์น˜ (Apache) ์™€ ํ†ฐ์บฃ (Tomcat) ์•„ํŒŒ์น˜ (Apache) ์•„ํŒŒ์น˜ ์†Œํ”„ํŠธ์›จ์–ด ์žฌ๋‹จ์—์„œ ๋งŒ๋“  ์›น์„œ๋ฒ„(web server)๋ฅผ ์ผ์ปซ๋Š”๋‹ค. ๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” httpd ๋กœ ๋ช…๋ช…์ง€์–ด์ ธ ๋ฐฐํฌ๋œ๋‹ค. ์ •์ ์ธ ๋ฐ์ดํ„ฐ๋“ค (html, css ์ด๋ฏธ์ง€, ํŒŒ์ผ

inpa.tistory.com

ServletContainer vs SpringContainer

 

ServletContainer์™€ SpringContainer๋Š” ๋ฌด์—‡์ด ๋‹ค๋ฅธ๊ฐ€?

Controller 1๊ฐœ๋Š” ์–ด๋–ป๊ฒŒ ์ˆ˜์‹ญ ๋งŒ๊ฐœ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฐ€

sigridjin.medium.com

 

โ€ป ์ธํ”„๋Ÿฐ Toby์˜ SpringBoot ์ดํ•ด์™€ ์›๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

'SpringBoot > ์ดํ•ด์™€ ์›๋ฆฌ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Opinionated๊ณผ Out of the box  (0) 2024.03.04