Java programming

μ„œλΈ”λ¦Ώ 생λͺ…주기와 μ„œλΈ”λ¦Ώμ˜ λ‚΄λΆ€ λ™μž‘ 방식

ν”„λ‘œκ·Έλž˜λ¨Έ μ˜€μ›” 2024. 4. 22.

κ°œμš”

μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 인터넷 ν™˜κ²½μ—μ„œ 널리 μ‚¬μš©λ˜κΈ° μ‹œμž‘ν•˜λ©΄μ„œ, μ„œλ²„ μΈ‘μ—μ„œ 동적인 μ½˜ν…μΈ λ₯Ό μƒμ„±ν•˜κ³  μ‚¬μš©μž μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” 효율적인 방법이 ν•„μš”ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€. 초기의 μ›Ή μ„œλ²„λŠ” 정적인 HTML νŒŒμΌμ„ μ œκ³΅ν•˜λŠ” 데 주둜 μ‚¬μš©λ˜μ—ˆμœΌλ‚˜, 동적인 데이터λ₯Ό μ²˜λ¦¬ν•˜κ³  μ‚¬μš©μž μƒν˜Έμž‘μš©μ„ μ§€μ›ν•˜κΈ° μœ„ν•΄μ„œλŠ” 더 λ³΅μž‘ν•œ κΈ°λŠ₯이 ν•„μš”ν–ˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ μš”κ΅¬λ₯Ό μΆ©μ‘±μ‹œν‚€κΈ° μœ„ν•΄ μžλ°” μ„œλΈ”λ¦Ώ(Java Servlet)이 κ°œλ°œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ„œλΈ”λ¦Ώ(Servlet)은 μžλ°”λ₯Ό μ‚¬μš©ν•˜μ—¬ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•  λ•Œ μ„œλ²„ μΈ‘μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ μ²˜λ¦¬ν•˜κ³  응닡을 μƒμ„±ν•˜λŠ” μžλ°” ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€. μ„œλΈ”λ¦Ώμ€ 주둜 HTTP μš”μ²­κ³Ό 응닡을 μ²˜λ¦¬ν•˜λŠ” 데 μ‚¬μš©λ˜λ©°, μžλ°” EE (Enterprise Edition) 기술의 핡심 ꡬ성 μš”μ†Œ 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.( Spring MVCμ—μ„œ Controller둜 이용되며, μ‚¬μš©μžμ˜ μš”μ²­μ„ λ°›μ•„ μ²˜λ¦¬ν•œ 후에 κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.)

 

μ„œλΈ”λ¦Ώμ€ μžλ°” μ–Έμ–΄λ‘œ μž‘μ„±λœ μ„œλ²„ μΈ‘ ν”„λ‘œκ·Έλž¨μœΌλ‘œ, μ›Ή μ„œλ²„μ—μ„œ μ‹€ν–‰λ˜μ–΄ ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ μ²˜λ¦¬ν•˜κ³  동적인 μ½˜ν…μΈ λ₯Ό μƒμ„±ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. μ„œλΈ”λ¦Ώμ€ λ‹€μ–‘ν•œ 이점듀을 톡해 개발자의 μž‘μ—…μ„ 크게 λ‹¨μˆœν™”ν•˜κ³ , μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 개발의 생산성을 ν–₯μƒμ‹œμΌ°μŠ΅λ‹ˆλ‹€.

 

κ°œλ°œμžλŠ” HTTP Request Message λ₯Ό 직접 νŒŒμ‹± ν•„μš”κ°€ μ—†μ–΄μ‘ŒμŠ΅λ‹ˆλ‹€. μ„œλΈ”λ¦Ώ APIλŠ” HTTP μš”μ²­ λ©”μ‹œμ§€λ₯Ό μžλ™μœΌλ‘œ νŒŒμ‹±ν•˜μ—¬ HttpServletRequest 객체둜 μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. λ˜ν•œ getParameter(), getHeader(), getCookies() λ“±κ³Ό 같은 λ©”μ„œλ“œλ₯Ό 톡해 μ‰½κ²Œ μš”μ²­ 데이터λ₯Ό μΆ”μΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

