Java는 쓰는데 Spring은 쓰지 않는 서버 개발자?
우리 회사는 Spring 없이 자체적으로 개발한 Java 기반 서버 프레임워크를 사용합니다.
처음에는 큰 문제가 없었지만, 시간이 지날수록 코드의 복잡도와 유지보수성이 문제로 떠올랐습니다.
DI(Dependency Injection) 개념이 없는 상태에서 개발하다 보니, 코드는 점점 지저분해졌고, 마치 스파게티 코드처럼 엉켰습니다.
하나의 코드를 수정하려면 이를 의존하는 모든 클래스를 함께 수정해야 하는 일이 빈번했습니다.
결국, "지금의 문제를 해결할 명확한 규칙이 필요하다"는 결론에 도달했습니다.
Spring 컨테이너의 도입
"왜 새로운 규칙을 직접 만들어야 하지? 이미 검증된 해결책이 있다면 그걸 활용하자."
Spring은 오랜 시간 동안 다양한 서버 개발 요구사항을 반영하며 발전해 온 프레임워크입니다.
그중에서도 Spring의 핵심이라 할 수 있는 Application Context를 직접 구현하기로 했습니다.
Spring의 구조를 이해하고 이를 회사의 서버 프레임워크에 맞게 녹여내는 프로젝트를 시작했습니다.
물론, 이 프로젝트는 단순히 문제 해결을 넘어 서버 개발자로서의 경쟁력 강화라는 목표도 담고 있었습니다.
직접 만드는 것만큼 효과적인 학습은 없다
결과적으로, 우리 회사 서버 프레임워크에 완벽히 적합한 Application Context를 만들어냈습니다.
이를 위해 Spring의 내부 동작 방식을 철저히 분석하며 기존에 부족했던 개념들을 채워 넣었습니다.
이번 경험을 통해 Spring을 0부터 구현하는 과정을 블로그에 공유하려 합니다.
Spring을 사용하는 것에 그치지 않고, 그 원리를 직접 구현해보는 과정을 통해 다른 개발자들에게도 큰 도움을 줄 수 있을 것이라 생각합니다.
구현 단계
1. Tomcat을 사용한 Main Class 구현
Spring이 내장한 Tomcat을 참고하여, 기본적인 서버 실행 환경을 구성하는 것부터 시작했습니다.
2. Application Context의 빈 등록 기능
Application Context는 빈(Bean)을 다양한 방식으로 등록할 수 있습니다.
우선 설정 파일 기반 등록 방식을 구현했으며, 추후 XML 및 컴포넌트 스캔 방식도 추가적으로 탐구할 예정입니다.
3. Annotation 개발
Spring의 매력을 더해주는 Annotation도 직접 구현할 계획입니다.
예를 들어 @Component, @Autowired 등을 개발하여 코드의 관리와 확장성을 높이는 작업을 진행할 예정입니다.
4. Dispatcher Servlet 개발
Spring의 핵심 기능 중 하나인 Dispatcher Servlet을 직접 구현하며, MVC 패턴을 적용하는 과정도 함께 경험할 예정입니다.
직접 구현하는 이유
Spring을 직접 구현하는 것은 단순히 학습 이상의 가치를 제공합니다.
"왜 이런 기능이 필요한가?"
"이 설계는 어떤 문제를 해결하기 위해 나왔는가?"
직접 구현하는 과정에서 이러한 근본적인 질문에 대한 답을 찾을 수 있습니다.
- Spring의 본질 이해
Spring은 다양한 요구사항을 반영하며 발전해왔습니다.
직접 구현해 보면, Spring이 제공하는 기능의 본질과 그 필요성을 더 깊이 이해할 수 있습니다.
- 코드 개선과 실용성 확인
Spring의 개념을 회사의 서버 프레임워크에 적용하면,
코드의 유지보수성과 확장성이 얼마나 개선되는지 명확히 체감할 수 있습니다.
앞으로의 계획
Spring Container 제작 과정을 꾸준히 기록하며 블로그에 공유할 예정입니다.
이 과정은 단순한 개인적인 성장의 기록을 넘어, 다른 개발자들에게도 새로운 배움의 기회를 제공할 것입니다.
"Spring Container를 직접 만드는 것, 과연 가능할까?"
도전하며 해답을 찾아가는 이 여정을 함께 나누고 싶습니다.