Spring/강의

[📕 기초 Spring] 1-4. Web Application

가지코딩 2025. 5. 3. 15:09

📕 목차

  1. Web Server
  2. WAS (Web Application Server)
  3. 웹 시스템 구성 방식
  4. Servlet
  5. Thread
  6. SSR
  7. CSR
  8. SSR vs CSR

1. Web Server

 

Web Server

  • HTTP 기반으로 동작하며 정적 리소스(HTML, CSS, JS, 이미지 파일 등)를 클라이언트에게 제공하는 역할을 한다.
  • 웹 서버는 클라이언트로부터 HTTP 요청을 받아, 정적 리소스를 응답하거나 WAS로 요청을 전달한다.

 

대표적인 Web Server

  • NGINX: 가볍고 빠른 성능으로 유명한 웹 서버로, 리버스 프록시 및 로드 밸런서 기능도 강력하다.
  • Apache HTTP Server: 오랜 역사와 다양한 모듈을 가진 웹 서버로, 높은 호환성과 안정성을 자랑한다.

2. WAS (Web Application Server)

 

WAS (Web Application Server)

  • HTTP 요청을 받아 비즈니스 로직을 실행하고, DB와 상호작용하여 동적 데이터를 생성하는 서버이다.
  • 웹 서버의 기능도 포함하고 있다.
  • 클라이언트의 요청을 받아 내부 애플리케이션 로직을 처리한다.
  • DB 연동, 동적 페이지 생성, 사용자 인증 등의 기능을 수행한다.

 

대표적인 WAS

  • Tomcat: 가장 많이 사용되는 Java 기반 WAS로, Spring Boot에 내장되어 있다.
  • Jetty: 가볍고 유연한 WAS로, 임베디드 형태로 많이 사용된다.
  • Undertow: 고성능 비동기 기반 WAS로, Spring Boot에서 선택적으로 사용 가능하다.

 

* Web Server vs WAS

항목 Web WAS
주요 역할 정적 리소스 제공 동적 처리, 비즈니스 로직 실행
코드 실행 불가능 가능
예시 NGINX, Apache Tomcat, Jetty

3. 웹 시스템 구성 방식

WAS만 사용하는 경우

  • 모든 요청을 WAS가 직접 처리
  • 정적 리소스까지 WAS가 담당해 과부하 위험 존재
  • WAS에 장애가 발생하면 아무 화면도 보여줄 수 없음

 

실제 웹 시스템 구성

 

  • Web Server가 정적 리소스를 처리하고,
  • WAS에는 비즈니스 로직 처리 요청만 전달
  • 장점
    • 정적/동적 처리의 역할 분리로 성능 및 안정성 향상
    • 장애 시 Web Server에서 오류 페이지 제공 가능
    • 필요 시 Web Server 또는 WAS만 확장(Scale-out) 가능

4. Servlet

Servlet

  • Java 기반 웹 애플리케이션에서 HTTP 요청과 응답을 처리하는 객체
  • HttpServlet 클래스를 상속받아 구현한다.

 

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 응답 정보를 입력한다.
@WebServlet(name="ExampleServlet", urlPatterns = "/example")
public class ExampleServlet extends HttpServlet {
    
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) {
        // 비즈니스 로직 처리
    }
}

 

 

Servlet Container

  • WAS 내부에 존재하며, Servlet을 생성/초기화/관리/실행/종료하는 역할을 한다.
  • 생명주기 관리
    • Servlet은 개발자가 직접 new 하지 않아도 된다.
    • 컨테이너가 자동으로 인스턴스를 생성하고 관리한다.
    • Servlet은 기본적으로 싱글톤으로 관리된다.
  • 컨테이너의 기능
    • 요청마다 Servlet 객체를 새로 만드는 것이 아니라, 하나의 객체로 여러 요청을 처리한다.
    • 멀티스레드 기반 동시 요청 처리를 지원한다.

 

