[번역글]Java 개발자가 알아야 할 Spring Boot 특징 5가지

서론

당신은 스프링부트에 대해서 들어봤을 것입니다. 스프링부트는 단 140여 글자로 스프링 웹 어플리케이션을 만들 수 있
습니다. 그런데 이게 무엇을 뜻하는지 아시나요? 스프링부트에 강력한 기능을 제공하고 스프링 개발을 쉽게하도록 하는
기능은 무엇일까요? 이것이 바로 이번 포스팅에서 살펴볼 내용입니다. 이번 포스팅에서는 스프링부트의 자동설정, 스타
터 디펜던시, 스프링부트 CLI, Actuator, Spring Initializer에 대해 깊게 살펴보겠습니다. 이것들은 대부분 Spring 기반 Java 웹어플리케이션을 개발할 때 발생했던 고통과 어려움을 없애주는 기능입니다.

먼저 본론으로 들어가기전, 스프링 자바 기반 개발을 할때 발생하는 문제들을 되짚어봅시다. 

스프링은 의심할 여지없이 훌륭한 프레임워크입니다. 스프링은 객체를 생성해서 디펜던시를 통해 제공해주고, 스프링을
사용하지 않았더라면 작성했을 많은 코드들을 안써도 되도록 해줍니다. 하지만 설정과 학습측면에서는 많은 것이 요구되기도 하였습니다.

새로운 스프링 기반 자바 어플리케이션을 처음부터 시작해야하는 프로젝트에서 작업을 한 적이 있다면 이것은 쉬운일이
아니라는 것을 알고 있을 것입니다. pom에 작성할 dependency들을 찾아야 하고, 호환이 맞는지 확인도 해야할 것입니다.
또한, 스프링을 활용하기 위해 많은 beans에 대해서 설정을 할 것입니다.

예컨데, JSON 포맷을 지원하는 내장톰캣으로 작동하는 스프링 MVC 기반 REST 어플리케이션을 생성한다면, 
pom에 대략 8개~10개정도의 dependency를 만들어야 할 것입니다. 
예를 들어, spring-core.jar, spring-mvc.jar, jackson.jar, embedded-tomcat.jar 등등 말이지요. 

하지만 이것은 아주 쉬운 설정의 케이스입니다.

스프링부트는 이러한 어려움들을 없애주고 중요한 비즈니스 코드를 작성하도록 도와줍니다. 위에서 언급한 스프링부트의 특징들은 모두 스프링 기반 자바 개발을 쉽게하는데 목표로 하고 있습니다.

그럼 이제 본론으로 넘어가보겠습니다.


1. 자동설정 (AutoConfiguration)

아마 이전에 스프링 기반 자바 웹 어플리케이션을 개발한적이 있었을 것입니다. RDB와 연동했을 테고 H2와 같은 인메
모리 DB와도 연결을 했을 텐데, 그렇다면 아시다시피 JDBCTemplate을 스프링 빈으로 선언하고 DataSource를 설정했
을 것입니다.

자바설정을 이용하는 최신 스프링 어플리케이션에서는 설정 클래스에 아래의 설정메소드 두가지를 작성했어야 할겁니다.

@Bean 
public JdbcTemplate jdbcTempalte(DateSource ds){ 
   return new JdbcTempalte(ds); 
} 
@Bean 
public DataSource dataSource(){ 
  return new EmbeddedDatabaseBuilder() 
     .setType(EmbeddedDatabaseType.H2) 
     .addScripts('ddl.sql', 'data.sql') 
     .build(); 
} 

 

스프링을 초창기부터 개발하셨던 분들이라면 위 설정이 그리 어렵게 느껴지지 않겠지만, 이번에 새로 시작한 신입개발
자이거나 뉴비인 경우 수시간 혹은 수일에 걸쳐 이를 알아내야 할 것입니다. 왜 필요한지 왜 사용하는지에 관해서요.

그러나 더욱 중요한것은 이것은 어플리케이션의 종류에 따라 바뀌는 것이 아닌 누구나 작성했어야하는 코드라는 것
입니다. 이러한 코드는 유니크하지 않았고, JDBC를 이용하는 모든 스프링 어플리케이션은 모두 작성했어야 했습니다.

이러한 와중에 스프링부트의 "자동설정" 방법이 등장하게 됩니다. 이는 클래스 패스(경로)에 특정 클래스가 있는지
감지한 후 자동으로 모든 설정을 구성합니다.

예컨데, 클래스 패스와 H2.jar에 JDBC 템플릿을 추가했다면 스프링 부트는 자동으로 인메모리 데이터베이스와 JDBC템플릿을 자동으로 구성해줍니다. 위에처럼 코드를 작성할 필요가 없습니다.

이것은 하나의 예시일뿐, 스프링부트의 자동설정은 200개 이상의 비슷한 설정을 해결하고 JAR 디펜던시를 검사하여
많은 기능을 자동으로 구성해줍니다. 예를 들어 spring-mvc.jar가 존재한다면, 자동으로 DispatcherServlet과 InternalViewResolver 등을 구성해줍니다.

