Skip to content

Latest commit

Β 

History

History
80 lines (68 loc) Β· 6.07 KB

Servlet.md

File metadata and controls

80 lines (68 loc) Β· 6.07 KB

κΈ°λ³Έ 지식

  • MVC λ₯Ό μ•ŒκΈ°μ „μ— μ•Œμ•„λ‘λ©΄ 도움이 λ˜λŠ” μ„œλΈ”λ¦Ώμ— λŒ€ν•œ κ°œλ…λΆ€ν„° ν•™μŠ΅ν•˜μž.

WAS μ—μ„œ ν•˜λŠ” 업무듀

  • μ„œλ²„ TCP , IP μ—°κ²° λŒ€κΈ°, μ†ŒμΌ“ μ—°κ²°
  • HTTP μš”μ²­ λ©”μ‹œμ§€λ₯Ό νŒŒμ‹±ν•΄μ„œ 읽기
  • POST 방식 , /save URL 등을 인지
  • Content - Type 확인
  • HTTP λ©”μ‹œμ§€ λ°”λ”” λ‚΄μš© νŒŒμ‹±
  • μ €μž₯ ν”„λ‘œμ„ΈμŠ€ μ‹€ν–‰
  • λΉ„μ¦ˆλ‹ˆμŠ€ ν”„λ‘œμ„ΈμŠ€ μ‹€ν–‰
    • λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 μ‹€ν–‰ (μ€‘μš”)
    • DB에 μ €μž₯ μš”μ²­ (μ€‘μš”)
  • HTTP 응닡 λ©”μ‹œμ§€ 생성
    • HTTP μ‹œμž‘ 라인, 헀더, λ©”μ‹œμ§€ λ°”λ”” λ“± 생성
  • TCP , IP 에 응닡 전달, μ†ŒμΌ“ μ’…λ£Œ

μ„œλΈ”λ¦Ώμ˜ μ—­ν• 

  • μ„œλΈ”λ¦Ώμ€ μ»¨νŠΈλ‘€λŸ¬μ—κ²Œ μš”μ²­μ„ μ „λ‹¬ν•˜κ³ , μ›Ή κ°œλ°œμ— ν•„μš”ν•œ λΆ€κ°€ κΈ°λŠ₯듀을 μ œκ³΅ν•œλ‹€.
  • λΉ„μ¦ˆλ‹ˆμŠ€ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ œμ™Έν•˜κ³ , WASμ—μ„œ ν•˜λŠ” 기본적인 μš”μ²­,응닡 μ œμ–΄μ— κ΄€λ ¨ν•œ 처리λ₯Ό ν•΄μ€€λ‹€.

νŠΉμ§•

  • μ„œλΈ”λ¦Ώ μ½”λ“œλŠ” μ–΄λ–»κ²Œ μ‹€ν–‰λ˜λ‚˜μš” ?
    • A : νŠΉμ • urlPatterns( 예 : β€œ/hello” ) 의 URL 이 호좜되면 μ„œλΈ”λ¦Ώ 내에 μž‘μ„±ν•΄ 놓은 μ½”λ“œκ°€ μ‹€ν–‰λœλ‹€.
  • HttpServletRequest : HTTP μš”μ²­ 정보λ₯Ό νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©
  • HttpServletResponse : HTTP 응닡 정보λ₯Ό νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©
  • HTTP μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄, WASλŠ” Request, Response 객체λ₯Ό μƒˆλ‘œ λ§Œλ“€μ–΄μ„œ β†’ μ„œλΈ”λ¦Ώ 객체λ₯Ό ν˜ΈμΆœν•œλ‹€.
  • κ°œλ°œμžλŠ” HttpServletRequest , HttpServletResponse λ₯Ό μ‚¬μš©ν•΄μ„œ νŽΈλ¦¬ν•˜κ²Œ 개발이 κ°€λŠ₯ν•΄μ§„λ‹€.
  • 이후, HTTP 응닡을 ν•˜κΈ° μœ„ν•΄μ„œ , WASκ°€ Response 객체에 λ‹΄κ²¨μžˆλŠ” λ‚΄μš©μ„ μ΄μš©ν•˜μ—¬ HTTP 응닡 정보λ₯Ό μƒμ„±ν•œλ‹€.

μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆ

  • 의미 : ν†°μΊ£μ²˜λŸΌ μ„œλΈ”λ¦Ώμ„ μ§€μ›ν•˜λŠ” WAS λ₯Ό μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆλΌκ³  ν•œλ‹€.
  • μ—­ν•  : μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆλŠ” μ„œλΈ”λ¦Ώ 객체λ₯Ό μžλ™μœΌλ‘œ 생성 , ν˜ΈμΆœν•΄μ€€λ‹€. 그리고, WAS κ°€ μ’…λ£Œλ  λ•Œ μ„œλΈ”λ¦Ώ 객체λ₯Ό μ’…λ£Œ μ‹œμΌœμ€€λ‹€. 즉, 라이프 사이클을 관리해쀀닀.
  • μ„œλΈ”λ¦Ώ κ°μ²΄λŠ” μ‹±κΈ€ν†€μœΌλ‘œ 관리가 λœλ‹€.
    • 고객의 μš”μ²­μ΄ 올 λ•Œ λ§ˆλ‹€ 계속 객체λ₯Ό μƒμ„±ν•˜λŠ” 것은 μ˜λ―Έκ°€ μ—†κ³ , λΉ„νš¨μœ¨μ μ΄λ‹€.
    • 단, request , response κ°μ²΄λŠ” μœ μ €μ˜ μš”μ²­λ§ˆλ‹€ λ‹€ λ‹€λ₯΄κΈ° λ•Œλ¬Έμ—, 항상 μƒμ„±λœλ‹€.
    • ν•˜μ§€λ§Œ, μ„œλΈ”λ¦Ώμ€ μš”μ²­λ§ˆλ‹€ μƒˆλ‘œ 생성할 ν•„μš”κ°€ μ—†μŒ.
    • 졜초 λ‘œλ”© μ‹œμ μ— μ„œλΈ”λ¦Ώ 객체λ₯Ό 미리 λ§Œλ“€μ–΄λ‘κ³  μž¬ν™œμš© ν•©λ‹ˆλ‹€.
    • λͺ¨λ“  고객 μš”μ²­μ€ 같은 μ„œλΈ”λ¦Ώ 객체 μΈμŠ€ν„΄μŠ€μ— μ ‘κ·Όν•œλ‹€.
    • 이게 제일 μ£Όμ˜ν•΄μ•Ό ν•˜λŠ” 것: 곡유 λ³€μˆ˜, μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜μ§€ μ•Šλ„λ‘ μ£Όμ˜ν•΄μ•Ό ν•œλ‹€. μ„œλΈ”λ¦Ώ , μŠ€ν”„λ§ λΉˆμ€ μ£Όμ˜ν•΄μ„œ μ‚¬μš©ν•˜μž.
  • λ™μ‹œ μš”μ²­μ„ μœ„ν•œ λ©€ν‹° μ“°λ ˆλ“œ 처리λ₯Ό 지원해쀀닀.
  • κ·Έλž˜μ„œ, κ°œλ°œμžλŠ” λ©€ν‹° μ“°λ ˆλ“œ κ΄€λ ¨ μ½”λ“œλ“€μ„ μ‹ κ²½μ“°μ§€ μ•Šμ•„λ„ λœλ‹€.