μ„œλΈ”λ¦Ώμ€ μ„Έμ…˜ 관리λ₯Ό μžλ™μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬, κ°œλ°œμžκ°€ 직접 μ„Έμ…˜ IDλ₯Ό μƒμ„±ν•˜κ³  관리할 ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. HttpSession 객체λ₯Ό 톡해 μ„Έμ…˜μ— 데이터λ₯Ό μ €μž₯ν•˜κ³ , κ°€μ Έμ˜€λŠ” μž‘μ—…μ„ μ‰½κ²Œ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆλŠ” URL νŒ¨ν„΄κ³Ό μ„œλΈ”λ¦Ώμ„ λ§€ν•‘ν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•˜μ—¬, νŠΉμ • URL둜 λ“€μ–΄μ˜€λŠ” μš”μ²­μ„ μ μ ˆν•œ μ„œλΈ”λ¦ΏμœΌλ‘œ λΌμš°νŒ…ν•©λ‹ˆλ‹€. μ΄λŠ” κ°œλ°œμžκ°€ URL λΌμš°νŒ… λ‘œμ§μ„ 직접 μž‘μ„±ν•  ν•„μš”λ₯Ό μ—†μ• μ€λ‹ˆλ‹€.

 

이렇듯 μ„œλΈ”λ¦Ώμ„ μ‚¬μš©ν•˜λ©΄ κ°œλ°œμžλŠ” 더 λ³΅μž‘ν•œ λ‘œμ§μ— 집쀑할 수 있으며, HTTP μš”μ²­ 처리, μ„Έμ…˜ 관리, μ˜ˆμ™Έ 처리 λ“±μ˜ 반볡적이고 λ³΅μž‘ν•œ μž‘μ—…μ„ μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆμ— λ§‘κΈΈ 수 μžˆμŠ΅λ‹ˆλ‹€. μ›Ή μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ 개발의 생산성과 νš¨μœ¨μ„±μ„ 높일 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

 

μ£Όμš” νŠΉμ§•

  1. HTTP ν”„λ‘œν† μ½œ 지원
    • μ„œλΈ”λ¦Ώμ€ HTTP μš”μ²­κ³Ό 응닡을 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 주둜 μ›Ή λΈŒλΌμš°μ €μ™€ 같은 HTTP ν΄λΌμ΄μ–ΈνŠΈμ™€ μƒν˜Έμž‘μš©ν•©λ‹ˆλ‹€.
  2. ν”Œλž«νΌ 독립성
    • μžλ°” 기반이기 λ•Œλ¬Έμ— λ‹€μ–‘ν•œ 운영 μ²΄μ œμ—μ„œ λ™μž‘ν•©λ‹ˆλ‹€.
  3. μ„œλ²„ μΈ‘μ—μ„œ μ‹€ν–‰
    • μ„œλΈ”λ¦Ώμ€ μ›Ή μ„œλ²„λ‚˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„μ—μ„œ μ‹€ν–‰λ˜λ©°, ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ— 따라 λ™μ μœΌλ‘œ μ½˜ν…μΈ λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
  4. μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ν™•μž₯μ„±
    • μ„œλΈ”λ¦Ώμ€ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κΈ°λŠ₯을 ν™•μž₯ν•˜κ±°λ‚˜ μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•˜λŠ” 데 μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

μ„œλΈ”λ¦Ώμ˜ 생λͺ…μ£ΌκΈ°

μ„œλΈ”λ¦Ώμ˜ 생λͺ…μ£ΌκΈ°λŠ” λ‹€μŒκ³Ό 같은 λ‹¨κ³„λ‘œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€

  1. μ„œλΈ”λ¦Ώ 객체 생성
    • μ›Ή μ»¨ν…Œμ΄λ„ˆ(예: Tomcat)λŠ” μ„œλΈ”λ¦Ώ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. 이 λ‹¨κ³„λŠ” μ„œλΈ”λ¦Ώμ΄ 처음 μš”μ²­λ  λ•Œ λ°œμƒν•©λ‹ˆλ‹€.
  2. μ΄ˆκΈ°ν™” (init λ©”μ„œλ“œ)
    • μ„œλΈ”λ¦Ώ 객체가 μƒμ„±λœ ν›„, init λ©”μ„œλ“œκ°€ ν˜ΈμΆœλ˜μ–΄ μ„œλΈ”λ¦Ώμ„ μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€. 이 λ©”μ„œλ“œλŠ” μ„œλΈ”λ¦Ώμ˜ μ΄ˆκΈ°ν™” λ§€κ°œλ³€μˆ˜λ₯Ό μ„€μ •ν•˜κ³  μ΄ˆκΈ°ν™” μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  3. μš”μ²­ 처리 (service λ©”μ„œλ“œ)
    • μ„œλΈ”λ¦Ώμ΄ μ΄ˆκΈ°ν™”λœ ν›„, ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ΄ μžˆμ„ λ•Œλ§ˆλ‹€ service λ©”μ„œλ“œκ°€ ν˜ΈμΆœλ©λ‹ˆλ‹€. 이 λ©”μ„œλ“œλŠ” HttpServletRequest와 HttpServletResponse 객체λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ λ°›μ•„ μš”μ²­μ„ μ²˜λ¦¬ν•˜κ³  응닡을 μƒμ„±ν•©λ‹ˆλ‹€.
  4. μ’…λ£Œ (destroy λ©”μ„œλ“œ)
    • μ„œλΈ”λ¦Ώμ΄ 더 이상 ν•„μš”ν•˜μ§€ μ•Šκ²Œ 되면, μ›Ή μ»¨ν…Œμ΄λ„ˆλŠ” destroy λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ μ„œλΈ”λ¦Ώμ„ μ’…λ£Œν•©λ‹ˆλ‹€. 이 λ©”μ„œλ“œλŠ” μ„œλΈ”λ¦Ώμ΄ λ¦¬μ†ŒμŠ€λ₯Ό ν•΄μ œν•˜κ³  μ •λ¦¬ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

