nyximos.log

[Spring] ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ดํ•ด ๋ณธ๋ฌธ

Programming/Spring

[Spring] ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ดํ•ด

nyximos 2022. 2. 3. 22:25

๐ŸŒ ์›น ์„œ๋ฒ„, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„

  • ์›น์€ HTTP ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ฐ˜์œผ๋กœ ํ†ต์‹ ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”๋‹ค.
  • HTML, TEXT
  • IMAGE, ์Œ์„ฑ, ์˜์ƒ, ํŒŒ์ผ
  • JSON, XML (API) ๋“ฑ

์›น ์„œ๋ฒ„ Web Server

  • HTTP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘
  • ์ •์  ๋ฆฌ์†Œ์Šค ์ œ๊ณต, ๊ธฐํƒ€ ๋ถ€๊ฐ€๊ธฐ๋Šฅ
  • ์ •์  (ํŒŒ์ผ) HTML, CSS, JS, ์ด๋ฏธ์ง€, ์˜์ƒ 
  • NGINX, APACHE ๋“ฑ์ด ์žˆ๋‹ค.

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ WAS - Wep Application Server

  • HTTP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘
  • ์›น ์„œ๋ฒ„ ๊ธฐ๋Šฅ + ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ ์‹คํ–‰ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง ์ˆ˜ํ–‰
  • ๋™์  HTML, HTTP API(JSON), ์„œ๋ธ”๋ฆฟ, JSP, ์Šคํ”„๋ง MVC
  • ํ†ฐ์ผ“, Jetty, Underflow

์›น ์„œ๋ฒ„์™€ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ (WAS) ์ฐจ์ด

  1. ์›น ์„œ๋ฒ„๋Š” ์ •์  ๋ฆฌ์†Œ์Šค, WAS๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง๊นŒ์ง€ ์ˆ˜ํ–‰
  2. ์›น ์„œ๋ฒ„๋„ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ๊ณ , WAS๋„ ์›น ์„œ๋ฒ„์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•จ  → ์šฉ์–ด์™€ ๊ฒฝ๊ณ„๊ฐ€ ๋ชจํ˜ธ
  3. WAS๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š”๋ฐ ๋” ํŠนํ™”๋˜์–ด ์žˆ๋‹ค.

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

  • WAS์™€ DB๋งŒ์œผ๋กœ๋„ ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑ๊ฐ€๋Šฅํ•˜๋‹ค.
  • WAS๊ฐ€ ์ •์ ๋ฆฌ์†Œ์Šค์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง ๋ชจ๋‘ ์ œ๊ณต
  • ์ด๋ ‡๊ฒŒ ๊ตฌ์„ฑํ•  ๊ฒฝ์šฐ WAS๊ฐ€ ๋งŽ์€ ์—ญํ• ์„ ๋‹ด๋‹นํ•˜์—ฌ ์„œ๋ฒ„๊ฐ€ ๊ณผ๋ถ€ํ•˜ ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ๋น„์‹ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์ด ์ •์  ๋ฆฌ์†Œ์Šค ๋•Œ๋ฌธ์— ์ˆ˜ํ–‰์ด ์–ด๋ ค์šธ ์ˆ˜๋„ ์žˆ๊ณ , WAS์— ์žฅ์• ๊ฐ€ ์žˆ์„์‹œ์— ์˜ค๋ฅ˜ ํ™”๋ฉด์„ ๋…ธ์ถœ์„ ๋ชปํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์›น ์‹œ์Šคํ…œ ๊ตฌ์„ฑ - WEB + WAS + DB

  • ์ •์  ๋ฆฌ์†Œ์Šค๋Š” ์›น ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌ
  • ์›น ์„œ๋ฒ„๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง๊ฐ™์€ ๋™์ ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋ฉด WAS์— ์š”์ฒญ์„ ์œ„์ž„ ํ•œ๋‹ค.
  • WAS๊ฐ€ ์ค‘์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง ์ฒ˜๋ฆฌ ์ „๋‹ด
  • ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ •์  ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ ๅคš → WEB ์„œ๋ฒ„ ์ฆ์„ค
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ ๅคš → WAS ์ฆ์„ค
  • WAS, DB ์žฅ์• ์‹œ WEB ์„œ๋ฒ„๊ฐ€ ์˜ค๋ฅ˜ ํ™”๋ฉด ์ œ๊ณต ๊ฐ€๋Šฅ

