Skip to content

jungbin97/elephant-project

Repository files navigation

   _____   _                  _                       _   
  |  ___| | |                | |                     | |  
  | |__   | |   ___   _ __   | |__     __ _   _ __   | |_ 
  |  __|  | |  / _ \ | '_ \  | '_ \   / _` | | '_ \  | __|
  | |___  | | |  __/ | |_) | | | | | | (_| | | | | | | |_ 
  \____/  |_|  \___| | .__/  |_| |_|  \__,_| |_| |_|  \__|
                     | |                                  
                     |_|

『어린 왕자』 코끼리를 삼킨 보아뱀 — 겉보기엔 단순한 모자처럼 보이지만, 그 안에는 거대한 코끼리가 숨어있다. 코끼리를 꺼내어 탐구하는 여정


프로젝트 개요

Elephant Project는 웹 애플리케이션 서버(WAS)와 Spring 프레임워크의 내부 원리를 깊이 이해하고자 하는 목표에서 시작되었습니다. 복잡한 추상화 위에서 돌아가는 현대의 웹 애플리케이션 구조의 추상화를 걷어내고 바닥부터 직접 구현함으로써, 그 원리를 깊이 이해하는 것을 목적으로 합니다. 이를 통해 프레임워크의 소비자가 아닌, 설계자이자 이해자로 성장하는 것을 지향합니다.

본 프로젝트는 두 개의 주요 서브시스템으로 구성됩니다:


🐘 Trunk - Web Application Server

Inspired by the elephant's trunk — the organ of interaction, communication, and information processing.

Trunk는 HTTP 요청을 수신하고 응답을 전달하는 과정을 처리하는 Java 기반의 웹 애플리케이션 서버(WAS)입니다. HTTP 프로토콜 스펙, 네트워크 프로그래밍, 그리고 서블릿 컨테이너의 내부 구조와 웹 애플리케이션 서버의 전체적인 작동 방식을 이해합니다.

  • HTTP/1.1 프로토콜 스택: RFC 2616 기반 HTTP 프로토콜 스택 구현
  • 커넥션 및 스레드 관리: Java NIO기반의 이벤트 루프(Poller)와 효율적인 요청 병렬 처리를 위한 Worker스레드 풀을 기반으로 연결을 수립
  • Connector & Container 아키텍처: 다양한 I/O 모델(BIO, NIO)을 지원하는 커넥터 구조와 서블릿 로직 담당하는 Container로 역할 분리하여 설계
  • 서블릿 컨테이너: web.xml 파싱, 우선순위 기반 URL 패턴 매핑(Mapper), 그리고 서블릿 생명주기(init, service, destroy) 관리 등 서블릿 컨테이너 핵심 기능 구현

🐍 Boa MVC - MVC Framework

Inspired by the boa constrictor — swallowing complexity, delivering simplicity.

Boa MVC는 웹 요청 처리의 복잡성을 우아하게 추상화하고 소화하여 단순한 흐름으로 제공하는, 코끼리 프로젝트의 경량 MVC 프레임워크입니다.

/// 구현 중///

개발자는 Boa MVC가 제공하는 직관적인 Model - View - Controller 계층에 집중함으로써, 비즈니스 로직을 구현할 수 있도록합니다.


프로젝트 철학

  • 학습의 본질 추구: 바퀴를 다시 발명함으로써 바퀴의 원리를 터득
  • 탈 추상화(De-abstraction): 순수 Java 기반으로 하위 계층부터 직접 구현
  • 역할과 책임(Role & Responsibility) : 객체지향 설계를 통한 명확한 책임 분리
  • 안전한 리팩토링 : 테스트 코드를 통한 안정적 리팩토링 기반 마련
  • 의미있는 테스트: 커버리지 수치보다는 테스트의 본질 추구

기술 스택

  • Java 17
  • Gradle
  • JUnit5 + AssertJ + Mokito
  • SLF4J + Logback
  • SonarQube + Jacoco

프로젝트 중 얻은 인사이트 정리

Trunk(WAS) 구현

개발 기본기 및 환경 설정

HTTP 프로토콜과 웹 애플리케이션 서버

세션 관리

서블릿 컨테이너

동시성 & I/O 심층 구현

Boa Core/MVC(Spring) 구현

About

Lightweight WAS and MVC framework built with pure Java from scratch

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published