Spring Boot

EUNJI LEE·2023년 8월 3일
0

Spring

목록 보기
5/13

스프링 부트?

스프링은 애플리케이션을 위한 개발 환경을 제공해서 기능 개발에만 집중할 수 있게 나온 개발 도구지만 설정하기 매우 복잡하다는 단점이 있다. 실제로 스프링을 처음 접하면서 가장 어려웠던 점은 이것 저것 셋팅할 게 생각보다 많아서 배웠는데도 다시 설정하면서 어디까지 제대로 설정했는지 몰라서 어려움이 있었다.

그래서 스프링에서 이런 단점을 보완하고자 스프링 부트를 만들었다. 스프링 부트는 스프링 프레임워크를 더 쉽고 빠르게 이용할 수 있도록 만들어진 도구로 스프링 프로젝트를 설정을 더 쉽게 할 수 있고 “의존성 세트”라고 불리는 스타터(starter)를 사용해서 의존성 주입(DI)를 간편하게 이용할 수 있다.

스프링 부트의 특징

✅ 톰캣 같은 웹 애플리케이션 서버(WAS)를 내장하고 있어 따로 설치하지 않아도 독립적으로 실행할 수 있다.

✅ 빌드 구성을 단순화하는 스프링 부트 스타터(spring boot starter)를 제공한다.

✅ xml 설정을 하지 않고 자바 코드로 모두 작성 가능하다.

✅ jar를 이용해서 자바 옵션만으로 배포가 가능하다.

✅ 애플리케이션의 모니터링 및 관리 도구인 스프링 액츄에이터(spring actuator)를 제공한다.

그래서 스프링이랑 스프링 부트의 차이점은?

💡 구성의 차이

스프링은 애플리케이션 개발에 필요한 환경을 직접 구성하고 정의해서 사용하지만 스프링 부트는 스프링 코어와 스프링 MVC의 모든 기능을 자동으로 설정하므로 개발 환경을 따로 구성할 필요가 없다.

💡 내장 WAS의 유무

스프링 애플리케이션은 보통 톰캣 같은 WAS를 이용해서 배포하는데 스프링 부트에서는 WAS를 내장하고 있기 때문에 jar파일만 만들면 별도로 설치하지 않아도 된다. 스프링 부트는 톰캣만 갖고 있는 건 아니고 제티, 언더토우도 있어서 필요에 따라 WAS를 선택해서 사용할 수 있다.

💡 XML 사용 유무

스프링은 일부 파일을 XML 파일로 직접 생성해서 관리하지만 스프링 부트에서는 사용하지 않고 자바 코드로 전부 구현할 수 있다. XML을 사용 못하는 것은 아니지만 버전이 업데이트 될수록 XML 사용을 안하도록 걷어내고 있다.

💡 인메모리

스프링은 인메모리 데이터베이스를 지원하지 않지만 스프링 부트에서는 인메모리 데이터베이스를 자동으로 지원하고 있다.

💡 인메모리 데이터베이스(IMDB : In-Memory Datebase)

IMDB 혹은 MMDB(Main Memory Datebase)라고도 하는 인메모리 데이터베이스는 디스크가 아닌 주 메모리에 모든 데이터를 보유하고 있는 데이터베이스를 말한다. 자료 접근이 빠르다는 것이 큰 장점으로 메모리상에 색인을 넣어서 필요한 모든 정보를 메모리상의 색인으로 빠르게 탐색 가능하다.

DB 서버 전원이 갑자기 꺼지면 자료들이 다 삭제되는 휘발성 매체라는 것이 단점이다. 때문에 로그인 정보 등 데이터가 날아가도 상관 없는 임시 데이터들을 주로 인메모리 데이터베이스에 저장하고 사용한다.

@SpringBootApplication

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

스프링 부트 프로젝트를 생성하면 자동으로 생기는 @SpringBootApplication 어노테이션이 작성된 Application 클래스가 생긴다. 이 클래스는 자바의 main() 메소드 역할을 한다. 스프링 부트는 자바 중점으로 개발된 도구로 동작 방식이 일반 자바 프로젝트처럼 구성되어있다. 때문에 해당 클래스가 스프링 부트 프로젝트의 시작점이 된다.

SpringApplication.run() 메소드로 애플리케이션을 실행하는데 첫 번째 인수로 스프링 부트의 애플리케이션의 메인 클래스를 작성하고 두 번째 인수로 커맨드 라인의 인수를 작성한다.

@SpringBootApplication 어노테이션을 ctrl을 누른 상태로 클릭하면 아래와 같은 코드를 클래스를 확인할 수 있다.

@SpringBootConfiguration

스프링 부트 관련 설정을 나타내는 어노테이션이다. 스프링에서 사용하던 @Configuration을 상속해서 만든 것으로 개발자가 직접 사용하진 않는다.

@ComponentScan

개발자가 등록한 빈들을 읽고 등록하는 어노테이션이다. @Component 어노테이션을 가진 클래스들을 찾아서 전부 빈으로 등록하는 역할을 하는데 @Component 어노테이션을 감싸는 @Configuration, @Repository, @Controller, @RestController, @Service 어노테이션들도 포함한다.

@EnableAutoConfiguration

스프링 부트에서 자동 구성을 활성화하기 위한 어노테이션으로 스프링 부트 서버가 실행될 때 스프링 부트의 메타 파일을 읽고 정의된 설정을 자동으로 구성하는 역할을 한다. spring.factories 파일의 클래스들이 해당 어노테이션을 사용할 때 자동 설정된다.

💡 자동 구성

스프링 부트는 서버를 시작할 때 구성 파일을 읽어와서 설정을 하는데(@EnableAutoConfiguration 이용) META-INF에 있는 spring.factories 파일에 자동 설정에 대한 내용이 담겨있다.

profile
천천히 기록해보는 비비로그

1개의 댓글

comment-user-thumbnail
2023년 8월 3일

좋은 글 감사합니다.

답글 달기