CDN Contents Delivery Network ์ฝ˜ํ…์ธ  ์ „์†ก ๋„คํŠธ์›Œํฌ

์ง€๋ฆฌ์ ์œผ๋กœ ๋ถ„์‚ฐ๋œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์„œ๋ฒ„ ๋„คํŠธ์›Œํฌ๋ฅผ ๋‘์–ด  ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ํšจ์œจ์ ์ธ ๋„คํŠธ์›Œํฌ ์ด๋™์„ ์ œ๊ณตํ•œ๋‹ค.

์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ํŒŒ์ผ๋“ค์„ Caching ํ•˜์—ฌ ์›น ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ธ๋‹ค.

Streaming ๊ธฐ์ˆ ์„ ์ œ๊ณตํ•˜์—ฌ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ์ฝ˜ํ…์ธ ๋ฅผ ์ „์†กํ•ด์ค€๋‹ค.

์„œ๋ฒ„์˜ ํŠธ๋ž˜ํ”ฝ์„ ๋œ์–ด์ฃผ์–ด ๋น„์šฉ์„ ๊ฐ์†Œํ•˜๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ๊ณ , ๊ณต๊ฒฉ ํŠธ๋ž˜ํ”ฝ์„ ์™„ํ™”ํ•  ์ˆ˜ ์žˆ์–ด Dos ๊ณต๊ฒฉ์— ๋Œ€ํ•ด์„œ ์–ด๋Š์ •๋„ ๋ณดํ˜ธํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

๋„ทํ”Œ๋ฆญ์Šค, ์—์–ด๋น„์•ค๋น„, NC์†Œํ”„ํŠธ, ์นด์นด์˜ค ๊ฒŒ์ž„์ฆˆ๋“ฑ ์—ฌ๋Ÿฌ ๊ธฐ์—…๋“ค์ด CDN์„ ํ™œ์šฉํ•˜์—ฌ ์ฝ˜ํ…์ธ ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

 

๐Ÿ‘พ ์„œ๋ธ”๋ฆฟ

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

๋™์ ์ธ ์›น ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฐ” ๊ธฐ๋ฐ˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ 

ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

 

๊ณต์‹ ๋ฌธ์„œ์—์„œ๋Š” ์ด๋ ‡๊ฒŒ ์ •์˜ํ•œ๋‹ค.

์„œ๋ธ”๋ฆฟ์€ ์š”์ฒญ-์‘๋‹ต ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์„ ํ†ตํ•ด ์ ‘๊ทผํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ์„œ๋ฒ„์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

์„œ๋ธ”๋ฆฟ์€ ๋ชจ๋“  ์œ ํ˜•์˜ ์š”์ฒญ์— ์‘๋‹ตํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ ์›น ์„œ๋ฒ„์—์„œ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ™•์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ Java ์„œ๋ธ”๋ฆฟ ๊ธฐ์ˆ ์€ HTTP ์ „์šฉ ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

javax.servlet ๋ฐ javax.servlet.http ํŒจํ‚ค์ง€๋Š” ์„œ๋ธ”๋ฆฟ์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ์„œ๋ธ”๋ฆฟ์€ ๋ผ์ดํ”„ ์‚ฌ์ดํด ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” ์„œ๋ธ”๋ฆฟ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ Java ์„œ๋ธ”๋ฆฟ API์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” GenericServlet ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

HttpServlet ํด๋ž˜์Šค๋Š” HTTP ๊ด€๋ จ ์„œ๋น„์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ doGet ๋ฐ doPost์™€ ๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์—…๋ฌด

WAS๊ฐ€ ํ•ด์ฃผ๋Š” ๊ฒƒ     ์„œ๋ธ”๋ฆฟ์„ ์ง€์›ํ•˜๋Š” WAS ์‚ฌ์šฉํ•  ๋•Œ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•˜๋Š” ๊ฒƒ

  • ์„œ๋ฒ„ TCP/IP ์—ฐ๊ฒฐ ๋Œ€๊ธฐ, ์†Œ์ผ“ ์—ฐ๊ฒฐ
  • HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ํŒŒ์‹ฑํ•ด์„œ ์ฝ๊ธฐ
  • POST ๋ฐฉ์‹, /save URL ์ธ์ง€
  • Content-Type ํ™•์ธ
  • HTTP ๋ฉ”์‹œ์ง€ ๋ฐ”๋”” ๋‚ด์šฉ ํŒŒ์‹ฑ
    • username, age ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํŒŒ์‹ฑ
  • ์ €์žฅ ํ”„๋กœ์„ธ์Šค ์‹คํ–‰
  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์‹คํ–‰
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ ์š”์ฒญ
  • HTTP ์‘๋‹ต ๋ฉ”์‹œ์ง€ ์ƒ์„ฑ ์‹œ์ž‘
    • HTTP ์‹œ์ž‘ ๋ผ์ธ ์ƒ์„ฑ
    • Header ์ƒ์„ฑ
    • ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์— HTML ์ƒ์„ฑ์—์„œ ์ž…๋ ฅ
  • TCP/IP์— ์‘๋‹ต ์ „๋‹ฌ, ์†Œ์ผ“ ์ข…๋ฃŒ

 