JPA와 Hibernate를 사용한다면 이와 관련된 설정을 구성해주고, spring-security를 사용한다면 마찬가지로 기본적인
어플리케이션 보안을 위한 basic security를 설정해줍니다.

자동설정은 기본적으로 비활성화 되있으며 구성 클래스에서 @EnableAutoConfiguration 또는 @SpringBootApplication
어노테이션을 사용하여 활성화할 수 있습니다. 필자는 주로 Main 클래스에 어노테이션을 사용하며 embedded 톰캣서버를 사용합니다.

스프링부트 1.2 이후버전에서 @SpringBootApplication 어노테이션을 사용하는 것이 좋습니다. 다른 어노테이션을 결합
하여 코드를 더 읽기 쉽게 만들어줍니다.

요컨데, 스프링부트의 자동설정은 많은 작업(코드작성, 설정)을 줄여 개발시간을 단축시켜주므로 스프링부트를 사용할
때마다 자동설정을 활용하는 것이 좋다고 생각합니다.

 

 

2. Starter POMs

공통적인 기능들에 대한 자동설정으로 설정에 대한 어려움을 날려버리는 동안, Starter POMs는 프로젝트에서 디펜던시를 찾고 추가하는 것에 대한 어려움을 없애주었습니다.

Jackson을 지원하는 간단한 스프링 MVC 기반 REST 어플리케이션을 빌드하고 임베디드 컨테이너를 실행하려면 최소한
다음의 디펜던시가 필요합니다.
spring-core.jar
spring-web.jar
spring-webmvc.jar
jackson-databind.jar
tomcat-embed-core.jar
tomcat-embed-el.jar
tomcat-embed-logging-juil.jar

이러한 모든 디펜던시들을 추가하고 호환이 맞는 편리한 버전을 걱정하기보다, 그냥 하나만 추가하면 됩니다.
또한 모든 버전이 테스트되고 호환성의 문제가 없을 것이라고 확신합니다.

또하나의 starter POMs를 사용하는 부수적인 이득은 당신이 모든 디펜던시들을 찾고 기억해낼 필요가 없다는 것입니다.
웹 어플리케이션을 만드려고 한다면 단지 web starter 만을 추가하면 됩니다. JPA 어플리케이션을 만들려고 한다면, 스프링 부트가 기억하고 사용하기 쉬운 공통 종속성 및 기능을 집계하여 JPA starter를 추가하면 됩니다.

요컨데, Starter POMs 혹은 starter 디펜던시는 또하나의 스프링 부트의 개발 단순화를 위한 멋진 특징입니다.
자동설정과 비슷하게 자주 사용하게 될것입니다.



3. 스프링 부트 CLI

스프링 부트 CLI는 Command Line Interface의약자로 스프링 부트프레임워크에서 제공하는 것입니다. 이는 Groovy 언어를 통해서 프로젝트를 구성하는 것입니다. 사실 Groovy와 스프링 부트는 완전히 상호 보완적입니다. Groovy는 자바 개발을 쉽게 하는 것이 목표이고, 스프링 부트도 마찬가지로 스프링 어플리케이션 개발을 쉽고 간단하게 개발하기 위한 도구입니다.

스프링부트의 자동설정과 starter 디펜던시가 스프링부트의 전체적인 기능이라면, CLI는 선택적인 것입니다. 또한 사용하기 위해 install 하는 과정이 필요합니다.

다음은 Groovy 및 스프링 부트 CLI의 간단한 HelloWorld RESTful 웹 서비스이며 다음과 같이 컴파일하지 않고 실행할
수 있습니다.

@RestController 
class HelloSpringBootController{ 
  @RequestMapping("/") 
  def hello() { 
    return "Hello Spring Boot CLI" 
   } 
} 

 

이게 끝입니다.! 스프링 부트 CLI, web.xml, 설정 및 서버 설정이 없는 내장 컨테이너에서 실행할 수 있습니다.

Groovy가 @RestController 및 @RequestMapping 어노테이션에 대해 어떻게 알고 있는지와 같이 이러한 모든 기능이 
어떻게 작동하는지 궁금하다면 Spring Boot CLI가 자동 구성 및 스타터 POM 기능을 활용하여 응용 프로그램 코드 작성에만 집중할 수 있었음을 알려 드리겠습니다.

Spring Boot CLI는 @RestController 및 @RequestMapping이 사용 중임을 감지하고 작동하기 위해 클래스 경로에 추가해야하는 스타터 디펜던시를 파악합니다.

일련의 디펜던시들을 다운로드하면 자동설정이 시작되고 이를 사용하도록 합니다.
( 예를 들어, spring-boot-web-starter가 읽어들여지면 spring-mvc.jar를 다운로드하고 DispatcherServlet을 자동으로 설정하고 스프링 MVC를 활성화합니다. )



