이 글은 향로님의 [스프링부트로 웹 서비스 출시하기]를 참고하며 프로젝트를 만들며 정리한 글입니다.
3) 스프링부트로 웹 서비스 출시하기 - 3. SpringBoot & Handlebars로 화면 만들기
이번 시간엔 SpringBoot & Handlebars로 간단한 화면을 만들 예정입니다. (모든 코드는 Github에 있습니다.) Handlebars는 흔히 사용하시는 Freemarker, Velocity와 같은 서버 템플릿 엔진입니다. JSP는 서버 템플릿
jojoldu.tistory.com
👉 기본 환경
- Language: Java
- DB: MySQL
- IDE: IntelliJ
😮 게시글에서는 Handlebars를 사용하고,
Spring에서는 Thymeleaf를 권장하지만,
JSP와 연동하려는 이유는
- 1차 프로젝트에서 view를 jsp로 사용했는데, jsp는 유지하고 JPA만 변경해볼까에 대한 생각이 있고,
- Front를 배우고자 하는 프로젝트가 아니므로, 익숙한 JSP를 사용해보고자 했습니다.
1. 의존성 추가
build.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.4'
id 'io.spring.dependency-management' version '1.1.3'
}
group = 'com.project'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
// Actuator: 스프링 부트에서 제공하는 컨텍스트 빈, 환경 설정, JVM 상태 등을 모니터링하기 쉽게 해주는 기능
implementation 'org.springframework.boot:spring-boot-starter-actuator'
// JPA
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
// WEB
implementation 'org.springframework.boot:spring-boot-starter-web'
// .jsp
// implementation 'javax.servlet:jstl' //스프링부트 3.0 미만
implementation 'jakarta.servlet:jakarta.servlet-api' //스프링부트 3.0 이상
implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api' //스프링부트 3.0 이상
implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl' //스프링부트 3.0 이상
implementation "org.apache.tomcat.embed:tomcat-embed-jasper"
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
|
jstl 및 tomcat-embed-jasper 추가
- jstl: JSP Standard Tag Library
- tomcat-embed-jasper: JSP 파일을 servlet으로 변환하는 컴파일러
* 톰캣 서버는 servlet을 실행하는 서버이므로 JSP 파일은, 먼저 servlet이로 변환(컴파일)된 후 실행돼야 함
⭐ jstl은 springboot 버전에 따라 build.gradle이 다르니 유의
2. 프로젝트 구조 변경 및 View 경로 수정
main 폴더 하위에 webapp/WEB-INF 폴더 추가
* Package Structure
application.properties
1
2
3
4
|
# .jsp 설정
spring.mvc.view.prefix=/WEB-INF/
spring.mvc.view.suffix=.jsp
|
취향에 따라 prefix를 /WEB-INF/views로 설정해도 되고,
WEB-INF를 제거하고 /만 설정해도 되지만,
WEB-INF까지는 추가하는 것을 권장
- WEB-INF 폴더안은 일반 사용자가 브라우저에 패스를 넣어서 접근할 수 없음
- 요청이 들어오는것과 진짜 자원이 있는 곳을 분리시켜야만 보안상 안전
- jsp 직접 접근 가능시 코드 오픈의 위험이 있으니 직접 접근을 막음
3. 테스트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
@Controller
@RequiredArgsConstructor
public class WebRestController {
private final PostService postService;
@GetMapping("/hello")
public String hello(){
return "Hello, IT World!";
}
@GetMapping("/main")
public String main(){
return "main";
}
}
|
Controller에 @Controller 추가
@RestController = @Controller + @ResponseBody
@RestController를 사용하는 이유
- Json 형태로 객체 데이터를 반환
- REST API를 개발할 때 주로 사용
- 객체를 ResponseEntity로 감싸서 반환
@ResponseBody
- 자바 객체(VO)를 데이터(JSON객체)로 바꿔 Response Body 안에 넣어주는 어노테이션
cf. @RequestBody
- Request Body 안의 데이터(JSON객체)를 자바 객체(VO)로 변환
main()은 jsp와의 연동을 보고자, hello()는 String을 출력하고자 하므로 hello()는 다음과 같이 변경
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
@Controller
@RequiredArgsConstructor
public class WebRestController {
private final PostService postService;
@ResponseBody
@GetMapping("/hello")
public String hello(){
return "Hello, IT World!";
}
@GetMapping("/main")
public String main(){
return "main";
}
}
|
4. 🤹 결과 확인
🔗 소스 코드
GitHub - HJ0216/mini1: SpringBoot+JPA Board Mini Project
SpringBoot+JPA Board Mini Project. Contribute to HJ0216/mini1 development by creating an account on GitHub.
github.com
📚 참고 자료
[Spring Boot] 스프링 부트에서 JSP 사용하기(JSP파싱)
이번 글에서는 Spring Boot에서 JSP를 사용하는 방법에 대해 정리할 것이다. 추가로 Spring Boot + JSP를 사용해서 게시판을 작성할 것이다. 해당 글 상단부에서는 SpringBoot에서 JSP 사용하는 방법에 대해
backendcode.tistory.com
JSP
tomcat-embed-jasper 의존성에 역할은 다음과 같다. 스프링 부트 앱에는 톰캣 서버가 내장되어 있다. 톰캣 서버는 servlet container 이다. 톰캣 서버는 servlet을 실행하는 서버이다. 톰캣에서 JSP 파일은, 먼
kimjye.tistory.com
[JSTL] JSTL(JSP Standard Tag Library)란?
0. JSTL(JSP Standard Tag Library)란? JSTL이란 JSP 표준 라이브러리(JSP Standard Tag Library)의 약어이다. 즉, JSP를 사용하는 여러 프로그램이 공통으로 사용할 수 있도록 JSP태그를 라이브러리 형태로 만들어놓
yanacoding.tistory.com
Web-INF에 VIEW를 넣어야 하는 이유
브라우저 주소창에 쓰는것과 실제 파일이 있는 위치가 다르다. 요청이 들어오는것과 진짜 자원이 있는 곳을 분리시켜야만 보안상 안전하다. 즉 자원이 어디 있는지 Client 측에선 예측을 못하도
dalpenglow.tistory.com
WEB-INF에 JSP 파일을 놓는 이유
문득 프로젝트를 보다가 왜 jsp 파일을 WEB-INF 밑에 두는 걸까? 하고 궁금해서 구글링을 해보았는데 마침 이와 관련되어서 okky에서 핫하게 논쟁을 벌였던 흔적의 게시글을 찾았다. https://okky.kr/artic
data-study-clip.tistory.com
[Spring] @Controller와 @RestController 차이
Spring에서 컨트롤러를 지정해주기 위한 어노테이션은 @Controller와 @RestController가 있습니다. 전통적인 Spring MVC의 컨트롤러인 @Controller와 Restuful 웹서비스의 컨트롤러인 @RestController의 주요한 차이점
mangkyu.tistory.com
'PlayGround > AWS 연습' 카테고리의 다른 글
[Project] mini1 - 애플리케이션 실행 전 스크립트 작성 (0) | 2023.10.06 |
---|---|
[Project] mini1 - Ajax DB 통신과 fail 처리 (1) | 2023.10.04 |
[Project] mini1 - Postman 활용 (0) | 2023.10.01 |
[Project] mini1 - Test Code 작성 (0) | 2023.10.01 |
[Project] mini1 - MySQL, JPA 연동 (0) | 2023.09.30 |