스프링 프레임웍의 간략화 버전인 스프링Boot를 사용해 봅니다.
Ps. 스프링부트 프로젝트를 시작하는 3가지 방법
1) STS(Spring Tool Suite)에서 Spring Starter Project 생성.
2) IntelliJ 툴에서 Gradle 빌드로 SpringBoot 프로젝트 생성
3) 일반 Eclipse에서 STS플러그인추가 후 스프링부트 > Spring Starter Project 생성.
Ps. 현재 전자정부표준프레임웍크 3.8에서 프로젝트 템플릿에서는 지원하지 않음.
이 포스트에서는 세번째 방법을 사용함.
기존 스프링과 가장 큰 차이점은 스프링부트는 기존 스프링처럼 war로 배포도 되지만, 단독실행이 가능한 jar로 배포가 가능합니다.
여기서 단독실행이란, java -jar springbook-1.0.0-SNAPSHOT.jar --server.port=8080 이렇게 웹프로젝트를 실행이 가능합니다.
- 아래는 이클립스(STS플러그인포함)에서 스프링프로젝트 Packaging패키징배포를 jar로 변경 후 이클리스 Quick Fix로 돌린화면 입니다.
1. 일본인이 저자인 가장 빨리 만나는 스프링부트 (길벗출판사, 2015초)
2. 출판사소스(Old버전 Spring1.2.4): https://github.com/gilbutITbook/006815
3. 일본저자소스(New버전 Spring1.4.0): https://github.com/making/hajiboot-samples
#스프링프레임웍 사전지식 정리 ing...
- @RestController 애너테이션: 스프링4부터 지원된 Response 데이터를 Json방식으로 받는 RestFull방식 컨트롤러.
- @EnableAutoConfiguration (구)=> @SpringBootApplication (신) : 스프링부트전용 애너테이션
스프링 부트 설정이 자동으로 수행. 즉, 기존 스프링 앱에서 필요했던 설정파일(root-context.xml)이 필요없게 됨.
- @RequestMapping 을 매서드상단에 붙이면 HTTP 요청을 받아들이는 매서드임을 나타냄.
- main() 매서드: 스프링부트 앱 실행시 실행 진입점이 되는 클래스(@SpringBootApplication)의 매서드.
예)
@SpringBootApplication
public class 시작Application implements CommandLineRunner {
....
public static void main(String[] args) {
SpringApplication.run(시작Application.class, args);
}
}
- mvn spring-boot:run : 메이븐 커맨트라인에서 스프링부트 실행하기(또는 이클립스STS플러그인에서 Run As>Spring Boot App선택).
- java -jar springbook-1.0.0-SNAPSHOT.jar --server.port=8080 : 자바로 스프링프로젝트 실행(springbook 이라는 프로젝트를 만들예정).
- mvn -B archetype:generate -DgroupId=com.springs -DartifactId=springs -Dversion=1.0.0-SNAPSHOT -DarchetypeArtifactId=maven-archetype-quickstart : 메이븐 빌드로 스프링 템플릿 프로젝트 생성하기(또는 이클립스STS로 Spring Starter Project선택).
- @Data, @AllArgsConstructor : 롬복lombok 모듈을 이용해서 도메인(VO)의 멤버변수 getter/setter/toString() 매서드가 자동 생성됨.
- @Autowired (스프링용) = @inject(자바용): DI컨테이너(등록된 Bean 클래스 모듈)가 의존성 주입 해야할 클래스.
스프링 4.3버전 이상 부터 즉, 스프링부트2.x(스프링5.x) 부터는 @Autowired 애노테이션을 사용하지 않아도 DI가 가능합니다.
- @ComponentScan : 프로젝트에서 생성한 빈(Bean)클래스를 자동으로 DI컨테이너에 자동등록@SpringBootApplication (신)에서는 필요없음.
- @Component, @Controller, @Service, @Repository 등 : 스프링 부트에서 DI컨테디너에 자동 등록될 빈(Bean) 클래스 지정.
- @Controller : 스프링 웹MVC 컨트롤러를 의미. 웹URI 등록에 사용. 위에 언급한 @RestController (RestFull용)참조.
jsp와 @Service서비스연결해주는 View 프리젠테이션 레이어 클래스.
- @Service : 도메인(domain=VO,Value Object멤버변수)와 DAO(데이터엑새스Repository)를 연결해 주는 비지니스 로직 레이어 클래스.
- @Repository : 서비스와 DB엑세스(DAO) 를 연결해 주는 레이어 클래스.
- 람다방식 코딩: Java8 버전부터 지원됨 (아래 예시 부분 - 밑줄친 부분).
@SpringBootApplication
public class Application implements CommandLineRunner {
@Autowired
NamedParameterJdbcTemplate jdbcTemplate;
@Override
public void run(String... strings) throws Exception {
String sql = "SELECT id, first_name, last_name FROM customers WHERE id = :id";
SqlParameterSource param = new MapSqlParameterSource()
.addValue("id", 1);
Customer result = jdbcTemplate.queryForObject(sql, param,
(rs, rowNum) -> new Customer(rs.getInt("id"), rs.getString("first_name"), rs.getString("last_name"))
/*람다 코딩 적용 전 anonymous익명 클래스(일명 재귀함수,단축함수) => 람다코딩: (인자)->반환값
new RowMapper<Customer>() {
@Override
public Customer mapRow(ResultSet rs, int rowNum) throws SQLException {
return new Customer(rs.getInt("id"), rs.getString("first_name"), rs.getString("last_name"));
}
}
*/
); //============ End jdbcTemplate.queryForObject
System.out.println("result = " + result);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
- 스프링부트 데이터베이스 SQL에 한글 사용: (src/main/resources/application.properties[구:application.yml]
spring.datasource.sqlScriptEncoding: UTF-8 추가
예1 구:application.yml 야믈yaml파일(아래)
spring:
datasource:
driverClassName: org.h2.Driver
url: jdbc:h2:file:/tmp/testdb
username: sa
password:
sqlScriptEncoding: UTF-8
예2 신:application.properties 속설파일(아래)
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:file:./target/db/testdb
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.sqlScriptEncoding: UTF-8
- 스프링부트에 내장된 H2(Hsql2) Db 스키마 생성을 1번만 되게 DDL문 수정
CREATE table IF NOT EXISTS customers(
id int primary key auto_increment
, first_name varchar(30)
, last_name varchar(30)
);
- Legacy스프링MVC 와 스프링부트Starter 프로젝트의 비슷한 의미: VO(Value Object)=Domain=멤버클래스(변수,메서드)=Entity클래스(JPA)
- JPA(Java Persistence Api)사용 예,
package com.bootedu.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Data //롬복사용 데이터처리 명시
@NoArgsConstructor //JPA 인자없는 기본생성자 사용 명시
@AllArgsConstructor //롬복으로 Get,Set 생성자 자동생성 명시
@Entity //JPA 엔티티개체를 명시
@Table(name = "customers") //JPA에 대응하는 DB 테이블 명시
public class Customer {
@Id //기본키 지정
@GeneratedValue //기본키 AutoIncrement 지정
private Integer id;
private String firstName;
private String lastName;
@ManyToOne(fetch = FetchType.LAZY) //일대다 Relation 제약조건 명시
@JoinColumn(nullable = true, name = "username") //테이블 Join 컬럼 명시
private User user; //조인될 JPA 엔티티 클래스, DB에서는 user 테이블
}
전자정부 프레임웍 연계구축_01 (0) | 2019.11.27 |
---|---|
스프링BOOT사용_2 (0) | 2019.10.23 |
스프링 웹프로젝트 연습_12 (0) | 2019.10.20 |
스프링 웹프로젝트 연습_11 (0) | 2019.10.19 |
스프링 웹프로젝트 연습_10 (0) | 2019.10.18 |
댓글 영역