
Chapter 1. 스프링 부트란?
스프링 프레임워크(Spring Framework)는 자바(ava) 기반의 애플리케이션 프레임워크로 엔터프라이즈급 애플리케이션을 개발하기 위한 다양한 기능을 제공합니다.
스프링은 목적에 따라 다양한 프로젝트를 제공하는데, 그 중 하나가 스프링 부트(Spring Boot)입니다.
1.1 스프링 프레임워크
스프링은 자바 언어를 이용해 엔터프라이즈급 개발을 편리하게 만들어주는 '오픈소스 경량급 애플리케 이션 프레임워크'로 불리고 있습니다. 쉽게 말해서 자바로 애플리케이션을 개발하는 데 필요한 기능을 제공하고 쉽게 사용하도록 돕는 도구입니다.
스프링의 핵심가치는 "애플리케이션 개발에 필요한 기반을 제공해서 개발자가 비즈니스 로직 구현에만 집중할 수 있게끔 하는 것"입니다.
뒤에 나오는 개념들을 통해서 스프링 프레임워크가 어떻게 개발자가 구현에만 집중할 수 있도록 하는 지 알아보겠습니다.
1.1.1 제어의 역전 (IoC)
일반적으로 자바에서는 객체를 사용하기 위해 다음과 같은 방식으로 코드를 구현합니다.
@RestController
public class NoDIController {
private MyService service = new MyServiceImpl();
@GetMapping("/no-di/hello")
public String getHello(){
return service.getHello();
}
}
사용하려는 객체를 선언하고, 해당 객체의 의존성을 생성한 후 객체에 제공하는 방식으로 사용하게됩니다.
하지만 제어의 역전(Inversion of Controll, IoC)를 특징으로 하는 스프링에서는 기존의 개발 방식과는 다르게 동작합니다.
IoC를 적용한 환경에서는 사용할 객체를 직접 생성하는 것이 아니라 객체의 생명주기 관리를 외부에 위임합니다.
여기서 외부는 스프링 컨테이너 또는 IoC 컨테이너 혹은 DI 컨테이너를 의미합니다.
객체의 관리를 컨테이너에 맡겨 제어권이 넘어간 것을 IoC라고 부르고, IoC를 통해 DI, AOP 등이 가능해집니다.
1.1.2 의존성 주입(Dependency Injection)
의존성 주입(DI, Dependency Injection)이란 제어 역전의 방법 중 하나로, 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식을 의미합니다.
스프링에서 의존성을 주입하는 방식에는 3가지가 존재합니다.
1. 생성자를 통한 의존성 주입
2. 필드 객체 선언을 통한 의존성 주입
3. setter 메서드를 통한 의존성 주입
스프링에서는 Autowired라는 어노테이션을 통해서 의존성을 주입할 수 있습니다.
// 1. 생성자를 통한 의존성 주입
@RestController
public class DIController {
MyService myService;
@Autowired
public DIController (MyService myService){
this.myService = myService:
}
@GetMapping("/di/hello")
public String getHello(){
return myService.getHello();
}
}
// 2. 필드 객체 선언을 통한 의존성 주입
@RestController
public class DIController {
@Autowired
private MyService myService;
}
// 3. setter 메서드를 통한 의존성 주입
@RestController
public class DIController {
MyService myService;
@Autowired
public void setMyService(MyService myService){
this.myService = myService;
}
}
현재 스프링에서 권장하는 DI 방식은 생성자를 통해 의존성을 주입받는 방식이다.
다른 방식과는 다르게 생성자를 통해 의존성을 주입받는 방식은 레퍼런스 객체 없이는 객체를 초기화할 수 없기 때문이다.
1.1.3 AOP(관점 지향 프로그래밍)
관점 지향 프로그래밍(이후 AOP; Aspect-Oriented Programming)은 스프링의 아주 중요한 특징입니다.
AOP는 관점을 기준으로 묶어서 개발하는 방식을 의미합니다.
여기서 관점이란 어떤 기능을 구현할때 핵심 기능과 부가 기능으로 구분해 각각을 하나의 관점으로 보는 것을 의미합니다.


1.1.4 스프링 프레임워크의 다양한 모듈

1.2 스프링 프레임워크 vs. 스프링 부트
스프링 프레임워크는 기존 개발 방식의 문제와 한계를 극복하기 위해서 탄생한 프레임워크입니다. 하지만 스프링 프레임워크를 실행하기 위해서는 많은 설정이 필요합니다.
스프링 부트는 이러한 스프링 프레임워크의 단점을 극복하기 위해서 별도의 복잡한 설정을 하지 않아도 스프링부트를 통해서 엔터프라이즈급 애플리케이션을 구축할 수 있습니다.

