<์ถœ์ฒ˜ ์ธํ”„๋Ÿฐ>

 

 

SpringMVC์— ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋“ค์–ด๊ฐ€๊ธฐ์ „ ๊ธฐ๋ณธ์ ์œผ๋กœ ์•Œ์•„์•ผํ•  ๊ฐœ๋…๋“ค์„ ์„น์…˜ 2 ๊ฐ•์˜์—์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ–ˆ๋‹ค. ๊ฐ•์˜๋ฅผ ๋“ค์„ ๋• ๊ฐœ๋…์— ๋Œ€ํ•œ ๋ฐฐ๊ฒฝ์ง€์‹์ด ํ๋ฆฟํ•ด์„œ ์ˆ˜์—…์„ ๋“ฃ๊ณ  ์žˆ์–ด๋„ ์ˆ˜์—…์˜ ํ๋ฆ„์ด ์ดํ•ด๋˜์งˆ ์•Š์•˜๋‹ค. ๊ทธ๋ž˜์„œ ๋ธ”๋กœ๊ทธ์— WAS - ์„œ๋ธ”๋ฆฟ - ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ - ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ - ์“ฐ๋ ˆ๋“œ ํ’€์ด ์–ด๋–ค ์‹์œผ๋กœ ์—ฐ๊ด€์„ ๊ฐ–๋Š”์ง€๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ณต๋ถ€ํ•˜๊ณ ์ž ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ดํ•ดํ•˜๋Š”๋ฐ ๋ณด์ถฉ์ด ๋˜๋Š” ๊ฐœ๋…๊ณผ ์„ค๋ช…์ด ์žˆ์œผ๋ฉด ํ•จ๊ป˜ ์ ๊ณ , ๋„์ค‘์— ์งˆ๋ฌธ๋“ค์ด ์ƒ๊ธฐ๋ฉด ๊ทธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€๋„ ์ฐพ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค.

 

 

โ˜˜๏ธ 


 

โœ”๏ธ  ์›น - HTTP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘

  • ์„œ๋ฒ„ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ ๋Œ€๋ถ€๋ถ„ HTTP๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๊ฑฐ์˜ ๋ชจ๋“  ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ์ „์†ก์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

HTTP

: ์›น ์ƒ์—์„œ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํ† ์ฝœ๋กœ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์— ์ด๋ฃจ์–ด์ง€๋Š” ์š”์ฒญ ์‘๋‹ต ํ”„๋กœํ† ์ฝœ์ด๋ฉฐ, ์ฃผ๋กœ HTML ๋ฌธ์„œ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

 

์›น ์„œ๋ฒ„ (Web Server)

: HTTP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ (Web Application Server) 

: HTTP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ •์  ๋ฆฌ์†Œ์Šค ์ œ๊ณต๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

Q. ์›น ์„œ๋ฒ„๋Š” ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์„ ์ œ๊ณตํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค. ์›น ํŽ˜์ด์ง€๋กœ ์˜ˆ์‹œ๋ฅผ ๋“ค๋ฉด ์–ด๋–ค๊ฒŒ ์žˆ์„๊นŒ?

A. ์ •์  ๋ฆฌ์†Œ์Šค๋Š” ์ด๋ฏธ์ง€, ๋™์˜์ƒ, CSS, HTML ๋“ฑ ์ด๋‹ค. ์›น ํŽ˜์ด์ง€์— ๋กœ๊ณ ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋กœ๊ณ ๋Š” ์ด๋ฏธ์ง€์— ํ•ด๋‹นํ•˜๋‹ˆ ์›น ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋กœ๊ทธ์ธ์ด ๋œ ํ™”๋ฉด์„ ๋ณด์—ฌ์ฃผ๋Š” ์ด๋Ÿฐ ์ผ๋ จ์˜ ๊ณผ์ •์ด๋ผ๊ณ  ๋ณด๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. ๋‹จ์ˆœํžˆ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์— ๋๋‚˜์ง€ ์•Š๊ณ  ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ ํ–‰ํ•˜๋Š” ์ผ์ด๋‹ค.

 

 

Q. ๊ทธ๋Ÿฐ๋ฐ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ ๋™์ ์ธ ๋กœ์ง ๋ฟ ์•„๋‹ˆ๋ผ, ์ •์  ๋ฆฌ์†Œ์Šค๋„ ์ œ๊ณตํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ ์›น ์„œ๋ฒ„๊ฐ€ ํ•˜๋Š” ์ผ๋„ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?

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

 

 

 


 

 

 

 

