All of My Records

[Spring Boot] Spring Boot에 대하여 :: Spring Starter Project 생성하기

by 캐떠린

저번 포스팅에서 STS4를 설치하고 Spring Boot를 위한 개발 환경 Setting을 완료했다.

이제 STS4로 프로젝트를 생성하며 Spring Boot에 대해 알아보자!

 

Spring Boot란?

  • 기존 스프링 설정을 단순화하여 초기 진입 장벽을 낮춘 프로젝트
  • 스프링 부트 개발 환경 자체에 독립 실행이 가능한 Apache Tomcat을 내장하고 있다. → 추후 배포할 때 환경에 구애받지 않고, 독립 실행이 가능한 웹 애플리케이션 제작이 가능하다.
  • https://start.spring.io → Spring Initializr
STS4는 순수 스프링 프로젝트(Spring Legacy Project)를 지원하지 않고, 스프링 부트(Spring Boot)만 지원한다. 따라서 기존 Legacy Project를 사용하던 사람들은 STS4가 아닌, STS3를 사용한다.

 

Spring Boot Project 생성 방법

  1. Maven(Gradle)을 사용해서 직접 생성 (수업에서 사용 X)
  2. STS를 사용해서 생성 (수업에서 사용 예정)
  3. Spring Initializr 웹 사이트를 사용해서 생성 (수업에서 사용 예정)
Spring Boot Project를 생성 시, 다른 의도가 없다면 Spring Starter Project로 생성한다.

 


 

New Spring Starter Project

3개의 project를 생성해보자!

 

1. start project 생성

어떻게 작동할까?
위 사진과 같은 화면에서 설정을 완료하고 Finish를 누르면, 우리가 설정한 내용을 가지고 Eclipse가 최상단에 적힌 사이트(Service URL)에 가서 해당 내용을 사이트에 전달한다. 해당 사이트는 우리가 설정한 내용을 가지고 프로젝트를 만들어서 STS에게 돌려준다. STS는 그렇게 돌려받은 프로젝트 파일을 Import해서 하드디스크에 설치까지 해주는 과정을 거친다.
☞ 온라인 페이지를 통해서 프로젝트를 생성한다고 생각하면 된다!
(따라서 STS4는 웹을 통해 수급하는 내용들이 많기 때문에 인터넷 환경이 아니면 개발하기 어렵다.)

 

  • Name: 프로젝트명 (→ start 로 설정!!)
  • Type: 프로젝트 관리 툴 뭐쓸래? (→ 수업에서는 원래 사용하던게 Maven이니 이를 이용할 에정이나, 최근엔 gradle이 속도가 약간 빨라서 더 많이 쓰인다고 한다.)
  • Packaging: Jar로 내보내기 (→ War로 내보내면 톰캣 내장이 되지 않고 스프링 부트의 장점이 깎여버리기 때문)
  • Java Version: 17로 설정(선택지가 17, 21 밖에없다. 때문에 JDK 17을 설치한 것!)
  • Group: com.test (→ 패키지 폴더 구성, 조직 정도로 생각하면 될듯 하다. 위 사진과 같이 com.example로 설정한 경우, 추후 패키지명은 com.example.프로젝트명 이런식으로 구성한다.)
  • Artifact: start (→ 보통 프로젝트 이름)
  • Version: 현업에서는 회사에 맞는 버전 사용. 지금은 별도 변경 없이 그대로 사용!
  • Package: com.test.start (→ 루트 패키지. Group + Artifact 조합한 패키지명.)

 

Dependencies 설정 화면

  • MyBatis Framework: 선택 시, 자동으로 관련 dependency가 설치되서 pom.xml을 열 필요가 없다.
  • Spring Web: 선택 시, src/main/resources에 static, templates가 생긴다.

 