μ„œλΈ”λ¦Ώ 객체λ₯Ό ν˜ΈμΆœν•˜λŠ” 싀체

  • μ‹€μ²΄λŠ” λ°”λ‘œ μ“°λ ˆλ“œμ΄λ‹€.
  • μ“°λ ˆλ“œλŠ” ν”„λ‘œκ·Έλž¨ μ•ˆμ—μ„œ, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œλ₯Ό ν•˜λ‚˜ν•˜λ‚˜ μ‹€ν–‰ν•œλ‹€.
  • μ“°λ ˆλ“œλŠ” ν•œλ²ˆμ— ν•˜λ‚˜μ˜ μ½”λ“œ 라인만 μˆ˜ν–‰ν•œλ‹€.
  • μž₯점 : λ™μ‹œ μ²˜λ¦¬κ°€ ν•„μš”ν•˜λ©΄, μ“°λ ˆλ“œλ₯Ό μΆ”κ°€λ‘œ μƒμ„±ν•˜κ²Œ λœλ‹€.
  • 단점
    • μ“°λ ˆλ“œ 생성 λΉ„μš©μ΄ λΉ„μ‹Έλ‹€κ³  ν•œλ‹€.
    • μ“°λ ˆλ“œλ₯Ό μƒμ„±ν•˜λ©΄, 응닡 속도가 λŠ¦μ–΄μ§„λ‹€. μ“°λ ˆλ“œλŠ” μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­ λΉ„μš©μ΄ λ°œμƒν•œλ‹€. (CPU μ½”μ–΄ 수만큼 λ™μ‹œ μˆ˜ν–‰μ΄ κ°€λŠ₯ν•œλ°, κ·Έ 이상은 μ“°λ ˆλ“œλ₯Ό μ„œλ‘œ μ „ν™˜ν•΄μ•Ό ν•œλ‹€.)
    • μ“°λ ˆλ“œ 생성에 μ œν•œμ΄ μ—†λ‹€.
      • 고객 μš”μ²­μ΄ λ„ˆλ¬΄ 많이 였면, CPU , λ©”λͺ¨λ¦¬ μž„κ³„μ μ„ λ„˜μ–΄μ„œ μ„œλ²„κ°€ 죽을 수 μžˆλ‹€.
  • μ΄λŸ¬ν•œ 단점을 κ·Ήλ³΅ν•˜κΈ° μœ„ν•΄, WAS μ—μ„œλŠ” μ“°λ ˆλ“œ 풀을 μ‚¬μš©ν•œλ‹€. λ§Œμ•½ μ“°λ ˆλ“œ ν’€μ˜ ν•œκ³„λ³΄λ‹€ λ§Žμ€ μš”μ²­μ΄ λ“€μ–΄μ˜€κ²Œ 되면 β†’ λ‚˜λ¨Έμ§€ μš”μ²­λ“€μ„ μ“°λ ˆλ“œ 풀에 μ“°λ ˆλ“œκ°€ μ—†κΈ° λ•Œλ¬Έμ— μš”μ²­λ“€μ€ λŒ€κΈ° μƒνƒœκ±°λ‚˜, κ±°μ ˆλ˜κΈ°λ„ ν•œλ‹€. μ„€μ •ν•  수 μžˆλ‹€. (톰캣은 기본으둜 200개 μ •λ„λ‘œ μ„€μ •λ˜μ–΄ 있음.)
  • μ“°λ ˆλ“œ 풀을 μ‚¬μš©ν•˜κ²Œ 되면 μž₯점 : μ“°λ ˆλ“œκ°€ 미리 μƒμ„±λ˜μ–΄μ„œ λΉ„μš© 및 응닡 μ‹œκ°„μ΄ κ°œμ„ λœλ‹€. 생성 κ°€λŠ₯ν•œ μ“°λ ˆλ“œ μ΅œλŒ€μΉ˜κ°€ μžˆμœΌλ―€λ‘œ λ§Žμ€ μš”μ²­μ΄ λ“€μ–΄μ˜€λ”λΌλ„ 기쑴의 μš”μ²­λ“€μ€ μ•ˆμ „ν•˜κ²Œ μ²˜λ¦¬κ°€ κ°€λŠ₯ν•˜λ‹€.