โœ”๏ธ  ์„œ๋ธ”๋ฆฟ๊ณผ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ

  • ์ž๋ฐ”์—์„œ๋Š” ์„œ๋ธ”๋ฆฟ ์ปจ๋„ค์ดํ„ฐ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉด WAS๋ผ๊ณ  ํ•œ๋‹ค.

 

์„œ๋ธ”๋ฆฟ (Servlet)

: ์›น ์ƒ์—์„œ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํ† ์ฝœ๋กœ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์— ์ด๋ฃจ์–ด์ง€๋Š” ์š”์ฒญ ์‘๋‹ต ํ”„๋กœํ† ์ฝœ์ด๋ฉฐ, ์ฃผ๋กœ HTML ๋ฌธ์„œ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค

 

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

: ์„œ๋ธ”๋ฆฟ๋“ค์„ ๋ชจ์•„์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์›น์„œ๋ฒ„์™€ ์†Œ์ผ“์„ ํ†ต์‹ ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ ํ†ฐ์บฃ์ด ์žˆ๋‹ค.

 

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

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) {
    }
}
/hello๋กœ URL์ด ํ˜ธ์ถœ๋˜๋ฉด ๊ทธ๋•Œ ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค. ์„œ๋ธ”๋ฆฟ์ด ์ฃผ๋กœ ํ•˜๋Š” ๊ฒƒ์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ทธ์— ๋งž๋Š” ์‘๋‹ต์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด HttpServletRequest์™€ HttpServletResponse๊ฐ€ ์žˆ๋‹ค. ์ด๋Š” ๊ฐ๊ฐ HTTP ์š”์ฒญ ์ •๋ณด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ , HTTP ์‘๋‹ต ์ •๋ณด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ œ๊ณตํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

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

 

 

Q. ์™œ ์š”์ฒญ ๊ฐ์ฒด์™€ ์‘๋‹ต ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•˜๋Š”๊ฑธ๊นŒ?

A. ์‚ฌ์šฉ์ž๋งˆ๋‹ค ์š”์ฒญํ•˜๋Š” ๋‚ด์šฉ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ์— ๋Œ€ํ•ด ์ฒ˜๋ฆฌํ•˜๋Š” ์‘๋‹ต๋„ ๋‹ฌ๋ผ์งˆ ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด, 3๋งŒ์›์„ ๊ฒฐ์ œํ•œ ์‚ฌ์šฉ์ž A์™€ 1๋งŒ์› ๊ฒฐ์ œํ•œ ์‚ฌ์šฉ์ž B์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ์‘๋‹ต์ด ์„ž์ผ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์š”์ฒญ ๊ฐ์ฒด์™€ ์‘๋‹ต ๊ฐ์ฒด๋Š” ์žฌ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋ฐ˜๋“œ์‹œ ์š”์ฒญ, ์‘๋‹ต ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋Š” HttpServletRequest์™€ HttpServletResponse ๊ฐ์ฒด์— ์ €์žฅํ•˜๊ณ  ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

 

Q. ์™œ ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋Š” ์žฌ์‚ฌ์šฉํ•ด๋„ ๋˜๋Š”๊ฑธ๊นŒ?

