[IntelliJ] 스프링 프로젝트 구성 설정

Step by step!
∙Step 01 ‣ 스프링 프로젝트 생성
∙Step 02 ‣ (현재 글) 스프링 프로젝트 구성 설정

 

 스프링 프로젝트 생성 글에서 메이븐(Maven) 빌드 도구와 스프링 MVC(Spring MVC) 프레임워크를 이용해서 스프링 프로젝트를 생성하는 방법에 대해 알아봤습니다. 프로젝트를 만들기만 하였기 때문에 메이븐 관련 파일 pom.xml과 스프링 MVC 프레임워크에 관련된 web.xml, dispatcher-servlet.xml, applicationContext.xml 파일만 생성된 상태에서 추가적인 작업 없이 글을 끝냈습니다. 이번 글에서는 스프링 프로젝트 구성에 대해 파악하고 설정해보도록 하겠습니다.

 

 제가 작성하는 스프링에 관련된 글은 실습을 기반으로 설명하고 있으며, 이론 설명은 실습을 진행할 수 있는 수준에서 설명하고 있습니다.

스프링의 이론은 훌륭한 개발자 분들께서 자세하고 정확하게 설명한 글이 많기 때문에 제 글을 읽다가 부족한 부분은 번거롭더라도 검색 혹은 개념 서적을 통해서 습득하는 걸 권장드립니다.


macOS 운영체제에서 IntelliJ IDEA Ultimate(Version 2020.1.1)를 이용하여 진행하였습니다.

 Windows에서도 IntelliJ IDEA의 GUI는 거의 동일하기 때문에 큰 어려움은 없을 거예요.

그리고 해당 글은 대부분 스프링 프레임워크에 대한 설명이기 때문에 IDE가 다르다고 해서 문제가 되지는 않습니다.

하지만, 약간의 몇몇 부분에 대해서는 IDE에 따라 설정 방식이 다른 부분이 있을 수 있습니다.

(IDE에 따른 설정 방식은 검색을 통해 확인 부탁드립니다.)


 "스프링 프레임워크 구조 또는 동작 방식"에 대해 검색을 하면 관련 개념을 습득할 수 있습니다. 이 부분에 대한 자세한 이론 설명은 생략하도록 하고 인텔리제이(IntelliJ IDEA)와 이클립스(Eclipse)에서 스프링 프로젝트 생성 후 구성되는 디렉토리와 파일을 비교해서 확인해보겠습니다. 비교해서 설명하는 이유는 인텔리제이와 이클립스 또는 STS에서 생성되는 디렉토리 구성과 파일 명이 다르기 때문입니다. 저는 이해도가 없어서 헷갈리기도 했지만, 관련 내용을 검색해도 서로 다른 정보 때문에 괜한 찝찝함을 갖고 있었기 때문입니다. (특히 스프링 관련 서적을 확인해보면 이클립스(STS) 기반으로 작성되어 있는 경우가 대부분인데 인텔리제이에서 스프링(Spring)이 공식으로 지원하는 STS 구조로 프로젝트를 구성하여 IDE의 초기 구성 차이점에 대해 이해하고, 스프링 프로젝트를 진행하는데 찝찝함을 없애고 실습을 원활히 따라갈 수 있는게 목적입니다.)

 

 아래 [그림 1]과 [그림 2]를 참고해서 설명을 시작하도록 하겠습니다. (1)번 빨간박스 영역들은 디렉토리를 나타낸 것이고, (2)번 파란박스 영역들은 XML 파일을 나타낸 것입니다.


[그림 1] 인텔리제이에서 스프링 프로젝트를 생성했을 때 구성되는 디렉토리와 XML 파일 [그림 2] 이클립스(STS)에서 스프링 프로젝트를 생성했을 때 구성되는 디렉토리와 XML 파일 (인텔리제이를 이용하여 예시를 구현한 화면)

디렉토리(빨간박스 영역)부터 확인해보도록 하겠습니다.

아래 표를 참고하면 두 개의 IDE가 생성하는 디렉토리의 차이를 쉽게 이해할 수 있을 거예요.

