3. Application 기본 구조 및 실행

어플리케이션 개발

최초 SpringBootActuator 프로젝트 설정 (http://www.libqa.com/wiki/725 참고)이 완료되면 기본적으로 src > main > java > com > libqa 하위에 SpringBootActuatorApplication.java 파일이 생성이 되었을 것이다. 

이 클래스가 SpringBoot 어플리케이션에서 부트스트래핑과 프레임웍 구성의 두가지를 담당하는데 Spring 설정 관련 구성이 없다고는 하지만, 자동 구성을 어떤것을 쓸지 활성화 하는 최소한의 구성은 해주어야 한다. 

소스를 살펴보자. 


/**
* Created by Q u i c K
* Date : 2016-12-20
* Description : chpater 3 개발 진행
*/
package com.libqa;

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

@SpringBootApplication
public class SpringBootActuatorApplication {

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

Application 클래스는  일반적으로 다른 클래스들 위의 루트 패키지에 main application class를 위치 시키는 것을 권장한다.   Application: main()함수가 SpringContext를 실행하며 application 을 구동한다. 첫번째 인자로는 주요 Spring component 를 전달하고, 두번재 인자로 command-line 인자들을 전달한다.


그러나 위에서 꼭 살펴봐야 할 부분은 @SpringBootApplication 이라고 선언한 어노테이션이다.

이 어노테이션은 Spring의 3가지 성격을 가진 어노테이션을 묶어놓은 것이다.


  • @Configuration : 이 어노테이션은 스프링의 자바 기반 구성 클래스를 지정한다. Spring Boot는 Java-based 설정을 선호한다. 따라서 필요한 클래스에 @Configuration 을 추가하여 설정 클래스를 가져올 수 있다. 
  • @EnableAutoConfiguration : 이 어노테이션은 Spring Boot에서 기본 beans 들을 classpath 설정이나 다른 beans, 여러가지 property 등 어플리케이션에 추가된 jar와 관련된 설정을 자동으로 설정한다. 또한 EnableAutoConfiguration은 main class가 위치해있는 root package를 기본 package로 정의한다. 예를 들면, 만약 JPA 애플리케이션을 작성하는 경우에, @EnableAutoConfiguration 애노테이션이 위치한 클래스의 패키지는 @Entity 항목을 검색하는데 사용된다.
  • @ComponentScan : 컴포넌트 검색 기능을 활성화 한다. 이 어노테이션도 특별한 basePackage 속성을 지정하지 않고도 main class가 위치해있는 root package를 기본 속성으로 사용하여 자동으로 다른 컴포넌트 클래스들을 검색하여 빈으로 등록한다.


SpringBoot 1.2.0 이전 버전에서는 위 세개의 어노테이션으로 Application 의 기본구성을 작성하였으나 @ SpringBootApplication 하나로도 지원이 가능하다.


어플리케이션 프로퍼티 구성 

어플리케이션에서 관리해야 할 속성값이 있다거나 연동 환경 설정들을 이곳에 위치 시키도록 한다. 

주로 JPA설정이나 JDBC Connection, Logging, 파일의 경로나 port 변경과 같은 공통 구성 정보들을 키-벨류 형태로 구성하게 된다. 
위치는 src/main/resources 하위이다.


어플리케이션 실행

메인 메서드가 제대로 실행이 되는지 확인 하기 위해서 아래와 같이 SpringBootActuatorApplication.java 에 System.out 구문을 출력해보도록 한다.

/**
* Created by Q u i c K
* Date : 2016-12-20
* Description : chpater 3 개발 진행
*/
package com.libqa;

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

@SpringBootApplication
public class SpringBootActuatorApplication {

public static void main(String[] args) {
System.out.println("메인 어플리케이션을 실행합니다. Hello World!");
SpringApplication.run(SpringBootActuatorApplication.class, args);
}
}


이제 단축키 Control + Shift + R 을 통해 (혹은 우클릭 > run [클래스명]) 실행해보면 아래와 같이 톰캣의 기본 포트인 8080 포트로 실행되며, 콘솔창에 이쁜 로그들이 출력되는 것을 확인 할 수 있다. 

현재까지는 아무런 작업을 하지 않았으므로 당연히 에러 없이 출력이 되어야 정상이다. 


이제 기본은 출력했으므로 간단한 API를 하나 만들어보자. 


간단한 String API 출력하기 

com.libqa 패키지 하위에 rest 패키지를 만들자. (패키지 선택 후 우 클릭 > New > Package 클릭) 


rest 라고 입력 후 ok 버튼을 클릭한다.


com/libqa/rest 패키지가 생성되었으면 그 하위에 HelloWorldController.java 파일을 만든다. 


HelloWorldController.java 를 열고 아래와 같이 코딩해보자.

package com.libqa.rest;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
* @Author : yion
* @Date : 2016. 12. 29.
* @Description :
*/
@RestController
public class HelloWorldController {

@RequestMapping("/hello")
public String hello() {
return "Hello World!!";
}

}

url 로 /hello 를 호출하면 String 문자열을 반환하는 기본적인 기능을 하는 RestController 이다. 


브라우저로 접근해보면 이와같이 지정된 Hello World!!가 실행되는 것을 확인 할 수 있다. 

@RestController는 @Controller와 @ResponseBody를 합쳐놓은 기능을 수행한다. 

만약 intelliJ에 능숙한 사용자라면 이처럼 몇분도 안되어서 String 문자열이나 지정된 포멧의 API 들을 만들어 낼 수 있을것이다. 이렇게 함으로써 개발자는 어플리케이션 기능 자체에 훨씬 더 집중 할 수 있고, 기존 Spring 사용자들이 큰 허들을 겪지 않고도 MSA(Microservices Architecture) 와 같은 형태의 아키텍쳐로 개선하는 것도 어렵지 않게 도전할 수 있을 것이다.