πŸ“š[Java] Servelet

텁텁·2025λ…„ 4μ›” 25일

Servletμ΄λž€?

Java Servlet은 ν΄λΌμ΄μ–ΈνŠΈμ˜ HTTP μš”μ²­μ— 따라 μ›ΉνŽ˜μ΄μ§€λ₯Ό λ™μ μœΌλ‘œ 생성해 μ‘λ‹΅ν•˜λŠ” μ„œλ²„μΈ‘ ν”„λ‘œκ·Έλž¨μ΄λ‹€.
μ›Ήμ„œλ²„λ‘œ μ²˜λ¦¬ν•  수 μ—†λŠ” 동적 μš”μ²­μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ WAS λ‚΄λΆ€μ—μ„œ μ‹€ν–‰λ˜λŠ” μžλ°” 클래슀의 μΌμ’…μœΌλ‘œ
ν”νžˆ μ„œλΈ”λ¦Ώ(Servlet) 으둜 λΆˆλ¦°λ‹€.


Servlet 의 λ™μž‘κ³Όμ •


1. ν΄λΌμ΄μ–Έμ—κ²Œ 받은 HTTP μš”μ²­μ΄ 동적 μš”μ²­μΌμ‹œ μ›Ήμ„œλ²„λŠ” 이λ₯Ό μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆ 에 λ„˜κΈ΄λ‹€.
2. μ»¨ν…Œμ΄λ„ˆλŠ” HttpServletRequest, HttpServletResponse 객체λ₯Ό μƒμ„±ν•œλ‹€.
3. Web.xml에 λ§€ν•‘λ˜λŠ” μ„œλΈ”λ¦Ώμ˜ service() λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€.
4. ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ— 따라 doGet() ν˜Ήμ€ doPost()λ₯Ό ν˜ΈμΆœν•œλ‹€.
5. λ©”μ„œλ“œμ— λ§žλŠ” λ™μ νŽ˜μ΄μ§€ 생성 ν›„ HttpServletResponce 객체에 응닡을 λ‹΄μ•„ λ°˜ν™˜ν•œλ‹€.
6. 응닡이 λλ‚˜λ©΄ HttpServletRequest, HttpServletResponse 두 객체λ₯Ό μ†Œλ©Έμ‹œν‚¨λ‹€.


Servlet 의 생λͺ…μ£ΌκΈ°

μ„œλΈ”λ¦Ώμ€ 크게 생성 -> μš”μ²­ 처리 -> μ†Œλ©Έ, μ„Έ λ‹¨κ³„μ˜ νλ¦„μœΌλ‘œ 생λͺ…μ£ΌκΈ°(Life Cycle)λ₯Ό κ°€μ§„λ‹€.

  1. 생성(Initialization)

    • ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ— 따라 μ»¨ν…Œμ΄λ„ˆλŠ” ν•΄λ‹Ή μ„œλΈ”λ¦Ώ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•œλ‹€.
    • μ„œλΈ”λ¦Ώ 객체 생성 ν›„ init() λ©”μ„œλ“œκ°€ ν˜ΈμΆœλ˜μ–΄ μ„œλΈ”λ¦Ώμ˜ μ΄ˆκΈ°ν™”κ°€ μ§„ν–‰λœλ‹€.

      μ„œλΈ”λ¦Ώμ€ 싱글톀 νŒ¨ν„΄μœΌλ‘œ κ΄€λ¦¬λ˜λ©° μ΄ν›„μ˜ μš”μ²­μ—μ„  μ΄ˆκΈ°ν™”λ₯Ό λ‹€μ‹œ μ§„ν–‰ν•˜μ§€μ•Šκ³  κΈ°μ‘΄ μ„œλΈ”λ¦Ώμ„ μž¬μ‚¬μš©ν•œλ‹€.

  2. μš”μ²­ 처리(Service)

    • μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆλŠ” μ„œλΈ”λ¦Ώμ˜ service() λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€.
    • service() λ©”μ„œλ“œλŠ” μš”μ²­μ— 따라 doGet(), doPost() λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•΄ μ•Œλ§žμ€ 응닡을 μƒμ„±ν•œλ‹€.
    • ν•΄λ‹Ή 응닡은 HttpServletResponce 객체에 담겨 μ „μ†‘λœλ‹€.
  3. μ†Œλ©Έ(Destruction)

    • μ„œλΈ”λ¦Ώμ΄ 더 이상 ν•„μš”κ°€ 없을 λ•Œ μ»¨ν…Œμ΄λ„ˆλŠ” μ„œλΈ”λ¦Ώμ„ μ†Œλ©Έμ‹œν‚¨λ‹€.
    • μ†Œλ©Έ 직전 destroy() λ©”μ„œλ“œκ°€ 호좜되며, μ’…λ£Œ μ‹œ μ²˜λ¦¬ν•΄μ•Όν•  μž‘μ—…λ“€μ„ μ§„ν–‰ν•œλ‹€.

Servlet Container

μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆλŠ” μ„œλΈ”λ¦Ώμ„ κ΄€λ¦¬ν•˜κ³  μ‹€ν–‰ν•˜λŠ” 역할을 ν•œλ‹€.
ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œμ„œ μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄ HttpServletRequest, HttpServletResponse 두 객체λ₯Ό μƒμ„±ν•˜κ³ 
μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” μ„œλΈ”λ¦Ώμ„ μ°Ύμ•„ μ‹€ν–‰ν•˜μ—¬ 동적 νŽ˜μ΄μ§€λ₯Ό μƒμ„±ν•œλ‹€.
이후 HttpServletResponse 객체에 응닡을 λ‹΄μ•„ μ „λ‹¬ν•œλ‹€.


Servlet Container 의 μ—­ν• 

1. μ›Ήμ„œλ²„μ™€μ˜ 톡신 지원

μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆλŠ” μ›Ήμ„œλ²„μ™€ ν†΅μ‹ ν•˜μ—¬ HTTP μš”μ²­μ„ μ²˜λ¦¬ν•˜κ³  μ ν•©ν•œ μ„œλΈ”λ¦Ώμ„ μ‹€ν–‰ν•œ ν›„ 응닡을 μ›Ήμ„œλ²„μ— λ°˜ν™˜ν•œλ‹€.
μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆλŠ” μ΄λŸ¬ν•œ λ³΅μž‘ν•œ 과정을 API둜 μ œκ³΅ν•˜μ—¬ κ°œλ°œμžκ°€ μ„œλΈ”λ¦Ώμ—μ„œ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ—λ§Œ 집쀑할 수 μžˆλ„λ‘ 도와쀀닀.

2. μ„œλΈ”λ¦Ώ 생λͺ…μ£ΌκΈ° 관리

μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆλŠ” μ„œλΈ”λ¦Ώμ˜ 생λͺ…μ£ΌκΈ°λ₯Ό κ΄€λ¦¬ν•œλ‹€.
ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ λ°›μ•„ μ„œλΈ”λ¦Ώ 클래슀λ₯Ό λ‘œλ”©ν•˜κ³  μΈμŠ€ν„΄μŠ€ν™” μ‹œμΌœ μ΄ˆκΈ°ν™”λ₯Ό μ§„ν–‰ν•œλ‹€.
이후 μš”μ²­μ— λ§žλŠ” μ„œλΈ”λ¦Ώ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜κ³  μ²˜λ¦¬ν•œλ‹€.
μ’…λ£Œλœ μ„œλΈ”λ¦Ώμ— λŒ€ν•΄μ„œλŠ” κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ„ μ§„ν–‰ν•˜μ—¬ λΆˆν•„μš”ν•œ μžμ›μ„ μ •λ¦¬ν•œλ‹€.

3. λ©€ν‹°μ“°λ ˆλ“œ 지원 및 관리

μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆλŠ” λ©€ν‹°μ“°λ ˆλ“œλ₯Ό μ§€μ›ν•˜μ—¬ μ—¬λŸ¬ ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ λ™μ‹œμ— μ²˜λ¦¬ν•  수 있게 ν•œλ‹€.
μš”μ²­μ΄ λ“€μ–΄μ˜¬ λ•Œλ§ˆλ‹€ μ“°λ ˆλ“œλ₯Ό 생성해 ν•΄λ‹Ή μ„œλΈ”λ¦Ώμ˜ service() λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ν•˜κ³  μ²˜λ¦¬κ°€ λλ‚œ μ“°λ ˆλ“œλŠ”
μžλ™μœΌλ‘œ μ†Œλ©Έλœλ‹€. 이 과정을 μ»¨ν…Œμ΄λ„ˆκ°€ κ΄€λ¦¬ν•˜κΈ° λ•Œλ¬Έμ— μ“°λ ˆλ“œ μ•ˆμ •μ„±μ— λŒ€ν•΄ κ±±μ •ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.

4. 선언적 λ³΄μ•ˆ 관리

μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆλŠ” λ³΄μ•ˆμ„€μ •μ„ web.xml 같은 μ„€μ • νŒŒμΌμ΄λ‚˜ μ–΄λ…Έν…Œμ΄μ…˜μ„ 톡해 μ •μ˜ν•  수 있게 ν•˜μ—¬
λ³΄μ•ˆ μ •μ±…κ³Ό μ½”λ“œλ₯Ό 뢄리할 수 μžˆλ„λ‘ 도와쀀닀.
μ΄λŸ¬ν•œ ꡬ쑰 덕뢄에 λ³΄μ•ˆμ •μ±… λ³€κ²½ μ‹œμ—λ„ μ†ŒμŠ€μ½”λ“œμ˜ μˆ˜μ •κ³Ό 컴파일 과정을 κ±°μΉ˜μ§€ μ•Šμ•„ μœ μ§€λ³΄μˆ˜κ°€ μš©μ΄ν•΄μ§„λ‹€.


References

profile
μ°¨κ·Όμ°¨κ·Ό

0개의 λŒ“κΈ€