01. 스프링 부트 개발 설정


본인의 생각에는 Spring Boot란 좀더 간편한 어플리케이션 관리 체계라는 생각이 든다. 


Maven이 나오기 이전의 라이브러리 관리는 필요한 라이브러리를 찾아서 /WEB-INF/lib 폴더에 때려 넣는 것이었다. Maven을 사용하기 시작하면서는 하나씩 찾아서 넣던 라이브러리들을 pom.xml에 적어 넣기만 하면 자동으로 찾아서 넣어주니 많이 간편해 지기는 했다. 그러나 몇 백라인을 넘어가는 pom.xml의 관리도 쉬운 일은 아니다.


Spring Boot를 사용하면서도 여전히 Maven을 사용하고 pom.xml 파일을 관리하지만, pom.xml 파일의 크기는 절반 이하로 줄어든다. 이유는 스프링 부트의 모듈을 지정하면 그것에 해당하는 라이브러리가 자동으로 딸려오기 때문이다. 스프링 부트의 여러 기능 중에서도 이 기능이 제일 마음에 든다. 


스프링 부트의 또 다른 기능을 꼽자면 Javaconfig 기능이다.

물론, 스프링 부트가 아니어도 할 수 있지만 기본적으로 제공해 준다는 것과 전통적인 xml방식 보다 깔끔하고 아름답다.


부가적으로 임베디드된 웹서버라든지 서버의 상태를 확인할 수 있는 액추에이터 기능들을 한방에 구현해 준다는 것 또한 편리한 기능이라 할 수 있다.



1. 스프링 부트 프로젝트 생성

File >New > Spring Starter Project 선택면 새로운 프로젝트를 시작할 준비를 할 수 있다.




2. 기본 설정

프로젝트 이름을 정의하고, 사용할 Java 버전과 패키징 형태를 설정한다. 아마도 본격적으로 프로젝트를 시작하고자 하면 Group과 Package 항목은 자신의 프로젝트에 맞게 설정해야 할 것이다. 본인은 Packaging 항목을 War로 바꾸었다. 

이유는 내장 tomcat의 사용과 다른 WAS의 배포를 염두해 둔것이다.





3. 스프링 부트 모듈 선택

본인은 DevTools, Security, Lombok, Configuration Processor, Mail, Actuator, JPA, H2, JDBC, MyBatis, Flyway, Web 등을 선택했다.



DevTools     : 소스가 변경되면 알아서 재 시작하는 기능

Security       : Spring Security  사용한다ㅏ.

Lombok       : Lombok을 사용한 한다.

Configuration Processor : 커스텀 프로퍼티의 사용을 돕는다.

Actuator       : 실행 화경 및  상태등을 모니터링 할 수 있도록 한다.

JPA            : JPA로 개발할 수 있도록 한다.

H2             : H2 Database를 사용할 수 있도록 한다. (소개및 설치)

JDBC          : jdbcTemplate을 사용할 수 있도록 한다.

MyBatis       : MyBatis와 Spring과 MyBatis을 통합할 수 있다.

Flyway        : DB 마이그래이션 툴로 초기 실행환경을 구성하는데 유용한다.

Web          : 스프링 기반의 웹 프로젝트 라이브러리를 추가한다.



4. 설정 완료

이제 설정이 완료되었으므로 Finish 버튼을 클릭하여 실행할 준비를 마친다.



5. 실행

아직 아무것도 하지 않았지만 설정한 어플리케이션을 실행할 수는 있다.

실행은 Boot Dashboard 를 이용해서 실행시키면 된다.



아무것도 손대지 않은 상태에서 실행이 되면 좋겠지만, 아쉽게도 flyway 라이브러리로 인해 오류가 발생하므로 pom.xml 파일에서 주석처리 한다. flyway는 나중에 다시 활성화 시킬 것이다.



문제 없이 실행이 완료되었으면 http://localhost:8080/health URL을 입력하여 아래와 같이 서버의 상태를 확인할 수 잇다.  보다 상세한 서버의 상태를 보고자 하면 로그인을 해야만 확인할 수 있다. 



우리가 만든 스프링부트 어플리케이션은 액추에이터를 설정해 놓았기 때문에 기본적인 서비스가 /health 외에 다수(/mappings, /loggers, /beans, , /heapdump, /trace, /dump, /auditevents, /info, /configprops, /autoconfig, /env, /metrics)가 존재하며, 이 URI를 호출해도 로그인창이 뜨며, 로그인 후 요청한 화면으로 이동된다. 


로그인 창이 뜬 이유는 SpringSecurity가 동작하고 있다는 증거이며, 로그인 관련하여 아무런 작업도 하지 않았기 때문에 로그인 페이지가 없는 상태이다. 따라서 로그인 후 사용가능한 화면(거의 모든 화면)을 호출할 경우 아래와 같은 로그인 창이 뜨게된다.



기본 사용자 이름 'user'이며 패스워드는 로그에서 [Using default security password]를 찾아 값을 입력한다.




로그인 후  http://localhost:8080/health 를 호출하면 아래와 같이 보다 상세한 상태정보를 확인할 수 있다.



참고로 액추에이터에서 기본으로 생성한 서비스는 application.yml에서 비활성화 할 수 있다.


endopints:

enabled: false ## 전체 액추에이터 비활성화

metrics:

enabled: true  ## 매트릭스 활성화 


아래는 액추에이터 목록이다.

ID Description Sensitive
Default
actuator Provides a hypermedia-based “discovery page” for the other endpoints. Requires Spring HATEOAS to be on the classpath. TRUE
auditevents Exposes audit events information for the current application. TRUE
autoconfig Displays an auto-configuration report showing all auto-configuration candidates and the reason why they ‘were’ or ‘were not’ applied. TRUE
beans Displays a complete list of all the Spring beans in your application. TRUE
configprops Displays a collated list of all @ConfigurationProperties. TRUE
dump Performs a thread dump. TRUE
env Exposes properties from Spring’s ConfigurableEnvironment. TRUE
flyway Shows any Flyway database migrations that have been applied. TRUE
health Shows application health information (when the application is secure, a simple ‘status’ when accessed over an unauthenticated connection or full message details when authenticated). FALSE
info Displays arbitrary application info. FALSE
loggers Shows and modifies the configuration of loggers in the application. TRUE
liquibase Shows any Liquibase database migrations that have been applied. TRUE
metrics Shows ‘metrics’ information for the current application. TRUE
mappings Displays a collated list of all @RequestMapping paths. TRUE
shutdown Allows the application to be gracefully shutdown (not enabled by default). TRUE
trace Displays trace information (by default the last 100 HTTP requests). TRUE