1.2.1 의존성 관리
스프링 프레임워크에서는 개발에 필요한 각 모듈의 의존성을 직접 구현해야했습니다. 하지만 스프링부트에서는 'spring-boot-starter'라는 의존성을 제공하고 이를 통해서 서로 호환되는 버전의 모듈 조합을 제공합니다.

1.2.2 자동 설정
스프링 부트는 스프링 프레임워크의 기능을 사용하기 위한 자동설정(Auto Configuration)을 지원합니다.
자동 설정은 애플리케이션에 추가된 라이브러리를 실해나느데 필요한 환경 설정을 알아서 찾아줍니다.
1.2.3 내장 WAS
스프링 부트의 각 웹 애플리케이션에는 내장 WAS(Web Application Service)가 존재합니다.
기본적으론 'spring-boot-starter-web' 의존성을 통해서 설치한 경우, Tomcat WAS가 돌게 됩니다.
1.2.4 모니터링
개발이 끝난 이후에도 서비스를 제공하고 유지보수를 위해서는 해당 시스템이 사용하는 스레드, 메모리, 세션등의 주요 요소들을 관측해야합니다. 스프링 부트에서는 Spring boot Actuator를 통해서 자체 모니터링을 통해서 관측할 수 있습니다.
해당 의존성은 metrics를 생성하게 되고 Prometheus같은 메트릭 수집 툴을 통해서 정보를 수집하고 Grafana와 같은 모니터링 시각화 툴을 통해서 확인할 수 있습니다.
'책' 카테고리의 다른 글
[Book] 스프링 부트 핵심 가이드 Chap.3 (0) | 2024.06.23 |
---|---|
[Book] 스프링 부트 핵심 가이드 Chap.2 (0) | 2024.06.23 |
[데이터베이스 첫 걸음] 4주차 공부 내용 정리 (1) | 2023.10.17 |
[데이터베이스 첫 걸음] 3주차 공부 내용 정리 (0) | 2023.10.17 |
[반효경의 운영체제] 4주차 공부 내용 정리 (1) | 2023.10.17 |

Chapter 1. 스프링 부트란?
스프링 프레임워크(Spring Framework)는 자바(ava) 기반의 애플리케이션 프레임워크로 엔터프라이즈급 애플리케이션을 개발하기 위한 다양한 기능을 제공합니다.
스프링은 목적에 따라 다양한 프로젝트를 제공하는데, 그 중 하나가 스프링 부트(Spring Boot)입니다.
1.1 스프링 프레임워크
스프링은 자바 언어를 이용해 엔터프라이즈급 개발을 편리하게 만들어주는 '오픈소스 경량급 애플리케 이션 프레임워크'로 불리고 있습니다. 쉽게 말해서 자바로 애플리케이션을 개발하는 데 필요한 기능을 제공하고 쉽게 사용하도록 돕는 도구입니다.
스프링의 핵심가치는 "애플리케이션 개발에 필요한 기반을 제공해서 개발자가 비즈니스 로직 구현에만 집중할 수 있게끔 하는 것"입니다.
뒤에 나오는 개념들을 통해서 스프링 프레임워크가 어떻게 개발자가 구현에만 집중할 수 있도록 하는 지 알아보겠습니다.
1.1.1 제어의 역전 (IoC)
일반적으로 자바에서는 객체를 사용하기 위해 다음과 같은 방식으로 코드를 구현합니다.
@RestController
public class NoDIController {
private MyService service = new MyServiceImpl();
@GetMapping("/no-di/hello")
public String getHello(){
return service.getHello();
}
}
사용하려는 객체를 선언하고, 해당 객체의 의존성을 생성한 후 객체에 제공하는 방식으로 사용하게됩니다.
하지만 제어의 역전(Inversion of Controll, IoC)를 특징으로 하는 스프링에서는 기존의 개발 방식과는 다르게 동작합니다.
IoC를 적용한 환경에서는 사용할 객체를 직접 생성하는 것이 아니라 객체의 생명주기 관리를 외부에 위임합니다.
여기서 외부는 스프링 컨테이너 또는 IoC 컨테이너 혹은 DI 컨테이너를 의미합니다.
객체의 관리를 컨테이너에 맡겨 제어권이 넘어간 것을 IoC라고 부르고, IoC를 통해 DI, AOP 등이 가능해집니다.
1.1.2 의존성 주입(Dependency Injection)
의존성 주입(DI, Dependency Injection)이란 제어 역전의 방법 중 하나로, 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식을 의미합니다.
스프링에서 의존성을 주입하는 방식에는 3가지가 존재합니다.
1. 생성자를 통한 의존성 주입
2. 필드 객체 선언을 통한 의존성 주입
3. setter 메서드를 통한 의존성 주입
스프링에서는 Autowired라는 어노테이션을 통해서 의존성을 주입할 수 있습니다.
// 1. 생성자를 통한 의존성 주입
@RestController
public class DIController {
MyService myService;
@Autowired
public DIController (MyService myService){
this.myService = myService:
}
@GetMapping("/di/hello")
public String getHello(){
return myService.getHello();
}
}
// 2. 필드 객체 선언을 통한 의존성 주입
@RestController
public class DIController {
@Autowired
private MyService myService;
}
// 3. setter 메서드를 통한 의존성 주입
@RestController
public class DIController {
MyService myService;
@Autowired
public void setMyService(MyService myService){
this.myService = myService;
}
}
현재 스프링에서 권장하는 DI 방식은 생성자를 통해 의존성을 주입받는 방식이다.
다른 방식과는 다르게 생성자를 통해 의존성을 주입받는 방식은 레퍼런스 객체 없이는 객체를 초기화할 수 없기 때문이다.
1.1.3 AOP(관점 지향 프로그래밍)
관점 지향 프로그래밍(이후 AOP; Aspect-Oriented Programming)은 스프링의 아주 중요한 특징입니다.
AOP는 관점을 기준으로 묶어서 개발하는 방식을 의미합니다.
여기서 관점이란 어떤 기능을 구현할때 핵심 기능과 부가 기능으로 구분해 각각을 하나의 관점으로 보는 것을 의미합니다.