4. Actuator

Actuator는 또하나의 놀라운 스프링 부트의 특징입니다. 이는 스프링 부트 어플리케이션이 실행 중 무슨 일이 일어나고
있는지를 볼 수 있습니다. 자동 설정의 모든 장점들로 인해 응용프로그램 내부에 무엇이 있는지 알지 못할 위험이 있으며 해당 위험은 Spring Actuator에 의해 해결됩니다.

이는 프로덕션 환경에서 어플리케이션을 실행하는데 많은 통찰력과 메리트를 제공합니다. 예를 들어, Actuator를 사용하면 어플리케이션 컨텍스트에서 구성되는 Bean을 정확하게 찾을 수 있고, 자동 설정 결정사항, 응용프로그램에 사용하능한 환경변수, 시스템 변수, 커맨드라인 인수 등이 있습니다.

또한, 다양한 애플리케이션 지표와 함께 애플리케이션에서 처리 한 HTTP 요청의 흔적을 얻을 수도 있습니다. CPU 및 
메모리 사용량, 가비지 콜렉션 세부 사항, 웹 요청 및 데이터 소스 사용량 등이 있습니다.

Spring Boot Actuator는 데이터를 검색하기위한 여러 엔드 포인트도 제공합니다 
(예를 들어 : RESTful API를 사용하여이 모든 것을 얻거나 원격 쉘 기능을 사용하여 애플리케이션 내부로 안전하게 
들어가서 명령을 실행하여이 모든 정보를 얻을 수 있습니다.

또한, JMX MBean을 사용하여 이 모든 기능을 제공하므로 JConsole과 같은 JMX 클라이언트를 사용하여 런타임에 
제어 할 수 있습니다.

동시에 기밀 정보를 노출 할뿐만 아니라 위험하기 때문에 Actuator 엔드 포인트에 대한 액세스를 보호해야합니다. 
예를 들어, 누구나 / shutdown 엔드 포인트를 사용하여 애플리케이션을 중지 할 수 있습니다. 하지만 걱정할 필요는 
없습니다. 다른 Spring 애플리케이션과 마찬가지로 Spring Security를 ​​사용하여 Actuator 엔드 포인트를 보호 할 수 있습니다.



5. 스프링 부트 Initializer

Spring Initializer는 프로젝트 구조 관점에서 문제를 해결할 수 있는 스프링 부트의 기능입니다. Kotlin, Java, Groovy 또는
스프링 부트를 사용하여 Maven 혹은 Gradle 프로젝트를 생성할 수 있는 웹 어플리케이션입니다.

GUI의 Project MetaData 만 제공하면됩니다.(예를 들어, 프로젝트 이름, 그룹, 아티팩트 등. 또한 큰 목록에서 스타터 종속성을 선택할 수 있습니다. 웹, JPA 또는 보안 스타터)

Spring Initializer 프로젝트는  https://start.spring.io/. 여기서 접근할 수 있습니다. 프로젝트를 생성하면, Zip 파일을 다운
로드하여 IDE(Eclipse or IntelliJ 같은 개발도구)에서 프로젝트를 구성하면 됩니다. 그런다음 코드를 작성하면 됩니다.

필자의 경험에 따르면, 많은 Java 및 Spring 개발자가 겪는 일반적인 문제 중 하나는 프로젝트를 시작하는 방법입니다. 
많은 사람들이 Java 파일, 리소스 파일 등을 어떻게 사용할지 잘 모르는 것 같습니다.

Maven, Gradle, IntelliJ IDEA 및 Eclipse는 기본 구조를 제공하는 데 도움이되지만 여전히 두 가지 기술에 능숙해야 미리 시작할 수 있으며 Maven 또는 IDE에 익숙하지 않은 경우에는 또 다시 구조를 파악해야하는 악몽에 시달릴 것입니다.

Spring Boot Initaizer는 이 문제를 해결하고 Spring 프레임 워크의 많은 내부 세부 사항을 알지 않아도 Spring 기반 Java 어플리케이션을 쉽게 개발할 수 있도록 합니다.

지금까지 Java 개발자가 알아야 할 Spring Boot의 일부 기능에 대해 설명했습니다. 이러한 기능은 실제로 Java 및 Spring과의 작업을 재미 있고 생산적으로 만들어 주므로 점점 더 많은 회사에서 Java 개발에 Spring Boot를 채택하고 있습니다. Spring Boot 경험이있는 Java 개발자도 수요가 많으며 Java 웹 개발자로서 다음 아이템을 찾고 있다면 Spring Boot 기술을 배워보시는 건 어떨까싶습니다.

 

 

원본 : https://dzone.com/articles/top-5-spring-boot-features-java-developers-should



긴글 읽어주셔서 감사합니다. 
좋아요 눌러주시면 감사드리겠습니다.












댓글

Designed by JB FACTORY