본문 바로가기

Tech/Spring

[Spring boot] 스프링 부트의 핵심

자동 구성

많은 스프링 애플리케이션에 공통으로 필요한 애플리케이션 기능을 자동으로 구성함

어떤 스프링 애플리케이션의 소스 코드에서든 애플리케이션의 특정한 지원 특징과 기능을 활성화하는 자바 구성이나 XML 구성(또는 둘 다)을 볼 수 있다.

 

예를 들어 JDBC로 관계형 데이터베이스에 접속하는 애플리케이션을 작성했다면 아마 스프링 애플리케이션 컨텍스트에 스프링 JdbcTemplate을 빈으로 구성했을 것.

 

빈 구성 메서드 모두 아주 복잡하거나 길지 않다. 하지만 둘 다 일반적인 스프링 애플리케이션의 구성에서 일부만 보여 준다. 메서드가 동일한 스프링 애플리케이션이 수도 없이 많다. 즉, 보일러플레이트 구성이다.

 

이런 일이 흔하게 일어난다면 일일이 작성할 필요가 없음. 스프링 부트는 이런 공통 구성 시나리오를 자동으로 구성할 수 있음. 스프링부트가 빈을 자동으로 구성하여 우리가 작성한 빈에 주입할 준비를 해 준다.

 

내장 데이터베이스, JdbcTemplate, JPA, Thymeleaf 템플릿, 보안, 스프링 MVC 등에 대한 자동 구성이 포함 되어 있음.

 

스타터 의존성

스프링 부트에 어떤 기능이 필요한지 알려 주면 필요한 라이브러리를 빌드에 추가한다는 것을 보장

프로젝트의 빌드에 의존성을 추가하기 쉽지 않음. 어떤 라이브러리가 필요한가? 라이브러리 그룹과 아티팩트는 무엇인가? 어떤 버전이 필요한가? 이 버전은 프로젝트에 있는 다른 의존 라이브러리와 잘 작동할까?

 

스프링 부트는 스타터 의존성 수단으로 프로젝트 의존성을 쉽게 관리함.

 

실제로 스타터 의존성은 몇 가지 기능 정의 의존성에 따라 전이적 의존성 해결 방법을 이용하여 공통으로 사용하는 라이브러리들을 모으는 조금은 특별한 메이븐(또는 그래들) 의존성일 뿐

 

예를 들어 JSON 형식의 리소스를 다루는 REST API를 스프링 MVC로 만든다고 가정하자. 추가로 JSR-303 명세에 따라 선언적 유효성 검사를 적용하고 내장 톰캣 서버로 애플리케이션을 구동하려고 한다. 이렇게 하면 메이븐이다 그래들 빌드에 최소한 의존성을 여덟 개는 추가해야 한다.

 

반면에 스프링 부트의 스타터 의존성을 사용하면 스프링 부트 '웹(Web)' 스타터(org.springframework.boot:spring-boot-starter-web)를 빌드 의존성으로 간단히 추가할 수 있다. 웹 스타터 의존성 하나만 추가하면 다른 의존성을 전이적으로 모두 끌어오므로 의존성 전체를 일일이 추가할 필요가 없다.

 

스타터 의존성은 단순히 빌드 의존성 개수를 줄이는 것보다 더 정교한 일을 함.

 

특정 기능을 지원하려면 어떤 라이브러리를 사용해야 하는지 생각할 필요 없이 해당 기능에 적절한 스타터 의존성을 찾아서 요청하면 된다. JPA를 사용하려면 'jpa' 스타터를, 보안이 필요하다면 'security' 스타터를 추가하면 된다.

 

스타터 의존성을 사용하면 필요한 라이브러리의 버전을 고민할 필요 없음. 이미 테스트를 거쳐 라이브러리 간에 호환성 문제가 없다고 호가인 된 버전을 끌어오기 때문

 

명령줄 인터페이스

스프링 부트의 이 부가 기능을 이용하면 애플리케이션 코드만 작성해도 완전한 애플리케이션을 개발할 수 있지만, 기존 프로젝트 빌드 방식에는 필요 없는 기능

스프링 애플리케이션을 빠르게 작성하는 새롭고 흥미로운 방법

 

스프링 부트 CLI(명령줄 인터페이스)는 애플리케이션 코드만 작성해도 애플리케이션을 개발할 수 있다.

 

스피링 부트 CLI가 어떤 타입을 사용했는지 발견하여 이 타입이 동작할 수 있게 클래스 패스에 알맞은 스타터 의존성을 추가함.

 

이 의존성이 클래스패스에 있으면 일련의 자동 구성이 일어나서 활성화시킨다.

 

스프링 부트 CLIs는 스프링 부트의 강력한 기능 중 선택적인 요소다. 강력하고 간결한 스프링 개발 방식을 제공하지만, 전통과는 다소 거리가 있는 개발 모델임.

 

액추에이터

스프링 부트 애플리케이션을 실행할 때 내부에서 어떤 일이 일어나는지 이해할 수 있는 기능

작동 중인 애플리케이션의 내부를 살표볼 수 있는 기능을 제공

  • 스프링 애플리케이션 컨텍스트에 구성된 빈
  • 스프링 부트의 자동 구성으로 구성된 것
  • 애플리케이션에서 사용할 수 있는 환경 변수, 시스템 프로퍼티, 구성 프로퍼티, 명령줄 인자
  • 애플리케이션에서 구동 중인 스레드의 현재 상태
  • 최근에 처리된 HTTP 요청 정보
  • 메모리 사용량, 가비지 컬렉션, 웹 요청, 데이터 소스 사용량 등 다양한 메트릭

액추에이터는 이 정보를 웹 엔드포인트와 셸 인터페이스를 사용하여 보여 준다.

 

참고 자료: 스프링 부트 코딩 공작소

 

반응형