<Web> Java Servlet

Google ์•„๋‹ˆ๊ณ  Joogleยท2022๋…„ 6์›” 28์ผ
0

web

๋ชฉ๋ก ๋ณด๊ธฐ
1/7

Reference
https://mangkyu.tistory.com/14
https://velog.io/@falling_star3/Tomcat-%EC%84%9C%EB%B8%94%EB%A6%BFServlet%EC%9D%B4%EB%9E%80

๐Ÿ’ก1. Servlet

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

e.g. ๋กœ๊ทธ์ธ ์‹œ๋„๋ฅผ ํ•  ๋•Œ, ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ž…๋ ฅ๋˜๋Š” ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ™•์ธํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์‘๋‹ตํ•˜๋Š”๋ฐ ์ด๋Ÿฌํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์„œ๋ธ”๋ฆฟ

๐Ÿ’ก2. Servlet ํŠน์ง•

  • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋Œ€ํ•ด ๋™์ž‘ํ•˜๋Š” ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปดํฌ๋„ŒํŠธ
  • html์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์— ์‘๋‹ต
  • Java Thread๋ฅผ ์ด์šฉํ•ด ๋™์ž‘
  • MVC ํŒจํ„ด์—์„œ Controller๋กœ ์ด์šฉ
  • HTTP ํ”„๋กœํ† ์ฝœ ์„œ๋น„์Šค๋ฅผ ์ง€์›ํ•˜๋Š” javax.servlet.httlp.HttpServlet ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์Œ
  • UDP ๋ณด๋‹ค ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋Š๋ฆผ
  • HTML ๋ณ€๊ฒฝ ์‹œ Servlet์„ ์žฌ์ปดํŒŒ์ผํ•ด์•ผ ํ•˜๋Š” ๋‹จ์ ์ด ์žˆ์Œ
  • ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ์ ์šฉํ•˜๊ธฐ ์‰ฌ์›€

๐Ÿ’ก3. Servlet Container

์„œ๋ฒ„์— ์„œ๋ธ”๋ฆฟ์„ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ ํ•ด์„œ ์Šค์Šค๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ์„œ๋ธ”๋ฆฟ์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ฒƒ์ด ํ•„์š”. ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„์ฃผ๊ณ  ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๊ฒŒ, ์›น ์„œ๋ฒ„์™€ ์†Œ์ผ“์œผ๋กœ ํ†ต์‹ ํ•˜๋ฉฐ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ Tomcat์ด ์žˆ์Œ (์›น ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜์—ฌ JSP์™€ ์„œ๋ธ”๋ฆฟ์ด ์ž‘๋™ํ•˜๋Š” ํ™˜๊ฒฝ ์ œ๊ณต)

  • ์›น ์„œ๋ฒ„์™€์˜ ํ†ต์‹  ์ง€์› : ์„œ๋ธ”๋ฆฟ๊ณผ ์›น์„œ๋ฒ„๊ฐ€ ์†์‰ฝ๊ฒŒ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์คŒ

  • ์„œ๋ธ”๋ฆฟ ์ƒ๋ช…์ฃผ๊ธฐ (Life Cycle) ๊ด€๋ฆฌ : ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ์˜ ํƒ„์ƒ๊ณผ ์ฃฝ์Œ์„ ๊ด€๋ฆฌ. ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋ฅผ ๋กœ๋”ฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๊ณ , ์ดˆ๊ธฐํ™” ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ ์ ˆํ•œ ์„œ๋ธ”๋ฆฟ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœ. ์„œ๋ธ”๋ฆฟ์ด ์ƒ๋ช…์„ ๋‹ค ํ•œ ์ˆœ๊ฐ„์—๋Š” ์ ์ ˆํ•˜๊ฒŒ Gabage Collection์„ ์ง„ํ–‰ํ•˜์—ฌ ํŽธ์˜ ์ œ๊ณต

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

  • ์„ ์–ธ์ ์ธ ๋ณด์•ˆ ๊ด€๋ฆฌ : ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ๋ณด์•ˆ์— ๊ด€๋ จ๋œ ๋‚ด์šฉ์„ ์„œ๋ธ”๋ฆฟ ๋˜๋Š” ์ž๋ฐ” ํด๋ž˜์Šค์— ๊ตฌํ˜„ํ•ด๋†“์ง€ ์•Š์•„๋„ ๋จ.

๐Ÿ’ก4. Servlet ์ƒ๋ช…์ฃผ๊ธฐ

