DevLog ๐Ÿ˜ถ

[Spring] WAS, ์„œ๋ธ”๋ฆฟ, ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ์™€ ์Šค๋ ˆ๋“œ ํ’€ ๋ณธ๋ฌธ

Back-end/Spring

[Spring] WAS, ์„œ๋ธ”๋ฆฟ, ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ์™€ ์Šค๋ ˆ๋“œ ํ’€

dolmeng2 2022. 8. 8. 22:49

- ๊น€์˜ํ•œ ๋‹˜์˜ '์Šคํ”„๋ง MVC 1ํŽธ - ๋ฐฑ์—”๋“œ ์›น ๊ฐœ๋ฐœ ํ•ต์‹ฌ ๊ธฐ์ˆ '์„ ๋ณด๊ณ  ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค ๐Ÿ˜Š

 

์Šคํ”„๋ง MVC 1ํŽธ - ๋ฐฑ์—”๋“œ ์›น ๊ฐœ๋ฐœ ํ•ต์‹ฌ ๊ธฐ์ˆ  - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ ํ•„์š”ํ•œ ๋ชจ๋“  ์›น ๊ธฐ์ˆ ์„ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ดํ•ดํ•˜๊ณ , ์™„์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ง MVC์˜ ํ•ต์‹ฌ ์›๋ฆฌ์™€ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ณ , ๋” ๊นŠ์ด์žˆ๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., -

www.inflearn.com


 

| ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋ž€?

- ์›น์€ ๊ธฐ๋ณธ์ ์œผ๋กœ HTTP๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ†ต์‹ ์„ ํ•œ๋‹ค.

 

โœ” ์›น ์„œ๋ฒ„

→ HTTP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘

์ •์  ๋ฆฌ์†Œ์Šค ์ œ๊ณต ๋ฐ ๊ธฐํƒ€ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ

→ ์ •์  (ํŒŒ์ผ) HTML, CSS, JS, ์ด๋ฏธ์ง€ ์˜์ƒ์„ ํŒŒ์ผ์„ ๋‘๋ฉด, ์„œ๋ฒ„๊ฐ€ ํ•ด๋‹น ํŒŒ์ผ์„ ์„œ๋น™ํ•จ.

ex) NGINX, APACHE

 

 

โœ” ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ - WAS

→ HTTP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘

→ ์›น ์„œ๋ฒ„ ๊ธฐ๋Šฅ์„ ๋Œ€๋ถ€๋ถ„ ํฌํ•จํ•จ! + (์ •์  ๋ฆฌ์†Œ์Šค ์ œ๊ณต ๊ฐ€๋Šฅ)

ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง ์ˆ˜ํ–‰

: ์‚ฌ์šฉ์ž์— ๋”ฐ๋ผ์„œ ๋™์ ์œผ๋กœ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Œ.

: ๋™์  HTML, HTTP API(JSON) : ์„œ๋ธ”๋ฆฟ, JSP, ์Šคํ”„๋ง MVC

ex) ํ†ฐ์บฃ(Tomcat), Jetty, Undertow

 

 

โœ” ์›น ์„œ๋ฒ„ vs WAS

- ์›น ์„œ๋ฒ„๋Š” ์ •์  ๋ฆฌ์†Œ์Šค(ํŒŒ์ผ), WAS๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง๊นŒ์ง€ ์‹คํ–‰

- ํ•˜์ง€๋งŒ... ์›น ์„œ๋ฒ„๋„ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๊ธฐ๋„ ํ•˜๊ณ . WAS๋„ ์›น ์„œ๋ฒ„์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ๋Š” ํ•œ๋‹ค.

- WAS๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š”๋ฐ ๋” ํŠนํ™”๋˜์–ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ž.

 

 

โœ” ์›น ์‹œ์Šคํ…œ ๊ตฌ์„ฑ - WAS, DB

- WAS, DB ๋งŒ์œผ๋กœ๋„ ์‚ฌ์‹ค ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.  WAS๋Š” ์ •์  ๋ฆฌ์†Œ์Šค, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง๊นŒ์ง€ ์ปค๋ฒ„ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ.

 

