SPRING

1. 웹 애플리케이션 이해

ggomjiu 2025. 4. 29. 19:38

웹 어플리케이션(Web Application)

: 인터넷이나 인트라넷을 통해 웹 브라우저에서 이용할 수 있는 응용 프로그램

 

1. 개요

- 과거 초기의 웹 어플리케이션은 클라이언트 - 서버 컴퓨팅 환경에서의 각 응용 소프트웨어마다 UI를 가지고 있었음

- 사용자 PC마다 따로 설치했어야 함

- 현재는 HTTP 라는 통일된 프로토콜을 사용하지만, 과거에는 회사마다 독자적인 통신 프로토콜을 사용

- HTTP 프로토콜의 정립으로 인해 웹 어플리케이션을 제공하는 기업의 유지 비용이 줄어듦

 

웹 서버(Web Server)

- HTTP 기반 동작

- 정적 리소스(정적 HTML, CSS, JS, 이미지, 영상) 제공

 

웹 어플리케이션 서버(Web Application Server)

- HTTP 기반 동작

- 웹 서버 기능 포함(정적 리소스 제공)

- 프로그램 코드를 실행하여 어플리케이션 로직 수행

- 동적 HTLML, HTTP API, 서블릿, JSP, 스프링 MVC

- EX) Tomcat

=> WAS가 어플리케이션 코드를 실행하는 데에 있어서 더 특화되어 있음

 

웹 시스템 구성

- WAS가 웹 서버의 기능도 다 할 수 있지만, 너무 많은 역할을 담당할 시 서버 과부하

- WAS 장애 시 오류 화면도 노출 불가능

- 웹 서버는 정적 리소스 처리

- WAS는 애플리케이션 로직 같은 동적인 처리 -> 효율적인 리소스 관리

- WAS, DB 장애 시 웹 서버가 오류 화면 제공 가능

 

서블릿

: 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술

- 웹 요청과 응답의 흐름을 간단한 메서드 호출만으로 체계적으로 다룰 수 있게 해줌

- 서버에서 실행되다가 웹 브라우저에서 요청을 하면 해당 기능을 수행한 후 웹 브라우저에 결과를 전송

- HTTP 요청이 왔을 때, 의미있는 비즈니스 로직을 제외하고 나머지 업무들을 서블릿을 지원하는 WAS가 처리해줌

- urlPatterns의 URL이 호출되면 서블릿 코드 실행

- HttpServletRequest : HTTP 요청 정보를 편리하게 사용

- HttpServletResponse : HTTP 응답 정보를 편리하게 제공

- 특징)

  • 클라이언트의 Request에 대해 동적으로 자동하는 웹 어플리케이션 컴포넌트
  • 기존의 정적 웹 프로그램의 문제점을 보완하여 동적인 여러 가지 기능을 제공
  • Java의 쓰레드를 이용하여 동작
  • MVC 패턴에서 컨트롤러로 이용됨
  • 컨테이너에서 실행
  • 보안 기능을 적용하기 쉬움

- 동작 과정)

  1. 클라이언트가 웹 서버에 요청하면 웹 서버는 그 요청을 WAS에 위임
  2. WAS는 각 요청에 해당하는 서블릿을 실행
  3. 서블릿은 요청에 대한 기능을 수행한 후 결과를 반환하여 클라이언트에 전송

 

서블릿 컨테이너

: 구현되어 있는 Servlet 클래스의 규칙에 맞게 서블릿을 담고 관리해주는 컨테이너

- 클라이언트에서 요청을 하면 컨테이너는 HttpServletRequest, HttpServletResponse 두 객체를 생성하여 post, get 여부에 따라 동적인 페이지를 생성하여 응답을 보냄

- 서블릿을 지원하는 WAS

- 서블릿 객체를 생성, 초기화, 호출, 생명 주기 관리

- 싱글톤으로 관리, 멀티 쓰레드 처리 지원

 

멀티 쓰레드 - 동시 요청

1. 쓰레드(Thread)

: 어플리케이션 코드를 하나 한 순차적으로 실행(하나의 코드 라인만 수행)

- 자바 메인 메소드를 처음 실행하면 main이라는 이름의 쓰레드가 실행

