4. 웹 서버의 변천사

박은서's avatar
Jan 28, 2026
4. 웹 서버의 변천사

1️⃣ 1세대: 정적 웹 시대 (Static HTML)

1) 특징

  • 서버는 HTML 파일을 그대로 전달
  • 요청 URL = 파일 경로
  • 로직 ❌, 계산 ❌, 조건 ❌

2) 예시

/index.html → index.html 파일 전달

3) 장점

  • 구조 단순
  • 빠름
  • 구현 쉬움

4) 한계

  • 사용자마다 다른 화면 제공 불가능
  • DB 연동 불가능
  • 파일이 많아질수록 관리 불가

5) 다음 세대가 등장한 이유

“요청마다 다른 결과를 주고 싶다”

2️⃣ 2세대: 동적 웹 등장 (Servlet 시대)

1) 핵심 변화

  • 서버가 계산을 시작함
  • 요청을 자바 코드가 직접 처리

2) 특징

  • 하나의 Servlet으로 여러 응답 생성
  • DB 연동 가능
  • 조건 처리 가능

3) 구조

브라우저 → Servlet(자바 코드) → HTML 응답

4) 한계

  • 자바 코드 안에서 HTML 작성
  • 가독성 최악
  • 프론트/백엔드 분리 불가능

5) 다음 세대가 등장한 이유

“HTML은 화면이고, 자바는 로직인데 왜 한 파일에 섞여 있지?”

3️⃣ 3세대: 템플릿 엔진 등장 (JSP)

1) 핵심 변화

  • HTML 중심 개발
  • 자바 코드를 HTML 안에 부분적으로 삽입

2) 특징

  • 화면은 HTML로 작성
  • 반복/조건만 자바 코드로 처리

3) 장점

  • 화면 수정 쉬움
  • 디자이너 협업 가능

4) 한계

  • 여전히 로직과 화면이 섞임
  • JSP 하나가 모든 역할 수행

5) 다음 세대가 등장한 이유

“화면 담당, 로직 담당을 파일 단위로 분리하자”

4️⃣ 4세대: Model 1 패턴 (과도기)

1) 특징

  • JSP가 요청도 받고
  • 로직도 처리하고
  • 화면도 출력

2) 장점

  • 빠른 개발
  • 구조 단순

3) 한계

  • 코드가 비대해짐
  • 유지보수 지옥
  • 테스트 불가능

4) 다음 세대가 등장한 이유

“이제 서비스가 커졌다
전문 분업이 필요하다”

5️⃣ 5세대: MVC 패턴 등장

1) 핵심 아이디어

역할을 나누자

2) 역할 분리

  • Controller: 요청 처리
  • Service(Model): 비즈니스 로직
  • View: 화면

3) 장점

  • 유지보수 쉬움
  • 테스트 가능
  • 협업 가능

4) 한계

  • 컨트롤러가 많아짐
  • 요청 분기 코드 반복

5) 다음 세대가 등장한 이유

“모든 요청을 중앙에서 관리하자”

6️⃣ 6세대: DispatcherServlet (Front Controller)

1) 핵심 변화

  • 모든 요청을 하나의 관문에서 처리
  • URL → Controller 자동 연결

2) 역할

요청 → DispatcherServlet → Controller → Service → View

3) 장점

  • 공통 처리 가능
  • 구조 통일
  • 확장성 ↑

4) 필요 기술

  • 리플렉션 필요

7️⃣ 리플렉션의 등장

1) 역할

  • 문자열로 클래스/메서드 실행
  • 실행 중 객체 분석

2) 왜 중요?

  • DispatcherServlet이
    • “이 URL은 이 컨트롤러”
      하드코딩 없이 처리
👉 스프링의 핵심 기술

8️⃣ 스프링 프레임워크 시대

1) 해결해준 것

  • MVC 자동화
  • DI / AOP 제공
  • 반복 코드 제거

2) 결과

  • 개발자는 로직만 작성
  • 생산성 폭발
👉 웹 개발의 표준 프레임워크

9️⃣ WAS 시대 (Tomcat)

1) 역할

  • Servlet 실행 환경
  • HTTP 처리
  • 스레드 관리

2) 정리

  • 스프링: 개발 틀
  • 톰켓: 실행기

🔟 현대 웹: API 서버 시대

1) 변화

  • 화면 ❌
  • JSON 데이터만 제공
  • 프론트엔드와 완전 분리

2) REST 방식

  • GET: 조회
  • POST: 생성
  • PUT: 수정
  • DELETE: 삭제

✔ 구조

ControllerServiceRepository(DB)
Share article