์„œ๋ธ”๋ฆฟ ํŠน์ง•

@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response){
	  //์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง
	}
}
  • urlPatterns(/hello)์˜ URL์ด ํ˜ธ์ถœ๋˜๋ฉด ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ ์‹คํ–‰
  • HttpsServletRequest - HTTP ์š”์ฒญ ์ •๋ณด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉ
  • HttpsServletResponse - HTTP ์‘๋‹ต ์ •๋ณด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ œ๊ณต
  • → ์„œ๋ธ”๋ฆฟ์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” HTTP ์ŠคํŽ™์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉ
  1. ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ localhost:8080/hello ๋ผ๊ณ  ์š”์ฒญ์„ ํ•จ
  2. WAS์—์„œ HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Request์™€ Response ๊ฐ์ฒด ์ƒ์„ฑ
  3. Request, Response๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ธฐ๋ฉด์„œ Servlet ๊ฐ์ฒด ํ˜ธ์ถœ
  4. ๊ฐœ๋ฐœ์ž๋Š” Request ๊ฐ์ฒด์—์„œ HTTP ์š”์ฒญ ์ •๋ณด๋ฅผ ๊บผ๋‚ด์„œ ์‚ฌ์šฉํ•˜๊ณ , Response ๊ฐ์ฒด์—์„œ HTTP ์‘๋‹ต ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Œ.
  5. Servlet ์ข…๋ฃŒํ•˜๋ฉด WAS๋Š” Response ๊ฐ์ฒด ์ •๋ณด๋กœ HTTP ์‘๋‹ต ์ƒ์„ฑ
  6. ์›น ๋ธŒ๋ผ์šฐ์ €์— ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌ

 

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

  • ํ†ฐ์บฃ์ฒ˜๋Ÿผ ์„œ๋ธ”๋ฆฟ์„ ์ง€์›ํ•˜๋Š” WAS๋ฅผ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ํ•จ
  • ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ, ์ดˆ๊ธฐํ™”, ํ˜ธ์ถœ, ์ข…๋ฃŒํ•˜๋Š” ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ
  • ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋Š” ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๊ด€๋ฆฌ
  • ๊ณ ๊ฐ์˜ ์š”์ฒญ์ด ์˜ฌ ๋•Œ ๋งˆ๋‹ค ๊ณ„์† ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ
  • ์ตœ์ดˆ ๋กœ๋”ฉ ์‹œ์ ์— ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘๊ณ  ์žฌํ™œ์šฉ
  • ๋ชจ๋“  ๊ณ ๊ฐ ์š”์ฒญ์€ ๋™์ผํ•œ ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค์— ์ ‘๊ทผ
  • ๊ณต์œ  ๋ณ€์ˆ˜ ์‚ฌ์šฉ ์ฃผ์˜
  • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ์‹œ ํ•จ๊ป˜ ์ข…๋ฃŒ
  • JSP๋„ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜ ๋˜์–ด์„œ ์‚ฌ์šฉ
  • ๋™์‹œ ์š”์ฒญ์„ ์œ„ํ•œ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ์ฒ˜๋ฆฌ ์ง€์›

 

 

๐Ÿ‘ฉ‍๐Ÿณ ๋™์‹œ ์š”์ฒญ - ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ

์“ฐ๋ ˆ๋“œ

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰
  • ์ž๋ฐ” ๋ฉ”์ธ ๋ฉ”์„œ๋“œ๋ฅผ ์ฒ˜์Œ ์‹คํ–‰ํ•˜๋ฉด main์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰
  • ์“ฐ๋ ˆ๋“œ๊ฐ€ ์—†์œผ๋ฉด ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์ด ๋ถˆ๊ฐ€๋Šฅ
  • ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ฝ”๋“œ ๋ผ์ธ๋งŒ ์ˆ˜ํ–‰
  • ๋™์‹œ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋ฉด ์“ฐ๋ ˆ๋“œ๋ฅผ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑ

 