1.1.4 스프링 프레임워크의 다양한 모듈

1.2 스프링 프레임워크 vs. 스프링 부트
스프링 프레임워크는 기존 개발 방식의 문제와 한계를 극복하기 위해서 탄생한 프레임워크입니다. 하지만 스프링 프레임워크를 실행하기 위해서는 많은 설정이 필요합니다.
스프링 부트는 이러한 스프링 프레임워크의 단점을 극복하기 위해서 별도의 복잡한 설정을 하지 않아도 스프링부트를 통해서 엔터프라이즈급 애플리케이션을 구축할 수 있습니다.

1.2.1 의존성 관리
스프링 프레임워크에서는 개발에 필요한 각 모듈의 의존성을 직접 구현해야했습니다. 하지만 스프링부트에서는 'spring-boot-starter'라는 의존성을 제공하고 이를 통해서 서로 호환되는 버전의 모듈 조합을 제공합니다.

1.2.2 자동 설정
스프링 부트는 스프링 프레임워크의 기능을 사용하기 위한 자동설정(Auto Configuration)을 지원합니다.
자동 설정은 애플리케이션에 추가된 라이브러리를 실해나느데 필요한 환경 설정을 알아서 찾아줍니다.
1.2.3 내장 WAS
스프링 부트의 각 웹 애플리케이션에는 내장 WAS(Web Application Service)가 존재합니다.
기본적으론 'spring-boot-starter-web' 의존성을 통해서 설치한 경우, Tomcat WAS가 돌게 됩니다.
1.2.4 모니터링
개발이 끝난 이후에도 서비스를 제공하고 유지보수를 위해서는 해당 시스템이 사용하는 스레드, 메모리, 세션등의 주요 요소들을 관측해야합니다. 스프링 부트에서는 Spring boot Actuator를 통해서 자체 모니터링을 통해서 관측할 수 있습니다.
해당 의존성은 metrics를 생성하게 되고 Prometheus같은 메트릭 수집 툴을 통해서 정보를 수집하고 Grafana와 같은 모니터링 시각화 툴을 통해서 확인할 수 있습니다.
'책' 카테고리의 다른 글
[Book] 스프링 부트 핵심 가이드 Chap.3 (0) | 2024.06.23 |
---|---|
[Book] 스프링 부트 핵심 가이드 Chap.2 (0) | 2024.06.23 |
[데이터베이스 첫 걸음] 4주차 공부 내용 정리 (1) | 2023.10.17 |
[데이터베이스 첫 걸음] 3주차 공부 내용 정리 (0) | 2023.10.17 |
[반효경의 운영체제] 4주차 공부 내용 정리 (1) | 2023.10.17 |