- 요구사항
스프링 프레임워크 기반 개발에서 스프링 부트 기반 개발로의 전환
스프링 부트의 특징
스프링 + 자동설정 = 스프링 부트
톰캣이 내장되어 있고, 단독 실행 가능하다
-> 스프링 부트 프로젝트를 jar파일로 만들어 다른 운영체제에서 실행 가능
서블릿 -> 스프링의 경우, 기존 코드 재활용 불가
스프링 -> 스프링 부트의 경우, 코드 재활용 가능
스프링
- JSP
- MyBatis
- log4j2
- HikariCP
- 버전 관리가 필요한 build.gradle
- XML 설정
- root-context.xml
- servlet-context.xml
- web.xml
스프링 부트
- 템플릿 엔진인 Thymleaf을 이용해 화면을 구성하거나
혹은 API 서버 형태로 화면을 구성하지 않고 데이터만 제공하기도 한다. - JPA (별도의 SQL 개발이 필요없는 ORM 프레임워크)
- 기본 내장된 log4j2
- 기본 내장된 HikariCP
- 버전을 자동으로 관리해주는 build.gradle
- application.properties / application.yml
- 자바 설정
스프링 부트 프로젝트 생성
- spring initializr을 이용해 기본 템플릿 구조를 자동 생성
- 빌드 도구인 Maven/Grade를 이용한 직접 생성
사용할 라이브러리를 프로젝트 생성시 추가
- Spring Boot DevTools
- Lombok
- Spring Web
- Thymeleaf
- Spring Data JPA
- MariaDB Driver
실행
- 서버를 내장한 프로젝트이므로, 설정 필요없이 main()메서드로 프로젝트 실행
자바 8을 사용하는 경우 버전 문제
Spring - JDK 간 버전 호환Spring Framework 5.3.x with JDK 8 - 19 (expected)Spring Framework 5.2.x with JDK 8 - 15 Spring Framework 5.1.x with JDK 8 - 12 Spring Framework 5.0.x with JDK 8 - 10 Spring Framework 4.3.x with JDK 6 - 8 (its official EOL(end-of-life)) Spring Boot - JDK 간 버전 호환Spring Boot 2.3↑ with Java 9 and aboveSpring Boot 2.1↓ with Java 8 - 11 |
application.properties를 이용해 DB 설정
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/webdb
spring.datasource.username=webuser
spring.datasource.password=webuser
-> HikariCP 객체 자동 생성
편의성 높이는 설정
- 자동 리로딩 설정
- 테스트 환경에서 Lombok 사용하기 위한 build.gradle 설정
- application.properties에서 로그 레벨 설정
- Spring Data JPA 설정
- 자동 리로딩 설정
- Build and run - On frame deactivation - Update classes and resources
- 테스트 환경에서 Lombok 사용하기 위한 build.gradle 설정
testCompileOnly 'org.projectlombok:lombok:'
testAnnotationProcessor 'org.projectlombok:lombok:'
- application.properties에서 로그 레벨 설정
logging.level.org.springframework=info
logging.level.org.zerock=debug
- DataSource 설정
- 테스트 환경과 의존성 주입 테스트
스프링 부트에는 테스트 관련 설정과 테스트 코드가 미리 설정되어 있는데,
DataSourceTests 테스트 코드 작성해 HikariCP와 Lombok 확인
package org.zerock.b01;
import lombok.Cleanup;
import lombok.extern.log4j.Log4j2;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
@SpringBootTest
@Log4j2
public class DataSourceTests {
@Autowired
private DataSource dataSource;
@Test
public void testConnection() throws SQLException{
@Cleanup
Connection con = dataSource.getConnection();
log.info(con);
Assertions.assertNotNull(con);
}
}
-> @Log4j2 어노테이션을 이용해 테스트 환경에서의 Lombok 사용 테스트
-> DataSource : application.properties에 설정된 DataSource 관련 설정을 통해 생성된 빈으로, 별도 설정없이 스프링에서 사용
- Spring Data JPA 설정
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.show-sql=true
- spring.jpa.hibernate.ddl-auto : DDL 설정
- spring.jpa.properties.hibernate.format_sql : SQL 포맷팅 설정
- spring.jpa.show-sql : JPA 실행하는 SQL 출력
ddl-auto 속성값 | 의미 |
none | DDL 수행 하지 않음 |
create-drop | 실행시 DDL 수행 후, 종료시 만들어진 모든 테이블 삭제 |
create | 실행할 때마다 새롭게 테이블 생성 |
update | 변경된 부분 존재할 때만 새로 생성 |
validate | 변경된 부분만 알려주고 종료 |
스프링 부트에서 웹 개발
web.xml, servlet-context.xml과 같은 XML 설정 파일을 대신하는 클래스
Thymeleaf를 이용한 컨트롤러
(1) 기존의 스프링 MVC와 동일한 컨트롤러 작성
package org.zerock.b01.controller;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
@Log4j2
public class SampleController {
@GetMapping("/hello")
public void hello(Model model){
log.info("hello...");
model.addAttribute("msg", "HELLO WORLD");
}
}
(2) hello.html 작성
-'th' 속성을 이용하기 위해 Thymeleaf 네임스페이스를 추가해야한다.
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1 th:text="${msg}"> </h1>
</body>
</html>
JSON 데이터를 전송하는 REST 컨트롤러
JSON : 객체 표기법으로 표현한 문자열
스프링 프레임워크 사용시에는 jackson-databind 라이브러리를 추가해야한다.
스프링 부트 사용시에는 sprinb-web 라이브러리에 기본으로 내장되어있다.
데이터 교환시 프로그램 언어에 독립적이다.
package org.zerock.b01.controller;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Log4j2
public class SampleJSONController {
@GetMapping("/helloArr")
public String[] helloArr(){
log.info("helloArr...");
return new String[]{"AAA", "BBB", "CCC"};
}
}
'Server Programming > Spring Boot Backend Programming' 카테고리의 다른 글
5장-3. Spring Data JPA (+ 리스너, Optional, 쿼리메서드,JPQL, Querydsl 동적쿼리) (0) | 2022.12.04 |
---|---|
5장-2. Thymeleaf (0) | 2022.12.04 |
4장-4. 스프링 Web MVC 구현 (3) 검색과 필터링 조건 (+ 동적 쿼리, 쿼리 스트링, URLEncoder) (0) | 2022.12.02 |
4장-3. 스프링 Web MVC 구현 (2) 페이징 처리 (+ 백틱) (0) | 2022.12.01 |
4장-2. 스프링 Web MVC 구현 (1) CRUD (+@Configuration, @Bean, 브라우저 한글 처리) (0) | 2022.11.29 |