A. ์ด ๊ฐœ๋…์„ ์‹๋‹น์œผ๋กœ ๋น„์œ ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ์„œ๋ธ”๋ฆฟ์€ ์š”๋ฆฌ์‚ฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ , ์š”์ฒญ ๊ฐ์ฒด์™€ ์‘๋‹ต ๊ฐ์ฒด๋Š” ์ข…์—…์›์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฌ์šธ ๊ฒƒ ๊ฐ™๋‹ค. ์š”๋ฆฌ์‚ฌ(์„œ๋ธ”๋ฆฟ)๋Š” ์ข…์—…์›(์“ฐ๋ ˆ๋“œ)์ด ๋“ค๊ณ ์˜จ ์ฃผ๋ฌธ์„œ(์š”์ฒญ ๊ฐ์ฒด)๋งŒ ๋ณด๊ณ  ์š”๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ์ข…์—…์›์—๊ฒŒ ๋‚ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ์š”๋ฆฌ์‚ฌ๋Š” ์–ด๋–ค ์Œ์‹์„ ๋งŒ๋“ค์–ด์•ผํ•˜๋Š”์ง€๋งŒ ํ™•์ธํ•˜๊ณ , ์ด ์Œ์‹์„ ๋ช‡ ๋ฒˆ ํ…Œ์ด๋ธ”์—์„œ ์ฃผ๋ฌธํ–ˆ๊ณ  ์ด ์Œ์‹์„ ์š”์ฒญํ•œ ํ…Œ์ด๋ธ”์ด ์ด์ „์— ์–ด๋–ค ์Œ์‹์„ ์ฃผ๋ฌธํ–ˆ๋Š”์ง€๋Š” ๋ชฐ๋ผ๋„ ๋œ๋‹ค. ์š”๋ฆฌ๊ฐ€ ์™„์„ฑ๋˜์–ด ๋‚˜์˜ค๋ฉด ์ข…์—…์›์€ ์ ‘์‹œ(์‘๋‹ต ๊ฐ์ฒด)๋ฅผ ๋“ค๊ณ  ๊ณ ๊ฐ์—๊ฒŒ ์ค„ ๊ฒƒ์ด๋‹ค. ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋Š” ์ƒํƒœ๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ณ , ๊ทธ์ € ์ฒ˜๋ฆฌ์—๋งŒ ์ง‘์ค‘ํ•˜๋ฉด ๋˜๊ธฐ์— ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.(์–ด์ฐจํ”ผ ์ข…์—…์›์ด ์˜ฎ๊ธฐ๋Š” ๊ฑฐ๋ผ ์ข…์—…์›์ด ๋ช‡ ๋ฒˆ ํ…Œ์ด๋ธ”์—์„œ ์ฃผ๋ฌธํ•œ ์Œ์‹์ธ์ง€ ๊ธฐ์–ตํ•œ๋‹ค. ํ…Œ์ด๋ธ”์˜ ์ฃผ๋ฌธ์ด ์„ž์ด์ง€ ์•Š๋Š”๋‹ค.) ํ•œ๋ช…์˜ ์š”๋ฆฌ์‚ฌ๋กœ ์ถฉ๋ถ„ํžˆ ๊ณ ๊ฐ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ตณ์ด ์‚ฌ์žฅ์€ ๋‹ค๋ฅธ ์š”๋ฆฌ์‚ฌ๋ฅผ ๊ณ ์šฉํ•  ์ด์œ ๊ฐ€ ์—†๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•œ ๋ช…์˜ ์š”๋ฆฌ์‚ฌ๊ฐ€ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์š”๋ฆฌ๋งŒ ํ•˜์ง€ ์•Š๊ณ  ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์—์„œ ์˜ค๋Š” ์š”์ฒญ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๋Ÿฌ ์ข…์—…์›๊ธ€์ด ์ฃผ๋ฌธ์„œ๋ฅผ ๋“ค๊ณ  ์˜ค๋Š” ๊ฒƒ์„ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ๋กœ ๋น„์œ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. 

 

 

 


 

 

 

 

โœ”๏ธ  ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ์™€ ์“ฐ๋ ˆ๋“œ ํ’€

 

๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ (Multi thread)

: ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ๋‘˜ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

์“ฐ๋ ˆ๋“œ ํ’€ (Thread pool)

: ๋ฏธ๋ฆฌ ์ผ์ • ๊ฐœ์ˆ˜์˜ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

 

 

 

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

 

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

 

 

Q. ์š”์ฒญ์ด ๋“ค์–ด์™”์„ ๋•Œ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ๊ณผ ๋ฏธ๋ฆฌ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๊ฒฐ๊ตญ ๋‘˜ ๋‹ค ์“ฐ๋ ˆ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ธ๋ฐ ์™œ ์„ฑ๋Šฅ์— ์ฐจ์ด๊ฐ€ ๋‚˜๋Š”๊ฑธ๊นŒ?

