본문 바로가기
Spring

Spring Framework (4) - 개발 환경 설정(Pom.xml 수정, Spring 최신버전 설정, 배포환경별 설정)

by 이도현 2021. 5. 19.

 

 

 

1. pom.xml

 

    지금까지의 과정을 따라왔으면 일단 개발을 위한 기본적인 설정은 완료된 것이다. 하지만 세부적인 설정을 더 해야 최신버전의 Spring Framework를 사용할 수 있다. 이클립스에서 자동 생성한 Spring MVC Project의 기본 설정을 몇 가지 수정해야한다. 

 

    수정을 위해서 찾아야 하는 파일은 pom.xml이라는 파일이다. pom이 무엇인지 이해하기 위해서는 Spring Framework가 빌드 자동화 툴로 maven을 사용하고 있다는 것을 알아야 한다. (현재는 maven보다 Gradle이라는 빌드툴을 사용하는 것으로 변해가는 추세이고, 이미 안드로이드 개발, Spring Boot는 Gradle이 기본 설정값으로 되어 있다) 빌드 자동화 툴에 대한 것은 추후 Maven에 대해 설명하면서 정리한다. 

 

    POM이 무엇인지에 대한 설명은 다음 링크에서 알 수 있다. 

 

https://maven.apache.org/guides/introduction/introduction-to-the-pom.html

 

    pom.xml은 Spring Framework가 가진 특성이 아니라 maven을 Spring Framework에서 채용했기 때문에 나타난다. 즉, 빌드툴을 Gradle로 사용하면 pom.xml이 아니라 build.gradle이라는 파일이 해당 기능을 수행한다. 이에 대해서도 추후 Maven과 Gradle에 대해 설명하면서 정리하기로 하고 여기서는 현재 생성된 프로젝트에서 pom.xml 파일의 필수 수정해야 하는 부분에 대해서만 설명한다. 

 

    지금까지의 과정을 따라왔다면 자바 버전은 1.8또는 그 이상의 버전을 사용하고 있을 것이다. 하지만 이클립스에서 좌측 네비게이션 창에서 생성된 내 프로젝트를 더블클릭하여 내부의 파일들을 펼쳐보면 "JRE System Library"옆에 표기된 자버 버전이 "JavaSE-1.6"으로 설정되어 있음을 알 수 있다. 이 것은 이클립스에서 프로젝트를 자동으로 생성할 경우 생기는 현상인데, 우리는 우리 버전에 맞도록 설정을 해두어야 추후에 문제가 발생하지 않는다. 현재 나는 자바 버전 1.8을 사용하고 있으므로 이를 수정하는 방법을 적어 둔다. 

 

    자바 버전을 수정하기 위해  pom.xml의 하단으로 쭉 내려가면 <build>라고 되어 있는 부분이 있고, 그 밑에 빌드 관련된 설정들이 기술되어 있다. 그리고 <build> 밑의 <plugins> 하부에 기술된 <plugin>들을 순서대로 보면 <groupId>org.apache.maven.plugins</groupId>라고 되어 있는 부분이 나온다. 이 부분에 대한 설명은 하기한 링크를 통해 찾아볼 수 있다.

 

http://maven.apache.org/plugins/maven-compiler-plugin/

 

    이 부분은 <artifactId>maven-compiler-plugin</artifactId>에 나와 있듯 Maven의 compiler에 대한 플러그인에 대한 설정인데, 여기서 <configuration> 밑의 <source>와 <target>의 숫자를 1.6에서 내가 사용하고 있는 자바 버전으로 바꿔주는 과정이 필요하다. 가장 먼저 스크롤을 제일 위로 올려서 <properties>라는 항목에서 <java-version> 뒤에 있는 1.6을 1.8로 바꿔주자.

 

<java-version>1.8</java-version>

 

    <></> 이런 모양의 태그는 태그의 시작을 <프로퍼티명>으로 시작하고 <프로퍼티명/>으로 끝을 내며, 값을 그 사이에 넣어서 사용한다. 이 프로퍼티의 값을 사용하고 싶을 때는 ${java-version} 와 같은 형식으로 사용할 수 있다. 

 

    이제 다시 스크롤을 제일 하단으로 내려서 아까 언급한 <configuration>의 부분을 다음과 같이 수정한다. 

    <source>${java-version}</source>

    <target>${java-version}</target>

 

    이렇게 수정을 하면 프로젝트 전체에 적용을 해주어야 한다. 실제로 이 수정을 하고 Ctrl + S를 눌러 pom.xml 파일을 저장하면 이클립스 하단에 Problems라는 항목에 "Build path specifies execution environment JavaSE-1.6. There are no JREs installed in the workspace that are strictly compatible with this environment."와 "The compiler compliance specified is 1.6 but a JRE 1.8 is used"라고 나오게 된다. 우리는 Maven의 설정파일인 pom.xml을 수정하였으므로, 이에 대한 적용이 필요하다. 이를 위해서 이클립스 좌측 장에서 내 프로젝트를 좌클릭한 후 우클릭하여 나오는 메뉴들을 찾아보면 밑 쪽에 Maven이라는 항목이 보일 것이다. (만약 보이지 않는다면 화면 우상단에 나뭇잎모양의 아이콘이 활성화 되어 있는지 확인하고, 활성화되어 있지 않다면 나뭇잎 아이콘을 좌클릭하여 활성화 시켜야 한다. 이는 이클립스에 설치한 STS 플러그인으로 코드 작성 등의 작업을 하기 위한 것이다.) 이어서 Maven이라는 항목이 보였다면 우측의 추가 메뉴창에서 보이는 Project Update를 클릭하자. 정상적으로 클릭했다면 Update Maven Project라는 창이 뜰 것이다. 이 창의 하단에 보이는 OK버튼은 좌클릭하자. 

 

    그러면 잠시후 "JRE System Library"옆에 표기된 자버 버전이 "JavaSE-1.8"로 변경됨을 알 수 있을 것이다. 그리고 하단의 Problems 창에서 아까 있었던 오류 사항이 사라졌음을 확인할 수 있다. 

 

    이제 우리가 사용하는 스프링의 버전을 최신 버전으로 수정해야한다. 현재 적용되어 있는 버전의 값은 pom.xml 파일의 상단부에 <properties>항목에서 보이는 

 