DispatcherServlet

  • Spring's DispatcherServlet does more than just Servlet. It is completely integrated with the Spring IoC container and as such allows you to use every other feature that Spring has.

  • DispatcherServletλŠ” FrontController λ””μžμΈ νŒ¨ν„΄μœΌλ‘œ κ΅¬ν˜„λ˜μ–΄ μžˆλ‹€.

    • FrontController νŒ¨ν„΄μ΄ λ­”κ°€μš” ?
      • 각 ν΄λΌμ΄μ–ΈνŠΈλ“€μ€ ν”„λ‘ νŠΈ μ»¨νŠΈλ‘€λŸ¬μ—κ²Œ μš”μ²­μ„ ν•œλ‹€.
      • ν”„λ‘ νŠΈ μ»¨νŠΈλ‘€λŸ¬λŠ” 각각의 μš”μ²­μ— λ§žλŠ” 컨트둀러λ₯Ό μ°Ύμ•„μ„œ ν˜ΈμΆœν•˜λŠ” 곡톡적인 역할을 ν•œλ‹€.
      • κ·Έλž˜μ„œ, ν”„λ‘ νŠΈ 컨트둀러 외에 λ‹€λ₯Έ 컨트둀러 듀은 μ„œλΈ”λ¦Ώμ„ μ‚¬μš©ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.
  • μ•„λž˜λŠ”, Spring Web MVC 의 request workflow 이닀.

    • Spring MVC μ—μ„œλŠ” FrontController 의 역할을 DispatcherServlet 이 λ‹΄λ‹Ήν•œλ‹€κ³  μƒκ°ν•˜λ©΄ λœλ‹€.

    IMAGES

  • DispatcherServlet 은 μ‹€μ œλ‘œ Servlet (HttpServlet 클래슀) λ₯Ό 상속받은 ν΄λž˜μŠ€μ΄λ‹€. μ΄λŠ” web.xml 에 μ„ μ–Έλ˜μ–΄ μžˆλ‹€. 그리고, DispatcherServlet이 μš”μ²­μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ URL 맀핑도 λ“€μ–΄κ°„λ‹€.

  • μ•„λž˜λŠ” web.xml 의 μ˜ˆμ‹œμ΄λ‹€. IMAGES

    • /example 둜 μ‹œμž‘ν•˜λŠ” λͺ¨λ“  μš”μ²­μ€ DispatcherServlet이 μ²˜λ¦¬ν•˜λ„λ‘ ν•˜κ³ , 이 λ•Œ, DispatcherServlet의 이름은 example 이닀.
    • Servlet 3.0 이후 λ²„μ „μ—μ„œλŠ” μœ„μ˜ web.xml κ³Ό λ™μΌν•˜κ²Œ μ½”λ“œλ ˆλ²¨μ—μ„œ 섀정을 ν•  수 μžˆλ‹€. μ•„λž˜ μ½”λ“œμ™€ 같이 말이닀. IMAGES
  • Web MVC ν”„λ ˆμž„μ›Œν¬μ—μ„œλŠ” DispatcherServletλŠ” 자체적인 WebApplicationContext λ₯Ό κ°€μ§€κ³  μžˆλ‹€. WebApplicationContext μ•ˆμ—λŠ” λΉˆλ“€μ΄ λ“€μ–΄μžˆλ‹€. 이 λΉˆλ“€μ€ μ„œλΈ”λ¦Ώ λ²”μœ„ (μ§€μ—­) λ‚΄μ—μ„œ μž¬μ •μ˜λ₯Ό ν•  수 있고, μƒˆλ‘œμš΄ λΉˆμ„ μ •μ˜ν•  μˆ˜λ„ μžˆλ‹€. μΆ”κ°€λ‘œ, WebApplicationContext λŠ” ApplicationContext 을 ν™•μž₯ν•œ 것이닀.

    IMAGES