[IntelliJ] 스프링 프로젝트 생성

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

 

 인텔리제이(IntelliJ IDEA)에서 스프링 프레임워크(Spring Framework) 프로젝트를 생성해보도록 하겠습니다. 스프링 프로젝트를 생성하는 방법을 찾아보면 설정 방식이 여러 개가 검색됩니다. 스프링에 대한 이해도가 높고 익숙하신 개발자에게는 어떤 방식을 검색하던 자신에게 필요한 부분을 쉽게 캐치해서 사용할 수 있습니다. 하지만 초급 개발자는 익숙하지 않기 때문에 필요한 부분을 캐치해서 적용하기란 쉽지 않습니다. 또한, 실무에서 이미 갖춰진 환경에서 개발을 진행하다 보면 직접 스프링을 설정할 기회가 거의 없을 수도 있기 때문에 많은 개발자분들이 필요할 때마다 검색해서 설정합니다. 그렇기 때문에 "나는 왜 잘 못할까?"라고 생각하실 필요 없습니다.

 본 포스팅은 개발 공부를 하고 있는 학생과 스프링 프로젝트 생성부터 진행해야 하는 초급 개발자 눈높이에서 자세하게 설명할 수 있도록 노력하겠습니다. 생성하는 방법에서 끝나는 게 아니라 개발할 수 있는 환경을 갖추기까지 설정 방법 포스팅을 이어서 작성하겠습니다.


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

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

하지만, IntelliJ IDEA는 Community 버전과는 차이가 있을 수 있기 때문에 Ultimate 버전을 사용하는 걸 권장합니다.


 Maven + Spring MVC를 이용하여 메이븐(Maven)과 스프링으로 설정된 프로젝트를 생성해보도록 하겠습니다. 제가 설명하는 방식 외에도 여러 개의 설정 방식이 있습니다. 하지만, 설정 순서가 다를 뿐이지 결과적으로는 똑같다고 생각합니다.

 "Spring MVC → Maven" 순서로 설정을 할 수도 있고,  "Maven"으로 프로젝트를 생성하고 "Spring MVC" 설정 없이 디렉토리 설정부터 직접 하나씩 구성할 수도 있습니다. 하지만 저는 Maven → Spring MVC 설정을 순서로 설정할 것이며 자동으로 디렉토리 구성까지 될 것입니다. 나중에 경험이 쌓이고 스프링에 대한 이해도가 높아진다면 다양한 방식으로 스프링 프로젝트를 생성할 수 있습니다.

 

("처음 공부할 때는  전체적인 설정을 직접 해보는 게 도움이 된다."라는 얘기도 있습니다. 이 방식으로는 저는 이해도가 부족한지 더 어렵게 느껴지더라고요. 자신이 사용하는 IDE에 대한 이해도도 어느 정도 받쳐줘야 가능하기 때문에 저는 IDE에서 제공하는 방식을 활용해보도록 하겠습니다.)

 

더보기

추가로 이클립스(Eclipse)에서는 "Dynamic Web Project" 또는 "Maven Project"를 생성하고 설정을 통해 스프링(Spring) 프로젝트를 만들 수 있습니다. 제가 설명하는 디렉토리 구성까지 완성된 스프링 프로젝트가 필요한 경우에는 "Spring Legacy Project"를 생성하면 기본적인 구조가 만들어진 프로젝트를 이용할 수 있습니다.


[그림 1] IntelliJ IDEA 실행 및 "Create New Project" 클릭

 인텔리제이를 실행하고 Create New Project를 클릭해서 새 프로젝트를 생성하도록 하겠습니다.


[그림 2] "Maven" 프로젝트 생성

프로젝트 템플릿 목록에서 메이븐(Maven)을 선택하고 프로젝트에서 사용할 Project SDK(JDK)를 선택해주세요.


[그림 3] "GroupId"와 "ArtifactId" 입력

GroupId는 프로젝트의 가장 최상위 패키지(Top level package) 명으로 사용되고, ArtifactId는 프로젝트 명으로 사용됩니다.

(GroupId는 대표적으로 프로젝트가 진행되는 회사 도메인을 역순으로 작성합니다.

속한 회사가 없거나 단독으로 진행하는 사이드 프로젝트인 경우에는 자신이 사용할 도메인을 하나 정한 후 역순으로 작성해주세요.)

 