μ„œλΈ”λ¦Ώμ˜ 생λͺ…μ£ΌκΈ° λ©”μ„œλ“œ

  • init():
    • μ„œλΈ”λ¦Ώμ΄ μ΄ˆκΈ°ν™”λ  λ•Œ ν•œ 번 ν˜ΈμΆœλ©λ‹ˆλ‹€.
    • μ΄ˆκΈ°ν™” μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ©°, μ„œλΈ”λ¦Ώμ΄ μš”μ²­μ„ μ²˜λ¦¬ν•˜κΈ° 전에 ν•„μš”ν•œ 섀정을 ν•©λ‹ˆλ‹€.
  • service():
    • ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­λ§ˆλ‹€ ν˜ΈμΆœλ©λ‹ˆλ‹€.
    • doGet(), doPost(), doPut(), doDelete() λ“± HTTP λ©”μ„œλ“œμ— 따라 μ μ ˆν•œ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.
  • destroy():
    • μ„œλΈ”λ¦Ώμ΄ μ’…λ£Œλ  λ•Œ ν•œ 번 ν˜ΈμΆœλ©λ‹ˆλ‹€.
    • λ¦¬μ†ŒμŠ€λ₯Ό ν•΄μ œν•˜κ³  μ •λ¦¬ν•˜λŠ” μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

μ„œλΈ”λ¦Ώ 예제

 

κ°„λ‹¨ν•œ μ„œλΈ”λ¦Ώ 예제λ₯Ό λ§Œλ“€μ–΄ λ³΄μ•˜μŠ΅λ‹ˆλ‹€. 이 μ„œλΈ”λ¦Ώμ€ ν΄λΌμ΄μ–ΈνŠΈμ˜ GET μš”μ²­μ„ μ²˜λ¦¬ν•˜μ—¬ "Hello, World!" λ©”μ‹œμ§€λ₯Ό μ‘λ‹΅μœΌλ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€. μ„œλΈ”λ¦Ώμ€ HttpServlet 을 상속 λ°›μ•„μ„œ λ©”μ†Œλ“œλ“€μ„ μž¬μ •μ˜ν•΄μ„œ ν™œμš©ν•©λ‹ˆλ‹€.

service() λ©”μ„œλ“œλŠ” HttpServlet ν΄λž˜μŠ€μ— 이미 μ •μ˜λ˜μ–΄ 있으며, 일반적으둜 μ„œλΈ”λ¦Ώμ„ κ΅¬ν˜„ν•  λ•Œ 직접 μž¬μ •μ˜ν•  ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€. λŒ€μ‹ , HTTP μš”μ²­ λ©”μ„œλ“œ(GET, POST λ“±)에 따라 각각의 μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” doGet(), doPost(), doPut(), doDelete() λ“±μ˜ λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•©λ‹ˆλ‹€.

 

1. web.xml νŒŒμΌμ„ μ‚¬μš©ν•˜λŠ” 방법

이 방식은 μ„œλΈ”λ¦Ώ 3.0 이전 λ²„μ „μ—μ„œ μ‚¬μš©λ˜λ˜ 전톡적인 λ°©λ²•μž…λ‹ˆλ‹€. url νŒ¨ν„΄μ„ μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜λŠ” 것이 μ•„λ‹ˆλΌ xml νŒŒμΌμ— μ„€μ •ν•΄λ‘λŠ” λ°©λ²•μž…λ‹ˆλ‹€. κ³Όκ±°μ—” 직접 λͺ¨λ‘ μ„€μ •ν•΄μ„œ ν•˜μ˜€μŠ΅λ‹ˆλ‹€. μœ μ§€λ³΄μˆ˜κ°€ νž˜λ“  단점 λ•Œλ¬Έμ— μ„œλΈ”λ¦Ώ 3.0 이후둠 μ–΄λ…Έν…Œμ΄μ…˜μ„ ν™œμš©ν•΄μ„œ μ •μ˜ν•˜κ²Œ λμŠ΅λ‹ˆλ‹€.

