1. 스프링이란?
1) 스프링의 개념
- 자바 기반의 웹 애플리케이션을 만들 수 있는 프레임워크
- 스프링 프레임워크는 현대 자바 기반의 엔터프라이즈 애플리케이션을 위한 프로그래밍 및 Configuration Model을 제공
2) 스프링의 특징
- 자바 객체와 라이브러리들을 관리해 주며, 내장 톰캣이 있어 자바 웹 애플리케이션을 구동할 수 있음
- 경량 컨테이너로 자바 객체를 직접 Spring 안에서 관리함
- 객체의 생성 및 소멸과 같은 생명 주기(Life cycle)을 관리하며, Spring 컨테이너에서 필요한 객체를 가져와 사용함
2-1) 제어 역전(IoC, Inversion Of Control)
- 객체의 생성을 관리 위임 주체에게 맡김
- 사용자는 객체를 직접 생성하지 않고, 객체의 생명 주기를 컨트롤하는 주체는 다른 주체가 됨
- 사용자의 제어권을 다른 주체에게 넘기는 것을 제어의 역전이라고 함
2-2) 의존성 주입(DI, Dependency Injection)
- 어떤 객체를 사용하는 주체가 객체를 직접 생성하는 것이 아니라, 객체를 Spring이 생성하고 사용하는 주체에게 주입시켜 줌
스프링에서 의존성을 주입하는 방법1. 생성자를 통한 의존성 주입
스프링 공식 문서에서 권장하는 방식
@RestController
public class DiController {
private MyService service;
@Autowired
public DiController(MyService service) {
this.service = service;
}
@GetMapping("/no-di/hello")
public String getHello() {
return service.getHello();
}
}
스프링에서 의존성을 주입하는 방법2. 필드 객체 선언을 통한 의존성 주입
@RestController
public class DiController {
@Autowired
private MyService service;
@GetMapping("/no-di/hello")
public String getHello() {
return service.getHello();
}
}
스프링에서 의존성을 주입하는 방법3. setter 메서드를 통한 의존성 주입
@RestController
public class DiController {
private MyService service;
@Autowired
public void setService(MyService service) {
this.service = service;
}
@GetMapping("/no-di/hello")
public String getHello() {
return service.getHello();
}
}
2-3) 관심 지향 프로그래밍(AOP, Aspect Oriented Programming)
- 어떤 기능을 구현할 때 그 기능을 '핵심 기능'과 '부가 기능'으로 구분해 각각을 하나의 관점으로 보는 것
- 애플리케이션 전반에 걸쳐 적용되는 공통 기능을 비즈니스 로직으로부터 분리해내는 것
- 공통 기능을 분리하지 않을 경우, 공통 기능의 변화가 생겼을 때 일일이 수정해 주어야 하는 수고를 덜어 주게 됨
2. Spring Boot란?
Spring을 더 쉽게 사용하기 위한 별도의 프레임워크
1) 스프링 부트의 특징
1-1) 의존성 관리
- 스프링 프레임워크에서는 개발에 필요한 각 모듈의 의존성을 직접 설정해야 하며, 호환되는 버전을 명시해야 정상적으로 동작
- 스프링 부트에서는 'spring-boot-starter' 의존성을 제공함
- spring-boot-starter: 각 라이브러리의 기능과 관련해 자주 사용되고 서로 호환되는 버전의 모듈 조합을 제공하여 라이브러리의 호환 문제를 해결해 줌
<많이 사용하는 spring-boot-starter 라이브러리>
spring-boot-starter-web ⇒ 스프링 MVC를 사용하는 RESTful 애플리케이션을 만들기 위한 의존성. 기본적으로 내장 톰캣이 포함되어 있어 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) 자동 설정(Auto Configuration)
- 애플리케이션에 추가된 라이브러리를 실행하는데 필요한 환경 설정을 알아서 찾아 줌
- 애플리케이션을 개발하는데 필요한 의존성을 추가하면 프레임워크가 이를 자동으로 관리
1-3) 내장 WAS(Web Application Server)
- 스프링 부트의 각 웹 애플리케이션에는 내장 WAS가 존재함
- spring-boot-starter-web의 경우 톰캣을 내장
- 스프링 부트의 자동 설정 기능은 톰캣에도 적용되므로 특별한 설정 없이 톰캣을 실행할 수 있음
- 필요에 따라 Jetty, Undertow 등으로 대체 가능
1-4) 모니터링
- 스프링 부트에는 Spring Boot Actuator라는 자체 모니터링 도구가 있음
'Spring' 카테고리의 다른 글
[Spring] Swagger 라이브러리 (0) | 2023.04.06 |
---|---|
[Spring] MVC 패턴 (0) | 2023.04.05 |
[SpringBoot] REST API란? (0) | 2023.04.05 |
[Spring] 싱글톤 패턴 (0) | 2023.04.04 |
[Spring] 빌드 관리 도구 (0) | 2023.04.04 |
댓글