서블릿과 멀티쓰레드 이해 및 HTTP API, CSR/SSR 개념 정리

2024. 9. 21. 22:51·Web

[서블릿]

A. 서블릿이란?

  • 서블릿(Servlet)은 자바 기반의 웹 애플리케이션을 개발하기 위한 기술로, 웹 서버에서 실행되며 클라이언트의 요청을 처리하고 동적인 웹 콘텐츠를 생성한다.
  • HTTP 프로토콜을 지원하며, 클라이언트의 요청에 따라 다양한 응답을 생성할 수 있다.

서블릿(Servlet) 미사용

웹 애플리케이션를 직접 구현을 해야한다면?
위 사진에 나와있는 목로과 같이 서버 TCP/IP 연결대기 및 소켓을 연결, HTTP 메시지를 모두 파싱해서 읽기 등등 모든것을 구현을 해야한다.

서블릿(Servlet) 사용

서블릿을 사용함으로써 개발자는 비즈니스 로직만 개발하면 된다.

 

 

 

서블릿 특징:

  • 플랫폼 독립성: 자바로 작성되어 어떤 운영체제에서도 실행 가능하다.
  • 성능 향상: 초기화 후 싱글톤으로 관리되어 반복적인 객체 생성 비용을 절약한다.
  • 확장성: 다양한 기능을 추가하여 웹 애플리케이션을 확장할 수 있다.
  • 보안성: 자바의 보안 모델을 활용하여 안전한 웹 애플리케이션 개발이 가능하다.

B. 서블릿 컨테이너

  1. 서블릿 컨테이너:
    • 톰캣(Tomcat)과 같이 서블릿을 지원하는 WAS(Web Application Server)를 말한다.
    • 서블릿의 실행 환경을 제공하고, 서블릿과 웹 서버 간의 통신을 관리한다.
  2. 생명주기 관리:
    • 서블릿 컨테이너는 서블릿 객체의 생성, 초기화(init() 메서드), 요청 처리(service() 메서드), 종료(destroy() 메서드) 등 생명주기를 관리한다.
  3. 싱글톤 관리:
    • 서블릿 객체는 싱글톤으로 관리되어, 애플리케이션 당 하나의 인스턴스만 생성된다.
    • 이를 통해 메모리 효율성을 높이고, 성능을 향상시킨다.

[동시 요청 - 멀티쓰레드]

  • 서블릿 객체는 누가 호출하나?
    • 쓰레드가 호출한다.
  • 쓰레드(Thread):
    • 애플리케이션 코드를 순차적으로 실행하는 실행 단위이다.
    • 자바 애플리케이션은 기본적으로 main 쓰레드에서 시작된다.
    • 쓰레드가 없으면 자바 애플리케이션은 실행될 수 없다.
  • 동시 처리 필요 시:
    • 쓰레드를 추가로 생성하여 여러 작업을 동시에 처리한다.

요청마다 쓰레드 생성의 장단점

장점

  • 동시 요청 처리: 여러 클라이언트의 요청을 동시에 처리할 수 있다.
  • 리소스 효율성: 시스템 리소스가 허용하는 한 최대한의 동시 처리가 가능하다.
  • 독립성 보장: 하나의 쓰레드가 지연되어도 다른 쓰레드는 영향을 받지 않는다.

단점

  • 높은 생성 비용: 쓰레드를 생성하는 데는 많은 비용이 소요된다.
  • 컨텍스트 스위칭 비용: 쓰레드 간 전환 시 추가적인 CPU 자원이 필요하다.
  • 리소스 한계: 무제한으로 쓰레드를 생성하면 CPU와 메모리의 한계를 초과하여 서버가 다운될 수 있다.

쓰레드 풀(Thread Pool)

  • 필요성: 요청마다 쓰레드를 생성하는 단점을 보완하기 위해 사용된다.
  • 특징:
    • 미리 쓰레드를 생성하여 풀에 보관하고 관리한다.
    • 쓰레드 풀에서 생성 가능한 쓰레드의 최대치를 설정한다. (예: 톰캣은 기본적으로 최대 200개)
  • 사용 방법:
    • 쓰레드가 필요하면 풀에서 가져와 사용하고, 작업이 끝나면 다시 풀에 반납한다.
  • 최대 쓰레드 사용 중일 때:
    • 추가 요청은 거절되거나 대기열에 추가되어 순서대로 처리된다.
  • 장점:
    • 쓰레드 생성 및 소멸에 따른 오버헤드 감소로 응답 속도가 향상된다.

실무 팁

  • 최대 쓰레드 수 튜닝:
    • 너무 낮게 설정하면: 동시 요청 처리량이 감소하여 클라이언트 응답 지연이 발생한다.
    • 너무 높게 설정하면: 시스템 리소스 한계를 초과하여 서버가 불안정해질 수 있다.
  • 장애 발생 시 대처 방법:
    • 클라우드 환경: 서버 인스턴스를 추가하여 대응하고, 이후에 설정을 최적화한다.
    • 온프레미스 환경: 기존 서버의 설정을 조정하고 성능 튜닝을 실시한다.
  • 적정 쓰레드 수 결정 방법:
    • 애플리케이션의 특성, 로직의 복잡도, 시스템 리소스 상황 등을 고려한다.
    • 성능 테스트를 통해 최적의 값을 찾아야 한다.
    • 성능 테스트 도구: Apache ab, JMeter, nGrinder 등을 활용한다.