public class HelloWorldServlet extends HttpServlet {

    @Override
    public void init() throws ServletException {
        // μ„œλΈ”λ¦Ώ μ΄ˆκΈ°ν™” μž‘μ—… μˆ˜ν–‰
        System.out.println("HelloWorldServlet is being initialized");
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // HTTP GET μš”μ²­ 처리
        response.setContentType("text/html");
        response.getWriter().println("<h1>Hello, World!</h1>");
    }

    @Override
    public void destroy() {
        // μ„œλΈ”λ¦Ώ μ’…λ£Œ μž‘μ—… μˆ˜ν–‰
        System.out.println("HelloWorldServlet is being destroyed");
    }
}
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                             http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <servlet>
        <servlet-name>HelloWorldServlet</servlet-name>
        <servlet-class>HelloWorldServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloWorldServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

 

 

2. μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜λŠ” 방법

μ„œλΈ”λ¦Ώ 3.0 이상 λ²„μ „μ—μ„œλŠ” μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜μ—¬ μ„œλΈ”λ¦Ώμ„ λ§€ν•‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 경우 web.xml νŒŒμΌμ„ μƒλž΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” 섀정을 더 κ°„λ‹¨ν•˜κ²Œ λ§Œλ“€κ³ , μ½”λ“œμ™€ 섀정을 ν•œ κ³³μ—μ„œ 관리할 수 있게 ν•΄μ€λ‹ˆλ‹€.

@WebServlet("/hello") //μ–΄λ…Έν…Œμ΄μ…˜μ„ ν™œμš©ν•˜μ—¬ url νŒ¨ν„΄μ„ μ„€μ •ν•΄ 쀄 수 μžˆμŠ΅λ‹ˆλ‹€.
public class HelloWorldServlet extends HttpServlet {

    @Override
    public void init() throws ServletException {
        // μ„œλΈ”λ¦Ώ μ΄ˆκΈ°ν™” μž‘μ—… μˆ˜ν–‰
        System.out.println("HelloWorldServlet is being initialized");
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // HTTP GET μš”μ²­ 처리
        response.setContentType("text/html");
        response.getWriter().println("<h1>Hello, World!</h1>");
    }

    @Override
    public void destroy() {
        // μ„œλΈ”λ¦Ώ μ’…λ£Œ μž‘μ—… μˆ˜ν–‰
        System.out.println("HelloWorldServlet is being destroyed");
    }
}

 

 

