본문으로 바로가기

지난 포스팅에 이어 이번에는 intellij에서 구축하는 방법에 대해 작성한다.

 

[IDE]

intellij ultimate

 

[목표]

1. Spring Boot 2.3.0 + jsp + 내장 톰캣 구축

2. Spring Boot 2.3.0 + jsp + 설치한 외부 톰캣 구축

 

* 스프링 부트는 Thymeleaf를 템플릿 엔진으로 사용하기 때문에 jsp를 사용하기 위해서는 따로 설정해줘야 한다.

* intellij community에서는 jsp파일 사용안된다.

 

 

# 0. 프로젝트 환경 이해 

생성에 앞서 이클립스와 인텔리제이의 프로젝트 환경에 대한 이해가 필요하다.

  이클립스 인텔리제이
작업 공간 workspace project
프로젝트 project module
설정 파일 .project .idea 디렉토리 이하 파일

# 1. 빈 프로젝트 생성

빈 작업공간을 생성한다. (Next ~ Finish)

 

# 2. Project SDK 설정

각 사용자에 맞는 java 버전 설정한다.

 

# 3. Project Modules 설정

Maven -> Next

module 이름(= 프로젝트) 및 Artifact 설정한다.

 

# 4. pom.xml 세팅

전자정부 표준 프레임워크 적용했다는 기준(+규칙)에 대해 아직 명확히 이해하지 못했기 때문에 가장 쉬운 방법을 선택했다.

* ex. 아키텍쳐 적용 규칙 준수 + eGov 라이브러리 사용 등등

 

pom.xml 베이스로 이전 포스팅에서 구축한 eclipse_eGovFrame의 pom.xml을 가져다 사용했다.

참고: alice-secreta.tistory.com/24 

 

전자정부 표준프레임워크 개발환경 구축 및 실행하기

전자정부 프레임워크(eGovFrame) 개발환경 구축 및 실행하기. [1. 개발환경 구축 및 실행] 참고: 전자정부 표준프레임워크에서 제공하는 개발자 개발환경 설치 가이드 제공한다. => 그대로 따로 하면

alice-secreta.tistory.com

위에서 가져온 pom.xml 에 추가

<modelVersion>4.0.0</modelVersion>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.0.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<groupId>com.example</groupId>
<artifactId>eGovDemo</artifactId>
<packaging>war</packaging>
<version>1.0.0</version>
<name>eGovDemo</name>
<url>http://www.egovframe.go.kr</url>

 

 

> jasper 추가

프로젝트 빌드 결과 포함될 톰캣 서버 라이브러리

> JSTL 추가
JSTL 확장 태그를 사용하기 위해 필요한 라이브러리

* eclipse_eGov pom.xml에 추가되어 있었음

 

> spring-boot-starter-tomcat 추가

스프링 부트 내장 웹 서블릿 컨테이너인 톰캣이 자동 설정됨

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>

 

# 5. 디렉토리 생성 및 코드 작성

> 5.1 WEB-INF\jsp\index.jsp 디렉토리 구성

> 5.2 web\indexController.java 작성

> 5.3 Application.java 작성

> 5.4 resources\application.properties 작성

 

먼저 디렉토리 구조를 다음과 같이 기본적인 것만 생성한다.

 

# 5.1 webapp\WEB-INF\jsp\index.jsp 디렉토리 구성

jsp파일은 스프링 부트 templates 폴더안에서 작동되지 않는다. (jsp 사용을 권장하지도 않음)

webapp\WEB-INF\jsp\* 안에 작성하는 것을 기본으로 한다.

* WEB-INF: 웹 어플리케이션 용으로 따로 만들어진 디렉토리로 알고 있다.

 

다음과 같이 hello world를 출력하는 index.jsp를 작성한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>demo</title>
</head>
<body>
<h1>hello world</h1>
</body>
</html>

 

# 5.2 web\indexController.java 작성

단순히 index.jsp를 반환하는 코드로 작성했다.

@Controller
public class indexController {
    
    @RequestMapping("/")
    public String index() { return "index"; }
}

 

# 5.3 Application.java 작성

일단은 기본 pom.xml이 war로 배포형태로 되어있었다. (웹 프로젝트니까 war로 되어있다고 알고 있다.)

*스프링 부트는 jar가 기본 배포형태다.

 

SpringBootServletInitializer 상속: war에서 스프링 부트 어플리케이션이 동작 가능하도록 웹 어플리케이션 컨텍스트를 구성하기 위해서 추가했다.

 

또한, InternalResourceViewResolver Bean 등록: DispatcherServlet에게 뷰 정보(jsp를 사용하겠다.)를 전달하기 위해서 작성했다.

Prefix / Suffix :  컨트롤러에서 리턴하는 뷰 이름에 접두,접미어를 붙여서 JSP페이지의 경로를 찾아주는 역할 수행한다.

 

# 5.4 resources\application.properties 작성

ViewResolver는 application.properties에서 다음과 같이 작성해도 된다.

 

# 6. Application - run 실행 시, 404 등 실행되지 않는 경우

run/debug configuration > environment > Workingdirectory 를 $MODULE_WORKING_DIR$ 로설정하면 해결된다.