Spring boot 개발하기

1 분 소요

부트스트래핑

신발끈을 묶는다 개념이 생소하지만 괜찮은 이름인것 같기도 함 ㅋㅋ

Spring Initializer를 이용해서 생성된 기본 소스코드는 아래처럼 구성됨.

# 자바 클래스 
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

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

@SpringBootApplication 어노테이션만 붙이면 끝
스프링 부트 어플리케이션으로 만들어 주며 스프링 부트의 기능이 작동된다. 어노테이션 소스를 따라가면 여러 어노테이션의 묶음인것을 알수 있다.
@Configuration, @ComponentScan(현재 패키지를 기본 베이스로 지정), @EnableAutoConfiguration(자동구성)

# 테스트 클래스 
package com.example.demo;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {

	@Test
	public void contextLoads() {
	}

}

테스트를 위한 코드로 테스트 케이스 수행시 자도으로 빈이 생성되어 등록까지 처리됨
Spring는 내부적으로 빈이 컨테이너에 등록되고 자동 조립된 상태에서 빈을 주입받아서 작동하게 되는데 테스트 케이스를 만들기 위해서는 @SpringBootTest 어노테이션만 붙이면 알아서 해준다.

# resources/application.properties
server.port=8000

간단히 설명하면 클래스 패스에 내장 톰켓이 지정되어 있으면 내장 톰캣서버는 자신이 가져야 할 기본 프로퍼티정보를 사용자가 지정한 application.properties에서 오버라이드해서 서버를 기동시켜 준다.
스프링 부트 자동구성에서 사용자가 설정을 커스터마이징 한다고 생각하면 이해하기 쉬울것 같다.


실행 방법:

$ mvnw spring-boot:run 

스프링 부트가 알아서 빌드하고 배포도 하고 내장 톰캣으로 서버도 기동되는 것을 볼 수 있다.

POM.XML 이해하기

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.example</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>demo</name>
	<description>Demo project for Spring Boot</description>

	<!-- 부모 스타터에서 상속 -->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.5.RELEASE</version>
		<relativePath/> 
	</parent>

	<!-- 프로퍼티 -->
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<!-- 스타터 의존성 -->
	<dependencies>
		<!-- 웹 애플리케이션을 위한 의존성 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		
		<!-- 테스트 코드 작성을 위한 의존성 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<!-- 이건뭐지? 아래에서 자세히 보자 -->
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>

복잡해 보이지만 Spring을 개발한 본사람은 너무나 간단하다는 것을 알 수 있다.
디펜던시 부분도 얼마 없고, Jar로 패키징할 때 사용하는 Manifast에 기술할 Main클래스도 없다. 개발자가 지정해야 하는 모든 구성을 스프링부트가 알아서 해 준다는 것이다.

  • 부모 스타터 상속

    부모스타터 2.0.5.RELEASE버전을 상속 받았기 때문에 부모에서 지정한 의존성 버전을 그대로 따른다고 생각하면 된다 아래 디팬던시에서 버전을 명시하지 않은 이유가 여기에 있다고 보면 된다.

  • 스타터 의존성

    웹 어플리케이션 개발을 위한 스타터를 주입함으로써 웹개발을 위한 디펜던시가 쭈욱 의존성이 추가 된다. 앞서 설명한 내용과 일치한다.

  • 부트 플러그인

    메이븐으로 어플리케이션을 실행 할 수 있는 spring-boot:run 골을 제공할 뿐 아니라 java -jar 명령어를 통해 실행가능할 수 있도록 실행가능한 Jar를 만들어준다(내부적으로 Manifest를 추가등)

카테고리:

업데이트: