Spring boot 빠르게 시작해보자

Spring boot를 이용하여 API 서버를 개발해보자!

start.spring.io 에서 설정해서 시작해도 된다.

maven을 이용하여 시작해보자.
일단 메이븐 프로젝트를 생성한다.
그럼 pom.xml 파일이 있을 것이다.
pom파일에 아래와 같이 추가한다.

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.3.RELEASE</version>
        <relativePath/>
    </parent>

위의 아이는 버전관리 및 플러그인, 인코딩 자바 버전 등이 설정 되어있다.
참으로 좋은 녀석이다.
다음으론 아래와 같이 dependencies 들을 추가한다.


<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>

첫 번째 있는 spring-boot-starter 에는 스프링 부트의 핵심인?(필자기준 아닐수도 있음) autoconfigure가 포함되어 있다.
그리고 스프링 부트는 기본으로 logback을 사용하고 있다.
그런데 가만보면 이상한점이 있다. 버전을 정보가 없다. 그 이유는 parent에서 관리는 해주기 때문이다.
니가 뭔데 버전을 관리하냐 나는 내가 할거다 하는 사람은 버전을 명시적으로 써주면 된다.

흠. 설정이 끝났다.
메인 클래스 만들자.

@SpringBootApplication
public class Application {

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

메인 클래스 작성도 끝났다. 실행시켜보자. 아무 에러가 없다면 준비는 끝났다.
이 클래스에 중요한건 @SpringBootApplication 어노테이션이다.
저 안에는 @Configuration ,@EnableAutoConfiguration,@ComponentScan 애노테이션이 있다.
아주 쓸모있는 아이다.

이제 API를 서버를 만들자.
서버를 띄우기 위해선 아래와 같이 추가를 한다.

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

이놈도 무시무시한놈이다. 내장톰캣을 사용하고 웹에 필요한 라이브러리들을 추가해준다.
다음으론 메인 클래스를 조금 수정하자. 아니 추가하자.

@SpringBootApplication
@RestController
public class Application {

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

    @RequestMapping("hello")
    public String hello(){
        return "hello world";
    }
}

이제 모든 준비는 끝났다.
메인 클래스를 실행시키자!
서버가 시작되었면 http://localhost:8080/hello로 접속을 해보자
hello world가 웹페이지에 있다면 성공적으로 API서버를 만들었다.

참고 : Starter POMs

spring-boot-autoconfiguration

spring boot autoconfiguration 정리

ConditionalOnMissingBean

@ConditionalOnMissingBean

Bean 이 존재 하지 않을때 실행되는 어노테이션이다.
bean name(String)으로 설정 할 수 도 있고 class(해보지 않음) 혹은 annotation(이것도 안해봄)등 설정 할 수 있는 모양이다.

예) @ConditionalOnMissingBean(name = "helloConfigSample")
helloConfigSample 존재 하지 않을때 실행하라.

ConditionalOnBean

@ConditionalOnBean

이 전과 반대로 Bean이 존재 할때 실행 되는 어노테이션이다.

예) @ConditionalOnBean(name = "helloConfig")
helloConfig 존재 할때 실행하라.

ConditionalOnProperty

@ConditionalOnProperty

속성중 prefix라는 속성이 있는데 이 속성의 해당되는 프로퍼티 값이 있다면 실행된다.

예) @ConditionalOnProperty(prefix = "autoconfig.sample", name = "id")

EnableConfigurationProperties

@EnableConfigurationProperties

ConditionalOnProperty 같이 사용하는 어노테이션이다. 프로퍼티의(예를 들어) autoconfig.sample.id 가 있다면 id 값을 저장 해놓기 위한 class가 필요 하다. 그용도로 사용한다.
EnableConfigurationProperties 만 있어도 사용은 가능하지만 프로퍼티의 autoconfig.sample.id 설정하지 않았다면 null 로 나온다. 만약 사용한다면 위의 어노테이션이랑 사용하길 권장한다.

예) @EnableConfigurationProperties(SampleProperties.class)

ConditionalOnWebApplication

@ConditionalOnWebApplication

웹인지 아닌지 판단 하는 어노테이션이다. web 일경우 실행된다. 별거 없다.

예) @ConditionalOnWebApplication

ConditionalOnNotWebApplication

@ConditionalOnNotWebApplication

위와 반대로 web이 아닐경우 실행된다.

예) @ConditionalOnNotWebApplication

ConditionalOnJava

@ConditionalOnJava

자바 버전을 설정 하는 어노테이션이다.
현재 버전(자신의 버전)설정한 버전 보다 낮으면 실행된다.
예를 들어 자신의 버전이 1.8 이고 설정한 버전이 1.8 버전보다 작거나 같다면 실행되고 높으면 실행 되지 않는다.

예) @ConditionalOnJava(value = ConditionalOnJava.JavaVersion.SIX)

ConditionalOnResource

@ConditionalOnResource

리소스 경로에 파일이 있으면 실행되는 어노테이션이다. 특정 경로를 지정해주면 된다.

예) @ConditionalOnResource(resources = "classpath:/META-INF/resourcesfile")

ConditionalOnClass

@ConditionalOnClass

처음에 bean과 동일하게 class를 지정 해주면 된다.(해보진 않았다. 동일하다고 예상된다. jar로 묶어야 되는데 귀찮)
name으로 지정시에는 풀 패키지명을 써줘야 된다.

예) @ConditionalOnClass(name = "com.example.annotation.HelloConfig") 이것만 해봐서 예로 달아놨다.

ConditionalOnMissingClass

@ConditionalOnMissingClass

위의 어노테이션이랑 반대되는 어노테이션이다. 이것도 해보지않았다. name 으로만 해보았다.

예) @ConditionalOnMissingClass(name = "com.example.annotation.HelloConfigMissing")

ConditionalOnExpression

@ConditionalOnExpression

표현식으로 나타낼수 있는 어노테이션이다.

예) @ConditionalOnExpression(value = "'${spring.application.name}' == 'spring-autoconfig'")

위의 어노테션 말고도 몇가지가 더 있는데 자주 쓸만한건 없는거 같다.