A. ์“ฐ๋ ˆ๋“œ๋Š” ์‹๋‹น์—์„œ ์ผํ•˜๋Š” ์ข…์—…์›์— ๋น„์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๋Ÿฌ ์ข…์—…์›์ด ์ฃผ๋ฌธ์„œ์™€ ์š”๋ฆฌ ์„œ๋น™์„ ๋™์‹œ๋‹ค๋ฐœ๋กœ ํ•˜๋ฉด ๊ทธ ํ–‰์œ„๊ฐ€ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋œ๋‹ค. ์‚ฌ์žฅ์ด ์ข…์—…์›์„ ์—ฌ๋Ÿฌ๋ช… ๊ณ ์šฉํ•œ ํ›„ ์†๋‹˜์˜ ์š”์ฒญ์ด ๋งŽ์•„์ง€๋ฉด ์ข…์—…์›์„ ๋‚ด๋ณด๋‚ด๊ณ  ์š”์ฒญ์ด ์ ์–ด์ง€๋ฉด ๋‹ค์‹œ ํ’€๋กœ ๋“ค์–ด์™€ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์ข…์—…์›์„ ๊ณ ์šฉํ•˜๊ณ  ํ•ด๊ณ ํ•˜๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ด๋ฏธ ์—ฌ๋Ÿฌ๋ช…์„ ๊ณ ์šฉํ•ด๋‘” ๋’ค ํ’€์ด๋ผ๋Š” ๋Œ€๊ธฐ์‹ค์—์„œ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•œ ํ›„ ์š”์ฒญ์˜ ์ˆ˜๋งŒํผ ๋Œ๋ฆฐ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. ์ข…์—…์›์„ ๊ณ ์šฉํ•˜๊ณ  ํ•ด๊ณ ํ•˜๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด ๋‹น์—ฐํžˆ ๋” ๋งŽ์€ ์‹œ๊ฐ„๊ณผ ๋น„์šฉ์ด ๋“ค ๊ฒƒ์ด๋‹ค. ์ด๋ฏธ ๊ณ ์šฉํ•œ ํ›„ ํ•„์š”ํ•œ ๋งŒํผ ์ข…์—…์›์„ ๋Œ๋ฆฌ๊ณ  ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋ฉด ๋Œ€๊ธฐํ•˜๊ฒŒ ํ•œ ํ›„ ์š”์ฒญ์ด ์ƒˆ๋กญ๊ฒŒ ๋“ค์–ด์˜ค๋ฉด ๊ฐ™์€ ์ข…์—…์›์ด ๋‚˜๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ์‘๋Œ€๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ์— ํ›จ์”ฌ ํšจ์œจ์ ์ด๋‹ค.

 

 

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

 

 

 


 

 

 

โœ”๏ธ  HTML ํŽ˜์ด์ง€์™€ HTML API ๊ทธ๋ฆฌ๊ณ  WAS๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘์„ฑ๋˜๋Š”์ง€

 

HTML ํŽ˜์ด์ง€

: ๋™์ ์œผ๋กœ ํ•„์š”ํ•œ HTML ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์„œ ์ „๋‹ฌํ•œ๋‹ค. ์ฃผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋Š” ํ™ˆํŽ˜์ด์ง€๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

๋กœ๊ทธ์ธ ํ™”๋ฉด ์˜ˆ์‹œ

<form action="/login" method="post">
  <input name="username">
  <input name="password" type="password">
  <button type="submit">๋กœ๊ทธ์ธ</button>
</form>
์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์ด๋Š” ํŽ˜์ด์ง€์ด๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด /login ๊ฒฝ๋กœ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ post ๋ฐฉ์‹์œผ๋กœ ๋ณด๋‚ด์งˆ ๊ฒƒ์ด๋‹ค.

 

 

HTML API

: HTML์ด ์•„๋‹Œ JSON์ด๋‚˜ XML ํ˜•์‹์œผ๋กœ ์ฃผ๊ณ  ๋ฐ›์œผ๋ฉฐ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋กœ๊ทธ์ธ API

fetch('/api/login', {
  method: 'POST',
  body: JSON.stringify({ username: 'sori', password: '1234' }),
  headers: { 'Content-Type': 'application/json' }
})
.then(response => response.json())
.then(data => console.log(data));
๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ธ์„ ๋•Œ ํ™”๋ฉด์— ์ ํžŒ ๋ฐ์ดํ„ฐ๋ฅผ Controller๊นŒ์ง€ ์ „๋‹ฌํ•ด์ฃผ๋Š” ๊ฒƒ์ด HTML API(์›น API ํ˜น์€ REST API)๊ฐ€ ํ•˜๋Š” ์ผ์ด๋‹ค. fetch ํ•จ์ˆ˜์˜ ์ธ์ž์—๋Š” ๋“ค์–ด์˜จ ๊ฒฝ๋กœ์™€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋ณด๋‚ด๋Š”์ง€ ์–ด๋–ค ๋‚ด์šฉ์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ณด๋‚ผ๊ฑด์ง€์— ๋Œ€ํ•ด ์ ๋Š”๋‹ค. ์œ„์˜ ์ฝ”๋“œ๋Š” login ๊ฒฝ๋กœ๋กœ ๋“ค์–ด์˜จ ์ •๋ณด๋ฅผ POST(์ƒˆ๋กœ์šด ์ž์› ์š”์ฒญ)๋ฐฉ์‹์œผ๋กœ ๋ณด๋‚ด๋ฉฐ username๊ณผ password๋Š” JSON ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ๋‚ด์šฉ์ด ๋“ค์–ด์žˆ๋‹ค. ์ด API ์š”์ฒญ์€ WAS์˜ Controller๊ฐ€ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

