Back End/Spring Framework

[Spring Framework] Spring Framework + Maven + Tomcat 환경구축 (IntelliJ) (SpringBoot + Gradle 과 차이점)

DevPing9_ 2022. 4. 15. 10:24
학생 때 Spring Boot + Gradle + VSCode 환경만 사용했었는데
회사 업무에서 Spring Framework + Maven + Tomcat 환경으로 구성된 프로젝트의 유지보수를 맡게 되었다.

IntelliJ 조차도 처음 써보기에 해당환경 세팅을 하는법을 기록해두기로 하였다.

 

1. [File -> New -> Project]

아래 사진과 같이 설정한다.
Gradle 처럼 디펜던시 추가 설정 화면이 나오지 않고 바로 생성된다.
(당황)

 

2. [루트 폴더 우클릭 -> Add Framework Support]

여기서 디펜던시를 설정한다.
WebApplication, Spring MVC, Tomcat 정도만 추가하기로 한다.

 

이러고 확인을 누르면, 관련라이브러리를 다운받는 모습을 볼 수 있는데
Gradle 처럼 자동추가가 되는 것이 아니었다. (!?!??!?!!!)
아래 사진과 같이 pom.xml 에 dependency 가 추가 되지도 않았다. (????)
Gradle 사용자는 그저 물음표만 내뱉을 수 밖에없다.

 

 

3. Artifact 설정

IDE 가 어떻게 이 프로젝트를 빌드할 것이며,
라이브러리를 무엇을 쓸 것인지 내가 직접 설정해줘야한다. (!?)

Artifact 가 뭐지?

maven 빌드로 생성되는 프로젝트의 결과물을 의미한다.
tomcat 에서 인식할 수 있는 .jar, .war 등의 확장자를 가진 결과물이다.
 

메이븐이란? Maven 파헤치기. pom,repository,lifecycle ...

메이븐이란 Maven ? 프로젝트의 전체적인 라이프사이클을 관리하는 관리도구이다. 프로젝트 객체모델(Project Object Model: POM) 이라는 개념을 바탕으로 프로젝트의 의존성관리, 라이브러리관리, 프로

cheershennah.tistory.com

 

[FIie -> Project -> Artifacts]

보이는가... 우측에 [Available Elements] 라는 탭이...
저기 라이브러리를 더블클릭해서 왼쪽으로 가져와줘야 한다.
그래야 우리의 IntelliJ가 빌드를 할때 저 라이브러리를 포함해서 빌드한다.
(Spring Boot + Gradle 을 만들어주신분들 매우 감사합니다...)

좌) 아티팩트 경로에 추가 전, 우) 아티팩트 경로에 추가된 모습

 

... 끝났나?

 

4. Tomcat 설정

아까 한건 Spring 과 Spring MVC를 인텔리제이가 같이 묶어서 인식할 수 있게
추가해준 것 일뿐, 아직 Tomcat 은 연결되지 않았다. (ㅠㅠ)

 

[Run -> Edit Configuration] 

해당 탭에 진입하여 좌측상단의 [+] 를 눌러
Tomcat 을 추가한다.

 

아래 사진은 Tomcat 언어를 영어로 해달라고 
VM options 에 관련 설정을 넣은 모습이다.
-Duser.language=en -Duser.region=US

 

톰캣이 실행할 Artifact 경로도
아래와 같이 추가 및 수정해주자

 

 

 

5. pom.xml 설정

Gradle 의 build.gradle 이랑 같다고 들었는데
반은 맞고 반은 아닌거 같다.

무튼 Artifact 에 빌드 시 필요한 파일들을 세팅했으니
이제는 pom.xml 로 그 파일들중에서 무엇을 써서 빌드할 것인지
기술해서 알려줘야 한다. (하하하하하하하하하하... 😔😔😔)

근데... 정말 귀찮은데... 나는 왜 재밌지 이게..
그저 Gradle 과 Boot 환경을 만든사람들에 대한 존경이 생겨난다.

나도 일찍 프로그래밍을 시작했었으면 이런거 같이 만들 기회가 있었을까..

 

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>13</maven.compiler.source>
        <maven.compiler.target>13</maven.compiler.target>

        <org.springframework-version>5.3.7</org.springframework-version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
    
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
    </dependencies>

</project>

 

무튼 뚝딱 만들어보자면 이런식인데 
여기서 .jar 로 빌드할 것인지 .war 로 빌드할 것인지도 설정할 수 있다.

<dependency> 하위에 <artifactId>가 보이는가?
저게 이제는 무슨 뜻인지 알 것 같다. 

제 포스팅을 읽으시는 분들도 저 의미를 아시고 가셨으면 좋겠다 :D.

 

6. web.xml, dispatcher-servlet.xml, application-context.xml 설정

아직 끝이 안났다.
사실상 Boot 환경처럼 Controller 를 정의해서 사용하려면
web.xml 의 설정을 건드려줘야 한다. 

 

5번까지만 하고
컨트롤러에 url 매핑이 제대로 되지 않아
꽤나 고생했다.

web.xml 은 IntelliJ 가 자동으로 만들어준 파일이므로
문제가 없을 줄 알았다.

IDE를 믿지말자. (젠장...)

Tomcat 의 서블릿을 Spring 의 Dispatcher 서블릿으로 전달하는 작업을 해주어야 한다.
왼쪽 사진의 드래그 친 부분처럼 url 패턴을 / 로 설정해주자.

아.. 그리고 @Controller 어노테이션이 작동하지 않으신다면
dispatcher-servlet.xml, application-context.xml  + 컴포넌트 스캔으로 검색하셔서
@Controller 가 스캔되도록 설정해주자. 

포스팅이 더 길어질 것 같아 이쯤 한다.
(사실 귀찮음)

 

 

마치며

취업준비할 때만 해도 Spring Framework 와 Spring Boot 가 이렇게 다른지 몰랐다.
현업자분들께 Spring Framework에 대해 여쭈어봐도
Spring Boot 를 사용하고 계신데 굳이 쓰실 필요없다는 답변만 받아왔다.

하지만 Spring Framework를 써보아야 확실히 Boot 로 바뀌면서
어떤 점들이 편해졌는지 알 수 있고, 기반지식도 탄탄해지는 것 같다.

그래서 나는 요즘 너무 재밌고 행복하다.

다음 포스팅은 "Spring Framework 환경에서 xml 파일 없애기" 라는 주제로
진행하려고 한다.

dispatcher-servlet.xml, application-context.xml, web.xml 을 읽다보면
굳이 이게 왜 필요하지? java 파일로 설정하면 안되나? 라는 생각이 든다.
(근데 그건 그저 내가 Boot 에 익숙해서 일뿐)

하지만 java파일로 관리하면 코드관리&디버깅에도 용이하고
확장성도 좋아진다.

일단 회사 프로젝트에서 xml 파일들을 모두 제거한 후 포스팅을 하겠다.
(언제가 될런지...) 
728x90