[Migration] Spring Boot 프로젝트 마이그레이션 시작

2026. 5. 11. 16:46·Migration

마이그레이션 배경

팀 프로젝트로 개발한 학사관리 LMS는 Spring MVC, Maven, MariaDB 기반으로 구현되었다. 기능 구현 자체에는 문제가 없었지만, 실무에서는 이와 다른 기술 스택을 주로 사용한다는 것을 알게 되었다.

Spring Boot의 자동설정으로 생산성을 높이고, Gradle의 빠른 빌드 속도와 간결한 문법을 경험하며, MySQL을 직접 다뤄보고 싶었다. 단순히 동작하는 코드를 넘어, 실무 환경에 가까운 구조로 직접 전환해봄으로써 각 기술의 차이와 장점을 익히고자 마이그레이션을 시작했다.

또한 전환 과정에서 기존 기능이 정상적으로 동작하는지 검증하기 위해 단위 테스트와 통합 테스트를 작성할 예정이다. 단위 테스트로 각 서비스 로직의 동작을 독립적으로 검증하고, 통합 테스트로 실제 DB와 연동된 전체 흐름을 확인하여 Spring Boot 전환 후의 정합성을 1차적으로 검증할 계획이다.


Spring MVC → Spring Boot

💡 Spring MVC는 web.xml, dispatcher-servlet.xml, DBConfig.java 등 XML과 Java 설정 파일을 직접 작성해야 했다. 반면 Spring Boot는 이런 설정들을 자동으로 처리해주는 Auto Configuration을 제공해서 개발 생산성이 훨씬 높았으며, 이에 따라 불 필요한 파일들을 제거할 수 있엇다.

 

Auto Configuration

💡 Spring Boot가 classpath에 있는 의존성을 감지하여, 필요한 빈을 자동으로 등록해주는 기능이다. 예를 들어 spring-boot-starter-web을 추가하면 DispatcherServlet, Viewresolver 등을 자동으로 설정해준다.

classpath : Java가 클래스 파일을 찾는 경로

@ServletComponentScan

💡 @WebFilter, @WebServlet, @WebListener 같은 서블릿 관련 어노테이션을 Spring Boot에서 인식하게 해주는 어노테이션이다. Sitemesh가 @WebFilter로 구현되어 있어 이 어노테이션 없이는 필터가 등록되지 않는다.

@MapperScan

💡MyBatis Mapper 인터페이스가 있는 패키지를 지정하면 해당 패키지의 Mapper를 자동으로 스캔하여 Spring Bean으로 등록해주는 어노테이션이다. 기존 Spring MVC에서는 MapperScannerConfigurer를 XML 또는 Java Config로 직접 등록했지만, Spring Boot에서는 @MapperScan 하나로 대체된다.

정리

✔️ web.xml 제거 → Spring Boot 자동 설정으로 대체
✔️ DBConfig.java 제거 → application.properties로 대체
✔️ javax.* → jakarta.* 패키지 전환 (Spring Boot 3.x)
      ↳ Spring Boot 3.x부터 Java EE가 Jakarta EE로 이전되며, 패키지 명이 변경됐다. 단순 네이밍 변경이지만 Springboot 3.x를 사용하려면 필수적으로 전환해야 한다.
✔️@ServletComponentScan 추가로 Sitemesh 필터 등록
✔️@MapperScan 추가로 MyBatis Mapper 등록

Maven → Gradle 

💡 Maven은 pom.xml에 XML로 의존성을 관리하는데 가독성이 낮고 빌드 속도가 느리다. Gradle은 Groovy 기반의 간결한 문법으로 의존성을 관리하고, 증분 빌드를 지원해서 빌드 속도가 빠르다. 특히 Android, Spring Boot 등 최신 프레임워크에서 Gradle을 표준으로 채택하고 있어 실무에서 많이 사용된다.

Groovy

💡 build.gradle에서 쓰는 언어로 Maven의 pom.xml은 XML로 작성하는데, Gradle은 Groovy(또는 Kotlin)로 작성한다.

Maven.pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>3.0.0</version>
</dependency>

Gradle

implementation 'org.springframework.boot:spring-boot-starter-web'

증분 빌드

💡 증분 빌드는 변경된 파일만 다시 빌드하는 방식이다. Maven은 빌드할 때 전체를 다시 빌드해요. 파일 하나 바꿔도 처음부터 다시 빌드하는데 Gradle은 바뀐 부분만 빌드한다. 즉 파일 하나 바꾸면 그 파일과 관련된 것만 다시 빌드해서 프로젝트가 커질수록 Gradle이 훨씬 빠르다.

정리

✔️ Gradle 프로젝트로 새로 생성
✔️ 기존 pom.xml 의존성을 build.gradle의 Spring Boot Starter로 교체
✔️ 불필요한 의존성 제거 및 정리

MariaDB → MySQL

 

팀 프로젝트에서는 MariaDB를 사용했지만, 실무에서는 MySQL을 더 많이 사용한다는 이야기를 들었다. MariaDB와 MySQL은 호환성이 높지만 완전히 동일하지 않으며, AWS RDS, Google Cloud 등 클라우드 환경에서 MySQL이 표준처럼 사용되고, 대형 서비스에서도 MySQL이 더 많이 채택되어 있다. 그렇기에 나도 실제 운영 환경에 가까운 DB를 직접 경험해보고 싶었다.

정리

✔️ MySQL 포트 변경

'Migration' 카테고리의 다른 글

[Migration] Spring Boot 마이그레이션 1단계 - 테스트 코드 작성  (0) 2026.05.25
[회고] 첫 팀 프로젝트를 마치며  (0) 2026.05.24
'Migration' 카테고리의 다른 글
  • [Migration] Spring Boot 마이그레이션 1단계 - 테스트 코드 작성
  • [회고] 첫 팀 프로젝트를 마치며
mins0on
mins0on
비전공자의 백엔드 개발자 공부 기록 일지입니다.
  • mins0on
    꾸준함의 가치
    mins0on
  • 전체
    오늘
    어제
    • 분류 전체보기 (65) N
      • Java (7)
      • Spring (9)
      • DataBase (1)
      • Algorithm (1)
      • Network (6)
      • 운영체제 (2)
      • 코드 분석 (26)
      • Trouble Shooting (4) N
      • Project (1)
      • Migration (3)
      • 기타 (1)
      • 개념 정리 (3)
      • Coding Test (1)
        • Baekjoon (1)
  • hELLO· Designed By정상우.v4.10.6
mins0on
[Migration] Spring Boot 프로젝트 마이그레이션 시작
상단으로

티스토리툴바