WAS의 멀티쓰레드 지원의 핵심

  1. 멀티쓰레드 처리는 WAS가 담당하므로, 개발자는 쓰레드 관리에 신경 쓸 필요가 없다.
  2. 개발자는 싱글 쓰레드 프로그래밍처럼 코드를 작성하면 된다.
  3. 주의사항:
    • 싱글톤 객체(서블릿, 스프링 빈 등)를 사용할 때 동시성 문제가 발생하지 않도록 주의해야 한다.
    • 공유 자원을 사용할 때는 동기화 처리가 필요하다.

[HTML, HTTP API, CSR, SSR]

A. 정적 리소스

  1. 정적 리소스:
    • 변경되지 않는 고정된 콘텐츠인 HTML 파일, CSS, JavaScript 파일, 이미지 등을 제공한다.
    • 클라이언트의 요청에 대해 서버는 해당 파일을 그대로 응답한다.

B. HTTP API

  1. 데이터 전달:
    • HTML이 아닌 데이터(주로 JSON 형식)를 전달한다.
  2. 사용 사례:
    • UI 클라이언트: 웹 또는 모바일 앱에서 서버와 데이터 통신 시 사용한다.
    • 서버 간 통신: 마이크로서비스 아키텍처에서 서비스 간 데이터 교환 시 활용한다.

백엔드 개발자가 고민해야 할 사항

  1. 정적 리소스 제공 방식:
    • 효율적인 정적 파일 서빙을 위한 웹 서버 설정 (예: 캐싱, 압축)
  2. 동적 HTML 페이지 제공 방식:
    • 서버 사이드 렌더링을 통한 동적 페이지 생성 방법
    • 템플릿 엔진 선택 및 활용 (예: JSP, Thymeleaf)
  3. HTTP API 설계 및 제공:
    • RESTful API 설계 원칙 준수
    • 보안 및 인증 방법 구현

C. 서버 사이드 렌더링(SSR)과 클라이언트 사이드 렌더링(CSR)

  1. SSR (Server-Side Rendering):
    • 서버에서 완전한 HTML 페이지를 생성하여 클라이언트에 전달한다.
    • 장점:
      • 초기 로딩 속도가 빠르며, SEO에 유리하다.
    • 단점:
      • 서버에 부하가 증가할 수 있다.
  2. CSR (Client-Side Rendering):
    • 기본 HTML과 자바스크립트를 전달하고, 클라이언트 측에서 동적으로 페이지를 구성한다.
    • 장점:
      • 사용자 경험이 향상되고, 부드러운 화면 전환이 가능하다.
    • 단점:
      • 초기 로딩 시간이 길어질 수 있으며, SEO에 불리할 수 있다.
  3. 관련 기술:
    • React, Vue.js 등 프론트엔드 프레임워크를 사용하여 CSR을 구현한다.
    • 이러한 프레임워크들은 SSR과 CSR을 동시에 지원하는 도구도 제공한다. (예: Next.js, Nuxt.js)

 

출처 및 참고문헌

- 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 강의 | 김영한 - 인프런 (inflearn.com)

'Web' 카테고리의 다른 글

[Spring] 예제를 통해 프록시(Proxy), 데코레이터(Decorator) 패턴에 대해 알아보기  (0) 2025.01.02
[Spring] 예제를 통해 전략 패턴(Strategy Pattern)에 대해 알아보기  (0) 2025.01.02
[Spring] 예제를 통해 템블릿 메서드 패턴에 대해 알아보기  (0) 2024.12.31
[Spring Boot] Test 클래스에서 lombok을 사용하고 싶을 때  (1) 2024.11.18
'Web' 카테고리의 다른 글
  • [Spring] 예제를 통해 프록시(Proxy), 데코레이터(Decorator) 패턴에 대해 알아보기
  • [Spring] 예제를 통해 전략 패턴(Strategy Pattern)에 대해 알아보기
  • [Spring] 예제를 통해 템블릿 메서드 패턴에 대해 알아보기
  • [Spring Boot] Test 클래스에서 lombok을 사용하고 싶을 때
Economy98
Economy98
공부하고 기록하기
  • Economy98
    Economy_Dev
    Economy98
  • 전체
    오늘
    어제
    • 분류 전체보기 (74)
      • Spring Framework (11)
      • BOJ, Programmers (22)
      • Java (4)
      • JDBC (6)
      • JPA (9)
      • Spring Transaction (3)
      • Algorithm (1)
      • Web (5)
      • Projects (2)
        • 쇼핑몰 프로젝트 (0)
        • 열람실 & 도서관 프로젝트 (2)
      • Network (2)
      • 나의 공부방 (5)
      • 끄적끄적 (1)
      • Error Log (3)
      • CS (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • Github
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    스프링부트
    propagation
    자바
    jdbc
    스프링
    java
    트랜잭션
    JPA
    자바 문제 풀이
    Spring
    브루트포스 알고리즘
    예외 처리
    restful api
    자바 문제
    다이나믹 프로그래밍
    그리디 알고리즘
    정렬
    백준 풀이
    백준
    백준 자바 풀이
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Economy98
서블릿과 멀티쓰레드 이해 및 HTTP API, CSR/SSR 개념 정리
상단으로

티스토리툴바