HTTP API๋Š” ๋ธŒ๋ผ์šฐ์ € ๊ฐ™์€ UI ํด๋ผ์ด์–ธํŠธ์™€ ํ†ต์‹ ํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.์„œ๋ฒ„์™€ ์„œ๋ฒ„ ๊ฐ„์—๋„ HTTP API๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ƒํ’ˆ์„ ์ฃผ๋ฌธํ•œ ๋’ค ๊ฒฐ์ œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ, ์ฃผ๋ฌธ ์„œ๋ฒ„์™€ ๊ฒฐ์ œ ์„œ๋ฒ„๊ฐ€ HTTP API๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐฉ์‹์œผ๋กœ ํ†ต์‹ ํ•œ๋‹ค.

 

 

WAS์˜ Controller

@RestController
@RequestMapping("/api")
public class LoginController {

    @PostMapping("/login")
    public ResponseEntity<LoginResult> login(@RequestBody LoginRequest request) {       
       // ๋กœ์ง ์ˆ˜ํ–‰ ์ฝ”๋“œ...
        return ResponseEntity.ok(new LoginResult("success", "Welcome!"));
    }
}
๋กœ๊ทธ์ธ์„ ์ฒ˜๋ฆฌํ•˜๋Š” Controller๋‹ค. @RequestMapping("/api")๋Š” ์ด ํด๋ž˜์Šค์˜ ๋ชจ๋“  ์š”์ฒญ์€ api๋กœ ์‹œ์ž‘๋œ ๊ฒฝ๋กœ๋งŒ ์ฒ˜๋ฆฌํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. @PostMapping์€ /api/login ๊ฒฝ๋กœ ์ค‘ post ์š”์ฒญ๋งŒ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜จ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์ผ๋ จ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์‹คํ–‰๋œ๋‹ค. 

์‹คํ–‰๋˜๋Š” ๊ฒฝ๋กœ์— ๋Œ€ํ•ด ๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณด์ž๋ฉด, HTML ํŽ˜์ด์ง€์— ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ ๊ด€๋ จ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด, HTML API๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ค ํ˜•ํƒœ๋กœ ์–ด๋–ค ๊ฒฝ๋กœ๋กœ ๋ณด๋‚ผ๊ฑด์ง€ ์ •๋ฆฌํ•˜์—ฌ WAS๋กœ ๋ณด๋‚ธ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด WAS ๋‚ด์— ์žˆ๋Š” Controller ์ค‘ @RestController๊ฐ€ API ์š”์ฒญ์„ ๋ฐ›๊ณ  ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ(์˜ˆ๋กœ ํ†ฐ์บฃ)๊ฐ€ ์š”์ฒญ์„ ์ „๋‹ฌํ•œ๋‹ค. ์ „๋‹ฌ๋œ ์š”์ฒญ์— ๋งž์ถฐ ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ ๋กœ์ง์ด ์ˆ˜ํ–‰๋˜๊ณ  JSON ๋ฐ์ดํ„ฐ๋กœ ์ƒ์„ฑ๋œ ๊ฒฐ๊ณผ๋Š” API ์‘๋‹ต์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „๋‹ฌ๋œ๋‹ค. ๋กœ๊ทธ์ธ์ด ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ๋‹ค๋ฉด ๊ทธ์— ๋งž๋Š” ํ™”๋ฉด์„ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ›๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

 

 

 


 

 

 

โœ”๏ธ  ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง, ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง, ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง

 

๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง

: ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์š”์ฒญํ•ด ๋ฐ›์€ ๋‚ด์šฉ์„ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ํ‘œ์‹œํ•ด์ฃผ๋Š” ์ž‘์—…์„ ๋งํ•œ๋‹ค.

 

 

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

