본문 바로가기

프로그래밍/Web

[spring] Spring boot 기본 설정

ide는 인텔리제이 커뮤니티 버전을 사용하므로, 그와 관련된 설정으로 진행한다.

기본적인 스프링부트 개발환경에 mysql 붙이는 정도의 내용으로 정리.

 

ide 에서 gradle 프로젝트로 생성하면, 위 wrapper 포함해 생성되므로, 별도로 gradle 을 설치할 필요는 없다~ 

알아서 다운로드한다.

 

만약 별도록 해당 파일을 구성하려면,

인스톨러 패키지 관리자 등으로 gradle 설치~ 

gradlew 생성

$ gradle wrapper --gradle-version 3.3

 

 

 

 

 


 

 

폴더 구성

 

gradle 프로젝트는 src/main 아래에 소스들이 구성된다. 정확히 말하면 gradle 의 java plugin 의 소스 폴더  위치가 src/main/java, src/test/java 로 구분된다.

소스 폴더의 위치를 변경하려면 아래처럼 기술하고, 해당 폴더를 적용해 주면 된다.

sourceSets {
	main {
		java {
			srcDir 'src/main/java'
		}
		resources {
			srcDir 'src/main/resources'
		}
	}
	
    test {
		java {
			srcDir 'src/test/java'
		}
	}
}

 

Application.java 파일에 ComponentScan 어노테이션이 위치하므로, 콤포넌트들은 그 하위에 위치해야 한다.

 

 

기본 구성

src/

   main/

       java/

   myproject/

Application.java

OtherConfig.java

 

 sub/

controller/

model/

repository/

service/

 

src/

   main/

      resources/

          application.properties

 

src/

   main/

      resources/

         templates/

 

src/

   main/

      webapp/

         META-INF/

            

         

 

gradlew

gradlew.bat

gradle/

    wrapper/

        gradle-wrapper.jar

        gradle-wrapper.properties

 

 


 

 

build.gradle

 

// 외부 플러그인에 대한 의존성 기술

// 해당 저장소(repositories)들에서 gradle plugin을 사용함을 정의.

buildscript {
	repositories {
		mavenLocal()
		maven { url "http://repo.spring.io/snapshot" }
		maven { url "http://repo.spring.io/milestone" }
	}
	
    dependencies {
		classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.2.RELEASE");
	}
}
 

 

 

// 플러그인 적용

apply plugin: 'java'

apply plugin: 'idea'

apply plugin: 'org.springframework.boot'

 

// 라이브러리 저장소

repositories {

mavenCentral()

maven { url "http://repo.spring.io/snapshot" }

maven { url "http://repo.spring.io/libs-milestone" }

}

 

// 사용할 라이브러리들

dependencies {

compile 'org.springframework.boot:spring-boot-starter-web:1.5.2.RELEASE'

compile 'org.springframework.boot:spring-boot-starter-data-jpa'

compile 'mysql:mysql-connector-java:5.1.30'

compile 'org.springframework.boot:spring-boot-starter-thymeleaf'

 

}

 

내부 라이브러리나 하위 프로젝트 참조.

compile files('libs/my-lib.jar')

compile fileTree(dir: 'libs', include: ['*.jar'])

compile project(':libs:project-name')

 

jsp 사용하려면 추가

compile 'javax.servlet:jstl'

compile 'org.apache.tomcat.embed:tomcat-embed-jasper'

 

 

 

 

 


 

Application.properties

 

DB 관련 정보와 시스템 설정이 들어간다.

자세한 내용은 링크 참조.

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

 

 

server.port=포트

 

spring.datasource.url=jdbc:mysql//localhost/test

spring.datasource.username=user

spring.datasource.password=pwd

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

 

 

JSP

뷰로 jsp 사용시 별도 위치( /src/main/webapps/WEB-INF)

spring.view.prefix=/WEB-INF/home/

spring.view.suffix=.jsp

 

thymeleaf 템플릿 뷰 위치 변경

spring.thymeleaf.check-template-location=true

spring.thymeleaf.prefix=/WEB-INF/templates/

spring.thymeleaf.suffix=.html

spring.thymeleaf.mode=LEGACYHTML5

spring.thymeleaf.encoding=UTF-8

spring.thymeleaf.content-type=text/html

spring.thymeleaf.cache=false

 

 

jar 외부 폴더로 지정 :  file: 사용..

spring.thymeleaf.prefix=file:./templates/

spring.resources.static-location=file:///C:/project/resource/static/

spring.resource.cache-period=0

 

 


 

application.yml

 

추가적인 설정 작업

 

운영상 데몬으로 실행할 경우 pid를 알아야 하는 경우가 있는데, 스프링부트 실행시 pid 정보를 파일로 남기도록 설정할 수 있다.

spring:

pid:

file:file-name.pid

 

 

 


 

