이 글은 향로님의 [스프링부트로 웹 서비스 출시하기]를 참고하며 프로젝트를 만들며 정리한 글입니다.
👉 기본 환경
- 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. 🤹 결과 확인
🔗 소스 코드
📚 참고 자료
'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 |