์„œ๋ธ”๋ฆฟ๋„ ์ž๋ฐ” ํด๋ž˜์Šค์ด๋ฏ€๋กœ ์‹คํ–‰ํ•˜๋ฉด ์ดˆ๊ธฐํ™”๋ถ€ํ„ฐ ์„œ๋น„์Šค ์ˆ˜ํ–‰ ํ›„ ์†Œ๋ฉธํ•˜๊ธฐ๊นŒ์ง€์˜ ๊ณผ์ •์„ ๊ฑฐ์นจ. ์ด ๊ณผ์ •์„ ์„œ๋ธ”๋ฆฟ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ผ ํ•˜๋ฉฐ ๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค ํ˜ธ์ถœ๋˜์–ด ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝœ๋ฐฑ ๋ฉ”์„œ๋“œ๋ฅผ ์„œ๋ธ”๋ฆฟ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ๋ผ๊ณ  ํ•จ

  • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ปจํ…Œ์ด๋„ˆ๋Š” ํ•ด๋‹น ์„œ๋ธ”๋ฆฟ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์—†์„ ๊ฒฝ์šฐ init() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ ์žฌ
  • init() ๋ฉ”์†Œ๋“œ๋Š” ์ฒ˜์Œ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ธ”๋ฆฟ์˜ ์“ฐ๋ ˆ๋“œ์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด ์˜ค๋ฒ„๋ผ์ด๋”ฉ
  • ์‹คํ–‰ ์ค‘ ์„œ๋ธ”๋ฆฟ์ด ๋ณ€๊ฒฝ๋  ๊ฒฝ์šฐ, ๊ธฐ์กด ์„œ๋ธ”๋ฆฟ์„ ํŒŒ๊ดดํ•˜๊ณ  init()์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๋‚ด์šฉ์„ ๋‹ค์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ
  • init()์ด ํ˜ธ์ถœ๋œ ํ›„ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋”ฐ๋ผ์„œ service() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์ด doGet(), doPost()๋กœ ๋ถ„๊ธฐ
  • ์ด๋•Œ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ์˜ค๋ฉด ๊ฐ€์žฅ ๋จผ์ € ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์œผ๋กœ ์ƒ์„ฑ๋œ HttpServletRequest, HttpServletResponse์— ์˜ํ•ด request์™€ response ๊ฐ์ฒด๊ฐ€ ์ œ๊ณต
  • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์„œ๋ธ”๋ฆฟ์— ์ข…๋ฃŒ ์š”์ฒญ์„ ํ•˜๋ฉด destroy() ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š”๋ฐ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ•œ ๋ฒˆ ์‹คํ–‰๋˜๋ฉฐ, ์ข…๋ฃŒ์‹œ์— ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…๋“ค์€ destroy()๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜์—ฌ ๊ตฌํ˜„

๐Ÿ’ก5. Servlet ๋™์ž‘๋ฐฉ์‹

  1. client๊ฐ€ URL์„ ์ž…๋ ฅํ•˜๋ฉด HTTP Request๊ฐ€ Servlet Container๋กœ ์ „์†ก
  2. ์š”์ฒญ์„ ์ „์†ก๋ฐ›์€ Servlet Container๋Š” HttpServletRequest, HttpServletResponse ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
  3. web.xml์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ URL์ด ์–ด๋Š ์„œ๋ธ”๋ฆฟ์— ๋Œ€ํ•œ ์š”์ฒญ์ธ์ง€ ์ฐพ์Œ
  4. ํ•ด๋‹น ์„œ๋ธ”๋ฆฟ์—์„œ service ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ํ›„ ํด๋ผ์ด์–ธํŠธ์˜ GET, POST ์—ฌ๋ถ€์— ๋”ฐ๋ผ doGet(), doPost()๋ฅผ ํ˜ธ์ถœ
  5. dpGet(), doPost() ๋ฉ”์†Œ๋“œ๋Š” ๋™์  ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•œ ํ›„ HttpServletResponse ๊ฐ์ฒด์— ์‘๋‹ต์„ ๋ณด๋ƒ„
  6. ์‘๋‹ต์ด ๋๋‚˜๋ฉด HttpServletRequest, HttpServletResponse ๋‘ ๊ฐ์ฒด๋ฅผ ์†Œ๋ฉธ
public class FirstServlet extends HttpServlet {
	@Override
    public void init() {
    ...
	}
    
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) {
    ...
    }
    
    @Override
    public void destroy() {
    ...
    }
}
profile
Backend ๊ฐœ๋ฐœ์ž ์ง€๋ง์ƒ

0๊ฐœ์˜ ๋Œ“๊ธ€