디렉토리 인텔리제이 이클립스 또는 STS
소스 루트(Source Root) src/main/java src/main/java
리소스 루트(Resources Root) src/main/resources src/main/resources
테스트 소스 루트(Test Sources Root) src/test/java src/test/java
테스트 리소스 루트(Test Resources Root) - src/test/resources
웹 리소스(Web Resources) web src/main/webapp
기타 web/WEB-INF/ src/webapp/WEB-INF/classes
src/webapp/WEB-INF/spring/appServlet/
src/webapp/WEB-INF/views/

두 개의 IDE를 비교해보면 인텔리제이에서는 생성되지 않은 디렉토리가 있을 뿐 아니라

인텔리제이([그림 1])에서는 "src" 디렉토리와 같은 레벨에 웹 리소스 디렉토리(web)가 생성되고,

이클립스([그림 2])에서는 "src/main/" 디렉토리 하위에 웹 리소스 디렉토리(webapp)가 생성된 걸 확인할 수 있습니다.

 

 인텔리제이에서 [그림 1]과 같이 구성된 디렉토리 구조에서 생성되지 않은 디렉토리를 추가하고 설정을 통해 프로젝트를 진행하는데 문제는 없습니다. 하지만 스프링(Spring)에서 공식으로 제공하는 STS 디렉토리 구조를 따라 웹 리소스 디렉토리(web)를 "src/main/" 디렉토리 하위로 이동시키고 디렉토리 명을 "webapp"으로 변경하여 진행하도록 하겠습니다.

 변경하여 진행하는 이유는 많은 개발자들이 STS 디렉토리 구조 기반으로 스프링 프로젝트를 진행하고 있기 때문(물론 전부 그런 것은 아니고 프로젝트에 따라 디렉토리 구조는 다르게 사용할 수 있습니다.)이고, 인텔리제이에서 설정을 한 개라도 직접 해보기 위함입니다.

더보기
[그림 3] war 플러그인 설정에 따른 디렉토리 기본 경로

추가적인 이유로는 war 플러그인에서 src/main/webapp 디렉토리를 기본 경로로 지정하고 있습니다. 그렇기 때문에 패키징 할 때 웹 리소스 디렉토리(webapp) 경로에 대한 설정을 따로 신경 쓰지 않고 진행할 수 있습니다. (기본 경로를 이용하지 않고 특정 경로를 설정하여 사용할 수도 있습니다.)

Apache Maven WAR Plugin Document ‣ maven.apache.org/plugins/maven-war-plugin/war-mojo.html


이번에는 XML 파일(파란박스 영역)에 대한 차이를 알아보도록 하겠습니다.

 

역할 인텔리제이 이클립스 또는 STS
WAS(Web Application Server, Tomcat)가 실행되고 웹 어플리케이션에 필요한 설정을 구성하는 XML 파일 web.xml web.xml
[애플리케이션 컨텍스트(Application Context) 파일]
웹 애플리케이션 공통으로 사용되는 빈(bean)을 설정하는 XML 파일

‣ 서로 다른 dispatcher-servlet.xml(servlet-context.xml)에서 공유해야 하는 빈을 설정한다.
applicationContext.xml root-context.xml
[서블릿 컨텍스트(Servlet Context) 파일]
필요한 상황에 맞춰 사용되는 빈(bean)을 설정하는 XML 파일, 일반적으로 Web 관련된 빈을 설정한다.

