Web Application 1강: 웹 애플리케이션과 서버 구조
1. Web Application이란?
- 웹 브라우저를 통해 사용자가 접근하는 애플리케이션
- 클라이언트-서버 구조로 동작하며, HTTP 요청과 응답을 기반으로 데이터 처리
- 예: 쇼핑몰, SNS, 블로그, 포털 사이트 등
2. 웹 애플리케이션의 기본 구조
- Client (클라이언트)
- 사용자가 웹 브라우저를 통해 요청을 보냄
- HTML, CSS, JavaScript를 실행하여 UI를 표시
- Web Server (웹 서버)
- 클라이언트의 요청을 받아 정적인 HTML, CSS, JS 파일을 제공
- 예: Apache, Nginx
- WAS (Web Application Server, 웹 애플리케이션 서버)
- 동적인 비즈니스 로직을 처리하고 데이터베이스와 연동
- 예: Tomcat, Jetty, Undertow
- Database (DB, 데이터베이스)
- 사용자 데이터, 게시글, 상품 정보 등을 저장
- 예: MySQL, PostgreSQL, MongoDB
☞ 클라이언트 → 웹 서버 → WAS → DB의 흐름으로 요청이 처리됨
3. Web Server vs WAS (Web Application Server)
| 구분 | Web Server | WAS (Web Application Server) |
|---|
| 역할 | 정적 리소스 제공 (HTML, CSS, JS) | 동적 데이터 처리 (비즈니스 로직) |
| 실행 방식 | 요청을 단순히 전달 | 요청을 처리하고 DB와 연동 |
| 예제 | Apache, Nginx | Tomcat, JBoss, Jetty |
☞ 대부분의 시스템은 웹 서버와 WAS를 함께 사용하여 성능과 확장성을 높임
4. 웹 시스템 구성 방식
1) 단일 서버 구조 (Single Server Architecture)
- 모든 기능을 하나의 서버에서 처리
- 소규모 프로젝트에 적합하지만 트래픽 증가 시 성능 한계 발생
2) 웹 서버 + WAS 분리 구조
- 웹 서버가 정적 리소스를 처리하고, WAS가 동적 요청을 담당
- 부하 분산 가능, 성능과 확장성이 향상됨
3) 로드 밸런싱 (Load Balancing) 적용 구조
- 여러 개의 WAS를 두고 로드 밸런서가 트래픽을 분산
- 대규모 트래픽을 처리할 수 있도록 수평 확장 가능
☞ 대부분의 대형 시스템은 웹 서버 + WAS + 로드 밸런서를 활용하여 성능을 최적화
정리
- 웹 애플리케이션: HTTP 요청과 응답을 처리하는 소프트웨어 시스템
- 웹 서버: 정적 파일 제공, WAS: 동적 데이터 처리
- 웹 시스템 구성 방식: 단일 서버 → 웹 서버 + WAS 분리 → 로드 밸런싱 적용
Web Application 2강: Servlet과 웹 애플리케이션 동작 원리
1. Servlet이란?
- Java 기반 웹 애플리케이션에서 HTTP 요청과 응답을 처리하는 프로그램
- 클라이언트의 요청을 받아 비즈니스 로직을 수행하고, HTML, JSON 등의 응답을 반환
- Java EE (Jakarta EE) 환경에서 실행되며, WAS(Web Application Server)에서 관리됨
Servlet의 주요 기능
- HTTP 요청(Request) 처리
- 비즈니스 로직 수행 (데이터 처리, DB 연동 등)
- HTTP 응답(Response) 생성 및 반환
☞ Servlet은 웹 애플리케이션의 핵심 구성 요소로 동적 페이지를 생성하는 역할을 함
2. Servlet 동작 순서
- 클라이언트가 HTTP 요청을 보냄 (
GET 또는 POST 요청)
- WAS가 요청을 받아 해당하는 Servlet을 실행
- Servlet이 요청 데이터를 분석하고 처리
- 필요한 경우 데이터베이스와 연동하여 데이터 조회 또는 수정
- 응답 데이터를 HTML, JSON 등의 형태로 생성
- 클라이언트에게 HTTP 응답을 반환
☞ Servlet이 직접 실행되는 것이 아니라, WAS가 관리하고 실행해줌
3. Servlet Container (서블릿 컨테이너)
- Servlet을 실행하고 관리하는 환경 (WAS 내부에 존재)
- 주요 역할:
- Servlet 생명주기 관리 (생성 → 실행 → 소멸)
- 클라이언트 요청을 Servlet에 전달
- HTTP 요청 및 응답을 처리
- 멀티쓰레딩을 활용하여 동시 요청 처리
Servlet 생명주기
- Servlet 객체 생성 (
init())
- 요청 처리 (
service())
- Servlet 종료 (
destroy())
- WAS가 종료되거나, 필요 없어진 경우 실행됨
☞ Servlet은 WAS에 의해 관리되며, 여러 사용자의 요청을 효율적으로 처리함
4. Servlet을 활용한 MVC 패턴
- Servlet은 비즈니스 로직과 UI 처리가 분리되지 않아 유지보수가 어려울 수 있음
- 이를 해결하기 위해 MVC(Model-View-Controller) 패턴 적용
MVC 패턴 구조
| 역할 | 설명 |
|---|
| Model | 데이터 및 비즈니스 로직 처리 (DB 연동) |
| View | 사용자에게 보여줄 UI (JSP, Thymeleaf) |
| Controller | 요청을 받아 Model과 View를 연결 (Servlet) |
☞ Servlet을 Controller로 사용하여 역할을 분리하면, 유지보수성과 확장성이 향상됨
정리
- Servlet: HTTP 요청을 처리하고 응답을 반환하는 Java 웹 애플리케이션의 핵심 요소
- Servlet 동작 원리: 요청 → 처리 → 응답의 흐름을 따름
- Servlet Container (WAS 내부): Servlet의 실행 및 요청을 관리하는 환경
- MVC 패턴 적용: 비즈니스 로직과 UI를 분리하여 유지보수성을 높임
Web Application 3강: 멀티쓰레드와 WAS 성능 최적화
1. 멀티쓰레드(Multi-thread)란?
- 하나의 프로세스 내에서 여러 작업(쓰레드)을 동시에 실행하는 방식
- 웹 애플리케이션에서 동시 요청을 처리하는 핵심 기술
멀티쓰레드의 특징
- 동시성(Concurrency) 처리 → 여러 요청을 빠르게 처리 가능
- 자원 공유 → 메모리와 CPU를 효율적으로 활용
- 쓰레드 안전성(Thread Safety) 고려 필요
☞ 웹 애플리케이션에서 멀티쓰레드를 적절히 활용하면 성능을 향상시킬 수 있음
2. WAS(Web Application Server)와 멀티쓰레드
- WAS는 기본적으로 멀티쓰레드 기반으로 동작
- 클라이언트 요청마다 새로운 쓰레드를 생성하여 독립적으로 처리
WAS의 요청 처리 과정
- 클라이언트가 HTTP 요청을 보냄
- WAS가 쓰레드 풀(Thread Pool)에서 사용 가능한 쓰레드 할당
- 해당 쓰레드가 요청을 처리하고 응답 반환
- 처리가 끝난 쓰레드는 쓰레드 풀로 반환
☞ 쓰레드 풀을 활용하면 성능 최적화와 자원 관리를 효율적으로 할 수 있음
3. 쓰레드 풀(Thread Pool)이란?
- 미리 생성된 쓰레드 묶음으로, 필요할 때 가져다 쓰고 반환하는 방식
- 쓰레드를 반복 생성하는 비용을 줄이고 성능을 향상
쓰레드 풀의 주요 설정 값
| 설정 | 설명 |
|---|
corePoolSize | 초기 생성되는 기본 쓰레드 개수 |
maxPoolSize | 최대 쓰레드 개수 |
queueCapacity | 요청 대기 큐 크기 |
keepAliveTime | 사용되지 않는 쓰레드의 유지 시간 |
☞ 적절한 쓰레드 풀 설정이 WAS 성능을 결정하는 중요한 요소!
4. WAS 성능 최적화 방법
1) 커넥션 풀(Connection Pool) 사용
- DB 연결을 재사용하여 불필요한 커넥션 생성 비용 절감
- 예제: HikariCP, Apache DBCP 사용
2) 캐시(Cache) 활용
- 자주 사용되는 데이터를 캐시에 저장하여 DB 부하 감소 및 응답 속도 향상
- 예제: Redis, Ehcache
3) 쓰레드 풀(Thread Pool) 최적화
- 적절한
corePoolSize와 maxPoolSize 설정으로 과부하 방지
4) 비동기 처리(Asynchronous Processing) 적용
- Spring의
@Async 또는 CompletableFuture를 활용하여 비동기 작업 수행
- 대량의 요청을 효과적으로 처리 가능
☞ 성능 최적화 기법을 조합하여 WAS의 부하를 줄이고 응답 속도를 높일 수 있음
정리
- 멀티쓰레드: 여러 요청을 동시 처리하여 성능 향상
- WAS는 멀티쓰레드 기반으로 요청을 처리하며, 쓰레드 풀을 활용하여 성능 최적화
- WAS 성능 최적화 기법: 커넥션 풀, 캐시, 쓰레드 풀, 비동기 처리 적용
Web Application 4강: 웹 애플리케이션 배포와 운영
1. 웹 애플리케이션 배포란?
- 개발된 애플리케이션을 사용자가 접근할 수 있도록 서버에 배포하는 과정
- 소스 코드 → 빌드 → 서버 업로드 → 실행 환경 구성 → 서비스 운영
☞ 효율적인 배포 방식이 운영 안정성과 직결됨
2. 웹 애플리케이션 배포 방식
1) 수동 배포 (Manual Deployment)
- 개발자가 직접 빌드 및 서버에 업로드하여 배포
- 장점: 간단하고 바로 적용 가능
- 단점: 자동화가 없고, 오류 발생 가능성이 높음
2) CI/CD를 활용한 자동 배포 (Continuous Integration & Continuous Deployment)
- 코드 변경 시 자동으로 빌드, 테스트, 배포까지 수행
- Git, Jenkins, GitHub Actions, GitLab CI/CD 등을 사용
- 장점: 빠른 배포, 오류 최소화, 효율적인 운영 가능
- 단점: 설정이 복잡할 수 있음
☞ 대규모 서비스에서는 자동 배포가 필수!
3. 운영 환경 구성
1) 무중단 배포 (Zero Downtime Deployment)
- 서비스 중단 없이 새로운 버전 배포 가능
- 대표적인 방법: 블루-그린 배포, 롤링 업데이트, 카나리아 배포
2) 로드 밸런서 (Load Balancer) 적용
- 여러 대의 서버로 트래픽을 분산하여 부하를 균형 있게 관리
- 예: AWS ELB, Nginx, HAProxy
3) 모니터링 및 로그 관리
- 서버 상태 및 오류를 실시간으로 감지하여 운영 안정성 확보
- 대표적인 모니터링 도구: Prometheus, Grafana, ELK Stack (Elasticsearch, Logstash, Kibana)
☞ 배포 후에도 지속적인 운영 및 모니터링이 중요!
4. 클라우드 환경에서의 배포
1) On-Premise vs Cloud
| 항목 | On-Premise | Cloud |
|---|
| 서버 관리 | 직접 운영 | 클라우드 업체 제공 |
| 확장성 | 제한적 | 유연한 확장 가능 |
| 비용 | 초기 비용 높음 | 사용한 만큼 비용 지불 (Pay-as-you-go) |
☞ 대부분의 기업은 클라우드(AWS, GCP, Azure)로 이전하는 추세
2) 컨테이너(Container) 기반 배포
- Docker, Kubernetes를 활용하여 애플리케이션을 가볍고 유연하게 배포
- 장점: 환경 일관성 유지, 빠른 배포, 확장성 용이
☞ 현대적인 배포 방식에서는 컨테이너 기반 배포가 대세!
정리
- 배포란? 개발된 애플리케이션을 사용자에게 제공하는 과정
- 배포 방식: 수동 배포 vs 자동화된 CI/CD 배포
- 운영 환경: 무중단 배포, 로드 밸런싱, 모니터링 적용 필요
- 클라우드 & 컨테이너 활용: 유연한 확장성과 효율적인 운영 가능