Spring Boot

MisCaminos·2021년 4월 2일
0

Server & Web

목록 보기
20/23
post-thumbnail

What is Spring Boot?

Spring based application을 만들때 Spring Boot를 사용하면 spring configuration을 최소화할 수 있어서 application(web app or otherwise)를 빠르게 만들 수 있다. 개발자가 사용하고자 하는 tool를 지정하면, spring boot가 적절하거나/일반적이라고 생각하는 default configuration을 자동으로 설정하고 third-party libraries또한 자동으로 제공하기 때문이다. (unless there's license issues) 이를 개발자가 알아서 override할 수 있다.

예를 들어 JPA를 spring boot starter에 포함하고자 하면, boot에서 알아서 memory database, hibernate entity manager, simple datasource등을 autoconfigure해준다. Autoconfiguration을 통해서 일반적으로 필요한 dependencies를 classpath에 더해준다. 이런 default configuration을 그대로 사용할수도있고 아니면 maven 또는 gradle에 dependencies 설정을 수정해서 application을 build할 수 있다.

Spring Boot가 자동으로 포시키는 라이브러리에는 서버도 포함이 된다. Boot에서는 내장 서버가 포함되어있어서 tomcat과 같이 서버를 추가로 설치하지 않아도 바로 서버에서 run하는 application의 개발이 가능하다. 톰캣이나 제티(Jetty)와 같은 웹 애플리케이션 서버(WAS Web Application Server)에 배포하지 않고도 실행할 수 있는 JAR 또는 WAR 파일로 웹 애플리케이션을 개발할 수 있다.

STS는 기본적으로 project build 도구로 maven을 내장하고있지만, gradle을 선택하여 대신 사용할 수 있다. gradle은 maven에서 사용되는 방대한 xml 설정파일들을 간소화해서 더 간략하게 설정할 수 있는 build 도구이다.

Spring boot project의 구성

src/main/java
자바소스 폴더

SapmleApplication.java
Spring application을 시작할 수 있는 main메소드가 존재하는 스프링 구성하는 메인 클래스

ServletInitialier.java
기존 web container에 deploy된 WAR archive에서부터 spring application을 실행시키는 역할. Application context에서 Servlet, Filter, ServletContextInitializer beans를 서버로 bind해주는 클래스

src/main/resources/static
HTML, 스타일 시트, 자바스크립트, 이미지 등의 정적 리소스 폴더

application.properties
애플리케이션 및 스프링의 설정 등에서 사용할 여러 가지 프로퍼티(property)정의

Project and External Dependencies
Gradle에 명시된 프로젝트의 필수 라이브러리 모음

src
JSP등 리소스 디렉토리

build.gradle
Gradle 빌드 명세, 프로젝트에 필요한 라이브러리 관리, 빌드 배포 설정
스프링 부트의 버전을 명시
자바 버전 명시
의존성 옵션:
implementation: 의존 라이브러리 수정시 본 모듈까지만 재빌드(재컴파일)
api: 의존 라이브러리 수정시 본 모듈을 의존하는 모듈들도 재빌드(재컴파일)
compileOnly: compile 시에만 빌드하고 빌드 결과물에는 포함하지 않음
runtime(실행)시 필요없는 라이브러리인 경우
runtimeOnly: runtime 시에만 필요한 라이브러리인 경우
providedRuntime: 실행시 제공되는 library
testImplementation: 테스트시 관련 library 제공


Spring Boot 실습

SampleApplication.java는 spring 구성 메인 클래스이다. 여기에서 application으 시작할 수 있는 main method가 존재한다. main method는 스프링 부트의 SampleApplication.run() 메소드를 사용하여 스프링 부트 프로젝트 애플리케이션을 실행할 수 있게 한다.

@SpringBootApplication는 스프링 부트의 핵심 어노테이션 - 아래 3개의 스프링 부트 어노테이션으로 구성된다.

@EnableAutoConfiguration : 스프링의 다양한 설정을 자동으로 구성한다.
@ComponentScan : 컴포넌트 클래스를 검색하고 검색된 컴포넌트 및 클래스를 스프링 application context에 등록한다.
@Configuration : 자바기반 설정 파일임을 뜻한다.(XML설정 대신 사용)

SampleApplication.java:

package com.example.sample;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

//ComponentScan을 사용해서 Controller등 자동 인식 package 설정 추가필요. 
//아래와 같이 com.example package아래 sample.controller.*, validator.* (Controller 클래스들)이 application context에 등록됨.
@SpringBootApplication
@ComponentScan(basePackages = {"com.example.*"})
public class SampleApplication {

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

ServletInitializer.java:

package com.example.sample;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

public class ServletInitializer extends SpringBootServletInitializer {

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
		return application.sources(SampleApplication.class);
	}

}

build.gradle:

//Gradle 빌드 명세, 프로젝트에 필요한 라이브러리 관리, 빌드 배포 설정

plugins {
	id 'org.springframework.boot' version '2.4.4' //spring boot version을 명시
	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
	id 'java' //자바 버젼 명시
	id 'war'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
	mavenCentral() //라이브러리를 받아오는 저장소 설정
}

 //필요한 라이브러리 의존성을 설정한다. 라이브러리 추가할때마다 변경된다
dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
    //개발편의를 위한 모듈 devtools 추가. 아래 respository 사이트에서 가져온다.
    // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools
    implementation group: 'org.springframework.boot', name: 'spring-boot-devtools', version: '2.4.3'
    //jstl사용을 위한 라이브러리 추가
    implementation 'javax.servlet:jstl'
    //톰캣이 jsp파일을 컴파일할 수 있도록 만들어주는 라이브러리 추가
    implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
    //annotation검증을 위한 spring-boot-starter-validation 설정
    implementation 'org.springframework.boot:spring-boot-starter-validation'  
}

test {
	useJUnitPlatform()
}

src/main/resources/application.properties:

server.port=8000

# DEVTOOLS (DevToolsProperties)
spring.devtools.livereload.enabled=true

# jsp 설정
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

References

  1. Spring boot 시작하기, sample 프로젝트 생성 from lectureblue
profile
Learning to code and analyze data

0개의 댓글