[Spring] Web Application (2)

이연우·2025년 7월 22일

TIL

목록 보기
16/100

📌 Servlet이란?

  • HTTP 요청(Request)과 응답(Response)을 처리하는 Java 기반 서버 프로그램
    • Java에서 HttpServlet 클래스를 상속하여 구현
    • HTTP 프로토콜 기반 웹 애플리케이션의 핵심 요소

✅ Servlet의 역할

  • 클라이언트가 HTML Form으로 데이터를 전송 (POST 요청 등)
  • 서버는 요청을 파싱하고 비즈니스 로직 수행 후, HTML 또는 JSON 등의 응답 생성

⚙️ HTTP 처리 과정

클라이언트 → HTTP Request → 서버(Servlet) → 로직 처리 → HTTP Response → 클라이언트

✉️ HTTP 메시지 예시

> 📤 Request

POST /api/users HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded

userId=아이디&pssword=비밀번호

> 📥 Response

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423

<html>
	<body>
		...
	</body>
</html>

서버에서 처리해야 되는 작업

1. 서버와 TCP/IP 연결

2. HTTP Request Message 필요한 형태로 변환하여 읽기

  • a. HTTP Method 및 URL 분석
    b. HTTP Header 분석
    c. HTTP Message Body 읽기 및 변환

3. 분석한 결과를 통해 프로세스 실행

4. 비지니스 로직 실행

5. HTTP Response Message 생성

  • a. HTTP Start Line 생성
    b. Header 생성
    c. HTTP Message Body에 응답 데이터를 요청한 형식에 맞춰 응답
    d. 처리가 불가하다면 예외 처리

6. 응답 전달

7. 연결 종료


🔁 Servlet 동작 순서

  • URL 호출 시 WAS가 하는 일

Servlet 예시 코드

@WebServlet(name="ExampleServlet", urlPatterns = "/exmaple")
public class ExampleServlet extends HttpServlet { // HttpServlet을 상속받아 구현한다.
	
	@Override
	protected void service(
		HttpServletRequest request,  // HTTP 요청 정보를 쉽게 사용할 수 있게 만드는 Servlet
		HttpServletResponse response // HTTP 응답 정보를 쉽게 제공할 수 있게 만드는 Servlet
	) {
		// application logic
	}

}

→ URL (/example)이 호출되면 service() 메서드가 실행됨

📌 /example 요청 처리 흐름

  1. WAS가 요청 수신 후 HttpServletRequest, HttpServletResponse 객체 생성
  2. Servlet 컨테이너가 해당 URL에 매핑된 Servlet 객체 호출
  3. Servlet의 service() 메서드에서 비즈니스 로직 수행
  4. 결과를 response 객체에 담아 응답 생성
  5. WAS가 최종 HTTP 응답 메시지를 생성하여 클라이언트로 전송

✨ 개발자가 하는 일

  • request에서 요청 정보 추출
    • 비지니스 로직 수행 (DB 등)
  • response에 응답 데이터 세팅

📂 Servlet Container란?

  • Servlet을 관리하는 WAS의 핵심 구성 요소

🧩 기능

역할설명
생성Servlet 객체를 직접 생성
초기화요청 전에 초기화 수행
요청 처리요청마다 service() 호출
종료서버 종료 시 Servlet 소멸

> Servlet 객체 생성 시점

  • 개발자가 직접 인스턴스화하여 사용하는 것이 아닌, 코드만 작성하면 서블릿 컨테이너가 생성

📄 Servlet 예시 코드

@WebServlet(name="ExampleServlet", urlPatterns = "/example")
public class ExampleServlet extends HttpServlet {
    
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) {
        // 1. 요청 정보 추출
        // 2. 비즈니스 로직 처리
        // 3. 응답 데이터 작성
    }
}

✅ 특징

  • 싱글톤(Singleton): Servlet 인스턴스는 하나만 생성되어 재사용됨
  • 멀티 스레드 지원: 하나의 인스턴스로 다수 요청 처리 → 동시성 문제 주의

💡 싱글톤이란?

  • 하나의 객체만 생성하여 재사용
    → 메모리 절약, 일관성 유지 가능
    → 하지만 공유 자원 사용 시 동기화에 주의

0개의 댓글