스프링 부트는 스프링 프레임워크 기반 프로젝트를 복잡한 설정없이 쉽고 빠르게 만들어주는 라이브러리다. 기존 스프링에서는 사용자가 일일이 모든 필수 설정을 하나하나 해야했다. (web.xml, rootContext.xml, ServletContext.xml등..) 그러나 스프링 부트는 실행만 하면 스프링기반의 사용화가 가능한 애플리케이션을 쉽게 만들기 위해 단독 실행 가능하도록 지원한다.
필자가 느낀 가장 두드러진 점은 서버가 내장되어 있다는 것. 기존 스프링은 톰캣 설치를 시작으로 여러 가지 복잡한 설정이 필요했다. 그러나 스프링부트는 여러가지 설정을 덧붙여야 했던 불편함을 특별한 설정없이 Web Starter 의존성을 추가해 주는것만으로 해결한다.
1) 라이브러리 관리 자동화
스프링 부트의 Starter 라이브러리를 등록해 라이브러리 의존성을 손쉽게 관리할 수 있다.
2) 라이브러리 버전 자동 관리
기존 스프링에서는 라이브러리의 버전을 하나하나 직접 입력해 줘야 했다. 반면 스프링 부트는 pom.xml에 스프링 부트 버전을 입력하는 것만으로 스프링 라이브러리와 서드 파티 라이브러리들도 호환되는 버전으로 알아서 받아준다.
3) 설정의 자동화
스프링 부트는 @EnableAutoConfiguration 어노테이션 선언을 통해 스프링에서 자주 사용 했던 설정들을 알아서 등록해준다.
스프링 부트는 기본적으로 Tomcat을 내장하고 있다. @SpringBootApplication어노테이션이 선언되어있는 클래스의 main() 메소드를 실행하는 것만으로 서버를 구동시킬 수 있다. Web Starter 의존성만 추가해주면 끝이다.
5) 독립적으로 실행 가능한 JAR
웹 프로젝트라면 WAR 파일로 패키징해야하지만 스프링 부트는 내장 톰캣을 지원하기 때문에 JAR 파일로 패키징해서 웹 애플리케이션을 실행시킬 수 있다.
이클립스에서는 스프링부트 플러그인을 지원하지 않는다. 이때 필요한것이 STS(Spring Tool Suit)이다.
프로젝트를 생성하기전에 두가지를 추가로 설치해준다.
1. 퀀텀DB설치
help > Install new software... 에서 >http://quantum.sourceforge.net/update-site 설치 > mysql등 db와 연결 후 북마크 설정
2. jsp 설치
help > market에서 Eclipse Enterprise Java and Web Developer Tools 3.27 설치
여기까지 했다면 프로젝트 생성이 가능하다. 이제 프로젝트 생성방법과 그에 필요한 기초 설정들을 몇가지를 알아보자.
pom.xml
<!-- tomcat-embed-jasper -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- jstl/jstl -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- jaxb-runtime -->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.1</version>
</dependency>
<!-- jaxb-api -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
(tomcat-embed-jasper, jstl, jaxb-runtime, jaxb-api) 설치
각 레파지토리는 https://mvnrepository.com/ 에서 찾을 수 있다.
server.port=9001
#mysql.setting
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/sist?serverTimezone=Asia/Seoul
spring.datasource.username= ID
spring.datasource.password= password
#JPA setting
#스키마 생성create:기존테이블 삭제후 생성, update:변경된부분만 반영
spring.jpa.hibernate.ddl-auto=update
#ddl생성시 고유기능 사용할지
spring.jpa.generate-ddl=true
#api호출시 실행되는 sql문을 콘솔에 보여줄지
spring.jpa.show-sql=true
#사용할 데이터베이스 종류
spring.jpa.database=mysql
#mysql상세지정
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
#jsp setting
spring.mvc.view.prefix=/WEB-INF/
spring.mvc.view.suffix=.jsp
spring.devtools.livereload.enabled=true
mysql, jap, jsp, ddl, api 등 설정
다음은 dto와 dao를 만들 때 필요한 것들이다.
springBootEx숫자Application.java
package boot.day1101.coffee;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@SpringBootApplication
@ComponentScan("패키지")
@EntityScan("패키지")//Dto 인식
@EnableJpaRepositories("패키지") //dao인식
public class SpringBootEx32Application {
public static void main(String[] args) {
SpringApplication.run(SpringBootEx32Application.class, args);
}
}
spring boot에서 controller, dto, dao 등을 읽어오려면 위와 같이 추가해준다.
package ~~~;
import java.sql.Timestamp;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.CreationTimestamp;
import lombok.Data;
@Entity
@Table(name= "테이블명") // 테이블이 mysql에 만들어짐
@Data //롬북설정으로 setter getter 등
public class ABC {
@Id //각 엔티티 구별하도록 하는 식별아이디(시퀀스)
@GeneratedValue(strategy= GenerationType.AUTO)
private long num;
//컬럼명 재정의
@Column(name="A")
private String A;
@Column //안쓰면 이름 그대로
private int B;
@Column(name="C")
private String C;
@Column(name="D")
private String D;
@CreationTimestamp //엔티티가 생성되는 시점의 시간 자동 등록
@Column(updatable = false) //수정시 이컬럼은 수정 x
private Timestamp guipday;
}
dto설정과 동시에 db테이블 생성도 가능하다. 테이블명과 엔티티, 시퀀스, 컬럼명 등 설정이 가능하다.
package ~~~~~ ;
import org.springframework.data.jpa.repository.JpaRepository
public interface MyCarInter extends JpaRepository<Dto, Long> {
}
jpa리파지토리를 상속받는 인터페이스를 만든다. spring과는 다르게 int대신 long값을 넘긴다.
package ~~~;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class MycarDao {
@Autowired
MyCarInter carInter;
public void insrt(ABCDto dto) {
}
}
@Repostory와 @autowired 설정은 기존 spring과 동일하다.