Back-end/Springboot

[SpringBoot] 스프링 부트란?

ljs981026 2023. 5. 2. 14:46

1. 스프링 프레임워크

자바기반의 애플리케이션 프레임워크로 엔터프라이즈급 애플리케이션을 개발하기 위한 다양한 기능을 제공한다. 현재 우리나라의 '전자정부 표준 프레임워크'의 기반 기술로 채택되어 공공기관 웹 서비스를 개발할 때도 사용된다.

*엔터프라이즈급 개발: 기업 환경을 대상으로 하는 개발

 

2. 스프링의 특징

  • 제어 역전(IoC): 일반적인 자바 개발의 경우 사용하려는 객체를 선언하고 해당 객체의 의존성을 생성한 후 객체에서 제공하는 기능을 사용한다. 하지만 제어 역전을 특징으로 하는 스프링은 기존 자비 개발 방식과 다르게 동작한다. IoC를 적용한 환경에서는 사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부에 위임한다. '외부'란 스프링 컨테이너 또는 IoC 컨테이너를 의미한다. 객체의 관리를 컨테이너에 맡겨 제어권이 넘어간 것을 제어 역전이라고 부르며, 제어 역전을 통해 의존성 주입(DI), 관점 지향 프로그래밍(AOP) 등이 가능해진다.
  • 의존성 주입(DI): 제어 역전의 방법 중 하나로, 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성된 객체를 주입받아 사용하는 방식을 의미한다. 의존성 주입방식은 3가지가 있다. 스프링에서는 @Autowired라는 어노테이션을 통해 의존성을 주입할 수 있다.
    1. 생성자를 통한 의존성 주입
    2. 필드 객체 선언을 통한 의존성 주입
    3. setter 매서드를 통한 의존성 주입
// 생성자를 통한 의존성 주입
MyService myService;

@Autowired
public DIController(MyService myService) {
	this.myService = myService;
    }
    
// 필드 객체 선언을 통한 의존성 주입
@Autowired
private MyService myService;

// setter 매서드를 통한 의존성 주입
MyService myService;

@Autowired
public void setMyService(MyService myService) {
	this.myService = myService;
}
  • 관점 지향 프로그래밍(AOP): 스프링의 아주 중요한 특징이다. 관점 지향 프로그래밍은 객체지향 프로그래밍을 더욱 잘 사용하도록 돕는 개념으로, 여러 비즈니스 로직에서 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화해 삽입하는 방식을 AOP라고 합니다. AOP를 구현하는 방법은 크게 세 가지가 있는데 스프링은 프락시 패턴을 통해 AOP 기능을 제공하고 있다.
    1. 컴파일 과정에 삽입하는 방식
    2. 바이트코드를 메모리에 로드하는 과정에 삽입하는 방식
    3. 프락시 패턴을 이용한 방식

3. 스프링 부트

스프링 프레임워크에서 필요한 모듈들을 추가하다 보면 설정이 복잡해지는 문제를 해결하기 위해 등장한 것이 스프링 부트이다. 

 

4. 스프링 부트의 특징

  • 의존성 관리: 스프링 프레임워크에서는 개발에 필요한 각 모듈의 의존성을 직접 설정해야 했다. 하지만 스프링 부트에서는 이 같은 불편함을 해소하기 위해 'spring-boot-starter'라는 의존성을 제공한다. spirng-boot-starter의 의존성은 여러 종류가 있고, 각 라이브러리의 기능과 관련해서 자주 사용되고 서로 호환되는 버전의 모듈 조합을 제공한다. 
spring-boot-starter-web 스프링 MVC를 사용하는 RESTful 애플리케이션을 만들기 위한 의존성. 기본으로 톰캣(Tomcat)이 내장되어 있어 jar형식으로 실행 가능
spring-boot-starter-test JUnit Jupiter, Mockito 등의 테스트용 라이브러리를 포함
spring-boot-starter-jdbc HikariCP 커넥션 풀을 활용한 JDBC 기능을 제공
spring-boot-starter-security 스프링 시큐리티(인증, 권한, 인가 등) 기능을 제공
spring-boot-starter-data-jpa 하이버네이트를 활용한 JPA 기능을 제공
spring-boot-starter-cache 스프링 프레임워크의 캐시 기능을 지원
  • 자동 설정: 스프링 부트는 스프링 프레임워크의 기능을 사용하기 위한 자동 설정을 지원합니다. 즉, 애플리케이션을 개발하는 데 필요한 의존성을 추가하면 프레임워크가 이를 자동으로 관리해준다. 
// @SpringBootApplication의 구성
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
	excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
 	type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
//
@SpringBootApplication
public class SpringBootAplication {
	public static void main(String[] args) {
    	SpringApplication.run(SpringBootAplication.class, args);
    }
}
  • 내장 WAS: 스프링 부트의 각 웹 애플리케이션에는 WAS가 내장되어있다. 스프링 부트의 자동 설정 기능은 톰캣에도 적용되므로 특별한 설정 없이도 톰캣을 실행할 수 있다. 물론 톰캣이 아닌 다른 웹 서버로 대체할 수도 있다.
  • 모니터링: 개발이 끝나고 서비스를 운영하는 시기에는 해당 시스템이 사용하는 스레드, 메모리, 세션 등의 주요 요소들을 모니터링해야 한다. 스프링 부트에는 스프링 부트 액추에이터라는 자체 모니터링 도구가 있다.

 

참고 문헌: 스프링 부트 핵심 가이드(스프링 부트를 활용한 애플리케이션 개발 실무)

http://www.yes24.com/Product/Goods/110142898

 

스프링 부트 핵심 가이드 - YES24

입문자의 눈높이에 맞춰 차근차근 따라 하면서 배우는 스프링 부트 입문서!《스프링 부트 핵심 가이드》는 스프링 부트 기반의 애플리케이션을 개발할 때 필요한 기초적인 내용들을 소개하고,

www.yes24.com