๐Ÿšฉ ๊ทธ๋Ÿฌ๋ฉด, WAS ํ•˜๋‚˜๋งŒ ๋‘๊ณ  ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋ ๊นŒ?

- ๊ทผ๋ฐ, ์ด๋Ÿฐ ์‹์œผ๋กœ WAS๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋ฉด ์„œ๋ฒ„ ๊ณผ๋ถ€ํ•˜๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

- ๋˜ํ•œ, WAS๊ฐ€ ์žฅ์• ๋‚˜๋ฉด ์˜ค๋ฅ˜ ํ™”๋ฉด๊นŒ์ง€ ๋…ธ์ถœ์„ ๋ชปํ•  ์ˆ˜ ์žˆ๋‹ค. ์ •์  ๋ฆฌ์†Œ์Šค๊นŒ์ง€ ๋‹ด๋‹น์„ ํ•ด๋ฒ„๋ฆฌ๋‹ˆ๊นŒ.

 

โญ ๊ทธ๋ž˜์„œ, ์ผ๋ฐ˜์ ์œผ๋กœ Client -> Web Server -> WAS -> DB ์ˆœ์œผ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค.

- ์ •์  ๋ฆฌ์†Œ์Šค๋Š” ์›น ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌ 

- ์›น ์„œ๋ฒ„๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง๊ฐ™์€ ๋™์ ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋ฉด WAS์— ์š”์ฒญ์„ ์œ„์ž„ 

- WAS๋Š” ์ค‘์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง ์ฒ˜๋ฆฌ๋ฅผ ๋งก๋Š”๋‹ค.

 

๐Ÿšฉ ์ด๋Ÿฐ ์‹์œผ๋กœ ๋‘๋ฉด ๋ญ๊ฐ€ ์ข‹์„๊นŒ?

๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ๊ฐ€ ํšจ์œจ์ ์ด๋‹ค.

์ •์  ๋ฆฌ์†Œ์Šค๊ฐ€ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค๋ฉด Web ์„œ๋ฒ„๋ฅผ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋ฉด WAS๋ฅผ ์ฆ์„คํ•˜๋ฉด์„œ ์กฐ์ ˆํ•˜๊ธฐ.

๋˜ํ•œ, ๋ณดํ†ต ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์›น ์„œ๋ฒ„๋Š” ์ž˜ ์ฃฝ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, WAS๊ฐ€ ์žฅ์• ๋‚ฌ์„ ๋•Œ ์›น ์„œ๋ฒ„๊ฐ€ ๋Œ€์‹  ์˜ค๋ฅ˜ ํ™”๋ฉด์„ ์ œ๊ณตํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.


| ์„œ๋ธ”๋ฆฟ์ด๋ž€?

- ์„œ๋ธ”๋ฆฟ์„ ์‚ฌ์šฉํ•˜๋ฉด ์„œ๋ฒ„์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์‹คํ–‰ + DB ์ ‘๊ทผ์— ๋” ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

: ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์š”์ฒญํ•œ HTTP ๋ฉ”์‹œ์ง€๋ฅผ ์ง์ ‘ ํŒŒ์‹ฑํ•  ํ•„์š” ์—†์ด, ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๊ฐ€ ๋Œ€์‹  ์ˆ˜ํ–‰ํ•ด์ฃผ๋Š” ๊ฒƒ. (์„œ๋ธ”๋ฆฟ์„ ์ง€์›ํ•˜๋Š” WAS ์‚ฌ์šฉํ•˜๊ธฐ)

 

โœ” HttpServletRequest : HTTP ์š”์ฒญ ์ •๋ณด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋„๋ก ๋„์™€์ค€๋‹ค.

โœ” HttpServletResponse : HTTP ์‘๋‹ต ์ •๋ณด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ œ๊ณตํ•˜๋„๋ก ๋„์™€์ค€๋‹ค.

- ์ฆ‰, ๊ฐœ๋ฐœ์ž๊ฐ€ HTTP ์ŠคํŽ™์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์—ญํ• !

 

1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ localhost:8080/hello๋กœ ์š”์ฒญ์„ ์ง„ํ–‰.

2. WAS๋Š” ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ HttpServletRequest, HttpServletResponse ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

3. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ํ•จ์ˆ˜ (์—ฌ๊ธฐ์—์„œ๋Š” HelloServlet์ด๋ผ๊ณ  ๋ถ™์˜€๋Š”๋ฐ, ์‹ค ์ฝ”๋“œ์—์„œ๋Š” HttpServlet์„ ์ƒ์†๋ฐ›์€ ์ปค์Šคํ…€ ์„œ๋ธ”๋ฆฟ)์„ ์‹คํ–‰ํ•œ๋‹ค.

: ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด (HelloServlet)๋ฅผ ์ƒ์„ฑ ๋ฐ ํ˜ธ์ถœ, ๊ทธ๋ฆฌ๊ณ  ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ๋ฅผ ํ•ด์ค€๋‹ค.

 : ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” WAS์™€ ๋™์ผํ•œ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง„๋‹ค.

4. ํ•จ์ˆ˜ ์‹คํ–‰ ์ข…๋ฃŒ ํ›„, HttpServletResponse ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ HTTP ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ๋งŒ๋“ค์–ด ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.

 

๐Ÿšฉ ์ฆ‰, ๊ฐœ๋ฐœ์ž๋Š” Request ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด HTTP ์š”์ฒญ ์ •๋ณด๋ฅผ ๊บผ๋‚ด์„œ ์‚ฌ์šฉํ•˜๊ณ , Response ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด HTTP ์‘๋‹ต ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค!

 

 

โœ” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ

- ํ”ํžˆ ์‚ฌ์šฉํ•˜๋Š” ํ†ฐ์บฃ์˜ ๊ฒฝ์šฐ ์„œ๋ธ”๋ฆฟ์„ ์ง€์›ํ•˜๋ฉฐ, ์ด๋Ÿฌํ•œ WAS๋ฅผ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ํ•œ๋‹ค.

- ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋Š” ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ตœ์ดˆ ๋กœ๋”ฉ ์‹œ์ ์— ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘๊ณ  ์ดํ›„ ์š”์ฒญ์— ๋™์ผํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ ‘๊ทผํ•˜๋„๋ก ํ•œ๋‹ค.

    - ๋‹จ, ์‹ฑ๊ธ€ํ†ค์ธ ๋งŒํผ ๊ฐ ์š”์ฒญ์ด ๋™์‹œ์— ์ ‘๊ทผํ•˜๋Š” ํ•„๋“œ ๊ด€๋ฆฌ์— ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.

- ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์™€ ๋™์ผํ•œ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง„๋‹ค.

- JSP (Java Server Page) ์—ญ์‹œ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด ์‚ฌ์šฉ๋œ๋‹ค.

- ์„œ๋ธ”๋ฆฟ์˜ ๊ฒฝ์šฐ ๋™์‹œ ์š”์ฒญ์„ ์œ„ํ•ด ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•ด์ค€๋‹ค! (WAS๊ฐ€ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค!)

 

๐Ÿšฉ ์ฆ‰, WAS๋Š” Web Server  + Web Container (Servlet Container)๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

์ฐธ๊ณ ๋กœ, ์„œ๋ธ”๋ฆฟ์˜ ๊ฒฝ์šฐ ์„œ๋ฒ„ ์„ค์ •์— ๋”ฐ๋ผ ์ƒ์„ฑ ์‹œ์ ์ด ๋‹ค๋ฅด๋‹ค. ๋กœ๋”ฉ ์‹œ์ ์— ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์ตœ์ดˆ ์š”์ฒญ ์‹œ์ ์—๋„ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์—ฌ๊ธฐ์„œ, ์„œ๋ธ”๋ฆฟ ๋กœ๋”ฉ ์‹œ์ ์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  init() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

: init() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•„์š”ํ•œ ์ดˆ๊ธฐํ™” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

: ์„œ๋ธ”๋ฆฟ์„ ์ปค์Šคํ…€ ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ init() ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜์—ฌ ์žฌ๊ตฌํ˜„ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