μ„œλΈ”λ¦Ώ λ‚΄λΆ€ λ™μž‘ 방식

 

 

 

  1. ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­
    • μ›Ή λΈŒλΌμš°μ €μ™€ 같은 ν΄λΌμ΄μ–ΈνŠΈκ°€ νŠΉμ • URL에 HTTP μš”μ²­μ„ λ³΄λƒ…λ‹ˆλ‹€. 이 μš”μ²­μ€ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„(예: Tomcat, Jetty)둜 직접 μ „λ‹¬λ©λ‹ˆλ‹€.
  2. μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„μ˜ μš”μ²­ μˆ˜μ‹ 
    • μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„λŠ” HTTP μš”μ²­μ„ μˆ˜μ‹ ν•˜κ³ , ν•΄λ‹Ή μš”μ²­μ΄ μ„œλΈ”λ¦Ώμ— μ˜ν•΄ μ²˜λ¦¬λ˜μ–΄μ•Ό ν•˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.
    • μš”μ²­μ΄ μ„œλΈ”λ¦Ώμ— μ˜ν•΄ μ²˜λ¦¬λ˜μ–΄μ•Ό ν•œλ‹€λ©΄, μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„λŠ” μš”μ²­μ„ μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆλ‘œ μ „λ‹¬ν•©λ‹ˆλ‹€.
  3. μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆμ˜ μš”μ²­ 처리 μ€€λΉ„
    • μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆλŠ” μš”μ²­λœ URL을 기반으둜 μ μ ˆν•œ μ„œλΈ”λ¦Ώμ„ μ°ΎμŠ΅λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄ URL 맀핑을 ν™•μΈν•©λ‹ˆλ‹€.
      (μš”μ²­ 맀핑은 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„€μ • 파일(web.xml) λ˜λŠ” μ• λ…Έν…Œμ΄μ…˜(@WebServlet)을 μ‚¬μš©ν•˜μ—¬ μ •μ˜ν•©λ‹ˆλ‹€.)
  4. HttpServletRequest 및 HttpServletResponse 객체 생성
    • μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆλŠ” HTTP μš”μ²­μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ HttpServletRequest 및 HttpServletResponse 객체λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
    • HttpServletRequest κ°μ²΄λŠ” ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ˜ λͺ¨λ“  정보λ₯Ό μΊ‘μŠν™”ν•˜μ—¬ μ„œλΈ”λ¦Ώμ—κ²Œ μ „λ‹¬ν•©λ‹ˆλ‹€. 이 κ°μ²΄μ—λŠ” μš”μ²­ URL, 헀더, νŒŒλΌλ―Έν„°, λ©”μ„œλ“œ(GET, POST λ“±) λ“±μ˜ 정보가 ν¬ν•¨λ©λ‹ˆλ‹€.
    • HttpServletResponse κ°μ²΄λŠ” μ„œλΈ”λ¦Ώμ΄ 응닡을 μž‘μ„±ν•  수 μžˆλ„λ‘ ν•˜κΈ° μœ„ν•΄ μƒμ„±λ©λ‹ˆλ‹€.
  5. μ„œλΈ”λ¦Ώ μΈμŠ€ν„΄μŠ€ 확인 및 생성
    • μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆλŠ” μš”μ²­λœ μ„œλΈ”λ¦Ώμ˜ μΈμŠ€ν„΄μŠ€κ°€ 이미 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.
    • λ§Œμ•½ μ„œλΈ”λ¦Ώ μΈμŠ€ν„΄μŠ€κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄, μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆλŠ” μ„œλΈ”λ¦Ώ 클래슀λ₯Ό λ‘œλ“œν•˜κ³  μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
  6. μ„œλΈ”λ¦Ώ μ΄ˆκΈ°ν™”
    • μ„œλΈ”λ¦Ώ μΈμŠ€ν„΄μŠ€κ°€ 처음 생성될 λ•Œ, μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆλŠ” init() λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ μ„œλΈ”λ¦Ώμ„ μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€. 이 λ©”μ„œλ“œλŠ” μ„œλΈ”λ¦Ώμ˜ μ΄ˆκΈ°ν™” μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
    • init() λ©”μ„œλ“œλŠ” μ„œλΈ”λ¦Ώμ˜ 생λͺ…μ£ΌκΈ° λ™μ•ˆ ν•œ 번만 ν˜ΈμΆœλ©λ‹ˆλ‹€.
  7. μš”μ²­ 처리
    • μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆλŠ” service() λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ μ²˜λ¦¬ν•©λ‹ˆλ‹€.
    • service() λ©”μ„œλ“œλŠ” μš”μ²­μ˜ HTTP λ©”μ„œλ“œ(GET, POST, PUT, DELETE λ“±)λ₯Ό ν™•μΈν•˜κ³ , ν•΄λ‹Ή λ©”μ„œλ“œμ— λ§žλŠ” λ©”μ„œλ“œ(doGet(), doPost(), doPut(), doDelete() λ“±)λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.
  8. 응닡 생성
    • μ„œλΈ”λ¦Ώμ€ μš”μ²­μ„ μ²˜λ¦¬ν•œ ν›„, HttpServletResponse 객체λ₯Ό μ‚¬μš©ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 응닡을 μƒμ„±ν•©λ‹ˆλ‹€. 이 응닡은 μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆλ₯Ό 톡해 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„λ‘œ μ „λ‹¬λ©λ‹ˆλ‹€.
  9. 응닡 전솑
    • μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„λŠ” μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆλ‘œλΆ€ν„° 받은 응닡을 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ „μ†‘ν•©λ‹ˆλ‹€.
  10. μ„œλΈ”λ¦Ώ μ’…λ£Œ
    • μ„œλΈ”λ¦Ώμ΄ 더 이상 ν•„μš”ν•˜μ§€ μ•Šκ±°λ‚˜ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„κ°€ μ’…λ£Œλ  λ•Œ, destroy() λ©”μ„œλ“œκ°€ ν˜ΈμΆœλ˜μ–΄ μ„œλΈ”λ¦Ώμ΄ μ’…λ£Œλ©λ‹ˆλ‹€. 이 λ©”μ„œλ“œλŠ” λ¦¬μ†ŒμŠ€λ₯Ό ν•΄μ œν•˜κ³  μ •λ¦¬ν•˜λŠ” μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

 

 

 

λŒ“κΈ€