์ •์ ์ธ ํ™”๋ฉด์— ์‚ฌ์šฉํ•˜๋ฉฐ, HTML ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์„œ๋ฒ„์—์„œ ๋งŒ๋“ค์–ด์„œ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ „๋‹ฌํ•œ๋‹ค.

 

์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ๋ฐฉ์‹์€ ๋ณดํ†ต ๋ฐฑ์—”๋“œ ์ง€ํ–ฅ ๊ฐœ๋ฐœ์ž๋“ค์ด Spring๊ณผ Thymeleaf ๋“ฑ์„ ์‚ฌ์šฉํ•ด ํ™”๋ฉด๊ณผ ๋กœ์ง์„ ํ•จ๊ป˜ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์ž์ฃผ ํ™œ์šฉ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณด๋ฉด ์ ํ•ฉํ•  ๊ฒƒ ๊ฐ™๋‹ค.

 

 

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

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

 

ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ๋ฐฉ์‹์ด ์›น ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ๊ฐ€ ๋‚˜๋‰˜์–ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. Vue.js, React๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ ์ธ ํ™”๋ฉด์„ ์ œ๊ณตํ•˜๊ณ  ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋Š” ๋ฐ์ดํ„ฐ API์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋“ฑ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

 

 


 

 

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

 

๐Ÿชฝ

ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š”

 

 

 


 

 

- ์›น์„œ๋ฒ„์™€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ์ฐจ์ด

 

[Web] Web Server์™€ WAS์˜ ์ฐจ์ด์™€ ์›น ์„œ๋น„์Šค ๊ตฌ์กฐ - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

- ์›น๊ณผ HTTP

 

WEB๊ณผ HTTP / (ํŠน์ง•, ๊ตฌ์กฐ, ๋™์ž‘ ๊ณผ์ • ์˜ˆ์‹œ)

ํ‹€๋ฆฐ ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์ง€์ ํ•ด ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ณต๋ถ€์— ๋งŽ์€ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. WEB (World Wide Web) ์›น = ์ธํ„ฐ๋„ท? ์ธํ„ฐ๋„ท์ด๋ผ๋Š” ๊ฑฐ๋Œ€ํ•œ ๋„คํŠธ์›Œํฌ ์œ„์—์„œ ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค๋“ค์ด ๋™์ž‘ํ•˜๋Š”๋ฐ, ์›น๋„ ์ธํ„ฐ

mag1c.tistory.com

 

- WAS์™€ ์„œ๋ธ”๋ฆฟ

 

[WEB] WAS(Web Application Server)์™€ ์„œ๋ธ”๋ฆฟ(Servlet)์— ๋Œ€ํ•˜์—ฌ

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

velog.io

 

- fetch์™€ post

 

fetch ํ•จ์ˆ˜: POST Request

POST ์š”์ฒญ, fetch ํ•จ์ˆ˜, then() ๋ฉ”์„œ๋“œ์—์„œ์˜ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ, Response message ์ฒ˜๋ฆฌ

velog.io

 

- fetch

 

[JavaScript] fetch ํ•จ์ˆ˜ ์“ฐ๋Š” ๋ฒ•, fetch ํ•จ์ˆ˜๋กœ HTTP ์š”์ฒญํ•˜๋Š” ๋ฒ•

fetch ํ•จ์ˆ˜๋Š” XMLHttpRequest ๊ฐ์ฒด๋ณด๋‹ค ์ตœ๊ทผ์— ๋‚˜์˜จ, HTTP ์š”์ฒญ ์ „์†ก ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” Web API๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ธฐ ์œ„ํ•ด ์Šต๊ด€์ฒ˜๋Ÿผ ์“ฐ๋˜ fetch์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.

velog.io

 

- ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง, CSR๊ณผ SSR

 

ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(CSR) vs ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR)

๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง์ด๋ž€? ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์š”์ฒญํ•ด ๋ฐ›์€ ๋‚ด์šฉ์„ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด(View)์— ํ‘œ์‹œํ•ด์ฃผ๋Š” ์ž‘์—…์„ ๋งํ•œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ HTML, CSS, JavaScript ๋ฌธ์„œ๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ ๋ธŒ๋ผ์šฐ์ € ์—”์ง„์ด

suzzeong.tistory.com

 

 

+ Recent posts