Spring - Framework, Modules, Projects
여태까지 스프링에서 지원하는 기술들에 대해서 알아보거나 그 개념에 대해서 알아보았다. 하지만 좀 더 큰 틀에서 보면 스프링 프레임워크만 보더라도 코어, 테스트, MVC 등 여러 기술로 나뉘고 스프링 프레임워크, 스프링 부트, 스프링 클라우드 등 여러 프로젝트들이 존재한다. 이번에는 비교적 큰 틀에서 스프링 프로젝트와 프로젝트에서 제공하는 대략적인 기능에 대해서 짚어보고자 한다.

1. 스프링 프레임워크 모듈
1. Spring Core
- 스프링 모듈중 핵심적인 기능
- IOC Container, Dependency Injection, Auto Wiring, ...
- 다음과 같은 어플리케이션의 핵심(또는 기본)요소가 된다.
- Rest API
- 인증과 인가의 구현
- DB 연동
- 다른 시스템과의 통합
- 단위 테스트 작성
2. Spring MVC
- 웹 어플리케이션 제작에 사용(Web Application, Rest API등)
3. Spring WebFlux
- 리액티브 웹 제작에 사용
- 리액티브 웹은 생소한 개념이라 찾아봤는데 여전히 어렵운 개념이긴 하지만 잘 정리되어 있는 글이 있어 링크를 남긴다. 아래의 링크를 참고하자.
리액티브 프로그래밍
4. JDBC, JPA 등
5. JMS
6. Mock Objects, Spring MVC Test
스프링 프레임 워크가 여러 모듈로 나뉜 이유는?
- 만들고자 하는 서비스의 요구사항이 다르고, 그에 필요한 모듈이 다르기 때문이다
따라서 스프링 프레임워크에서 필요한 기술만을 선택하여 사용하면 된다.
2. 스프링의 다양한 프로젝트
어플리케이션 아키텍쳐는 지속적으로 발전하고 있다.
웹 - Rest API - MicroServices - Cloud에 이르기 까지
이러한 상황에 가장 많이 사용되고 있는 프레임워크 중 하나는 스프링이다. 그 이유는 스프링 또한 계속 발전하고 있기 때문이다.
1. Spring Framework
2. Spring Security
- Rest API, Web Application, microservice등 웹 어플리케이션에 보안을 추가할 때 사용한다.
(인증, 인가, 권한 등)
3. Spring Data
- 동일한 방식으로 다른 타입의 DB를 통합하여 연동할 때 사용한다.
NoSQL이나 관계형 DB를 통합된 방식으로 연동할 수 있도록 지원한다.
- 최근 NoSQL의 사용비중이 높아지면서 등장했다.
4. Spring Integration
- 다른 어플리케이션을 통합하는데 사용하는 프로젝트
- 다른 어플리케이션과 통신하는데 있어 발생할 수 있는 통합 관련 문제에 유용한 기능을 제공한다.
5. Spring Boot
- 마이크로 서비스를 빠르게 빌드할 수 있도록 도입된 프로젝트
6. Spring Cloud
- 클라우드 네이티브 어플리케이션을 구축하는데 사용되는 프로젝트
- 클라우드 네이티브 어플리케이션에 대한 자세한 설명은 아래의 링크를 참고하자
클라우드 네이티브란?
스프링 생태계가 인기 있는 이유는?
- 느슨한 결합
- 스프링은 빈의 생성과 의존성 주입을 관리해준다
- 이는 느슨한 결합의 어플리케이션을 보다 쉽게 구현하도록 지원한다
- 따라서 단위 테스트를 작성하는 것도 보다 쉬워진다.
- 반복되는 코드의 감소
- 비즈니스 로직에 집중할 수 있도록 해준다.
- 각 메서드에 예외처리를 별도로 해줄 필요가 없다.
- 확인된 모든 예외는 런타임 또는 각종 예외로 전환된다.
- 구조적 유연성
- 여러 개로 나뉜 모듈과 프로젝트를 통해 요구사항에 필요한 것만 선택적으로 사용할 수 있다.
- 시간에 따른 발전
- 마이크로 서비스나 클라우드 같은 프로젝트의 등장처럼 기술의 발전에 따라 스프링도 함께 발전해 간다.
이번 포스팅에서는 스프링에 대해 큰 틀에서 살펴보았다. 각 기능에 대해서 세부적으로 알아가는 것도 매우 중요하지만 이렇게 큰 틀에서 스프링에 대해 알아보는 것도 큰 도움이 되는 시간이었다!!!
출처
훌륭한 글이네요. 감사합니다.