결론
1. 스프링은 자바 기반 어플리케이션을 만드는데 사용, 스프링 부트는 주로 REST API 개발할 때 사용
2. 특정 프로젝트에서 필수적인 종속성 구성 필요 시 Spring
3. 일반적인 종속성 구성으로 구현이 가능한 프로젝트라면 Spring Boot
스프링 (Spring) 이란?
- 정확한 표현으로는 스프링 프레임워크 (Spring Framework)
- 의존성 주입 (DI, Dependeny Injection)과 제어 역전 (IOC, Inversion of Control), 관점 지향 프로그래밍 (AOP)이 가장 중요한 요소
- 위 요소들을 통해 느슨한 결합 (Loose Coupling)을 달성할 수 있음
- 위와 같이 느슨한 결합으로 개발한 어플리케이션은 단위 테스트를 수행하기 용이함
의존성 주입
- 위 코드는 DI를 사용하지 않은 코드
- Controller는 'MyService' 객체에 의존하게 됨
// new 라는 키워드를 통해서 객체를 초기화해준게 특징적
// 서비스를 사용하기 위해서 객체를 초기화 해준거라서 이 객체가 없으면 이후의 코드들이 제대로 동작하지 않게 되는데 이것이 의존하게 된다는 뜻
- 예제 코드처럼 객체의 인스턴스를 얻게 되면 객체 간의 결합도가 올라감
// Controller가 직접 객체를 생성한 것이라서 결합도가 올라갈 수 밖에 없음
- 이런 코드 작성은 단위 테스트를 위해 Mock 객체를 사용할 수 없게 됨
- 위 코드는 DI를 사용하는 코드
- @Service, @Autowired 어노테이션을 통해서 MyService의 인스턴스를 획득
// myService 객체를 생성하고 @Autowired 어노테이션을 통해서 의존성 주입함
- 위와 같이 코드를 작성하면 단위테스트 상황에서 Service 객체를 Mock 객체로 대체하여 쉽게 테스트 가능
// new 키워드를 사용하지 않고, 스프링 컨테이너를 통해서 의존성을 주입함
관점 지행 프로그래밍 (AOP, Aspect Oriented Programming)
- 스프링 프레임워크에서 제공하는 강력한 기능 중 하나
- OOP를 보완하는 수단으로, 여러 곳에 쓰이는 공통 기능을 모듈화하여 필요한 곳에 연결함으로써 유지보수 또는 재사용에 용이하도록 하는 것을 의미
- AOP를 통해 기존 프로젝트에 다양한 기능을 로직 수정 없이 추가할 수 있음
- 이런 개발 방식을 통해 결합도를 낮춘 개발이 가능함
// 알아보면 좋은 것: 프록시 디자인 패턴, 핵심적인 관점, 부가적인 관점, 흩어진 관심사 (Crosscutting Concerns)
스프링 프레임 워크의 대표적 모듈
- 스프링 프레임워크는 다양한 기능이 존재
- 그 기능들은 약 20개의 모듈로 구성되어 있음
- 많이 사용되는 대표적인 모듈
- Spring JDBC
- Spring MVC
- Spring AOP
- Spring ORM
- Spring Test
- Spring Expression Language (SpEL)
스프링 부트가 나오게 된 이유
- 스프링 부트는 단지 실행만 하면 되는 스프링 기반의 어플리케이션을 쉽게 만들 수 있음
- 스프링은 다양한 기능을 제공하고 있지만, 그 기능을 사용하기 위한 설정에 많은 시간이 걸림
- 예) Transcation Manager, Hibernate Datasource, Entity Manager, Session Factory 등
스프링 부트가 제공하는 기능
- 스프링 부트는 자동설정 (AutoConfiguration)을 이용
- 어플리케이션 개발에 필요한 모든 의존성(Dependency)를 프레임워크에서 관리
- jar 파일이 클래스 패스에 있는 경우, 스프링 부트는 Dispatcher Servlet으로 자동 구성 됨
- 스프링 부트는 미리 설정되어 있는 Starter 프로젝트를 제공
- xml 설정 없이 자바 코드를 통해 설정 가능
- 어플리케이션을 개발하면서 사용되는 의존성들은 호환되는 버전으로 관리해줘야 함
- 이런 복잡도를 줄이기 위해 스프링 부트는 SpringBoot-Starter를 제공하여 자동으로 호환되는 버전을 관리
- 모니터링 관리를 위한 스프링 액추에이터 (Spring Actuator) 제공
- 서비스가 정상적으로 동작하는지 상태 모니터링 기능 제공
- 스프링 액추에이터는 스프링 부트에서 제공하는 상태 정보를 보다 쉽게 모니터링 할 수 있게 기능을 제공
스프링 부트 프로젝트의 의존성 관리
- spring boot starter dependency 를 통해 다양한 패지키를 수용하고 있음
- 이를 통해 개발자는 dependency 관리 (호환성 체크 등)에 대해 고려할 필요가 없어짐
스프링 부트 프로젝트의 starter 디펜던시
- spring-boot-starter-web-service: SOAP 웹 서비스
- spring-boot-starter-web: RESTful 응용 프로그램
- spring-boot-starter-test: 단위 테스트, 통합 테스트
- spring-boot-starter-jdbc: 기본적인 JDBC
- spring-boot-starter-security: 스프링 보안 (인증, 권한)
- spring-boot-starter-data-jpa: Spring Data JPA (Hibernate)
- spring-boot-starter-cache: 캐시
참고
1. https://www.youtube.com/watch?v=YSsl5-q2BR4&t=150s - 어라운드 허브 스튜디오
'Information Technology > 용어' 카테고리의 다른 글
[용어] Web Server와 WAS의 차이 (0) | 2023.04.25 |
---|---|
[용어] Nginx - Reverse Proxy 란? (0) | 2023.04.18 |
[용어] Nginx - sites-available, sites-enabled이란? (0) | 2023.04.18 |
[용어] Linux - pushd, popd 란? (0) | 2023.04.18 |
[용어] 오버로딩 & 오버라이딩이란? (0) | 2023.04.03 |