- 쓰레드가 없으면 자바 어플리케이션 실행 불가능

- 동시 처리가 필요하면 쓰레드 추가 생성

  • 쓰레드 생성 비용은 매우 비쌈
  • 요청마다 쓰레드를 생성하면 응답 속도가 느려짐
  • 너무 많은 요청이 오면, CPU, 메모리 임계점이 넘어 서버가 죽을 수도 있음
  • 이를 해결하기 위해 쓰레드 풀 사용

2. 쓰레드 풀

- 요청마다 쓰레드를 생성하는 단점을 보완

  • 필요한 쓸레드를 쓰레드 풀에 보관하고 관리함
  • 쓰레드가 필요하면, 이미 생성되어 있는 쓰레드를 쓰레드 풀에서 꺼내서 사용
  • 쓰레드를 다 쓰면 쓰레드 풀에 다시 반납을 하고, 쓰레드 풀에 쓰레드가 없으면 쓰레드 요청을 대기, 거절시킴
  • 쓰레드가 미리 생성되어 있으므로 쓰레드를 생성하고 종료하는 비용과 시간이 절약됨
  • 생성 가능한 쓰레드의 최대치가 있으므로, 너무 많은 요청이 들어와도 안전하게 처리할 수 있음

- 쓰레드 풀의 적정 숫자

  • WAS의 주요 튜닝 포인트는 최대 쓰레드 수
  • 값이 너무 낮음 : 동시 요청이 많을 때, 서버 리소스는 여유롭지만 클라이언트는 금방 응답이 지연됨
  • 값이 너무 높음 : 동시 요청을 많을 떄, CPU, 메모리 리소스 임계점 초과로 서버 다움
  • 멀티 쓰레드에 대한 부분은 WAS가 처리하여 개발자는 싱글 쓰레드 프로그래밍을 하듯이 편리하게 소스 코드를 개발하면 됨

정적 리소스

: 웹 서버에 요청하여 고정된 HTML 파일, CSS, JS, 이미지, 영상 등을 제공

 

HTML 페이지

: WAS에 요청하여 DB에 정보를 조회한 정보를 동적으로 HTML 파일을 생성해 JSP, 타임리프를 통해 제공

 

HTTP API

- WAS에 요청하여 DB에 정보를 조회한 정보 HTML이 아니라 주로 JSON 형식의 데이터를 전달

- 데이터만 주고 받아, UI 화면이 필요하면 클라이언트가 별도 처리

 

SSR(서버 사이드 랜더링)

- 서버에서 최종 HTML을 생성해서 클라이언트에 전달

- 주로 정적인 화면에 사용

- 관련 기술 : JSP, 타임 리프

 

CSR(클라이언트 사이드 랜더링)

- HTML 결과를 자바스크립트를 사용해 웹 브라우저에서 동적으로 생성해서 적용

- 주로 동적인 화면에 사용

- 관련 기술 : React, Vue.js

 

자바 백엔드 기술 역사

1. 에노테이션 기반의 스프링 MVC 패턴 등장

2. @Controller

3. Spring Boot 등장

  • 서버를 내장
  • 빌드 결과(jar)에 WAS 서버 포함 -> 빌드 배포 단순화

4. 자바 뷰 템플릿

  • JSP
    • 속도 느림, 기능 부족
  • 프리마커(Freemarker), 벨로시티(Velocity)
    • 속도 문제 해결, 다양한 기능
  • 타임리프(Thymeleaf)
    • HTML의 모양을 유지하면서 뷰 템플릿 적용 가능
    • 스프링 MVC와 강력한 기능 통합
    • 최선의 선택

 

 

 

 

 

 

 

 

 

 

Reference

https://velog.io/@falling_star3/Tomcat-%EC%84%9C%EB%B8%94%EB%A6%BFServlet%EC%9D%B4%EB%9E%80

'SPRING' 카테고리의 다른 글

6. PSA & IOC & AOP & POJO  (0) 2025.05.26
5. ApplicationContext  (0) 2025.05.26
4. MVC 패턴  (0) 2025.05.24
3. JSP  (0) 2025.05.24
2. 서블릿  (1) 2025.05.23