ch01. 스프링 환경
프레임워크의 핵심은 의존 관계 주입 또는 IOC(Inversion of Control)라는 개념이다.
스프링에서는 객체를 만들고 연결하는 책임이 IOC 컨테이너라는 새로운 구셩요소로 넘어간다.
클래스는 의존 관계를 정의하고, 스프링 IOC 컨테이너는 객체를 만들고 의존 관계를 연결한다.
컨테이너에 의해 생성되고 연결된 의존 관계를 제어하는 혁신적인 개념을 IOC 또는 DI(의존 관계 주입)라고 한다.
스프링 프레임워크가 인기 있던 이유
- 느슨한 결합 및 테스트 가능성
- 아키텍처의 유연성
- 복잡한 코드 감소
느슨한 결합 및 테스트 가능성
클래스 사이의 결합이 느슨하면 장기적으로 애플리케이션을 유지하고 관리하는 데 도움이 된다. 무엇보다 테스트가 가능하다.
단위 테스트를 단순화 하면 다음과 같은 여러 가지 이점이 있다.
- 프로그래머의 생산성이 향상된다.
- 결함이 조기에 발견되 수정 비용이 적게 든다.
- 애플리케이션에는 CI빌드에서 실행할 수 있는 자동화된 단위 테스트가 있어 향후 결함을 방지할 수 있다.
아키텍처의 유연성
스프링 프레임워크는 20개 이상의 서로 다른 모듈을 갖고 있는 고도화된 모듈이다.
특정 프레임워크를 사용하고 싶지 않다면 다른 프레임워크로 쉽게 대체 할 수 있다.
복잡한 코드 감소
스프링은 예외 처리 로직이나 공통된 복잡한 코드(트랜잭션 관리, 예외처리 등)는 전략/콜백 패턴을 사용하여 분리를 래퍼 클래스에 분리 시키기 때문에 복잡한 코드를 감소 시킬 수 있다.
마이크로서비스(MSA)로의 진화 - 스프링 부트 및 스프링 클라우드
스프링은 모놀리스(한 AP에서 모두 구현하는 방식)에서 MSA(Micro Service Architecture)로 진화하기 시작했다.
MSA는 독립적으로 배포할 수 있는 여러 개의 소규모 마이크로 서비스를 구축하는 것이 포함된다.
다음과 같은 몇 개지 새로운 과제가 발생한다.
- MSA를 어떻게 신속하게 구축할 수 있을까?
- MSA를 클라우드에 어떻게 연결할 수 있을까?
MSA를 어떻게 신속하게 구축할 수 있을까?
모놀리스 시대에는 애플리케이션을 위한 프레임워크를 설정하는 데 시간이 걸렸다.
MSA 시대에는 개별 구성요소를 더 빨리 만들어야한다.
스프링 부트의 목표는 마이크로서비스를 개발하는 것과 관련된 모든 핵심적인 기술 세부 사항을 관리하는 것.
스프링 클라우드로 마이크로서비스와 클라우드 연결하기
스프링 클라우드는 클라우드에서 시스템을 구축할 때 일반적으로 발생하는 몇 가지 패턴에 솔루션을 제공하는 것을 목표로 한다.
※ 클라우드(Cloud) : 인터넷 통신망 어딘가에서 구름에 싸여 보이지 않는 컴퓨팅 자원(CPU, 메모리, 디스크 등)을 원하는 대로 가져다 쓸 수 있다.
구름에 싸여 있다는 것은 그 내부를 보려고 하거나 알지 않아도 얼마든지 내가 원하는 것을 꺼내어 사용할 수 있다는 것이며, 인터넷이 연결된 어느 곳에서든 이것을 보장 받을 수 있다는 뜻.※
- 구성 관리
- MSA를 사용하면 구성 관리 문제가 복잡해진다.
- 스프링 클라우드는 Spring Cloud Config라는 중앙 집중식 구성 관리 솔루션을 제공한다.
- 서비스 검색
- MSA와 같은 분산 환경은 서비스 간의 원격 호출로 구성이 된다. 원격 서비스 호출은 IP 주소와 포트를 이용하는 방식이 되는다.
- 클라우드 환경이 되면서 서비스가 오토 스케일링등에 의해서 동적으로 생성되거나 컨테이너 기반의 배포로 인해서, 서비스의 IP가 동적으로 변경되는 일이 잦아졌다.
- 그래서 서비스 클라이언트가 서비스를 호출할때 서비스의 위치 (즉 IP주소와 포트)를 알아낼 수 있는 기능이 필요한데, 이것을 바로 서비스 디스커버리 (Service discovery)라고 한다.
- 서비스 검색은 서비스 간의 느슨한 결합을 촉진한다.
- 스프링 클라우드는 유레카, 주키퍼 같은 서비스 디스커버리 옵션과의 통합을 제공한다.
※ 오토스케일링 : 서버의 과부하, 장애 등과 같이 서비스 불능 상황 발생시 자동으로 서버를 복제하여 서버 대수를 늘려주는 작업을 해주는 AWS 서비스
- 서킷 브레이커
- MSA는 내결함성이 있어야 한다.
- 백업 서비스의 실패를 정상적으로 처리할 수 있어야 한다.
- 서킷 브레이커는 장애가 생겼을 때 최소한의 기본 서비스를 제공하는 데 중요한 역할을 한다.
- 스프링 클라우드는 넷플릭스 히스트릭스의 통합을 제공한다.
- API 게이트웨이
- API 게이트웨이는 서비스 앞단에서 모든 API 서버들의 엔드포인트(URL)를 단일화 해주는 또 다른 서버
- 라우팅 및 캐싱 서비스를 제공
- 스프링 클라우드는 넷플릭스 주울(Zuul)과의 통합을 제공
중요한 스프링 모듈과 스프링 프로젝트
스프링 모듈
스프링 프레임워크의 모듈성은 스프링이 널리 사용되는 가장 중요한 이유 중 하나다.
스프링 프레임워크는 20개 이상의 서로 다른 모듈(경계가 명확하게 정의된)로 구성된다.
스프링 코어 컨테이너
스프링 코어 컨테이너는 스프링 프레임워크 의존 관계 주입, IOC 컨테이너, Application-context의 핵심 기능을 제공한다.
중요한 핵심 스프링 모듈
- spring-core : 다른 스프링 모듈이 사용하는 유틸리티
- spring-beans : 스프링 빈지원, spring-core와 함께 스프링 프레임워크의 핵심 기능인 의존 관계 주입을 제공, BeanFactory 구현 포함
- spring-context : BeanFactory를 확장한 ApplicationContext를 구현, 리소스 로딩과 국제화 지원을 제공
- spring-expresstion : EL(jsp의 표현 언어)을 확장하고 빈 속성(배열 및 컬렉션 포함) 액세스와 처리를 위한 언어를 제공
크로스 커팅 (Cross-cutting)
로깅과 시큐리티를 포함한 모든 애플리케이션 레이어에 적용 가능하다.
AOP는 일반적으로 크로스 커팅을 구현하는 데 사용된다.
크로스 커팅과 관련된 중요한 스프링 모듈
- spring-aop : 메소드 인터셉터와 포인트 컷으로 AOP(Aspect Oriented Programming(관점지향 프로그래밍))에 기본적인 지원 제공
- spring-aspects : 가장 인기 있고 완벽한 기능을 갖춘 AOP 프레임워크인 AspectJ와의 통합 제공
- spring-test : 단위 테스트와 통합 테스트의 기본적이 지원 제공
웹 - 스프링 MVC
중요한 아티팩트 / 모듈
- spring-web : 멀티 파트 파일 업로드와 같은 기본 웹 기능 제공
- spring-webmvc : 완전한 기능을 갖춘 웹 MVC 프레임워크인 스프링 MVC를 제공하며 RESTful 서비스를 구현하는 기능 포함
- spring-webflux : spring framework5 에 도입된 기능으로 웹 애플리케이션에 리액티브 기능 제공
비즈니스 레이어
- 애플리케이션의 비지니스 로직을 실행하는 데 초점을 맞춘다.
- 스프링에서는 비지니스 로직이 POJO(Plain Old Java Object)로 구현된다.
- 스프링 트랜잭션(spring-tx)은 POJO 및 다른 클래스에 대한 선언적 트랜잭션 관리를 제공
데이터 레이어
- 데이터베이스나 외부 인터페이스와 통신한다.
- 데이터 레이어와 관련된 중요한 스프링 모듈
- spring-jdbc : 상용구 코드를 방지하기 위해 JDBC를 추상화한다. (JdbcTemplete)
- spring-orm : ORM(Object-Relation Mapping, ex) ibatis, MyBatis) 프레임워크와 스펙(JPA 및 하이버네이트 등)과의 통합 제공
- spring-oxm : XML 매핑 통합 객체를 제공, JAXB 등과 같은 프레임워크 지원
- spring-jms : 상용구 코드 방지를 위해 JMS 추상화
스프링 프로젝트
스프링 부트
MSA 및 웹 애플리케이션을 개발하기 위한 환경 구성을 해결한다.
스프링 클라우드
스프링 클라우드는 분산 시스템의 일반적인 패턴을 위한 솔루션 제공
스프링 데이터
스프링 데이터는 모든 종류의 데이터베이스에 일관된 데이터 액세스 방식 제공
중요한 기능 중 일부
- 메소드 이름에서 쿼리를 결정해 레파지토리와 객체 매핑에 추상화 제공
- 간단한 스프링 통합
- 스프링 MVC 컨트롤러와의 통합
- 고급 자동 검사 기능
스프링 배치와 스케줄러
특정한 시간에 내가 원하는 일을 자동으로 시키는게 스케줄러의 역할
배치는 '일괄처리' 라는 의미이다. 그리고 스프링에서 배치 작업 단위를 Job이라고 부른다.
현재 엔터프라이즈 애플리케이션은 배치 프로그램을 사용해 대량의 데이터를 처리한다.
스프링 배치의 중요한 기능
- 작업을 시작, 중지, 다시 시작하는 기능
- 단계를 재시도하거나 실패한 단계를 건너뛸 수 있는 기능
- 웹 기반 관리 인터페이스
스프링 시큐리티
인증 및 권한 부여는 웹 애플리케이션 및 웹 서비스와 같은 엔터프라이즈 애플리케이션의 중요한 부분이다.
인증은 사용자를 식별하는 프로세스다.
권한 부여는 사용자가 액세스 권한을 갖는 프로세스다.
스프링 시큐리티는 선언적 인증 및 권한 부여 기능을 제공한다.
스프링 HATEOAS
HATEOAS(Hypermedia as the Engine of Application State)는 애플리케이션 상태 엔진인 하이퍼 미디어를 나타냄.
클라이언트로부터 서버를 분리하는 것이 HATEOAS의 주요 목표.
스프링 MVC로 구현된 RESTful 서비스에 적합.
HATEOAS의 주요 기능
- 링크가 꺠지는 것을 줄이기 위해 서비스 메소드를 가리키는 링크의 정의 단순화
- JAXB(XML기반) 및 JSON 통합 지원
- 클라이언트 측 지원
'Study > Mastering-Spring-5-Study' 카테고리의 다른 글
ch05. 스프링 프레임워크 심화 - 병렬 프로그래밍 (0) | 2022.12.31 |
---|---|
ch05. 스프링 프레임워크 심화 - AOP (0) | 2022.12.31 |
ch04. 스프링부트_시작하기 (0) | 2022.12.31 |
ch03. 스프링 MVC (0) | 2022.12.31 |
ch02. 의존 관계 주입 및 단위 테스트하기 (1) | 2022.12.31 |
댓글