웹 어플리케이션(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 패턴에서 컨트롤러로 이용됨
- 컨테이너에서 실행
- 보안 기능을 적용하기 쉬움
- 동작 과정)
- 클라이언트가 웹 서버에 요청하면 웹 서버는 그 요청을 WAS에 위임
- WAS는 각 요청에 해당하는 서블릿을 실행
- 서블릿은 요청에 대한 기능을 수행한 후 결과를 반환하여 클라이언트에 전송
서블릿 컨테이너
: 구현되어 있는 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 |