이 글은 2022년 7월 기준 기록입니다.
Spring을 시작할 때 가장 먼저 부딪히는 것은 프레임워크 자체가 아니라 개발 환경입니다. 어떤 IDE를 쓸지, 어떤 버전을 받을지, 그리고 내려받은 프로젝트의 pom.xml을 어디까지 손봐야 하는지가 먼저 정리되어야 그 다음으로 넘어갈 수 있습니다.
Spring은 IDE까지 함께 배포한다
Spring은 이클립스를 기반으로 스프링 프레임워크 환경을 포함한 STS(Spring Tool Suite)를 배포합니다. 배포처는 spring.io/tools입니다.
여기서 갈림길이 하나 있습니다. 최신인 STS4는 스프링 부트를 위한 버전이고, MVC Legacy 프로젝트를 다루려면 이클립스 4.16 기반의 STS3를 받아야 합니다.
https://download.springsource.com/release/STS/3.9.15.RELEASE/dist/e4.16/spring-tool-suite-3.9.15.RELEASE-e4.16.0-win32-x86_64.zip
Spring은 다른 IDE에 대해서도 도구를 제공하지만, 전자정부프레임워크가 이클립스를 기반으로 하고 있어 이클립스 계열을 선택할 이유가 분명합니다.
인코딩은 프로젝트를 만들기 전에 맞춘다
STS를 처음 실행하면 Workspace 위치를 지정하게 됩니다. 그 다음에 바로 할 일이 인코딩 설정입니다.
[Window] - [Preferences]에서 encoding으로 검색해 [General] - [Workspace]로 들어간 뒤, 하단의 [Text file encoding]을 [Default (MS949)]가 아니라 [Other]에서 UTF-8로 지정합니다. 같은 화면의 [New text file line delimiter]는 Default (Windows)로 둡니다.
한글이 깨지는 문제는 프로젝트를 다 만들어 놓은 뒤에 고치려 하면 이미 저장된 파일들까지 따라와 번거로워집니다. 그래서 이 설정은 첫 작업으로 처리합니다.
pom.xml은 두 덩어리로 읽는다
Maven 프로젝트의 pom.xml은 여러 태그가 섞여 있어 처음 열면 막막하지만, 실제로 손대게 되는 곳은 properties와 dependencies 두 덩어리입니다.
properties는 pom.xml 안의 변수다
<properties> 부분은 pom.xml에서 재사용을 위해 변수처럼 사용할 값들을 지정하는 구간입니다. 태그 이름(<> 사이 부분)은 자유롭게 지정할 수 있습니다.
프로젝트 생성 직후의 기본값은 다음과 같습니다.
<properties>
<java-version>1.6</java-version>
<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
여기서 정의한 이름은 pom.xml 곳곳에서 ${java-version}, ${org.springframework-version} 같은 형태로 참조됩니다. 버전을 한 곳에서 바꾸면 참조하는 모든 자리가 함께 바뀌는 구조입니다.
dependencies는 필요한 라이브러리 목록이다
<dependencies> 부분은 프로젝트에 필요한 라이브러리들에 대한 정보를 작성하는 부분이고, 각 <dependency> 하나가 라이브러리 하나의 정보를 의미합니다.
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
...
</dependencies>
이 내용을 직접 다운로드해서 넣는 것이 아니라, 프로젝트 관리 도구(maven, gradle 등)가 해당 내용을 읽어서 자동으로 다운로드합니다. 받아 온 파일은 사용자 계정 폴더의 .m2/repository 내부에 쌓입니다.
작성할 내용은 외울 필요가 없습니다. MVN Repository가 라이브러리별로 복사해서 붙여 넣을 수 있는 형태로 제공합니다.
한 가지 더 봐 둘 태그는 <scope>입니다. 해당 라이브러리가 실제 배포 시 포함되어야 하는지 아닌지를 결정하며, test로 작성하면 배포에서 제외됩니다.
버전을 올릴 때는 properties 한 줄만 바꾼다
기본 생성된 프로젝트는 자바 1.6, Spring 3.1.1.RELEASE를 쓰도록 되어 있습니다. 이를 최신에 가깝게 올리는 작업이 남았습니다.
자바 버전
<java-version>을 1.6에서 1.8로 바꿉니다.
<java-version>1.8</java-version>
이 값은 build 영역의 maven-compiler-plugin 설정에서 참조되고 있으므로, 컴파일 대상 버전이 함께 따라 올라갑니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
설정을 바꿨으면 Maven 업데이트가 필요하다
pom.xml을 수정하는 것만으로 끝나지 않습니다. 프로젝트를 우클릭해 [Maven] - [Update Project…](단축키 Alt+F5)를 실행해야 변경된 의존성이 실제로 내려받아지고 프로젝트 설정에 반영됩니다.
스프링 컨텍스트 버전
Spring 자체의 버전도 마찬가지로 properties에서 처리합니다. MVN Repository에서 spring-context를 검색하면 버전 목록과 함께 pom.xml에 붙여 넣을 xml 코드를 확인할 수 있습니다. 여기서 확인한 버전으로 값을 바꿉니다.
<org.springframework-version>5.3.21</org.springframework-version>
servlet-api, jsp-api 등도 같은 방식으로 최신 버전을 확인해 변경합니다.
변경이 실제로 먹혔는지는 Maven Dependencies에서 확인한다
pom.xml을 고쳤다고 해서 반영되었다고 믿지 않고, 결과를 눈으로 확인합니다. Package Explorer의 Maven Dependencies 항목을 펼치면 실제로 프로젝트에 붙은 jar 목록이 보입니다.
spring-context-5.3.21.jar를 비롯한 Spring 계열 jar가 5.3.21로 바뀌어 있는지javax.servlet-api-4.0.1.jar,javax.servlet.jsp-api-2.3.3.jar가 들어와 있는지- JRE System Library가
[JavaSE-1.8]로 표시되는지
이 세 가지가 맞으면 pom.xml의 변경이 프로젝트에 제대로 반영된 것입니다.
'IT·테크 > 개발' 카테고리의 다른 글
| MyBatis 설정과 서블릿 필터 — SQL을 XML로 분리하고 요청을 가로채기 (0) | 2026.08.01 |
|---|---|
| Java System.out·System.err를 SLF4J 로거로 리다이렉트하기 (0) | 2026.07.29 |
| Docker Swarm — 여러 도커 호스트를 하나의 클러스터로 묶기 (0) | 2026.07.28 |
| Java 멀티 스레드 — Thread와 Runnable로 작업 만들고 synchronized로 지키기 (0) | 2026.07.28 |
| Java 입출력 — 바이트·문자 스트림과 보조 스트림으로 기능 얹기 (0) | 2026.07.28 |