์š”์ฒญ๋งˆ๋‹ค ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑ

์žฅ์ 

  • ๋™์‹œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฆฌ์†Œ์Šค(CPU, ๋ฉ”๋ชจ๋ฆฌ)๊ฐ€ ํ—ˆ์šฉํ•  ๋•Œ ๊นŒ์ง€ ์ฒ˜๋ฆฌ๊ฐ€๋Šฅ
  • ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ง€์—ฐ ๋˜์–ด๋„, ๋‚˜๋จธ์ง€ ์“ฐ๋ ˆ๋“œ๋Š” ์ •์ƒ ๋™์ž‘ํ•œ๋‹ค.

๋‹จ์ 

  • ์ƒ์„ฑ ๋น„์šฉ์ด ๋งค์šฐ ๋น„์‹ธ๋‹ค.
    • ๊ณ ๊ฐ ์š”์ฒญ์ด ์˜ฌ ๋•Œ ๋งˆ๋‹ค ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด, ์‘๋‹ต ์†๋„๊ฐ€ ๋Šฆ์–ด์ง„๋‹ค.
  • ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.
  • ์“ฐ๋ ˆ๋“œ ์ƒ์„ฑ์— ์ œํ•œ์ด ์—†๋‹ค.
    • ๊ณ ๊ฐ ์š”์ฒญ์ด ๋„ˆ๋ฌด ๋งŽ์ด ์˜ค๋ฉด, CPU, ๋ฉ”๋ชจ๋ฆฌ ์ž„๊ณ„์ ์„ ๋„˜์–ด์„œ ์„œ๋ฒ„๊ฐ€ ์ฃฝ์„ ์ˆ˜ ์žˆ๋‹ค.

ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ??

 

๐Ÿคฟ ์“ฐ๋ ˆ๋“œํ’€

ํŠน์ง•

  • ํ•„์š”ํ•œ ์“ฐ๋ ˆ๋“œ๋ฅผ ์“ฐ๋ ˆ๋“œ ํ’€์— ๋ณด๊ด€ & ๊ด€๋ฆฌ
  • ์“ฐ๋ ˆ๋“œ ํ’€์— ์ƒ์„ฑ ๊ฐ€๋Šฅํ•œ ์“ฐ๋ ˆ๋“œ์˜ ์ตœ๋Œ€์น˜๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.
  • ํ†ฐ์บฃ - ์ตœ๋Œ€ 200๊ฐœ ๊ธฐ๋ณธ ์„ค์ • (๋ณ€๊ฒฝ ๊ฐ€๋Šฅ)

์‚ฌ์šฉ

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

์žฅ์ 

  • ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ฏธ๋ฆฌ ์ƒ์„ฑ๋˜์–ด ์žˆ์Œ → ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ข…๋ฃŒํ•˜๋Š” ๋น„์šฉ(CPU)์ด ์ ˆ์•ฝ & ์‘๋‹ต ์‹œ๊ฐ„์ด ๋น ๋ฅด๋‹ค.
  • ์ƒ์„ฑ ๊ฐ€๋Šฅํ•œ ์“ฐ๋ ˆ๋“œ์˜ ์ตœ๋Œ€์น˜๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๋„ˆ๋ฌด ๋งŽ์€ ์š”์ฒญ์ด ๋“ค์–ด์™€๋„ ๊ธฐ์กด ์š”์ฒญ์€ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ˜ฎ ์‹ค๋ฌด ํŒ

WAS์˜ ์ฃผ์š” ํŠœ๋‹ ํฌ์ธํŠธ๋Š” ์ตœ๋Œ€ ์“ฐ๋ ˆ๋“œ(max thread) ์ˆ˜ ์ด๋‹ค.

๋‚ฎ๊ฒŒ ์„ค์ • → ๋™์‹œ ์š”์ฒญ์ด ๋งŽ์„ ๋•Œ ํด๋ผ์ด์–ธํŠธ ์‘๋‹ต ์ง€์—ฐ

๋†’๊ฒŒ ์„ค์ • → ๋™์‹œ ์š”์ฒญ์ด ๋งŽ์„ ๋•Œ CPU, ๋ฉ”๋ชจ๋ฆฌ ๋ฆฌ์†Œ์Šค ์ž„๊ณ„์  ์ดˆ๊ณผ๋กœ ์„œ๋ฒ„ ๋‹ค์šด

 

