스프링 부트 : 스프링이 목적에 따라 제공하는 프로젝트 중 하나
🌱 스프링 프레임워크
▪ 프레임워크 - 미리 만들어진 구조나 도구의 집합
▪ 스프링 프레임워크
▪ 자바 언어를 이용해 엔터프라이즈급 개발(기업 환경을 대상으로 하는 개발)을
편리하게 만들어주는 '오픈소스 경량급 애플리케이션 프레임워크'
▪ 경량급 : 필요한 모듈만 선택해서 사용하게끔 설계하는 경량 컨테이너 설계
▪ 핵심 가치 :
애플리케이션 개발에 필요한 기반을 제공해서 개발자가 비즈니스 로직 구현에만 집중할 수 있게끔 한다.
🍀 스프링 프레임워크의 특징
▪ 제어 역전(Inversion of Control)
▪ 기존 자바 개발 방식 : 객체 선언, 객체의 의존성 생성 후 사용 ➡️ 개발자가 직접 제어하는 구조
▪ 스프링의 개발 방식 : 객체를 직접 생성하지 않고, 객체의 생명주기를 외부에 위임
➡️ 객체의 관리를 컨테이너에 맡겨, 제어권을 넘긴 구조
▪ 외부 : 스프링 컨테이너 / IoC 컨테이너
▪ 제어 역전을 통해 가능한 것:
1. 의존성 주입(DI : Dependency Injection)
2. 관점지향 프로그래밍(AOP : Aspect-Oriented Programming)
1. 의존성 주입(DI : Dependency Injection)
▪ 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식
➡️ 클래스는 자신이 사용하는 의존성을 직접 생성하거나 관리하지 않고 외부로부터 필요한 의존성을 바을 수 있게 된다. 이 방식을 통해 클래스의 결합도를 줄이고 코드의 재사용성과 확장성을 증가시킬 수 있다.
▪ 의존성을 주입받는 방법 3가지
1. 생성자를 통해
2. 필드 객체 선언을 통해
3. setter 메서드를 통해
▪ 스프링에선, "@Autowired"라는 어노테이션을 통해 의존성을 주입할 수 있다.
▪ 권장하는 DI 방법 : 생성자를 통한 의존성 주입
▪ 이유 : 레퍼런스 객체 없이는 객체를 초기화할 수 없게 설계할 수 있기 때문
@RestController
public class DIController {
MyService myService;
@Autowired
public DIController(MyService myService) {
this.myService = myService;
}
@GetMapping("/di/hello")
public String getHello() {
return myService.getHello();
}
}
2. 관점 지향 프로그래밍(AOP : Aspect-Oriented Programming)
▪ AOP의 목적 : 재사용 가능한 구성을 모듈화해서
개발자가 비즈니스 로직을 구현하는 데만 집중할 수 있게 하는 것
▪ 관점을 기준으로 묶어 개발하는 방식
▪ 관점 : 핵심 기능과 부가 기능으로 구분해, 각각을 하나의 관점으로 보는 것
▪ 핵심 기능 : 비즈니스 로직이 처리하려는 목적 기능
▪ 부가 기능 : 로깅, 트랜잭션 등으로, 대개 핵심 기능 로직 수행 전 후에 붙는 동일한 로직
따라서 비즈니스 로직에서 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화해 삽입할 수 있고,
이를 AOP(Aspect-Oriented Programming)라고 한다.
▪ AOP를 구현하는 방법 3가지
1. 컴파일 과정에 삽입하는 방식
2. 바이트코드를 메모리에 로드하는 과정에 삽입하는 방식
3. 프락시 패턴을 이용한 방식 - 스프링이 사용하는 방식
🍀 스프링 프레임워크 vs 스프링 부트
▪ 스프링 프레임워크의 단점
▪ 기존 개발 방식의 문제와 한계를 극복하기 위한 다양한 기능을 제공하지만 그만큼 설정이 복잡하다.
위의 문제를 해결하기 위해 등장한 것이 스프링 부트(Spring Boot)이다.
▪ 스프링 부트의 장점
▪ 의존성 관리
▪ 스프링 프레임워크에서는 개발에 필요한 각 모듈의 의존성을 직접 설정해야 했다.
➡️ 스피링 부트에서는 'spring-boot-starter' 의존성을 제공하여 라이브러리 호환 문제를 해결 해준다.
( 의존성 조합 충돌 문제가 없도록 'spring-boot-starter-parent'가 검증된 조합을 제공한다.)
▪ 자동 설정
➡️ 스피링 부트에서는 애플리케이션을 개발하는 데 필요한 의존성을 추가하면,
프레임워크가 이를 자동으로 관리해준다.
▪ Auto Configuration으로, 애플리케이션에 추가된 라이브러리를 실행하는 데 필요한
환경 설정을 알아서 찾아준다.
▪ @SpringBootAplication 어노테이션이 위의 기능을 가능하게 해준다.
▪ @SpringBootAplication 구성
▪ @SpringBootConfiguration
▪ @EnableAutoConfiguration
▪ @ComponentScan
- @Component 시리즈 어노테이션이 붙은 클래스를 발견해 빈(Bean)에 등록해준다.
▪ @Component 시리즈 어노테이션
▪ @Controller
▪ @RestController
▪ @Service
▪ @Repository
▪ @Configuration
▪ 내장 WAS
➡️ 스피링 부트에서는 각 웹 애플리케이션에 내장 WAS(Web Application Server)가 존재하는데,
웹 애플리케이션 개발 시에는 톰켓을 내장하고 있다.
'Programming > Spring' 카테고리의 다른 글
[Spring] - 스프링 (gradle) springdoc으로 Swagger3 추가하기 (0) | 2024.02.06 |
---|---|
[Spring] - 스프링부트 API 작성 방법 : Post, Put, Delete Mapping (0) | 2024.02.06 |
[Spring] - 스프링부트 API 작성 방법 : GetMapping (0) | 2024.02.04 |
[Spring] - Controller vs RestController (0) | 2024.02.04 |
[Spring] IntelliJ 커뮤니티로 스프링 부트 프로젝트 생성하기 (feat. gradle 사용) (0) | 2024.02.01 |