<org.springframework-version>3.1.1.RELEASE</org.springframework-version>

 

에서 나오듯이, 3.1.1.RELEASE 버전이 적용되어 있다. 현재 기준(2020.08.08)의 최신 버전은 

 

https://spring.io/projects/spring-framework#learn

 

에서 볼 수 있는데, 현재 기준으로 5.2.8 버전이 최신이다. 스프링 버전이 너무 구버전이거나, 너무 신버전이면 다른 의존관계 설정을 할 때 버전이 맞지 않아 적용할 수 없는 문제들이 생기기 때문에 많이 숙고하고 결정해야 하지만, 나는 개인 프로젝트이므로 현재 시점의 최신버전을 적용하고자 한다. 

 

    방금 작업한 것과 같이 

 

https://mvnrepository.com/

 

으로 접속하여 Spring Context 를 검색하여 가장 위에 노출되는 Spring Context를 좌클릭한다. spring 홈페이지에서 확인한 것과 같이 5.2.8.RELEASE버전이 나와있다. 이 버전을 클릭하여 들어가면 하단에 

 

<dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-context</artifactId>

    <version>5.2.8.RELEASE</version>

</dependency>

 

이 나온다. 우리는 이클립스에서 프로젝트가 자동으로 생성했기 때문에, 스프링 버전을 프로퍼티값으로 관리하도록 설정되어 있다. 나는 5.2.8.RELEASE 버전을 적용할 것이므로 <properties>내의 <org.springframework-version> 값을 5.2.8.RELEASE 로 수정하였다. 수정을 하면 소스파일은 다음과 같이 된다. 

 

<org.springframework-version>5.2.8.RELEASE</org.springframework-version>

 

    여기서 굳이 수정하지 않아도 되지만 좀 더 깔끔한 작업을 위해 추가적으로 작업할 사항을 하나 더 쓰겠다. 프로젝트를 자동으로 생성하여 지금까지의 과정을 문제없이 따라왔다면, 별다른 수정을 한 것도 없는데 Problems 창에 Warnings 항목이 두 개 나타나 있을 수 있다. 만약 이 문제가 나타나지 않는다면 수정할 필요는 없다. 만약 "The file cannot be validated as the XML definition~"으로 시작되는 에러항목이 나온다면 Problems 창의 해당 오류에를 좌클릭한 후 우클릭을 한 후 "Go to Resource"항목을 좌클릭하자. 그러면 빨간 밑줄이 쳐진 "log4j.dtd"라는 부분이 보일 것이다. 이를 "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd"으로 수정하고 Ctrl + S를 눌러 저장하자. 잠시 후 Problems 창에서 문제 항목이 사라질 것이다. 또 하나 남은 오류도 위와 같은 과정으로 수정하자. 그러면 Problems 창에서 오류 항목이 모두 사라질 것이다. 이제 Problems에 표기되는 항목이 모두 사라졌으므로 문제가 발생하면 바로바로 해당 항목을 확인 할 수 있다. 우리가 방금 수정한 항목은 이 xml파일이 참조해야하는 dtd(Document Type Definition) 파일을 찾지 못해 생겨난 오류로 log4j에 대한 dtd파일을 온라인에서 찾을 수 있도록 위치를 지정해준 것이다.

 

    이제 로컬/개발/운영 환경의 구분에 따라 maven pofile 설정을 통해 적용하는 프로퍼티 파일을 다르게 하는 설정을 하려한다. 우리가 개발을 하게 되면 데이터베이스에 대한 접속 정보가 개발중일때 사용하는 테스트용 정보와 실제 운영 정보는 당연히 다르다. 개발간에 설정을 해놓지 않으면 운영서버에 배포를 해서도 배포용 데이터베이스 서버에서 데이터를 가져오지 않고 개발중 테스트용 데이터가 담긴 데이터베이스로 접속하는 상황이 발생할 수 있다. 때문에 개발용 프로퍼티파일과 운영용 프로퍼티 파일을 분리해 놓고 배포단계에서 설정을 통해 각각 상황에 맞는 프로퍼티 파일을 불러오도록 할 수 있다. 이를 구현하기 위해서는 spring profile을 활용하는 경우와 maven profile을 활용하는 두가지 경우가 있을 수 있는데, 여기서는 spring profile을 활용해서 사용하려 한다. 설정은 매우 간단하다.

 

    web.xml 에서 

<!-- Spring profiles -->

<context-param>

<param-name>spring.profiles.active</param-name>

<param-value>local</param-value><!-- 로컬/개발/운영 local/dev/prod -->

</context-param>

 

이 항목만 추가해준다.

 

프로퍼티를 읽어올때는 

 

<context:property-placeholder location="classpath:properties/${spring.profiles.active}.properties"/>

 

와 같이 읽어올 것인데, 이는 이후 실제로 적용할 때 설명하겠다.

 

    일단 여기까지로 개발 환경 설정에 대한 기본적인 작업은 끝났다고 할 수 있다. 이제 부터는 Spring Framework에서 제공하는 다양한 기능들을 어떻게 적용할 지에 대해서 알아보기로 한다.