* 싱글톤이란?

  • 싱글톤은 하나의 인스턴스만 생성하여 애플리케이션 전체에서 공유하는 객체 패턴
  • 장점: 객체 생성 비용 절감, 일관성 있는 상태 유지
  • 단점: 공유 자원 접근 시 동시성 문제 발생 가능성 → 주의 필요

5. Thread

Thread

  • 애플리케이션 코드를 순차적으로 실행하는 단위이다.
  • Java의 main() 실행 시 main이라는 Thread가 하나 생성된다.
  • Thread는 한 번에 하나의 코드만 실행할 수 있으므로 동시 처리를 위해서는 추가적인 Thread 생성이 필요하다.

 

Single Thread의 한계

 

  • 요청마다 Thread를 하나씩 처리.
  • 동시에 여러 요청이 들어오면 순차 대기 발생.
  • 하나의 요청에서 지연/오류가 발생하면 전체 요청이 영향을 받음 (예: Time out).

 

Multi Thread로 해결

  • 방법 1: 요청마다 Thread 생성
    • 장점
      • 각 요청을 독립적으로 처리 가능.
    • 단점:
      • Thread 생성 비용이 높고 무제한 생성 시 리소스 부족 위험.
      • Thread 간 전환(Context Switching)으로 CPU 비용 발생.
  • 방법 2: Thread Pool 사용
    • 미리 여러 개의 Thread를 생성해 Pool에 저장.
    • 요청 시 Thread를 꺼내 쓰고, 끝나면 다시 반납.
    • 장점:
      • Thread 재사용 → 빠른 응답, 자원 절약.
      • 최대 Thread 수 제한 가능 → 서버 안정성 확보.
    • 단점:
      • 설정값이 낮으면 지연, 너무 높으면 리소스 부족.

 

 

WAS는 Multi Thread를 지원하며, 개발자가 Thread 관련 코드를 직접 다루지 않아도 된다.


6. SSR

SSR (Server Side Rendering)

  • 서버에서 HTML을 완성하여 클라이언트에게 응답하는 렌더링 방식.
  • Java 진영에서는 JSP, Thymeleaf 등이 사용됨.

 

SSR 동작 흐름

  1. 클라이언트가 HTML 요청
  2. 서버에서 로직 처리 및 DB 조회
  3. 조회 결과로 HTML 동적 생성
  4. 생성된 HTML 응답

 

장점

  • 첫 페이지 로딩이 빠르다 (서버가 완성된 HTML 제공).
  • SEO에 유리하다 (크롤러가 HTML을 그대로 수집 가능).

 

단점

  • 요청마다 서버가 렌더링 → 트래픽 증가 시 서버 부하 커짐.
  • 페이지 전환 속도가 느릴 수 있음.

7. CSR

CSR (Client Side Rendering)

 

  • 클라이언트(브라우저)에서 자바스크립트를 사용하여 HTML을 동적으로 생성하는 방식.
  • React, Vue 등의 프론트엔드 프레임워크에서 사용됨.

 

CSR 동작 흐름

  1. HTML 요청 → 텅 빈 HTML과 JS 링크 응답
  2. JS 파일 다운로드 및 실행
  3. API 요청 후 JSON 데이터 응답
  4. JSON 기반으로 화면 렌더링

 

장점

  • 브라우저에서 렌더링 → 빠른 사용자 인터랙션 반응.
  • 한 번 로딩 후 서버 요청 없이 빠르게 페이지 전환 가능.

 

단점

  • 초기 로딩 시 자바스크립트 다운로드로 속도 저하.
  • 크롤러가 JS를 실행하지 못하면 SEO에 불리.

8. SSR vs CSR

항목 SSR CSR
렌더링 위치 서버 클라이언트
첫 페이지 로딩 속도 빠름 느림
페이지 전환 속도 느림 빠름
서버 부하 많음 적음
SEO 유리 불리