Eclipse에서 spring framework를 이용한 웹 개발을 할 때는 STS(Spring Tool Suite)의 도움을 받는 것이 일반적이다. 하지만 IntelliJ에서는 그런 기능이 존재하지 않는다. 원래 Spring framework는 STS의 도움 없이도 maven을 통해 환경 구축이 충분히 가능하다. 다만 상대적으로 eclipse 사용자가 더 많아 eclipse의 STS를 기반으로 시작하는 포스팅이 인터넷상에 많이 있어서 그런듯 하다.
0. backgrouds
Spring framework는 나의 개인적인 소견으로는 초반 접근성이 높은 편이었다. 설정해야 될 것들도 많고, 그 원리를 이해하기 위해 필요한 배경지식 또한 갖춰야 했다. 그리고 eclipse가 싫었다. 실제로 나는 IntelliJ로 spring을 시작하려고 했는데 많은 분들이 포스팅을 올려주셨지만 초기 설정 방법이 미묘하게 조금씩 달라서 어떤 포스팅에서는 이부분이, 어떤 포스팅에서는 저부분이 에러가 발생하다보니 시작부터 난관을 겪어 했다.
이 포스팅은 STS 등의 extension이나 plugin에 의존적이지 않고 순수하게 maven을 활용하여 spring framework를 사용하고 싶은 사람들, 또는 나와 같이 단순히 eclipse가 싫은 사람들이 IntelliJ에서도 Spring framework를 개발할 수 있도록 돕기 위해 시작되었다.
이 포스팅을 계기로 기회가 된다면 Spring framework의 개발 포스팅을 지속적으로 진행해보려고 하는데, 초반에는 quick start 형식으로 원리설명보다는 당장 프로젝트를 시작하고 싶은 사람들을 위한 매뉴얼처럼 진행하고, 이후 포스팅부터는 차근차근 원리 중심적으로 설명하려고 한다.
추가로, Spring 개발하면서 만나는 문제들을 찾아보면 대부분 Eclipse에서의 해결책은 잘 나와있는데 IntelliJ에서의 해결책은 상대적으로 잘 안 보인다. 따라서 앞으로 기회가 된다면 포스팅을 꾸준히 이어가면서 Spring 개발 중 내가 만났던 각종 문제들에 대한 시행착오 및 해결책도 정리해보고 싶다.
참고 : 이 포스팅은 IntelliJ IDEA Ultimate 2020.2.3 버전을 사용하고 있다.
1. 프로젝트 생성
IntelliJ를 켜고 New project를 클릭
Maven 선택 - 'Create from archetype' 체크 해제 - Next
Name에 원하는 프로젝트 명 입력 - 'Artifact Coordinates' 클릭 - 원하는 Group ID, artifact id 입력 - Finish
아래와 같이 프로젝트가 잘 생성되었다.
2. pom.xml 설정
pom.xml에 다음 코드를 추가한다.
<properties>
<org.springframework-version>5.2.11.RELEASE</org.springframework-version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
</dependencies>
추가하고 나면 <version>에 빨간 글씨로 나타나면서 에러가 발생하고 페이지 우측 상단에 아이콘이 나타나는데 이거 클릭
그러면 maven이 해당 프로젝트에 필요한 라이브러리를 자동으로 받아오게 된다.
3. Project Structure 설정
File - Project Structure... 클릭 or Ctrl + Alt + Shift + s 입력 - Project Structure 창 왼쪽 메뉴에서 Facets 클릭
상단 + 버튼 클릭 - Web 클릭
Choose Module 창 - 반드시 목록의 모듈을 클릭하여 선택해야함 - OK
Web이 추가되었음을 확인할 수 있다.
왼쪽 메뉴 Artifacts 클릭 - 상단 +버튼 클릭 - Web Application: Exploded - From Modules... 클릭
아까와 동일하게 목록에 있는 모듈 클릭 - OK
WEB-INF/lib 아래에 사진과같이 jar파일이 추가되어있는지 확인 - OK 클릭
4. xml 파일 설정
왼쪽 프로젝트 구조에 web\WEB-INF\web.xml이라는 파일이 생겼다. 이 파일을 열어보자.
다음 내용을 추가한다.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
해당 코드를 추가하면 param-value에 빨간색 글씨로 에러표시가 나는데 이는 해당 파일을 생성하지 않았기 때문이다.
web\WEB-INF\spring 디렉토리를 추가하고 applicationContext.xml, dispatcher-servlet.xml 이라는 이름의 spring config 파일 2개를 생성한다.
applicationContext.xml은 그대로 두고 dispatcher-servlet.xml에 다음을 추가한다.
<mvc:annotation-driven/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
<property name="order" value="1"/>
</bean>
<context:component-scan base-package="com.glowsoft.spring_test"/>
이 코드를 추가하면 xml 태그에 빨간색 글씨와 줄과 함께 에러 표시가 난다. 이때 IntelliJ의 기능을 이용해 xml namespace를 추가해주면 편하다. 사진과 같은 팝업이 뜨거나 에러 표시가 난 코드에 커서를 두고 Alt + Enter를 눌러보자.
그럼 자동으로 xmlns:mvc 가 생성된 것을 확인할 수 있다. context namespace도 마찬가지로 추가해준다.
5. 화면 추가
5.1 Controller 추가
dispatcher-servlet.xml의 context:component-scan 태그의 base-package 값 뒤에 .controller를 붙인 이름의 패키지를 src\main\ 아래에 추가한다.
패키지를 추가하면 dispatcher-servlet.xml의 에러표시는 사라진다.
추가한 패키지에 클래스를 추가한다. 이름은 HomeController.java이다.
package com.glowsoft.spring_test.controller;
@Controller
public class HomeController {
@RequestMapping("/")
public String index(Model model) {
model.addAttribute("data", "Hello, Spring from IntelliJ! :)");
return "index";
}
}
Annotation과 클래스명 등에서 나오는 에러 역시 모두 Alt + Enter로 import해준다.
나중에 이렇게 import해야할 이름들이 너무 많아지면 하나하나 Alt + Enter하기가 힘든데 그 때는 "여기" 참고.
5.2 view페이지 추가
web\WEB-INF\views 디렉토리 추가
views에 index.jsp 추가
다음과 같이 index.jsp 작성
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>${data}</h3>
</body>
</html>
6. 서버 설정
아파치 톰캣 공식 홈페이지(tomcat.apache.org/index.html)에서 최신버전의 아파치 톰캣 WAS 서버를 다운로드 받는다.
다운로드받은 뒤 C:\apps\tomcat 아래에 압축을 푼다.
우측상단 툴바 중 Add configuration... 클릭
좌측 상단 + 버튼 클릭 - 아래로 내려서 Tomcat Server - Local 클릭
Configure... 클릭
Tomcat Home에 아까 다운받은 tomcat 압축해제 경로를 입력하면 정상적인 tomcat으로 인식될 경우 버전명 자동으로 인식됨 - OK
우측 하단에 Fix 클릭
아래 Application context는 / 로 입력하고 server name 적절히 바꾸고 OK
7. 실행
Shift + F10 누르면 Tomcat 서버가 실행되면서 컴파일된 파일들은 자동생성된 out 디렉토리로 모이게 된다.
이로써 초기환경 세팅은 모두 끝났다.
8. Trouble shooting
8.1 address xxx is already in use
-> 포트 충돌일 가능성이 높다.
A. Run - Edit Configurations...
설정 중에 1099포트로 설정되어있는 항목을 10990으로 변경하면 된다.
9. References
nesoy.github.io/articles/2017-02/SpringMVC
doublesprogramming.tistory.com/171
'Web Programming > Spring' 카테고리의 다른 글
[Spring] Cannot resolve MVC view 'index' (1) | 2022.07.07 |
---|---|
[Spring] IntelliJ에서 Spring Boot 개발하기 - quick start (0) | 2022.07.07 |
[IntelliJ] Project 'org.springframework.boot:spring-boot-starter-parent:x.x.x' not found (0) | 2022.07.07 |