// Developer · Debugging Reports

뉴스도 디버깅이 필요해

마주친 오류를 재현하고, 원인을 추적하고, 기록합니다. Java · Spring · DB · 실무 트러블슈팅.

debug — today.log
$ debug --trace "오늘의 뉴스"
> 헤드라인 파싱 중...
> 원인 추적: 근거 누락 · 출처 불명
> 패치 적용: 사실 확인 + 출처 보강
✓ RESOLVED
TOTAL
TODAY
YESTERDAY

Categories

웹개발/Spring

Spring Framework vs Spring Boot 차이와 공공 SI에서의 선택

자바를잡아2026. 6. 30. 08:00
반응형

Spring Framework와 Spring Boot는 어떤 관계인가

먼저 오해부터 정리하면, Spring Boot는 Spring Framework를 대체하는 별개 기술이 아니다. Spring Framework 위에 올라간, 설정을 자동화해 주는 도구에 가깝다. Spring Framework가 엔진이라면 Spring Boot는 그 엔진을 쉽게 시동 걸 수 있게 묶어 놓은 패키지다. 그래서 Spring Framework Spring Boot 차이를 "둘 중 무엇이 더 좋은가"로 보면 어긋난다. "설정을 직접 하느냐, 자동에 맡기느냐"의 차이로 보는 게 맞다.

전통 Spring(여기서는 Boot 없이 XML/Java Config로 직접 설정하는 방식)은 web.xml, root-context.xml, servlet-context.xml 같은 파일에 빈과 설정을 직접 적는다. Spring Boot는 이 상당 부분을 자동 설정(auto-configuration)과 starter 의존성으로 대신해 준다.

전통 Spring과 Spring Boot 비교

구분 전통 Spring (Boot 없음) Spring Boot
설정 방식 XML/Java Config 직접 작성 자동 설정 + 최소 설정
의존성 관리 버전 일일이 지정 starter로 묶음 관리
WAS 외부 Tomcat에 WAR 배포 내장 WAS로 단독 실행(JAR)
초기 구성 속도 느림(보일러플레이트 많음) 빠름
설정 투명성 높음(다 보임) 낮음(숨겨진 자동 설정)
학습 곡선 설정 이해 부담 시작은 쉬우나 내부 이해 필요
대표 사용처 공공 SI/SM, 레거시 신규 서비스, 스타트업

설정 방식의 차이

1. 전통 Spring: 설정을 직접 작성

전통 Spring 웹 프로젝트는 DispatcherServlet 등록부터 빈 설정까지 XML에 직접 적는다. 공공 SI에서 흔히 보는 형태다.

<!-- web.xml : DispatcherServlet 직접 등록 -->
<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/servlet-context.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

설정이 많아 번거롭지만, 무엇이 어떻게 동작하는지 전부 눈에 보인다는 장점이 있다. 유지보수나 장애 추적에서 "어디를 봐야 하는지" 명확하다.

2. Spring Boot: 자동 설정과 최소 코드

Spring Boot는 위 설정 대부분을 자동으로 처리한다. 메인 클래스 하나로 애플리케이션이 뜬다.

// Spring Boot: 이 한 클래스로 내장 WAS까지 기동
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

DispatcherServlet 등록, 내장 Tomcat 기동, 기본 빈 구성이 자동으로 이뤄진다. 빠르게 시작할 수 있지만, 자동 설정이 무엇을 해 주는지 모르면 문제가 생겼을 때 원인을 찾기 어렵다는 점이 양날의 검이다.

의존성과 배포 방식 차이

1. 의존성 관리

전통 Spring은 라이브러리마다 버전을 직접 맞춰야 해서 버전 충돌이 잦다. Spring Boot는 spring-boot-starter-web처럼 묶음(starter) 의존성으로 호환되는 버전을 한 번에 관리해 준다.

// Spring Boot starter 예시 (build.gradle)
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.x.x'
}

버전을 일일이 적지 않아도 starter가 검증된 조합을 가져온다. 전통 Spring에서 버전 맞추느라 쓰던 시간을 줄여 주는 부분이다.

2. 배포 방식 (WAR vs JAR)

전통 Spring은 보통 WAR로 빌드해 외부 Tomcat에 올린다. Spring Boot는 내장 WAS를 품은 실행 가능한 JAR로 단독 실행할 수 있다. 다만 공공 SI에서는 운영 환경이 외부 Tomcat 기반으로 표준화돼 있어, Boot를 쓰더라도 WAR로 빌드해 기존 WAS에 올리는 절충 방식을 택하기도 한다.

공공 SI/SM은 왜 아직 전통 Spring이 많은가

