Skip to content

현대 자바 서버 애플리케이션을 구성하는 기반 기술들을 직접 분석하고 구현해보기

Notifications You must be signed in to change notification settings

astor-dev/bottom-up-java-web

Repository files navigation

Bottom-Up Java Web

이 프로젝트는 현대 자바 서버 애플리케이션을 구성하는 기반 기술들을 밑바닥부터(Bottom-Up) 직접 분석하고 구현해보며 그 원리를 깊이 이해하는 것을 목적으로 합니다.

순수 소켓 프로그래밍에서 시작하여 직접 서블릿 컨테이너를 만들어보고, 최종적으로 현대적인 프레임워크인 스프링 부트에 이르기까지, 웹 서버가 어떻게 추상화되고 발전해왔는지를 5개의 모듈을 통해 점진적으로 학습합니다.

프로젝트에 대한 기록 및 인사이트에 대해서는 블로그 시리즈 에서 확인하실 수 있습니다.


구성 및 실행 방법

본 프로젝트는 Gradle 멀티-모듈로 구성되어 있으며, 각 모듈은 독립적으로 실행 가능한 웹 애플리케이션입니다.

프로젝트 루트 디렉터리에서 아래 명령어를 통해 각 모듈을 실행할 수 있습니다. 각 모듈은 기본적으로 8080 포트에서 실행됩니다. (2번 모듈은 8081 포트에서도 NIO 서버가 실행됩니다.)

# 1번 모듈(원시 소켓 서버) 실행
./gradlew :1-java-http-socket:run

# 2번 모듈(자체 구현 서블릿 컨테이너) 실행
./gradlew :2-servlet-container-impl:run

# 3번 모듈(내장 톰캣) 실행
./gradlew :3-tomcat:run

# 4번 모듈(Spring MVC)은 외부 톰캣에 WAR 파일로 배포해야 합니다.
# WAR 파일 생성 명령어:
./gradlew :4-spring-webmvc:war

# 5번 모듈(스프링 부트) 실행
./gradlew :5-spring-boot:run

각 모듈 설명

이 프로젝트는 5개의 모듈을 통해 점진적으로 기술을 발전시키는(Bottom-Up) 과정을 보여줍니다.

1. 원시 소켓 서버 (1-java-http-socket)

Java의 기본 java.net.Socket API만을 사용하여 웹 서버의 가장 원시적인 형태를 구현합니다. 스레드 관리, HTTP 프로토콜 파싱 등 모든 것을 수동으로 처리하며 네트워크 통신의 가장 근본적인 동작 원리를 학습합니다.

👉 1-java-http-socket 상세 설명 보기

2. 서블릿 컨테이너 구현 (2-servlet-container-impl)

1번 모듈의 저수준 로직을 추상화하여 Tomcat과 유사한 구조의 서블릿 컨테이너를 직접 구현합니다. net -> bridge -> container의 3계층 아키텍처를 통해 네트워크 통신, 프로토콜 처리, 서블릿 생명주기 관리를 분리하며 웹 애플리케이션 서버(WAS)의 내부 구조를 깊이 있게 탐구합니다.

👉 2-servlet-container-impl 상세 설명 보기

3. 내장 톰캣 활용 (3-tomcat)

2번 모듈에서 직접 만들었던 복잡한 컨테이너를 버리고, 검증된 표준 기술인 내장 톰캣(Embedded Tomcat) 으로 대체합니다. 이를 통해 서버의 핵심 기능을 안정적인 외부 엔진에 위임하고, 개발자는 애플리케이션 로직에 더 집중할 수 있게 되는 과정을 학습합니다. 서버 설정 및 구동은 여전히 프로그래밍 방식으로 직접 제어합니다.

👉 3-tomcat 상세 설명 보기

4. Spring MVC와 WAR 배포 (4-spring-webmvc)

스프링 프레임워크(Spring Framework) 를 도입하여 애플리케이션 로직과 서버 환경을 완전히 분리합니다. 스프링의 핵심 철학인 제어의 역전(IoC) 을 통해 DispatcherServlet이 요청을 중앙에서 처리하고, 컨트롤러는 평범한 자바 객체(POJO)로 구현됩니다. 결과물은 WAR 파일로 빌드되어 외부 서블릿 컨테이너에 배포되는 전통적인 방식을 따릅니다.

👉 4-spring-webmvc 상세 설명 보기

5. Spring Boot: 완성 (5-spring-boot)

이전 과정들의 장점만을 모아놓은 여정의 최종 목적지입니다. 스프링 부트는 3번 모듈의 내장 서버 방식과 4번 모듈의 강력한 프로그래밍 모델을 결합하고, 자동 설정(Auto-Configuration) 이라는 마법을 통해 모든 인프라 설정을 자동화합니다. 모든 의존성과 내장 서버가 포함된 단일 실행 가능 JAR 파일 하나로 배포가 완료되며, 개발자는 오직 비즈니스 로직에만 집중할 수 있는 현대적인 개발 환경을 경험합니다.

👉 5-spring-boot 상세 설명 보기

About

현대 자바 서버 애플리케이션을 구성하는 기반 기술들을 직접 분석하고 구현해보기

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages