스프링 부트
JAVA 기반의 애플리케이션 프레임워크인 스프링이 제공하는 다양한 프로젝트 중 하나이다.
1.1 스프링 프레임워크
애플리케이션 개발에 필요한 기반을 제공해서 개발자가 비즈니스 로직 구현에만 집중할 수 있게끔 한다.
1.1.1 제어 역전 (IoC: Inversion of Control)
일반적인 자바는 객체를 생성하고 사용하는 일련의 작업을 개발자가 직접 제어하는 구조이다.
IoC를 적용한 스프링은 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부*에 위임한다. <- 제어 역전
제어 역전을 통해 의존성 주입(DI), 관점 지향 프로그래밍(AOP) 등이 가능하다.
외부: 스프링 컨테이너 or IoC 컨테이너
1
2
3
4
5
6
7
8
9
10
|
@RestController
public class NoDIController {
private MyService service = new MyServiceImp1();
@GetMapping("/no-di/hello")
public Spring getHello() {
return service.getHello();
}
}
|
cs |
1.1.2 의존성 주입(DI: Dependency Injection)
사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식.
의존성을 주입받는 방법
- 생성자
- 필드 객체 선언
- setter 메서드
@Autowired라는 어노테이션(annotation)을 통해 의존성을 주입한다. 스프링 4.3 이후 버전은 어노테이션 생략 가능.
생성자를 통한 의존성 주입 방식은 레퍼런스 객체 없이 객체를 초기화할 수 없기 때문에 스프링 공식 문서는 이를 권장함.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
@RestController
public class Controller {
// 생성자를 통한 의존성 주입
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;
}
@GetMapping("/di/hello")
public String getHello() {
return myService.getHello();
}
}
|
cs |
1.1.3 관점 지향 프로그래밍(AOP: Aspect-Oriented Programming)
관점을 기준으로 묶어 개발하는 방식으로, 기능을 핵심 기능과 부가 기능으로 구분함.
핵심 기능: 비즈니스 로직이 처리하려는 목적 기능
부가 기능: 로깅, 트랜잭션 etc
=> 여러 비즈니스 로직에서 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화해 삽입하는 방식
구현 방법
- 컴파일 과정에 삽입
- 바이트코드를 메모리에 로드하는 과정에 삽입
- 프락시 패턴 이용
1.2 스프링 프레임워크 vs 스프링 부트
스프링 부트를 이용하면 단독으로 실행 가능한 상용 수준의 스프링 기반 애플리케이션을 손쉽게 만들 수 있다.
1.2.1 의존성 관리
스프링 프레임워크는 개발에 필요한 각 모듈의 의존성을 직접 설정해야 했다.
하지만 스프링 부트는 'spring-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: 스프링 프레임워크의 캐시 기능을 지원한다.
1.2.2 자동 설정
애플리케이션에 추가된 라이브러리를 실행하는 데 필요한 환경 설정을 알아서 찾아 준다.
ex) @SpringBootApplication 어노테이션을 구성하는 여러 어노테이션
1.2.3 내장 WAS(Web Application Server)
스프링 부트의 각 웹 애플리케이션에는 내장 WAS가 존재한다.
ex) 톰캣
1.2.4 모니터링
개발이 끝나고 서비스를 운영하는 시기에는 해당 시스템이 사용하는 스레드, 메모리, 세션 등의 주요 요소들을 모니터링해야 한다.
스프링 부트 액추에이터(Spring Boot Actuator)라는 자체 모니터링 도구를 사용한다.
from 스프링 부트 핵심 가이드: 스프링 부트를 활용한 애플리케이션 개발 실무 (장정우, 위키북스)
'Spring Boot' 카테고리의 다른 글
2022 GDSC Spring Study 입문 - 1주차 (1) | 2022.10.02 |
---|---|
06. 데이터베이스 연동 (0) | 2022.08.11 |
05. API를 작성하는 다양한 방법 (0) | 2022.08.09 |
04. 스프링 부트 애플리케이션 개발하기 (0) | 2022.08.08 |
02. 개발에 앞서 알면 좋은 기초 지식 (0) | 2022.08.03 |