스프링 부트로 개발하는 MSA 컴포넌트 1(책 정리)

YongHyun·2023년 1월 7일
0
post-thumbnail

백엔드 개발자라면 Java와 Spring 프레임워크를 가장 많이 사용한다. 하지만 정작 왜 Spring을 많이 쓰는지 그 이유를 생각해 본적이 없어서 이번 기회의 "스프링 부트로 개발하는 MSA 컴포넌트" 책을 공부하면서 배운 내용들을 정리해보도록 하겠다. 이번 장에는 Spring FrameWork란 무엇인가와 그 특징을 정리해보겠다.

1. 왜 스프링인가


출처 : https://programmers.co.kr/pages/2022-dev-survey

위 자료를 통해 국내에서는 Spring Boot를 가장 많이 사용한다는 것을 알 수 있다. 근데 Spring도 있고 Spring Boot도 있고 둘이 같은것이 아니냐고 생각할 수 있는데 간단히 보면 Spring Boot는 Spring 프레임워크를 쉽게 사용할 수 있도록 여러가지 편의 기능을 제공하는데 대표적으로 자동설정 기능이 있어 개발자가 더 쉽게 애플리케이션을 개발할 수 있다.

2. 스프링 프레임워크 특징

스프링 프레임워크 주요 특징
1. POJO 기반의 경량 컨테이너 제공
2. 복잡한 비즈니스 영역의 문제를 쉽게 개발하고 운영하기 위한 철학
3. 여러 개의 개별 단위로 구성되어 있는 모듈식 프레임워크
4. 높은 확장성 및 범용성, 광범위한 생태계 시스템
5. 엔터프라이즈 애플리케이션에 적합한 오픈 소스 프레임워크

1. POJO 기반의 경량 컨테이너

POJO란 Plain Old Java Object 의 약자로 해석하면 오래된 방식의 간단한 자바 오프젝트라는 뜻이다. 즉, 특정 기술에 종속되지 않는 순수한 자바 객체를 의미한다. 왜 꼭 순수한 자바 객체를 지향하는가 하면 스프링 프레임워크 이전에는 EJB 프레임워크를 사용하였는데 이 EJB는 특정 인터페이스나 추상 클래스를 구현하면서 개발하는데 이러한 과정이 힘들고 사용하기 어려웠다고 한다. 그래서 등장한 것이 스프링인데 EJB와는 다르게 구현할 필요 없이 순수 자바 프로그래밍을 개발만 하면 된다. 이러한 장점 덕분에 개발자는 비즈니스 로직만 구현하는데 집중할 수 있게 된다.

2. 복잡한 비즈니스 영역의 문제를 쉽게 개발하고 운영하기 위한 철학


위의 그림은 스프링 트라이앵글이라는 스프링 프레임워크의 세 가지 핵심 요소를 보여주는 그림이다. 각각의 핵심 요소는 의존성 주입, 관점 지향 프로그래밍, 서비스 추상화 다.
먼저 의존성 주입은 소프트웨어상에서 해결해야 할 비즈니스 영역의 문제를 도메인이라고 한다.
이 도메인 문제가 여러개로 복잡하게 얽혀 있다면 클래스들의 관계는 복잡해지는데 이러한 관계를 의존성 주입 기능을 통해서 해결할 수 있다.
그 다음 관점 지향 프로그래밍은 비기능적 요구 사항 기능을 핵심 기능과 분리하는 기능을 제공한다. 소프트웨어 공학에서 시스템이 사용자에게 직접 서비스하는 기능을 정리한 것을 기능적 요구 사항 반대로 서비스 기능은 아니지만 개발에 필요한 기능들을 정리한 것을 비기능적 요구 사항이라고 한다. 이 두가지 기능이 서로 섞이면 코드가 복잡해지기 때문에 이러한 기능을 제공한다.
마지막으로 서비스 추상화는 트랜잭션 기능을 사용하여 설명하자면 스프링 프레임워크는 데이터를 데이터 저장소에 저장하는 다양한 프레임워크를 붙여 사용할 수 있다. 데이터를 저장하여 객체를 계속 유지할 수 있어 영속성이라고 하며, 이를 영속성 프레임워크라고 한다. 대표적인 영속성 프레임워크들은 스프링에서 제공하는 Spring-Data-JDBC, SQL을 메서드와 매핑해 주는 MyBatis, 객체와 관계형 데이터베이스를 매핑해 주는 JPA등이 있다. 스프링 프레임워크는 각 환경에 적절한 구현 클레스를 재공하여 편의성을 제공해준다.