์›ฌ๋งŒํ•˜๋ฉด ์ดˆ๊ธฐํ™” ์ž‘์—…์€ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— (์ƒ๋Œ€์ ) ์š”์ฒญ ์‹œ์  ๋ง๊ณ  ๋กœ๋”ฉ ์‹œ์ ์— ์ƒ์„ฑํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค. (๋””ํดํŠธ๋Š” ์š”์ฒญ ์‹œ์ )

: ์ƒ์„ฑ ์‹œ์ ์œผ๋กœ ๋ฐ”๊พธ๋ ค๋ฉด @WebServlet(loadOnStartUp=0) ์ด๋Ÿฐ ์‹์œผ๋กœ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

์œ„ ๊ทธ๋ฆผ์—์„œ service() ๋ฉ”์„œ๋“œ๋Š” ์„œ๋ธ”๋ฆฟ์ด ๋ธŒ๋ผ์šฐ์ €์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‹จ๊ณ„์ด๋ฉฐ, doGet(), doPost()๋Š” ๊ฐ๊ฐ GET, POST ๊ฐ™์€ HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. init()์€ ๊ฐ์ฒด ์ƒ์„ฑ ํ›„ 1ํšŒ์ง€๋งŒ, doGet(), doPost()๋Š” ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ํ˜ธ์ถœ๋œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 


| ๋™์‹œ ์š”์ฒญ๊ณผ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ

- ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ํ•˜๋ฉด ์„œ๋ฒ„์—์„œ๋Š” servlet์„ ํ˜ธ์ถœํ•ด์„œ ์‘๋‹ต์„ ์ค˜์•ผ ํ•˜๋Š”๋ฐ, ์ด๋ฅผ ๋ˆ„๊ฐ€ ํ˜ธ์ถœํ•ด์ค„๊นŒ?

- ๋ฐ”๋กœ, ์Šค๋ ˆ๋“œ๊ฐ€ ํ˜ธ์ถœ์„ ํ•ด์ค€๋‹ค!

 

 

โœ” ์Šค๋ ˆ๋“œ๋ž€?

- ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ

- ์ž๋ฐ”์—์„œ๋Š” main์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ€์žฅ ์ฒ˜์Œ ์‹คํ–‰๋˜๋ฉฐ, ์Šค๋ ˆ๋“œ๋Š” ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ฝ”๋“œ ๋ผ์ธ๋งŒ ์ˆ˜ํ–‰๋œ๋‹ค.

- ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์—, ๋™์‹œ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋ฉด ์Šค๋ ˆ๋“œ๋ฅผ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

 

[๋‹จ์ผ ์š”์ฒญ ์ƒํ™ฉ - ๋‹จ์ผ ์Šค๋ ˆ๋“œ ์‚ฌ์šฉ] 

1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ํ•˜๋ฉด, ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ํ• ๋‹น์ด ๋œ๋‹ค.

2. ํ•ด๋‹น ์Šค๋ ˆ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์„œ๋ธ”๋ฆฟ์„ ์‹คํ–‰ํ•œ๋‹ค.

3. ์‘๋‹ต๊นŒ์ง€ ์ง„ํ–‰ํ•œ ๋‹ค์Œ, ์Šค๋ ˆ๋“œ๋Š” ํœด์‹์— ๋“ค์–ด๊ฐ„๋‹ค.

 

[๋‹ค์ค‘ ์š”์ฒญ ์ƒํ™ฉ - ๋‹จ์ผ ์Šค๋ ˆ๋“œ ์‚ฌ์šฉ]

1. ์š”์ฒญ์ด ๋“ค์–ด์™”์„ ๋•Œ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์„œ๋ธ”๋ฆฟ์„ ํ˜ธ์ถœํ•˜์˜€๋‹ค.

2. ๋งŒ์•ฝ, ์–ด๋– ํ•œ ํ•ด๋‹น ์„œ๋ธ”๋ฆฟ์ด ์–ด๋– ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  ์žˆ์„ ๋•Œ ๋˜ ๋‹ค๋ฅธ ์š”์ฒญ์ด ๋“ค์–ด์˜จ๋‹ค๋ฉด ๋Œ€๊ธฐ ์ƒํƒœ์— ๋“ค์–ด๊ฐ„๋‹ค.

3. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์š”์ฒญ1์€ ์ฒ˜๋ฆฌ ์ง€์—ฐ, ์š”์ฒญ 2๋Š” ๋Œ€๊ธฐํ•˜๋‹ค ๋ณด๋‹ˆ ๋‘˜ ๋‹ค timeout์œผ๋กœ ์ฃฝ์–ด๋ฒ„๋ฆฐ๋‹ค.

 

[๋‹ค์ค‘ ์š”์ฒญ ์ƒํ™ฉ - ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ์‚ฌ์šฉ]

- ์š”์ฒญ๋งˆ๋‹ค ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ. ๋‹น์—ฐํžˆ ๋™์‹œ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

- ํ•˜์ง€๋งŒ, ์œ„ ๋ฐฉ๋ฒ•์€ ๋น„์šฉ์ ์œผ๋กœ๋„ ๋น„์‹ธ๊ณ , ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋น„์šฉ ๋ฌธ์ œ, ๊ทธ๋ฆฌ๊ณ  CPU, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ ์„œ๋ฒ„๊ฐ€ ์ฃฝ์–ด๋ฒ„๋ฆด ์ˆ˜๋„ ์žˆ๋‹ค.

- ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์—, ์Šค๋ ˆ๋“œ ํ’€์„ ์‚ฌ์šฉํ•ด๋ณด์ž.

 

 

โœ” ์Šค๋ ˆ๋“œ ํ’€

- ์š”์ฒญ์ด ์˜ค๋ฉด ์Šค๋ ˆ๋“œ ํ’€์—๊ฒŒ ์š”์ฒญ์„ ํ•˜๊ณ , ์Šค๋ ˆ๋“œ ํ’€์—์„œ ๊ฐ€์ ธ๋‹ค ์“ด ๋‹ค์Œ ๋๋‚œ ํ›„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ.

- ์Šค๋ ˆ๋“œ ํ’€๋ณด๋‹ค ๋” ๋งŽ์€ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ๋Œ€๊ธฐํ•˜๊ฑฐ๋‚˜ ๊ฑฐ์ ˆ๋œ๋‹ค.

- ์ƒ์„ฑ ๊ฐ€๋Šฅํ•œ ์Šค๋ ˆ๋“œ์˜ ์ตœ๋Œ€์น˜๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. (ํ†ฐ์บฃ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ 200๊ฐœ)

- ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฏธ๋ฆฌ ์ƒ์„ฑ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์Šค๋ ˆ๋“œ ์ƒ์„ฑ ๋ฐ ์ข…๋ฃŒ ๋น„์šฉ์ด ์ ˆ์•ฝ๋˜๋ฉฐ, ์‘๋‹ต์‹œ๊ฐ„์ด ๋น„๊ต์  ๋น ๋ฅด๋‹ค.

 

๐Ÿšฉ WAS์—์„œ ์ตœ๋Œ€ ์Šค๋ ˆ๋“œ ์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ๋‘๋Š”์ง€๊ฐ€ ์ค‘์š”ํ•˜๋‹ค. 

์ตœ๋Œ€ ์Šค๋ ˆ๋“œ ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ์ž‘์œผ๋ฉด ์„œ๋ฒ„๋Š” ์—ฌ์œ ๋กญ์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ๋Š” ์‘๋‹ต ์ง€์—ฐ์ด ๊ณ„์† ๋‚˜ํƒ€๋‚  ๊ฒƒ์ด๊ณ ,

๋„ˆ๋ฌด ๋งŽ์œผ๋ฉด ์„œ๋ฒ„๊ฐ€ ์‰ฝ๊ฒŒ ๋‹ค์šด๋  ์ˆ˜๊ฐ€ ์žˆ๋‹ค๋Š” ์ ์ด ์กด์žฌํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์ž˜ ์ˆ˜ํ–‰ํ•ด๋ณด๋Š” ๊ฒŒ ์ค‘์š”.

 

์•„๋ฌดํŠผ, WAS์—์„œ๋Š” ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ์•Œ์•„์„œ ์‹ ๊ฒฝ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋Š” ํฌ๊ฒŒ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋œ๋‹ค. (์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ฒ˜๋Ÿผ ์ฝ”๋“œ ์งœ๊ธฐ) ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด - ์„œ๋ธ”๋ฆฟ, ์Šคํ”„๋ง ๋นˆ์€ ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