‣ applicationContext.xml(root-context.xml)에 동일한 빈이 존재하는 경우에는 dispatcher-servlet.xml(servlet-context.xml) 설정된 빈이 우선적으로 적용된다.
dispatcher-servlet.xml servlet-context.xml
메이븐 설정 파일이며, 라이브러리 의존성 관리와 패키징 등 관련 설정을 구성하는 XML 파일 pom.xml pom.xml

 위의 표를 참고하여 각 파일이 어떤 역할을 하는지 읽어보세요. 인텔리제이와 이클립스에서 생성되는 파일 명이 다를 수 있고, 개발자에 따라 파일 명을 다르게 설정할 수 있기 때문에 기본으로 생성되는 파일 명을 기준으로 비교하여 표를 작성해봤습니다. ("web.xml"과 "pom.xml"은 동일하게 사용됩니다.)

 

 디렉토리 설명에서 언급한 것처럼 XML 파일 또한 인텔리제이에서 생성된 컨텍스트 파일(applicationContext.xml)과 서블릿 컨텍스트 파일(dispatcher-servlet.xml)을 STS에서 생성한 파일 명을 기준으로 변경하고 디렉토리 위치를 설정하여 프로젝트를 구성하도록 하겠습니다. (참고, "web.xml"에서 각 컨텍스트 파일을 설정하기 때문에 파일 명이 달라도 큰 의미가 없습니다. 특히 컨텍스트 분리 전략에 따라서 추가적인 컨텍스트 파일을 사용할 수도 있습니다.)

 

 두 개의 IDE에 따른 디렉토리와 XML 파일에 대해 간략하게 비교해봤습니다. 위에서 설명드린 것처럼 스프링 프로젝트 생성에 이어서 인텔리제이에서 기본으로 생성된 디렉토리와 XML 파일의 구성을 스프링에서 공식으로 지원하는 STS 구성으로 변경해보도록 하겠습니다.


[그림 4] web 디렉토리 경로 변경 전

web 디렉토리 경로를 src/main 디렉토리 하위로 이동하겠습니다.

web 디렉토리를 클릭 후 F6 단축키를 눌러주세요.


[그림 5] 변경하는 디렉토리 경로 설정

Move 팝업 창이 나타나면 해당 프로젝트의 "/src/main" 디렉토리 경로를 지정해주세요.


[그림 6] web 디렉토리 경로 변경 후

web 디렉토리를  "src/main" 디렉토리 하위로 이동시켰습니다.

이번에는 "web" 디렉토리 이름을 "webapp"으로 변경하기 위해서 web 디렉토리를 클릭 후 Shift+F6 단축키를 눌러주세요.


[그림 7] "web" 디렉토리 이름을 "webapp"으로 변경

Rename 팝업 창이 나타나면 "web"을 "webapp"으로 변경해주세요.


[그림 8] "webapp" 디렉토리 이름으로 변경 후

"webapp"으로 디렉토리 이름이 변경되었습니다.

이번에는 웹 리소스 디렉토리 경로를 설정해야 합니다.

command+;(Ctrl+Alt+Shift+S) 단축키를 눌러주세요.


[그림 9] 웹 리소스 디렉토리 경로 설정 전

Project Structure 창이 나타나면 Project Settings 목록에서 Modules > Web을 선택하면

Web Resource Directory 경로가 빨간색으로 표시되는 걸 확인할 수 있습니다.

빨간색으로 표시되는 경로를 더블클릭해주세요.


[그림 10] 웹 리소스 디렉토리 경로 설정

Web Resource Directory Path 팝업 창이 나타나면 웹 리소스 디렉토리 경로를 해당 프로젝트의

"/src/main/webapp" 디렉토리 경로로 설정해주세요.


[그림 11] 웹 리소스 디렉토리 경로 설정 후

웹 리소스 디렉토리 경로를 "/src/main/webapp" 디렉토리 위치로 설정이 정상적으로 완료되면

빨간색 표시가 사라집니다.


[그림 12] 디렉토리 생성 전

웹 리소스 디렉토리 경로를 "/src/main/webapp"으로 설정을 완료했으면

컨텍스트 파일을 관리할 디렉토리를 생성하도록 하겠습니다.

 

WEB-INF 디렉토리를 클릭 후 command+N(Alt+Insert) 단축키를 눌러서

팝업 메뉴를 활성화하고 Directory를 클릭해주세요.


[그림 13] 디렉토리 생성

/webapp/WEB-INF 디렉토리 하위에 스프링 컨텍스트 파일(Application Context, Servlet Context)을 관리할 spring 디렉토리을 생성하고, spring 디렉토리 하위에 서블릿 컨텍스트 파일을 관리할 appServlet 디렉토리를 생성해주세요.

 

"spring/appServlet"으로 디렉토리 이름을 입력하면

spring 디렉토리를 생성하고 하위에 appServlet 디렉토리를 한 번에 생성할 수 있습니다.


[그림 14] 디렉토리 생성 후

"src/main/webapp/WEB-INF/spring/appServlet" 디렉토리가 생성됐습니다.

 

[그림 12] ~ [그림 14]의 과정처럼