생성된 프로젝트 톺아보기

  • 기본적으로 아파치 톰캣이 내장되어 있어서 스프링 부트를 사용할 때는 따로 아파치 톰캣 작업을 하지 않는다. 내장된 아파치 톰캣을 사용해야 추후 배포할 때도 손이 덜 가기 때문이다.
  • Spring Boot의 모든 설정은 application.properties 에서한다!!!
    (따라서 기존 STS3로 작업할 때와 다르게 더이상 스프링 설정을 건들 때마다 *.xml 파일을 볼 일이 없다. 어쨌든 어디선가 Setting은 필요하니 이를 하나로 통합한게 위에서 언급한 properties 파일이다. 이 파일을 *.yml로 바꿔서 사용하는 사람도 있고 properties로 사용하는 사람도 있는데 포맷의 차이이기 때문에 큰 상관은 없다. 나는 properties로 사용할 예정!)
  • 위 사진과 같이 src/main 파일 하위구조에 webapp 이하 나머지 구조가 존재하지 않는다. webapp 하위 구조는 jsp를 사용할 때 구조이기 때문이다. 그러나 Spring Boot는 jsp를 사용하지 않아서 기본적으로는 하위 구조가 없는 상태이고, jsp 사용을 희망 시 동일하게 하위구조 폴더를 생성하여 사용하면 된다.

 

파일 추가

  • src/main/java → "com.test.start.controller" → "TestController.java"
  • src/main/resources → static → "test.html"

✔ static 폴더는 정적 페이지 저장 폴더이다. 따라서 정적인 페이지는 해당 폴더에 파일을 생성한다.

  위에서 생성한 html 파일의 경우 http://localhost:8090/test.html 주소로 접속이 가능하다.

  Web Developer Tools 설치 전이라면, html 파일을 생성 할 수 없기 때문에 create a new file로 생성해야 한다.(하지만 나는 이전 포스팅에서 설치 완료!)

 

TestController.java

package com.test.start.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

	@GetMapping(value = "/test")
	public String test() {
		return "스프링 부트 애플리케이션입니다.";
	}
	
}

 

test.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>Spring Boot</h1>
	<p>정적 페이지입니다.</p>
</body>
</html>

 

Spring Boot application 실행 방법

1. 왼쪽 하단 Boot Dashboard → 프로젝트 선택하여 Start 버튼 클릭 (권장)

2. Ctrl + F11  (비권장)

3. 프로젝트 우클릭 → run as  (비권장 → 귀찮아서 잘 안씀)

 

내장 톰캣 포트번호 변경하기
만일 8080포트가 사용중인 경우, 내장된 톰캣의 포트번호를 변경해줘야 한다.
# 내장 톰캣의 포트 번호
server.port=8090

 

프로젝트 실행

동적 페이지도
정적 페이지도
cmd 창에서도

다 잘 된당😀

 


 

2. hello project 생성

이번에는 스프링 프로젝트 생성 방법 중 하나였던 ‘Spring Initializr’ 웹 사이트를 이용해서 프로젝트를 생성해보자!

 

1. https://spring.io 접속하여 Projects → ‘Spring Initializr’ 선택 또는 바로 https://start.spring.io 접속

 

2. STS를 사용해서 프로젝트를 생성했을 때와 거의 유사한 화면이 나타난다. 아래 사진과 같이 입력하고 , Dependencies 선택 후 GENERATE 클릭

 

3. GENERATE 클릭과 동시에 프로젝트명의 압축 파일(.zip)이 다운로드 된다. 다운로드 폴더로 이동하여 압축을 풀어준다. 압축 푼 폴더는 Spring Boot 실행 시 설정한 Workspace 폴더로 옮긴다.

 

4. STS4로 돌아와서, File → Import → Maven → Existing Maven Projects 선택 후 Next

 

5. Browse 선택 후, 압축 푼 폴더 경로 안으로 들어가서 폴더 선택 후, xml파일 체크 하여 Finish

 

6. 손쉽게 설정 끝! ^~^

 


 

3. jsp project 생성

  • Name: jsp
  • Type: Maven
  • Packaging: Jar
  • Java Version: 17
  • Language: Java
  • Group: com.test
  • Artifact: jsp
  • Package: com.test.jsp
  • Dependencies: Spring Web

 