๐Ÿšฉ ์Šค๋ ˆ๋“œ ํ’€ ๋™์ž‘ ๊ณผ์ •

- ์ดˆ๊ธฐ์— ์Šค๋ ˆ๋“œ๋ฅผ ์ตœ๋Œ€์น˜๋งŒํผ ์ƒ์„ฑํ•ด๋‘”๋‹ค. (server.tomcat.threads.max๋กœ ์„ค์ •)

- ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์ž‘์—… ํ์— ๋‹ด์•„๋‘๊ณ , idle ์ƒํƒœ์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ํ์—์„œ ๊บผ๋‚ด ์Šค๋ ˆ๋“œ์—๊ฒŒ ์ž‘์—…์„ ํ• ๋‹นํ•œ๋‹ค.   

    - ๋งŒ์•ฝ, idle์ธ ์ƒํƒœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์—†๋‹ค๋ฉด ํ์—์„œ ๋Œ€๊ธฐํ•˜๊ณ , ์ด ์ƒํƒœ๊ฐ€ ์ง€์†๋˜์–ด ํ๊ฐ€ ๊ฝ‰ ์ฐจ๋ฉด ์ƒˆ๋กœ์šด ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.   

- ๋งŒ์•ฝ ์Šค๋ ˆ๋“œ๊นŒ์ง€ ์ตœ๋Œ€ ์‚ฌ์ด์ฆˆ๊ฐ€ ๋œ๋‹ค๋ฉด connection-refused๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.- ์š”์ฒญ ์ž‘์—…์ด ์ข…๋ฃŒ๋˜๋ฉด ์Šค๋ ˆ๋“œ๋Š” idle ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

 

- Connector : ์†Œ์ผ“ ์—ฐ๊ฒฐ ๋ฐ ๋ฐ์ดํ„ฐ ํŒจํ‚ท์„ ํš๋“ํ•˜์—ฌ HttpServletRequest ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜, Servlet ๊ฐ์ฒด์— ์ „๋‹ฌํ•ด์ฃผ๋Š” ์—ญํ• .   

- Acceptor์—์„œ while๋ฌธ์„ ํ†ตํ•ด ๋Œ€๊ธฐํ•˜๋ฉฐ port listen์„ ํ†ตํ•ด ์†Œ์ผ“ ์—ฐ๊ฒฐ์„ ์–ป๋Š”๋‹ค.   

- ์†Œ์ผ“ ์—ฐ๊ฒฐ๋กœ๋ถ€ํ„ฐ ์–ป์€ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์‹ฑํ•ด์„œ HttpServletRequest ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.   

- ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์— ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•˜๊ณ , ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ์„ ์ฐพ์•„ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

- ํ†ฐ์บฃ 8.5๋ถ€ํ„ฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ NIO Connector๋ฅผ ์ฑ„ํƒํ•˜์˜€๋‹ค.

- NIO Connector์˜ ๊ฒฝ์šฐ Poller๋ผ๋Š” ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ปค๋„ฅ์…˜์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ,

Socket์„ ์บ์‹œ๋กœ ๋“ค๊ณ  ์žˆ๋‹ค๊ฐ€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•  ๋•Œ๋งŒ์Šค๋ ˆ๋“œ๋ฅผ ํ• ๋‹นํ•˜์—ฌ idle ์ƒํƒœ๋กœ ๋‚จ๋Š” ๊ฑธ ์ตœ๋Œ€ํ•œ ์ค„์—ฌ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

 

๐Ÿšฉ Acceptor์—์„œ ์†Œ์ผ“ ์—ฐ๊ฒฐ ์–ป๊ธฐ -> ์†Œ์ผ“์—์„œ ์†Œ์ผ“ ์ฑ„๋„ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ํ†ฐ์บฃ์˜ NIOChannel ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ -> PollEvent๋ผ๋Š” ๊ฐ์ฒด๋กœ ์บก์Šํ™”ํ•˜์—ฌ ํ์— ์ „๋‹ฌ -> ์Šค๋ ˆ๋“œ๋Š” ํ์— ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๊บผ๋‚ด์„œ ์‚ฌ์šฉ


 

