Spring

spring-boot

스마트큐브 2018. 3. 26. 14:34


자주 사용하는 boot 설정 


STS 를 사용중이라면 

New -> Spring Starter Project 를 사용하면 편리하다 

Gradle , Java8 , 그룹은 회사 도메인명, Arifact 는 프로젝트명을 기재

spring-boot + web+jpa + (h2 :테스트 할때만 사용하고 통상 MariaDB 를 사용) 


만약 STS 를 사용중이지 않다면 

https://start.spring.io/ 여기 사이트를 이용해서 다운받아서 사용할수도 있다. 

주의: 패키징시 Jar 는 view 가 없을때 사용 ,  War 는 View 포함하는 경우 사용,  즉 Jar 로 선택하면 View 를 볼 수 없다.


* DevTool 은 말 그대로 개발시 편의를 주는 툴이다. 따라서 운영배포시는 포함되지 않도록 Gradle or Maven 설정이 필요하다. 

기선님 유튜브 강의

https://www.youtube.com/watch?v=5BhWpx7RW-w


H2 를 선택하면  어떤 설정도 필요 없이 바로 Spring-boot 실행이 된다. 


 DB 를 Maria 사용한다면 다음과 같은 설정이 필요하다. 

--------------------------------------------------------------------------------------------------------------------------------

<pom.xml> 에 추가할 내용


<!-- mariaDB -->

<dependency>

<groupId>org.mariadb.jdbc</groupId>

<artifactId>mariadb-java-client</artifactId>

<version>1.5.7</version>

</dependency>


application.properties 파일에 설정 내용 

# DB 연결 설정 (마리아DB 사용시) 

spring.datasource.url=jdbc:mariadb://127.0.0.1:3306/dhkim

spring.datasource.driverClassName=org.mariadb.jdbc.Driver

spring.datasource.username=test

spring.datasource.password=test1234


spring.datasource.tomcat.max-active=20

spring.datasource.tomcat.max-idel=5 


spring.jpa.show-sql=true

# Hibernate ddl auto (create, create-drop, update): with "create-drop" the database

# schema will be automatically created afresh for every start of application

spring.jpa.hibernate.ddl-auto=create


# Allows Hibernate to generate SQL optimized for a particular DBMS

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect



전체 설정 

https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

--------------------------------------------------------------------------------------------------------------------------------


위와 같이 설정하고 spring boot 시작 테스트 

: 혹시 의존성 문제가 생기면   프로젝트 폴더에 우클릭해서  maven update 해보기 


프로젝트 트리  

: 프로젝트 root 이하 

내가 가장 익숙한 패키지 구조이니 상황에 따라 변경해서 사용.

- web :  controller  모음 ,  swagger 로 노출할 컨트롤러는 모두 여기에 

- domain :  실제 DB 와 대응하는 클래스 

- model : VO 클래스 ,  DTO(=form) 클래스( = 검색 or 사용자 데이터 전송에 대응하는 클래스) 

- service : 해당 서비스의 비지니스 로직 ,  하위에 impl 폴더 만들어서 구현체 작성 

- dao :  CRUD 처리 ,  통상 JapRepository 상속받은 인터페이스 


이후 작성 순서 

1. domain  아래 테이블 정의 

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="User")
public class User implements Serializable {
	 

	@Id
	@Column(name="seq")
	@GeneratedValue(strategy = GenerationType.AUTO)
	private long seq;

	@Column(name="name",length=30)
	private String name;

	... getter setter..

}


2. dao 작성 

import org.springframework.data.jpa.repository.JpaRepository; public interface UserDao extends JpaRepository<User, long> { }


3. 컨트롤러 작성 

@RestController

@RequestMapping("/user")

public class UserController {


@Autowired

private UserDao userDao;

@GetMapping("/{index}")

public User get(HttpServletRequest req , @PathVariable long index) {

return userDao.findOne(index);

}

@PostMapping("/")

public User create(HttpServletRequest req , User user) {

return userDao.save(user);

}

}


여기까지 작성하고 post 로  submit 테스트 및  get 조회 테스트 

http://localhost:8080/user  post로 

http://localhost:8080/user/1   하면 json 리턴 되어야함 


그외 다양한 spring-boot 샘플 코드 링크