Version은 기본으로 "1.0-SNAPSHOT"으로 설정되어 있는데 "SNAPSHOT"은 해당 버전이 개발 버전이라는 걸 의미합니다.

(추가로 배포 버전은 "RELEASE"를 붙여서 사용합니다. 이해가 안 돼도 괜찮습니다.

경험이 쌓이면 자연스레 알게 되는 부분이므로 읽어보고 넘어가도록 합니다.)


[그림 4] "Maven" 프로젝트 생성 완료

메이븐 프로젝트가 생성되었습니다.

좌측에 프로젝트 툴 윈도우(Project tool window)를 보면 src 디렉토리와 pom.xml 파일로 구성되어 있습니다.


[그림 5] "Add Framework Support..." 클릭

앞서, 메이븐(Maven) 프로젝트를 생성했기 때문에 이제부터는 Spring MVC를 설정할 순서입니다.

spring-project-initialize 모듈(Module)을 우클릭하여 Add Framework Support... 를 클릭해주세요.


[그림 6] "Spring MVC" 선택

팝업 창이 나타나면 좌측 프레임워크 목록에서 Spring MVC를 선택해주세요.

(현재 인텔리제이에서는 5.2.3 버전의 스프링 프레임워크를 제공하고 있습니다.)


[그림 7] "Spring MVC" 설정 완료

Spring MVC 설정이 완료되었습니다.

프로젝트 툴 윈도우를 확인해보면 libweb 디렉토리가 추가되었습니다.


[그림 8] "lib" 디렉토리 삭제

lib 디렉토리를 삭제해주도록 하겠습니다.

 

삭제하는 이유는

[그림 6]을 다시 확인해보면 인텔리제이에서는 Spring 5.2.3 버전을 제공하고 있다는 것을 알 수 있고,

인텔리제이에서 제공하는 프레임워크는 lib 디렉토리에 기본 라이브러리를 자동으로 추가시킵니다.

그러나 기본으로 제공되는 라이브러리를 사용하지 않고

메이븐 저장소(Maven Repository)를 이용하여 라이브러리를 관리할 것이기 때문에

인텔리제이가 추가한 라이브러리를 삭제하는 것입니다.

더보기

메이븐 저장소를 이용하지 않을 경우, 필요한 라이브러리를 일일이 다운로드 후 프로젝트에 추가해주는 작업을 해야 합니다.

이런 방식은 라이브러리를 관리하기가 까다롭습니다.

(라이브러리 버전이 변경되었을 때 기존 라이브러리를 삭제하고

필요한 버전의 라이브러리를 다운로드 후 다시 프로젝트에 추가해주는 작업을 반복해야 합니다.)


[그림 9] 프로젝트에 추가된 라이브러리 삭제

Command+;(Ctrl+Alt+Shift+S) 단축키를 이용하여 Project Structure 창을 활성화하고,

프로젝트 설정(Project Settings) 목록에서 Libraries에 추가되어 있는

Spring MVC-5.2.3.RELEASE와 Spring-5.2.3.RELEASE를 삭제해야 합니다.

 

([그림 8]에서 lib 디렉토리와 인텔리제이에서 자동으로 추가한 라이브러리를 전부 삭제했기 때문에

프로젝트에 설정된 라이브러리는 존재하지 않아 무의미하기 때문입니다.)


[그림 10] 프로젝트에 설정된 라이브러리가 없는 상태
[그림 11] 스프링 프로젝트 생성 완료 (Maven + Spring MVC)

인텔리제이에서 스프링 프로젝트 생성을 완료했습니다.

([그림 10][그림 11]은 스프링 프로젝트가 완성된 결과 화면입니다.)


메이븐(Maven) 프로젝트를 생성([그림 2] 참고) 후 스프링 MVC(Spring MVC) 프레임워크를 추가([그림 5] 참고)하고

인텔리제이에서 기본으로 제공되는 라이브러리를 삭제([그림 9] 참고)하여 스프링 레거시 프로젝트(Spring Legacy Project) 초기 생성을 해봤습니다.

(참고, 일반적으로 스프링(Spring) 프로젝트라고 말하는 것은 "Spring MVC" 프레임워크를 뜻하는 걸로 알고 있습니다.)

 

다음 글 이어서 보기 ‣

 

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

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

댓글