| HTML, API, CSR, SSR

โœ” ์ •์  ๋ฆฌ์†Œ์Šค

- ๊ณ ์ •๋œ HTML ํŒŒ์ผ, CSS, JS, ์ด๋ฏธ์ง€, ์˜์ƒ ๋“ฑ ์ œ๊ณต. ์š”์ฒญ์ด ์˜ค๋ฉด ์ด๋ฏธ ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š” ํŒŒ์ผ์„ ๋ฆฌํ„ดํ•œ๋‹ค.

 

โœ” HTML ํŽ˜์ด์ง€

- ๋™์ ์œผ๋กœ ํ•„์š”ํ•œ HTML ํŒŒ์ผ์„ ์ƒ์„ฑ(JSP, ํƒ€์ž„๋ฆฌํ”„ ๋“ฑ ์ ์šฉ)ํ•ด์„œ ์ „๋‹ฌํ•˜๋ฉฐ, ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” HTML ํŒŒ์ผ์„ ํ•ด์„ํ•˜์—ฌ ๋„์›Œ์ค€๋‹ค.

 

โœ” HTML API

- HTML์ด ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ์ฃผ๋กœ JSON ํ˜•ํƒœ๋กœ ์ „๋‹ฌํ•œ๋‹ค.

- ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” JSON ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ค๋ฉด ๋ณ„๋„์˜ ํ•ด์„ ์—†์ด ๊ทธ๋Œ€๋กœ ํ™”๋ฉด์— ๋ณด์—ฌ์ค€๋‹ค.

- ๋ฐ์ดํ„ฐ๋งŒ ์ฃผ๊ณ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— UI๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณ„๋„๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

 

๐Ÿšฉ ๊ฐœ๋ฐœ์ž๋Š” ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์ œ๊ณตํ•  ๊ฒƒ์ธ์ง€, ๋™์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” HTML ํŽ˜์ด์ง€๋ฅผ ์–ด๋–ป๊ฒŒ ์ œ๊ณตํ•  ๊ฒƒ์ธ์ง€,

HTTP api๋ฅผ ์–ด๋–ป๊ฒŒ ์ œ๊ณตํ•  ๊ฒƒ์ธ์ง€ ๊ณ ๋ฏผํ•˜๋ฉด ๋œ๋‹ค.

 

 

โœ” SSR (Server-Side Rendering)

- ๋‹ค ๋งŒ๋“ค์–ด์ง„ HTML์„ ๋ฐ›์•„์™€์„œ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐฉ๋ฒ•.

- ์›น ์„œ๋ฒ„์— ๊ณ„์† ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์š”์ฒญ์„ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

- ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋Š” ๋น ๋ฅด์ง€๋งŒ, ๋งค๋ฒˆ ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ๊ณ ์นจ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ดํ›„ ์„œ๋ฒ„์— ๋ถ€ํ•˜๊ฐ€ ๊ฐ„๋‹ค.

- JSP, ํƒ€์ž„๋ฆฌํ”„ ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โœ” CSR (Client-Side Rendering)

- HTML ๊ฒฐ๊ณผ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•.

- ์ดˆ๊ธฐ ๋กœ๋”ฉ ์‹œ HTML, static ํŒŒ์ผ๋“ค์„ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— (๋น„์–ด์žˆ์Œ) ๋น„๊ต์  ๋Š๋ฆฌ์ง€๋งŒ, ๊ทธ ์ดํ›„ ํ•„์š”์— ๋”ฐ๋ผ ์„œ๋ฒ„์—๊ฒŒ ์š”์ฒญํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€ํ•˜๊ฐ€ ์ ๋‹ค.

- React, Vue.js ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

- ๋‹ค์Œ ํฌ์ŠคํŒ…๋ถ€ํ„ฐ๋Š” ์Šคํ”„๋ง์—์„œ ์ œ๊ณตํ•˜๋Š” ์„œ๋ธ”๋ฆฟ์— ๋Œ€ํ•ด์„œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์•Œ์•„๋ณด์ž!

Comments