Configuration

 

Application.java

entry point 역할을 하며, main 메쏘드가 위치하게 된다. 하위로 component 들을 스캔하므로, 다른 요소들보다 상위 폴더에 위치해야 한다.

 

import org.springframework.boot.SpringApplication:

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;

import org.springframework.context.annotation.ComponentScan;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.Bean;

 

 

@SpringBootAppliction

// 위는 아래와 같다.

//@Configuration

//@EnableAutoConfiguration

//@ComponentScan

public class Application {

public static void main(String[] args) { SpringApplication.run(Application.class, args); }

}

 

 

@ComponentScan 

모든 컴포넌트를 검색한다.

 

 

@EnableAutoConfiguration

메인 설정에서 한번만 정의하는 요소로 스프링 어플리케이션을 자동으로 설정할지 여부를 결정

특정 클래스의 자동설정을 제외하는 경우 

@EnableAutoConfiguration(exclude={OtherConfiguration.class})

 

 

 

 

 


 

모델

 

import javax.persistence.*;
@Entity
@Table(name= "table_name")
public class MyData {
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "ID")
	private Long id;

	@Column(name = "TITLE", nullable = false)
	private String title;

	// getter , setter
	public Long getId() { return id; }
	public void setId( Long id) { this.id = id; }
	public String getTitle() { return title; }
	public void setTitle(String title) { this.title = title; }
}

@Id : PK 항목

@GeneratedValue : 값을 지정할때 누가 담당하는지 지정한다. 

@Column : 컬럼명이 다른경우 사용


 

저장소

 

간단히 인터페이스만을 상속해 정의해 두면 된다. 자바 리플렉션을 사용해 스프링에서 해당 객체를 생성하게 된다. JpaRepository는 기본적인 Create / Read / Update / Delete 메쏘드들이 정의되어 있다.

 

@Repository
public interface MyRepository extends JpaRepository<MyData, Long>
{

}

 

 


 

컨트롤러

 

비지니스 로직은 서비스쪽에 위치하지만 일단 샘플이므로, 컨트롤러에 작성~ 

 

 

@Controller
@ResponseBody
//@RestController : 위 두개 합친것

// 맵핑할 URL을 정의한다.
//@RequestMapping(value = "/test",method=RequestMethod.GET)

//  spring 4.3 이후 Get, Post 에 대한 어노테이션 추가되어 아래처럼 정의 가능.
//@GetMapping("/test")

public class MyController {

	@autowired
	private MyRepository repo;

	@RequestMapping(value="/test/add")
	public MyData addData( MyData data )
	{
		MyData my = repo.save(data);
		return my;
	}

	@RequestMapping("/test/list")
	public List<MyData> list( )
	{
		List<MyData> dataList = repo.findAll();
		return dataList;
	}

	@ResponseBody
	String test() {
		return "HelloWorld";
	}

	// 뷰 설정 : 리턴값은 뷰의 파일명으로 jsp의 경우 위에 정의된 폴더의 "view.jsp" 파일이다.
	@RequestMapping("/view")
	public String test(Model model) {
		model.addAttribute("test", "Hello World");
		return "view";
	}
}

 

@Controller 자동스캔으로으로 등록된다.

@RequestMapping 은 클래스->메쏘드로 상속되며, 클래스에는 @RequestMapping("/test/*") 로 지정하고, 메소드에는 @RequestMapping 만 붙이면, /test/메소드명 형태의 패턴으로 매핑된다.

 

 


 

 

타임리프와 같이 템플릿으로 지원되는 녀석들은 기본 템플릿 폴더에 작성하면된다. 하지만 이경우 함께 빌드되어 jar로 포함되므로, 뷰 수정시에도 빌드가 일어나야 하는 단점이...

 

기본 정적 폴더 위치

src/main/resources/templates/ :html파일

src/main/resources/static/ : css, javascript, image 

 

 

정적 위치 등록.

@Configuration
public class StaticConfig extends WebMvcConfigurerAdapter {
	@Override
	public void addResourceHandler(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("/test/**").addResourceLocations( "file:/opt/mypath/");
	}
}

'프로그래밍 > Web' 카테고리의 다른 글

Gradle Wrapper  (0) 2017.03.06
스프링 요청/응답  (0) 2017.02.26
JPA 쿼리 이것저것  (0) 2017.02.22
[spring] 프로퍼티 값 읽기  (0) 2017.02.21
[spring] 핸들러 인터셉터  (0) 2017.01.24
[spring] batch 작업관련 요소들  (0) 2012.09.28
[spring] JAVA코드 테스트를 위한 Spring설정  (0) 2012.09.25
[MyBatis] 기본 사용법  (0) 2012.05.13
톰캣  (0) 2012.05.10
[spring] dispatch servlet 기본  (0) 2011.05.13