3. 모듈식 프레임워크

스프링 프레임워크는 엔터프라이즈 애플리케이션 즉, 비즈니스 로직이 매우 복잡한 기능이나 여러 기능을 통합한 애플리케이션을 개발할 수 있는 여러 기능을 포함하고 있다. 이 기능들을 성격에 따라 분류하여 모듈이하는 단위로 관리한다. 개발자는 필요한 모듈들을 레고 블록처럼 조합하여 필요한 기능만 사용할 수 있다.

4. 높은 확장성과 범용성, 생태계 시스템

엔터프라이즈 애플리케이션이나 마이크로서비스 아키텍처로 확장되면서 용도에 맞는 여러 기술이 필요해지는데 스프링 프레임워크는 여러 형태로 확장할 수 있는 범용적인 애플리케이션을 만들 수 있고, 여러 가지 기술과 연동 및 확장할 수 있는 다양한 형태의 프로젝트를 제공한다.

5. 엔터프라이즈 애플리케이션에 적합한 오픈 소스 경량급 프레임워크

스프링 프레임워크는 모듈 방식과 높은 확장성 그리고 코드를 쉽고 간결하게 유지할 수 있는 스프링 트라이앵글 핵심 기술 세 가지 이 덕분에 일관성 있는 기술로 엔터프라이즈 애플리케이션을 개발할 수 있다.

3. 스프링 부트 특징

위에서 언급한것과 같이 스프링 부트는 스프링 프레임워크와 목적이 다르다. 스프링 부트는 가능한 빠르게 애플리케이션을 개발하고 서비스하는 것을 우선시한다. 그래서 빠른 개발을 목적으로 '설정보다 관례' 패러다임을 채택한 프레임워크이다. 스프링 부트의 가장 큰 장점은 설정 없이 바로 애플리케이션을 개발할 수 있다는 것이다.

위의 예는 위의 의미에서 설명한 플롯을 잘 보여줍니다. Spring 프레임워크는 거의 모든 구성을 수동으로 변경해야 하는 반면 Spring Boot는 이미 구성이 없거나 제한된 독립형 애플리케이션을 제공합니다. 다음 다이어그램은 이러한 두 가지 프레임워크를 보여주는 매우 명확한 예입니다.

출처: https://www.fusion-reactor.com/blog/the-difference-between-spring-framework-vs-spring-boot/

다음은 스프링 부트가 추가적으로 제공하는 기능들을 나열하였다.

  • 단독 실행 가능한 스프링 애플리케이션 : 스프링 부트는 빌드 플러그인을 사용해서 jar 파일을 만들 수 있다. 전통적인 배포 방법에 비해 매우 간단하고 빠르게 배포할 수 있다는 장점을 가지고 있다.
  • 간편한 설정을 위한 '스타터' 의존성 제공 : 스프링 부트는 기능별로 라이브러리 의존성을 포함한 스타터를 제공한다. 이 스타터 내부에는 라이브러리 의존성 설정을 포함하고 있어 기능을 사용하는데 필요한 모든 라이브러리를 한 번에 추가할 수 있다.
  • 스프링 기능을 자동 설정하는 '자동 구성' 제공 : 스프링 부트는 자동 구성 기능을 제공한다. 스프링 부트의 모듈인 spring-boot-autoconfigure가 스프링에서 사용할 수 있는 수많은 기능을 자동 설정으로 제공한다.
  • 모니터링 지표, 헬스 체크를 위한 '액추에이터' : 모니터링 솔루션을 이용해서 각 서버들의 상태와 지표를 수집하기 매우 쉽다. 스프링 부트에서는 spring-boot-actuator 모듈을 제공하는데, 이를 액추에이터라고 한다.
  • XML 설정을 위한 일이 필요 없음 : 스프링 프레임워크를 이용할때 ApplicationContext 설정을 XML로 작성할 수 있지만 그 설정이 복잡하고 번거로웠다. 하지만 스프링 프레임워크 3.0부터 java 클래스를 이용할 수 있는 자바 설정 기능을 제공하였기 때문에 스프링 부트도 자바 설정을 기본으로 사용한다.
  • 애플리케이션에 내장된 WAS : 스프링 부트의 spring-boot-starter-web 스타터를 이용하여 웹 애플리케이션을 개발할 경우 톰캣이 내장되어 있기 때문에 단독 실행 가능한 애플리케이션 배포가 가능해졌다.
profile
백엔드 개발자 되기 위한 여정

0개의 댓글