์žฅ์•  ๋ฐœ์ƒ์‹œ

ํด๋ผ์šฐ๋“œ ๐Ÿ™†‍โ™€๏ธ ์„œ๋ฒ„๋ถ€ํ„ฐ ๋Š˜๋ฆผ → ํŠœ๋‹

ํด๋ผ์šฐ๋“œ ๐Ÿ™…‍โ™€๏ธ ์—ด์‹ฌํžˆ ํŠœ๋‹

 

 

WAS์˜ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ์ง€์›

๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ์— ๋Œ€ํ•œ ๋ถ€๋ถ„์€ WAS๊ฐ€ ์ฒ˜๋ฆฌ

๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

๊ฐœ๋ฐœ์ž๋Š” ๋งˆ์น˜ ์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋“ฏ์ด ํŽธ๋ฆฌํ•˜๊ฒŒ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์ด๋ฏ€๋กœ ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด(์„œ๋ธ”๋ฆฟ, ์Šคํ”„๋ง ๋นˆ)๋Š” ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉ

 

 

๐Ÿคน‍โ™€๏ธ HTML, HTTP API, CSR, SSR

์ •์  ๋ฆฌ์†Œ์Šค

๊ณ ์ •๋œ HTML ํŒŒ์ผ, CSS, JS, ์ด๋ฏธ์ง€ ์˜์ƒ ๋“ฑ

์ฃผ๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์š”์ฒญํ•˜๋ฉด ์›น ์„œ๋ฒ„์—์„œ ๋ฆฌ์†Œ์Šค ํŒŒ์ผ ์ „๋‹ฌ

 

HTML ํŽ˜์ด์ง€

์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์š”์ฒญ์ด ์˜ค๋ฉด

WAS๋Š” DB์—์„œ ์กฐํšŒ ํ›„, ๋™์ ์œผ๋กœ HTML ์ƒ์„ฑํ•˜์—ฌ(๋ทฐ ํ…œํ”Œ๋ฆฟ) ์›น ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์ „๋‹ฌ

์›น ๋ธŒ๋ผ์šฐ์ €๋Š” HTML์„ ๋ฐ›์•„์„œ ํ•ด์„

 

HTTP API

HTML์ด ์•„๋‹Œ ๋ฐ์ดํ„ฐ๋งŒ ์ „๋‹ฌ

์ฃผ๋กœ JSON ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ ํ†ต์‹ 

์›น๋ธŒ๋ผ์šฐ์ €์—์„œ ์š”์ฒญ์ด ์˜ค๋ฉด

WAS๋Š” DB์—์„œ ์กฐํšŒํ•˜์—ฌ ์ฃผ๋กœ JSON ํ˜•์‹ ์‚ฌ์šฉํ•˜์—ฌ ์›น ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์ „๋‹ฌ

๋ Œ๋”๋ง์— ์‚ฌ์šฉ ๐Ÿ™…‍โ™€๏ธ ๋‹ค์–‘ํ•œ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ ๐Ÿ™†‍โ™€๏ธ

  • ์›น ํด๋ผ์ด์–ธํŠธ to ์„œ๋ฒ„
  • ์•ฑ ํด๋ผ์ด์–ธํŠธ to ์„œ๋ฒ„
  • ์„œ๋ฒ„ to ์„œ๋ฒ„

 

CSR ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง

  • HTML ๊ฒฐ๊ณผ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•ด์„œ ์ ์šฉ
  • ์ฃผ๋กœ ๋™์ ์ธ ํ™”๋ฉด์— ์‚ฌ์šฉ, ์›น ํ™˜๊ฒฝ์„ ๋งˆ์น˜ ์•ฑ ์ฒ˜๋Ÿผ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋ถ€๋ถ„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Œ
  • ์˜ˆ) ๊ตฌ๊ธ€ ์ง€๋„, Gmail, ๊ตฌ๊ธ€ ์บ˜๋ฆฐ๋”
  • ๊ด€๋ จ๊ธฐ์ˆ : React, Vue.js → ์›น ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž

 

SSR ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง

  • HTML ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์„œ๋ฒ„์—์„œ ๋งŒ๋“ค์–ด์„œ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ „๋‹ฌ
  • ์ฃผ๋กœ ์ •์ ์ธ ํ™”๋ฉด์— ์‚ฌ์šฉ
  • ๊ด€๋ จ๊ธฐ์ˆ : JSP, ํƒ€์ž„๋ฆฌํ”„ → ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž

 

 