/WEB-INF 디렉토리 하위에 views 디렉토리를 생성하고,

/test 디렉토리 하위에 resources 디렉토리를 생성해주세요.


[그림 15] 스프링 프로젝트 디렉토리 구성 완료

인텔리제이에서 생성한 스프링 프로젝트의 디렉토리 구성을 STS 디렉토리 구성처럼 변경 완료했습니다.

 

[그림 15]는 디렉토리 구성이 최종적으로 완료된 상태입니다.

(현재 상황에서 불필요한 디렉토리는 추가하지 않았습니다. 앞으로 프로젝트가 진행됨에 따라 필요한 디렉토리는 상황에 맞춰 추가적으로 생성하겠습니다.)

더보기
[그림 16] 테스트 리소스 루트 설정

/test 디렉토리 하위에 생성한 resources 디렉토리 모양이 일반 디렉토리 모양인 경우라면 테스트 리소스 루트(Test Resources Root) 설정이 안 된 것입니다. 이런 경우에는 resources 디렉토리를 우클릭 후 Mark Directory as > Test Resources Root를 클릭해서 설정해주세요.

 

이어서 컨텍스트 파일 이름을 변경하고 파일 경로를 컨텍스트를 관리하기 위해 생성한 디렉토리 위치로 변경하겠습니다.


[그림 17] 컨텍스트 파일 명 변경 전

두 개의 컨텍스트 파일 명을 STS의 컨텍스트 파일 명으로 변경하도록 하겠습니다.

[그림 6] ~ [그림 7]에서 진행했던 것처럼 컨텍스트 파일을 클릭 후 Shift+F6 단축키를 눌러서 각 파일명을 변경해주세요.

 

applicationContext.xml → root-context.xml

dispatcher-servlet.xml → servlet-context.xml


[그림 18] 컨텍스트 파일 명 변경 후

 

각 컨텍스트 파일 명을 변경했으면

[그림 4 ] ~ [그림 5]에서 진행했던 것처럼 F6 단축키를 눌러서 디렉토리 경로를 변경해주도록 하겠습니다.

 

애플리케이션 컨텍스트 파일(root-context.xml)/spring 디렉토리 하위로 이동하고,

서블릿 컨텍스트 파일(servlet-context.xml) 파일은 /spring/appServlet 디렉토리 하위로 이동해주세요.

(추가적으로 index.jsp 파일은 /views 디렉토리 하위로 이동해주세요.

index.jsp 파일은 스프링의 컨텍스트 파일이 아닌 JSP 파일입니다.)


[그림 19] 컨텍스트 파일의 디렉토리 경로 변경 후

인텔리제이에서 생성된 컨텍스트 파일의 이름과 디렉토리 경로를 STS에서 생성된 스프링 프로젝트 구성처럼 변경 완료했습니다.

 

[그림 19]는 모든 구성이 완료된 스프링 프로젝트입니다.

디렉토리와 컨텍스트 파일에 생기는 빨간 줄은 스프링 설정이 아직 안된 상태라서 생기는 것입니다.

다음 포스트는 스프링 설정을 진행해서 빨간 줄은 모두 없애고 프로젝트를 실행해보도록 하겠습니다.


현재까지의 포스트에서는 스프링 프로젝트를 생성하고 구성까지 완료했습니다.

스프링 프로젝트 구성 설정은 인텔리제이에서 생성되는 구성을 스프링(Spring)에서 공식으로 제공하는 STS를 기준으로 변경했습니다.

 

한마디,
 저도 이해한 내용을 바탕으로 직접 실습해보고 관련 글을 작성하였습니다. 공부를 하면서 저의 관점에서 이해하는 데 어려움이 있었던 포인트를 기준으로 글을 작성하기 때문에 제 글이 도움이 안될 수도 있고 혹은 틀린 내용이 있을 수도 있습니다. 이런 부분은 댓글을 이용해서 피드백 부탁드립니다. 동일한 개념이라도 각자의 관점에서 이해하는 부분이 다를 수 있기 때문에 서로 대화를 통해서 올바른 지식을 공유하면 좋겠습니다. 감사합니다.

● spring-project-initialize Repository ‣ github.com/WHITEPAEK/spring-project-initialize

댓글