스프링은 애플리케이션을 위한 개발 환경을 제공해서 기능 개발에만 집중할 수 있게 나온 개발 도구지만 설정하기 매우 복잡하다는 단점이 있다. 실제로 스프링을 처음 접하면서 가장 어려웠던 점은 이것 저것 셋팅할 게 생각보다 많아서 배웠는데도 다시 설정하면서 어디까지 제대로 설정했는지 몰라서 어려움이 있었다.
그래서 스프링에서 이런 단점을 보완하고자 스프링 부트를 만들었다. 스프링 부트는 스프링 프레임워크를 더 쉽고 빠르게 이용할 수 있도록 만들어진 도구로 스프링 프로젝트를 설정을 더 쉽게 할 수 있고 “의존성 세트”라고 불리는 스타터(starter)를 사용해서 의존성 주입(DI)를 간편하게 이용할 수 있다.
✅ 톰캣 같은 웹 애플리케이션 서버(WAS)를 내장하고 있어 따로 설치하지 않아도 독립적으로 실행할 수 있다.
✅ 빌드 구성을 단순화하는 스프링 부트 스타터(spring boot starter)를 제공한다.
✅ xml 설정을 하지 않고 자바 코드로 모두 작성 가능하다.
✅ jar를 이용해서 자바 옵션만으로 배포가 가능하다.
✅ 애플리케이션의 모니터링 및 관리 도구인 스프링 액츄에이터(spring actuator)를 제공한다.
스프링은 애플리케이션 개발에 필요한 환경을 직접 구성하고 정의해서 사용하지만 스프링 부트는 스프링 코어와 스프링 MVC의 모든 기능을 자동으로 설정하므로 개발 환경을 따로 구성할 필요가 없다.
스프링 애플리케이션은 보통 톰캣 같은 WAS를 이용해서 배포하는데 스프링 부트에서는 WAS를 내장하고 있기 때문에 jar파일만 만들면 별도로 설치하지 않아도 된다. 스프링 부트는 톰캣만 갖고 있는 건 아니고 제티, 언더토우도 있어서 필요에 따라 WAS를 선택해서 사용할 수 있다.
스프링은 일부 파일을 XML 파일로 직접 생성해서 관리하지만 스프링 부트에서는 사용하지 않고 자바 코드로 전부 구현할 수 있다. XML을 사용 못하는 것은 아니지만 버전이 업데이트 될수록 XML 사용을 안하도록 걷어내고 있다.
스프링은 인메모리 데이터베이스를 지원하지 않지만 스프링 부트에서는 인메모리 데이터베이스를 자동으로 지원하고 있다.
IMDB 혹은 MMDB(Main Memory Datebase)라고도 하는 인메모리 데이터베이스는 디스크가 아닌 주 메모리에 모든 데이터를 보유하고 있는 데이터베이스를 말한다. 자료 접근이 빠르다는 것이 큰 장점으로 메모리상에 색인을 넣어서 필요한 모든 정보를 메모리상의 색인으로 빠르게 탐색 가능하다.
DB 서버 전원이 갑자기 꺼지면 자료들이 다 삭제되는 휘발성 매체라는 것이 단점이다. 때문에 로그인 정보 등 데이터가 날아가도 상관 없는 임시 데이터들을 주로 인메모리 데이터베이스에 저장하고 사용한다.
@SpringBootApplication
public class HellobootApplication {
public static void main(String[] args) {
SpringApplication.run(HellobootApplication.class, args);
}
}
스프링 부트 프로젝트를 생성하면 자동으로 생기는 @SpringBootApplication
어노테이션이 작성된 Application 클래스가 생긴다. 이 클래스는 자바의 main() 메소드 역할을 한다. 스프링 부트는 자바 중점으로 개발된 도구로 동작 방식이 일반 자바 프로젝트처럼 구성되어있다. 때문에 해당 클래스가 스프링 부트 프로젝트의 시작점이 된다.
SpringApplication.run()
메소드로 애플리케이션을 실행하는데 첫 번째 인수로 스프링 부트의 애플리케이션의 메인 클래스를 작성하고 두 번째 인수로 커맨드 라인의 인수를 작성한다.
@SpringBootApplication
어노테이션을 ctrl을 누른 상태로 클릭하면 아래와 같은 코드를 클래스를 확인할 수 있다.
스프링 부트 관련 설정을 나타내는 어노테이션이다. 스프링에서 사용하던 @Configuration
을 상속해서 만든 것으로 개발자가 직접 사용하진 않는다.
개발자가 등록한 빈들을 읽고 등록하는 어노테이션이다. @Component
어노테이션을 가진 클래스들을 찾아서 전부 빈으로 등록하는 역할을 하는데 @Component
어노테이션을 감싸는 @Configuration
, @Repository
, @Controller
, @RestController
, @Service
어노테이션들도 포함한다.
스프링 부트에서 자동 구성을 활성화하기 위한 어노테이션으로 스프링 부트 서버가 실행될 때 스프링 부트의 메타 파일을 읽고 정의된 설정을 자동으로 구성하는 역할을 한다. spring.factories 파일의 클래스들이 해당 어노테이션을 사용할 때 자동 설정된다.
스프링 부트는 서버를 시작할 때 구성 파일을 읽어와서 설정을 하는데(@EnableAutoConfiguration
이용) META-INF에 있는 spring.factories 파일에 자동 설정에 대한 내용이 담겨있다.
좋은 글 감사합니다.