-
[Spring Framework] Spring Framework + Maven + Tomcat 환경구축 (IntelliJ) (SpringBoot + Gradle 과 차이점)Back End/Spring Framework 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'Back End > Spring Framework' 카테고리의 다른 글
[Spring Framework] 다국어 처리 설정 (message properties) (0) 2022.08.15 [Spring Framework] Maven 라이브러리 연동(ClassNotFoundException: javax.servlet.jsp.jstl.core.Config) (1) 2022.06.09 [Spring] Controller 에서 가변 json body 받기 (0) 2022.05.21 [Spring] Content type 'text/plain;charset=UTF-8' not supported (0) 2022.05.21 [Spring Framework] Spring Framework 에서 컴포넌트 스캔 (feat. Spring Boot) (0) 2022.04.16