Spring Boot + JSP
Spring Boot는 기본적으로 JSP를 지원하지 않는다.
Why? Spring Boot는 템플릿 엔진을 사용하기 때문이다.
그렇다면 템플릿 엔진의 종류에는 무엇이 있을까?
- Thymeleaf (기본값)
- Mustache
- Freemaker
- Velocity 등..
+ (성질은 다르지만) JSP

 

STS3에서 사용하던 방식과 같이 JSP를 사용하는 프로젝트를 생성해보자!

 

1. pom.xml (JSP 사용을 위해) JSP 관련 의존성 추가

<!-- JSP -->
<dependency>
	<groupId>jakarta.servlet</groupId>
	<artifactId>jakarta.servlet-api</artifactId>
</dependency>
<dependency>
	<groupId>org.glassfish.web</groupId>
	<artifactId>jakarta.servlet.jsp.jstl</artifactId>
</dependency>
<dependency>
	<groupId>jakarta.servlet.jsp.jstl</groupId>
	<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
</dependency>
<dependency>
	<groupId>org.apache.tomcat.embed</groupId>
	<artifactId>tomcat-embed-jasper</artifactId>
</dependency>

 

pom.xml에서 하단의 spring-boot-starter-web을 선택 후, F3 키를 입력하거나, Ctrl + 클릭 시, 하위 구조를 볼 수 있다.

 

2. application.properties 서버 포트 변경(Option)

   (나는) 8080포트가 현재 사용중이므로 8090으로 변경해준다.

 

3. application.properties JSP ViewResolver 설정

# JSP ViewResolver
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

 

4. 폴더 생성 및 파일 추가

  • src/main/java → "com.test.controller" → "TestController.java"
  • src → main → "webapp" → "WEB-INF" → "views" → "test.jsp"

 

5. 여기까지 진행 후, 실행해보면 'com.test.controller' 패키지가 스캔 대상(bean 객체 등록)으로 추가되어 있지 않기 때문에 아래 사진과 같은 오류가 발생한다.

 

6. 그럼 Bean 객체 등록을 해보자!(스캔 대상으로 추가해보자.)

Spring Boot에서 Bean 객체 등록하기(Scan 대상 추가하기)
기존의 STS3에서는 servlet-context.xml 파일에서 스캔 대상으로 추가했었다. 하지만, STS4에는 이 파일이 존재하지 않는다.
해결 방법은? JspApplication.java(루트 패키지에 생성된 프로젝트명Application.java 파일)를 열면 된다.
기존 Legacy Project에서의 ‘homeproject’는 Sample. 정말 샘플 그 이상 그 이하도 아니었지만, STS4에서 프로젝트명Application.java 파일은 매우 중요하다.
Main method를 가지고 있는 일반 클래스인데, Spring Boot에서 프로젝트를 실행하면 바로 이 파일이 실행되는거라, 파일이 없다면 실행되지 않는다. 따라서, 이곳에서 스캔 대상을 추가해주면 된다.
추가 방법
- 단일: @ComponentScan(basePackages = "com.test.controller")
- 다중: @ComponentScan(basePackages = {"com.test.controller", "com.test.repository"})
※ 한번에 여러 객체를 등록할 때는 중괄호({ })안에 넣어서 컴마(,)로 구분한다.

 

JspApplication.java

package com.test.start;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(basePackages = "com.test.controller")
public class JspApplication {

	public static void main(String[] args) {
		SpringApplication.run(JspApplication.class, args);
	}

}

 

7. 실행 성공!

 

8. STS4에서는 서버가 자동으로 재 시작되지 않아서 수정 사항이 있을 시 매번 직접 서버를 껐다 켜줘야 하는데 이를 자동으로 재시작 해주기 위해 DevTools 기능을 추가해주면 진짜 완성!

DevTools 기능을 추가한 프로젝트는 Boot Dashboard 탭에서 조회 시 아래와 같이 [devtools] 문구가 추가된다.

 

*글 작성에 참고한 내용: 학원 쌤의 열정적인 수업

블로그의 정보

All of My Records

캐떠린

활동하기