๐Ÿ•ต๏ธ‍โ™€๏ธ ์ž๋ฐ” ๋ฐฑ์—”๋“œ ์›น ๊ธฐ์ˆ  ์—ญ์‚ฌ

1997, ์„œ๋ธ”๋ฆฟ

  • HTML ์ƒ์„ฑ์ด ์–ด๋ ต๋‹ค.

 

1999, JSP

  • HTML ์ƒ์„ฑ ํŽธ๋ฆฌ
  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊นŒ์ง€ํ•ด์„œ ๋งŽ์€ ์—ญํ•  ๋‹ด๋‹น
  • ์œ ์ง€๋ณด์ˆ˜ ์–ด๋ ค์›€

 

์„œ๋ธ”๋ฆฟ, JSP ์กฐํ•ฉ์˜ MVC ํŒจํ„ด ์‚ฌ์šฉ

  • ๋ชจ๋ธ, ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์—ญํ• ์„ ๋‚˜๋ˆ ์„œ ๊ฐœ๋ฐœ

 

2000๋…„ ์ดˆ ~ 2010๋…„ ์ดˆ

  • ์ˆ˜๋งŽ์€ MVC ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ƒ๊น€ 
  • MVC ํŒจํ„ด ์ž๋™ํ™”, ๋ณต์žกํ•œ ์›น ๊ธฐ์ˆ ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ ์ง€์›

 

ํ˜„์žฌ

  • ์• ๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์˜ ์Šคํ”„๋ง MVC
  • ์Šคํ”„๋ง ๋ถ€ํŠธ ๋“ฑ์žฅ
  • ์Šคํ”„๋ง ๋ถ€ํŠธ - ์„œ๋ฒ„ ๋‚ด์žฅ
  • ๋นŒ๋“œ ๊ฒฐ๊ณผ์ธ Jar์— WAS ์„œ๋ฒ„ ํฌํ•จํ•˜์—ฌ ๋นŒ๋“œ ๋ฐฐํฌ๋ฅผ ๋‹จ์ˆœํ™”
  • (๊ณผ๊ฑฐ์—๋Š” ์„œ๋ฒ„์— WAS ์ง์ ‘ ์„ค์น˜, ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋”ฐ๋กœ ๋นŒ๋“œ, WarํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ ์„ค์น˜ํ›„ WAS์— ๋ฐฐํฌ)

 

์ตœ์‹  ๊ธฐ์ˆ  - ์Šคํ”„๋ง ์›น ๊ธฐ์ˆ ์˜ ๋ถ„ํ™”

  • Web Servlet - Spring MVC
  • Web Reactive - Spring WebFlux

 

๐Ÿ•ต๏ธ‍โ™€๏ธ ์ž๋ฐ” ๋ฐฑ์—”๋“œ ์›น ๊ธฐ์ˆ  ์—ญ์‚ฌ

JSP

  • ์†๋„ ๋Š๋ฆผ, ๊ธฐ๋Šฅ ๋ถ€์กฑ

Freemarker, Velocity

  • ์†๋„ ๋ฌธ์ œ ํ•ด๊ฒฐ, ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ

Thymeleaf

  • HTML ๋ชจ์–‘ ์œ ์ง€ํ•˜๋ฉด์„œ ๋ทฐ ํ…œํ”Œ๋ฆฟ ์ ์šฉ ๊ฐ€๋Šฅ
  • ์Šคํ”„๋ง MVC์™€ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ ํ†ตํ•ฉ
  • ์ตœ์„ ์˜ ์„ ํƒ
  • ์„ฑ๋Šฅ์€ Freemarker, Velocity๊ฐ€ ๋” ๋น ๋ฆ„

 

 

 

์ฐธ์กฐ

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

 

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

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

www.inflearn.com

 

https://docs.oracle.com/javaee/5/tutorial/doc/bnafe.html

 

What Is a Servlet? - The Java EE 5 Tutorial

What Is a Servlet? A servlet is a Java programming language class that is used to extend the capabilities of servers that host applications accessed by means of a request-response programming model. Although servlets can respond to any type of request, the

docs.oracle.com

CDN - https://library.gabia.com/contents/infrahosting/8985/

CDN - https://server-talk.tistory.com/52