[Spring 입문] Web Application 정리

박화랑·2025년 3월 17일

Spring_개념정리

목록 보기
5/17

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 ServerWAS (Web Application Server)
역할정적 리소스 제공 (HTML, CSS, JS)동적 데이터 처리 (비즈니스 로직)
실행 방식요청을 단순히 전달요청을 처리하고 DB와 연동
예제Apache, NginxTomcat, 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의 주요 기능

  1. HTTP 요청(Request) 처리
  2. 비즈니스 로직 수행 (데이터 처리, DB 연동 등)
  3. HTTP 응답(Response) 생성 및 반환

Servlet은 웹 애플리케이션의 핵심 구성 요소로 동적 페이지를 생성하는 역할을 함


2. Servlet 동작 순서

  1. 클라이언트가 HTTP 요청을 보냄 (GET 또는 POST 요청)
  2. WAS가 요청을 받아 해당하는 Servlet을 실행
  3. Servlet이 요청 데이터를 분석하고 처리
  4. 필요한 경우 데이터베이스와 연동하여 데이터 조회 또는 수정
  5. 응답 데이터를 HTML, JSON 등의 형태로 생성
  6. 클라이언트에게 HTTP 응답을 반환

Servlet이 직접 실행되는 것이 아니라, WAS가 관리하고 실행해줌


3. Servlet Container (서블릿 컨테이너)

  • Servlet을 실행하고 관리하는 환경 (WAS 내부에 존재)
  • 주요 역할:
    1. Servlet 생명주기 관리 (생성 → 실행 → 소멸)
    2. 클라이언트 요청을 Servlet에 전달
    3. HTTP 요청 및 응답을 처리
    4. 멀티쓰레딩을 활용하여 동시 요청 처리

Servlet 생명주기

  1. Servlet 객체 생성 (init())
    • 최초 요청 시 한 번만 실행됨
  2. 요청 처리 (service())
    • doGet(), doPost() 메서드 실행
  3. 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)란?

  • 하나의 프로세스 내에서 여러 작업(쓰레드)을 동시에 실행하는 방식
  • 웹 애플리케이션에서 동시 요청을 처리하는 핵심 기술

멀티쓰레드의 특징

  1. 동시성(Concurrency) 처리 → 여러 요청을 빠르게 처리 가능
  2. 자원 공유 → 메모리와 CPU를 효율적으로 활용
  3. 쓰레드 안전성(Thread Safety) 고려 필요

웹 애플리케이션에서 멀티쓰레드를 적절히 활용하면 성능을 향상시킬 수 있음


2. WAS(Web Application Server)와 멀티쓰레드

  • WAS는 기본적으로 멀티쓰레드 기반으로 동작
  • 클라이언트 요청마다 새로운 쓰레드를 생성하여 독립적으로 처리

WAS의 요청 처리 과정

  1. 클라이언트가 HTTP 요청을 보냄
  2. WAS가 쓰레드 풀(Thread Pool)에서 사용 가능한 쓰레드 할당
  3. 해당 쓰레드가 요청을 처리하고 응답 반환
  4. 처리가 끝난 쓰레드는 쓰레드 풀로 반환

쓰레드 풀을 활용하면 성능 최적화와 자원 관리를 효율적으로 할 수 있음


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) 최적화

  • 적절한 corePoolSizemaxPoolSize 설정으로 과부하 방지

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-PremiseCloud
서버 관리직접 운영클라우드 업체 제공
확장성제한적유연한 확장 가능
비용초기 비용 높음사용한 만큼 비용 지불 (Pay-as-you-go)

대부분의 기업은 클라우드(AWS, GCP, Azure)로 이전하는 추세

2) 컨테이너(Container) 기반 배포

  • Docker, Kubernetes를 활용하여 애플리케이션을 가볍고 유연하게 배포
  • 장점: 환경 일관성 유지, 빠른 배포, 확장성 용이

현대적인 배포 방식에서는 컨테이너 기반 배포가 대세!


정리

  • 배포란? 개발된 애플리케이션을 사용자에게 제공하는 과정
  • 배포 방식: 수동 배포 vs 자동화된 CI/CD 배포
  • 운영 환경: 무중단 배포, 로드 밸런싱, 모니터링 적용 필요
  • 클라우드 & 컨테이너 활용: 유연한 확장성과 효율적인 운영 가능
profile
개발자 희망생

0개의 댓글