아무 생각 없이 사용하던 spring boot, 이 친구에 대해서 알고 싶어 정리를 해보았습니다.
이 글에서 Spring Boot의 등장 배경과 스프링의 핵심 개념 (IoC, DI, Bean, Container)에 대해서 살펴보겠습니다.
1. 자바의 탄생
스프링을 이해하기 전에, 그 근간이 되는 자바에 대해서 먼저 살펴보겠습니다.
1990년대, 당시 대부분의 언어는 운영체제에 종속되어 있었습니다. 예를 들어, Window용으로 작성한 프로그램은 Linux나 macOS에서 동작하지 않았습니다.
하지만 1995년, Sun Microsystems는 혁명적인 슬로건과 함께 새로운 프로그래밍 언어 Java를 세상에 선보였습니다.
"Write Once, Run AnyWhere"
한 번 작성하면 어디서나 실행된다
JVM 위에서 실행되는 자바는 운영체제에 관계없이 동일한 코드가 작동했습니다.
또한 C/C++의 복잡함을 줄이고, 객체지향 개념(OOP)을 쉽게 구현할 수 있는 언어로 유행을 타기 시작했습니다.
이 덕분에 자바는 개인용 애플리케이션에서 기업용 서버 애플리케이션까지 영역을 넓혔습니다.
특히 안정성과 확장성이 뛰어나 기업 환경에서 표준 플랫폼으로 자리 잡았습니다.
2. J2EE 시대의 도래
1999년, Sun은 J2EE(Java 2 Platform, Enterprise Edition)을 발표합니다.
이건 기업용 웹 애플리케이션 개발 표준을 자바로 통합하려는 시도였습니다.
이 시도로 자바는 대규모 엔터프라이즈 시스템의 핵심 플랫폼이 되었습니다.
J2EE는 기업 환경의 복잡한 문제(트랜잭션, 보안, 분산 처리 등)를 표준화하려는 시도였습니다.
하지만 실제 개발 환경에서는 아래와 같은 불폄함이 생겼습니다.
| XML 설정 지옥 | 단순한 기능 하나 추가에도 여러 설정 파일을 수정해야 함 |
| EJB 의존성 문제 | 순수 자바 객체(POJO)가 아닌, EJB 컨테이너에 종속된 객체만 동작 |
| 테스트 불가능 | 컨테이너가 없으면 코드 실행조차 안 됨 |
| 생산성 저하 | 간단한 비즈니스 로직 하나를 구현해도 배포, 재시작, 설정 반복 |
3. Spring의 등장
이런 불편함을 해결하기 위해 Rod Johnson은 2002년, 단순한 객체(POJO)와 유연한 의존성 관리 메커니즘(DI)을 주장하며 스프링의 철학을 제안합니다.
| 스프링 철학 | 설명 |
| POJO (Plain Old Java Object) | 프레임워크에 종속되지 않는 순수 자바 객체 |
| IoC / DI (제어 역전 / 의존성 주입) | 객체의 생성과 연결을 외부 컨테이너가 담당 |
| AOP (관점 지향 프로그래밍) | 공통 기능(트랜잭션, 로깅 등)을 핵심 로직과 분리 |
| 테스트 용이성 | 컨테이너 없이 단위 테스트 가능 |
이 철학을 구현한 프레임워크가 바로 2003년에 등장한 Spring Framework 입니다.
Spring은 이후로도 계속 진화하며 개발자들의 생산성을 높였습니다.
4. Spring Boot의 등장
Spring이 충분히 도움이 되었지만 여전히 초기 설정이 많았습니다.
2014년, Spring팀은 새로운 철학을 바탕으로 Spring Boot를 공개했습니다.
Spring의 복잡한 설정을 자동화하여 누구나 쉽게 실행할 수 있도록 만든 것입니다.
"Convention over Configuration"
설정보다 관례
기존 Spring과 Spring Boot의 차이는 아래와 같습니다.
| 비교 항목 | Spring Framework | Spring Boot |
| 목적 | 기업용 애플리케이션 핵심 기능 제공 | Spring을 쉽고 빠르게 실행하기 위한 플랫폼 |
| 시작 방식 | XML/자바 설정 + 외부 서버 배포 | @SpringBootApplication + 내장 서버로 즉시 실행 |
| 서버 구성 | 외부 WAS 필요 (Tomcat, Jetty 등) | 내장 서버 포함 (Tomcat, Jetty, Undertow) |
| 설정 방식 | 수동 설정 (Bean 등록, 트랜잭션 관리 등) | 자동 구성 |
| 의존성 관리 | 개별 라이브러리 버전 직접 관리 | Starter 종속성으로 통합 관리 |
| 실행 명령 | 서버에 WAR 배포 | java -jar 한 줄 실행 |
| 운영 기능 | 별도 구성 필요 | Actuator로 Health check / 모니터링 내장 |
| 철학 | 유연성 중심 | 생산성과 간결성 중심 |
핵심 요약
- 자바 - 플랫폼 독립성과 객체지향 철학으로 대규모 시스템의 기초가 됨
- J2EE/EJB - 기업 시스템 표준을 제시했지만 복잡함으로 비판받음
- Spring - 단순함, IoC/DI, POJO 철학으로 J2EE의 대안을 제시
- Spring Boot - 스프링의 복잡한 설정을 자동화하고, 개발 경험을 혁신