본문 바로가기
스파르타 내일배움캠프/TIL(Today I learned)

25.03.28 TIL - Web Application(1)

by pandastic 2025. 3. 28.
반응형

 

 

 

 

Web Application

1. Web Server

  - 웹 서버는 HTTP 기반으로 동작하며 정적 리소스를 제공.

💡정적 리소스
     - 리소스가 이미 완성된 채로 서버에 존재하여 원본 그대로 응답하는 데이터를 의미.

 

 

 

  • 대표적인 Web Server
    • NGINX
    • Apache

 

2. WAS(Web Application Server)

  • HTTP 기반으로 동작하며 웹 서버의 기능을 포함함.
  • 추가적으로 코드를 실행해서 Application 로직을 수행하고 DB와 상호작용하여 동적 컨텐츠 생성.

 

 

  • 대표적인 Web Application Server
    • Tomcat - Spring Boot에 내장되어 있음.
    • Jetty
    • Undertow
  • Web Server와 WAS(Web Application Server)의 차이점
    • 실제로는 Web Server도 Application 로직 포함 가능.
    • WAS는 Application 코드를 실행하는 것에 더욱 특화되어 있음.
    • Java에서는 Servlet container 기능을 제공하면 WAS.

 

3. Web System 구성

  • WAS 만 사용하는 경우
    1. WAS가 너무 많은 역할 담당.
      • 서버 과부하 발생 가능성이 높아짐.
    2. 실행에 가장 중요한 Application 로직이 정적 리소스로 인해 수행되지 않을 수 있음.
    3. WAS에 장애가 생기면 아무런 화면도 보여주지 못함.
      • 오류 페이지를 클라이언트에게 응답할 수 없음.
  • 실제 웹 시스템 구성
    • 정적 리소스는 Web Server에서 처리함.
    • Web Server는 Application 로직이 필요한 요청만을 WAS에 전달.
  • 실제 웹 시스템 구성의 장점
    1. 효율적으로 리소스 관리 가능.
      1. 정적 자원이 많이 사용된다면 Web Server를 Scale Out.
      2. Application 관련 자원이 많이 사용된다면 WAS를 Scale Out 함.
    2. 오류 화면 제공할 수 있음.
      1. Web Server는 오류가 발생할 확률이 아주 낮음.
      2. WAS는 오류가 발생할 확률이 아주 높고, 장애가 자주 발생함.
      3. WAS는 DB와 상호작용하기 때문에 DB에 문제가 생겨도 문제가 발생함.

 

4. Servlet

  • HTTP 프로토콜 기반 요청(Request) 및 응답(Response)을 처리하는데 사용.
  • JAVA에서 Servlet은 HttpServlet 클래스를 상속받아 구현되며, 웹 애플리케이션 개발의 핵심 기술 중 하나.

 

  • Servlet의 역할
    • 서버에서 처리해야하는 작업 
      1. 서버와 TCP/IP 연결
      2. HTTP Request Message 필요한 형태로 변환하여 읽기
        • HTTP Method 및 URL 분석
        • HTTP Header 분석
        • HTTP Message Body 읽기 및 변환
      3. 분석한 결과를 통해 프로세스 실행
      4. 비지니스 로직 실행
      5. HTTP Response Message 생성
        • HTTP Start Line 생성
        • Header 생성
        • HTTP Message Body에 응답 데이터를 요청한 형식에 맞춰 응답
        • 처리가 불가하다면 예외처리
      6. 응답 전달
      7. 연결 종료
  • Servlet 동작 순서
    1. WAS는 HTTP 요청 메세지를 기반으로 새로운 Request, Response 객체 생성
    2. WAS는 만들어진 Request, Response 객체를 서블릿 컨테이너에 넘겨주며 ExampleServlet 객체 호출
    3. ExampleServlet에서 비지니스 로직 처리
    4. 응답에 필요한 정보를 개발자가 입력
    5. WAS는 Response 객체 정보(개발자가 입력한 정보)로 HTTP 응답 메세지 생성.

 

  • 개발자가 하는 일
    1. Request 객체에 담겨져있는 HTTP 요청 정보를 꺼내서 사용.
      • 요청 정보(URL, Method, Message Body)를 통해 필요한 기능(비지니스 로직)을 수행.
    2. 생선된 Response 객체에 HTTP 응답 정보를 입력.

 

5. Servlet Container

  • Servlet을 지원하는 WAS 내부에는 서블릿 컨테이너가 있음.
  • 서블릿을 초기화, 생성, 관리, 호출, 종료하는 역할 수행.

 

  • Servlet의 생명주기
    • Servlet은 서블릿 컨테이너가 생성 및 관리.
    • WAS(서블릿 컨테이너 포함)가 종료될 때 Servlet도 함께 종료됨.
  • Servlet 객체 생성시점
    • 개발자가 직접 인스턴스화 하여 사용하는 것이 아닌, 코드만 작성하면 서블릿 컨테이너가 생성함.
  • Servlet Container가 하는 일
    • 서블릿을 초기화, 생성, 관리, 호출, 종료하는 역할 수행.
      • Servlet 객체를 싱글톤으로 관리.
    • 동시 요청에 대한 처리를 위해 Multi Thread 지원.

 

💡싱글톤이란?

  - 객체를 하나만 생성하여 생성된 인스턴스를 공유하여 사용하는 것.
  - 특정 클래스의 인스턴스가 여러 개 생성되지 않도록 하여 자원의 낭비를 방지.
  - 인스턴스를 공유함으로써 일관되게 유지하기 위함.
  - 공유 변수 사용을 주의해야함!

 

반응형