신규 서비스 시장에서는 Spring Boot가 사실상 표준이 됐다. 그런데 공공기관 SI/SM, 특히 전자정부 표준프레임워크(eGovFramework) 기반 사업에서는 여전히 전통 Spring(XML 설정) 기반 프로젝트를 자주 만난다. 기술이 뒤처져서라기보다 환경적 이유가 크다.

  • 표준프레임워크 버전 — eGovFramework는 버전에 따라 기반 Spring 버전과 설정 방식이 정해져 있고, 사업은 발주 기준의 표준 버전을 따라야 하는 경우가 많다.
  • 기존 시스템 일관성 — 이미 운영 중인 시스템을 유지보수·고도화하는 SM이 많아, 기존 구조(XML 설정)를 그대로 잇는 편이 안전하다.
  • 표준 산출물·가이드 — 과거 사업 산출물과 개발 가이드가 전통 Spring 기준으로 축적돼 있어, 갑자기 Boot로 바꾸면 산출물 체계와 어긋난다.
  • 운영·배포 표준화 — 운영 인프라가 외부 WAS, 정해진 배포 절차에 맞춰져 있어 내장 WAS 단독 실행 모델과 바로 맞지 않을 수 있다.
  • 인력·검수 기준 — 다수 인력이 투입되고 산출물 검수가 엄격한 공공 사업 특성상, 익숙하고 검증된 방식을 유지하려는 경향이 있다.

최근에는 eGovFramework도 Spring Boot 기반을 지원하는 방향으로 확장되고 있어, 신규 공공 사업에서 Boot 채택 사례가 늘고 있다. 다만 운영 중인 시스템 다수가 전통 Spring 기반이라, 당분간은 두 방식이 공존한다고 보는 편이 현실적이다.

초급 개발자가 헷갈리는 부분

  • "Spring Boot가 Spring을 대체한다"는 오해. Boot는 Spring 위의 자동화 도구이지 별개 프레임워크가 아니다.
  • Boot만 배우면 전통 Spring 프로젝트에서 길을 잃는 경우. 공공 SI에 투입되면 XML 설정을 읽을 줄 알아야 한다.
  • "공공이 전통 Spring을 쓰는 건 무조건 낡아서"라는 단정. 표준·산출물·운영 표준화라는 환경 요인이 더 크다.
  • Boot의 자동 설정을 "마법"으로 여기고 내부를 안 보는 경우. 문제가 생기면 결국 어떤 빈이 자동 등록됐는지 봐야 한다.

FAQ

Q1. Spring Boot는 Spring Framework를 대체하나요?

아니다. Spring Framework 위에서 설정을 자동화해 주는 도구다. Boot를 써도 내부는 Spring Framework가 동작한다.

Q2. 공공 SI에 가면 Spring Boot를 못 쓰나요?

사업과 표준프레임워크 버전에 따라 다르다. 운영·유지보수 중인 시스템은 전통 Spring이 많지만, 신규 사업에서는 Boot 채택이 늘고 있다.

Q3. 초급 개발자는 무엇부터 배워야 하나요?

Spring의 핵심 개념(IoC/DI, 빈, MVC)을 먼저 이해하면 둘 다 수월하다. 공공 SI 취업을 본다면 XML 설정도 읽을 줄 알아야 한다.

Q4. Spring Boot에서도 외부 Tomcat에 배포할 수 있나요?

가능하다. 내장 WAS 대신 WAR로 빌드해 외부 Tomcat에 올리는 방식도 지원한다. 공공 운영 환경에서 자주 쓰는 절충안이다.

Q5. eGovFramework는 Spring Boot를 지원하나요?

버전에 따라 다르며 Boot 기반 지원이 확장되는 추세다. 다만 발주 기준과 기존 시스템에 따라 전통 Spring 방식이 유지되는 사업도 많다. 사업별 표준을 확인해야 한다.

정리

Spring Framework Spring Boot 차이는 "설정을 직접 하느냐, 자동에 맡기느냐"로 요약된다. 전통 Spring은 XML/Java Config로 모든 설정을 드러내 통제력과 투명성이 높고, Spring Boot는 자동 설정과 starter로 빠르게 시작할 수 있다. 공공 SI/SM에서 전통 Spring이 여전히 많은 건 기술의 우열이 아니라 표준프레임워크 버전, 기존 시스템 일관성, 산출물 체계, 운영 표준화 같은 환경 요인 때문이다. 신규 사업을 중심으로 Boot 채택이 늘고 있으므로, 초급 개발자라면 Spring 핵심 개념을 바탕에 두고 두 방식을 모두 읽을 수 있게 준비하는 것이 실무에서 가장 유리하다.

반응형