본문 바로가기
IT

[스프링 부트] Spring Boot란? (개념, MSA, 클라우드, 스트림)

by 유나니나노 2024. 4. 18.
반응형

 

Spring Boot는 Java 기반의 오픈 소스 프레임워크로, Spring Framework 위에 구축되었습니다. 그 목적은 Spring 기반의 애플리케이션을 빠르고 쉽게 개발할 수 있게 만드는 것이며, 특히 "production-ready" 즉, 바로 배포 가능한 상태의 애플리케이션을 만드는 데 초점을 맞추고 있습니다.

 

주요 개념

  • 간결성
    • 자동 설정(Auto-configuration): Spring Boot는 클래스패스에 있는 라이브러리를 기반으로 애플리케이션의 필요한 설정을 자동으로 완료합니다. 예를 들어, 스프링 MVC가 필요할 경우 해당 설정을 자동으로 구성합니다.
    • 스타터(Starters): 필요한 의존성을 그룹화하여 제공합니다. 예를 들어, 웹 애플리케이션을 개발할 경우 spring-boot-starter-web 스타터를 사용하여 관련된 모든 의존성을 쉽게 추가할 수 있습니다.
  • 운영 용이성
    • 내장 서버 지원: Tomcat, Jetty, Undertow와 같은 내장 서버를 사용하여 별도의 웹 서버 설치 없이 애플리케이션을 실행할 수 있습니다.
    • 액추에이처(Actuator): 애플리케이션의 상태와 매트릭스를 모니터링하기 위한 여러 엔드포인트(/health, /info, /metrics 등)를 제공합니다.
  • 개발 편의성
    • 빠른 개발: 스프링 부트의 자동 설정, 스타터 의존성 등은 개발자가 보일러플레이트 코드 작성과 복잡한 설정을 줄이고, 실제 비즈니스 로직에 더 집중할 수 있게 합니다.
    • 프로파일(Profile): 개발, 테스트, 프로덕션 등 다양한 환경에 맞는 설정을 구분하여 관리할 수 있습니다.
  • 확장성
    • 스프링 에코시스템과의 통합: Spring Data, Spring Security, Spring Cache와 같은 다양한 스프링 프로젝트와 쉽게 통합할 수 있습니다.
    • 사용자 정의: 자동 설정을 사용자의 요구에 맞게 덮어쓰거나 추가적인 구성을 통해 애플리케이션을 맞춤 설정할 수 있습니다.
  • 테스트 지원
    • 통합 테스트: @SpringBootTest 애너테이션을 사용하여 애플리케이션 컨텍스트를 로드하여 실제 환경과 유사한 조건에서 통합 테스트를 수행할 수 있습니다.

MSA를 위한 Spring Boot의 장점

  • 빠른 개발과 간편한 배포
    • 자동 설정(Auto-Configuration)과 스타터 템플릿(Starter POMs)은 의존성 관리를 단순화하고, 개발자가 바로 개발을 시작할 수 있도록합니다. 이는 개발 시간을 단축하고, 마이크로서비스의 빠른 배포를 가능하게 합니다.
  • 독립적인 서비스 실행
    • 내장 서버(Embedded Servers)기능 덕분에, 각 마이크로서비스는 독립적으로 실행될 수 있으며, 별도의 외부 서버 설정이 필요 없습니다. 이는 개별 서비스의 개발과 테스트를 용이하게 합니다.
  • 확장성과 유연성
    • 스프링 부트는 분산 시스템을 위한 스프링 클라우드와 잘 통합되어, 서비스 발견, 구성 관리, 클라이언트 사이드 로드 밸런싱 등 마이크로서비스 아키텍처에 필수적인 기능을 쉽게 구현할 수 있습니다.
    • 스프링 클라우드(Spring Cloud)?
      • 스프링 클라우드는 마이크로서비스 아키텍처를 개발, 구축 및 운영하는 데 필요한 툴과 프레임워크를 제공하는 프로젝트 모음입니다. 이는 Spring Framework와 Spring Boot위에 구축되어 마이크로서비스 기반 애플리케이션의 공통 패턴을 쉽게 구현할 수 있도록 돕습니다.
      • 서비스 발견(Service Discovery): 마이크로서비스 인스턴스들이 서로를 찾을 수 있도록 돕습니다. 넷플릭스의 유레카(Eureka)나 콘술(Consul)과 같은 서비스 등록 및 발견 툴과 통합됩니다.
      • 구성 관리(Configuration Management): 애플리케이션 구성을 중앙에서 관리하고, 환경에 따라 구성을 동적으로 변경할 수 있도록 지원합니다. 스프링 클라우드 컨피그(Spring Cloud Config)가 이를 담당합니다.
      • 클라이언트 사이드 로드 밸런싱(Client-side Load Balancing): 마이크로서비스 간의 통신을 위해 클라이언트 사이드에서 로드 밸런싱을 수행합니다. 리본(Ribbon)이나 스프링 클라우드 로드밸런서 등이 이 기능을 제공합니다.
      • API 게이트웨이(API Gateway): 스프링 클라우드 게이트웨이 등을 통해 모든 클라이언트 요청을 적절한 마이크로서비스로 라우팅하고, 공통 기능(인증, 로깅 등)을 제공하는 단일 진입점을 설정합니다.
      • 분산 추적(Distributed Tracing): 서비스 간 요청의 경로를 추적하여 시스템의 성능 문제를 진단하고 해결합니다. 스프링 클라우드 슬루스(Spring Cloud Sleuth)와 짚킨(Zipkin)이 이 기능을 지원합니다.
      • 회로 차단기(Circuit Breaker): 히스트릭스(Hystrix), 레질리언스4제이(Resilience4j) 같은 도구를 통해 서비스 간의 의존성 문제로 인한 전체 시스템의 실패를 방지합니다.
  • 서비스 모니터링 및 관리
    • 스프링 부트 액추에이터(Actuator)는 애플리케이션의 상태와 메트릭스를 모니터링할 수 있는 다양한 엔드포인트를 제공하여, 마이크로서비스의 건강과 성능을 쉽게 관리할 수 있습니다.

 

  • 서비스 간의 통신 지원
    • 스프링 클라우드 스트림과 같은 프로젝트를 활용하여, 마이크로서비스 간의 비동기 메시징을 쉽게 구현할 수 있습니다. 이는 서비스 간의 결합도를 낮추고, 시스템의 확장성을 향상시킵니다.
    • 스프링 클라우드 스트림(Spring Cloud Stream)?
      • 마이크로서비스 간의 비동기 메시지 통신을 쉽게 구현할 수 있도록 도와주는 프레임워크입니다. Spring Boot기반으로 개발되어 스프링 생태계와 잘 통합되며, 메시지 브로커와의 연동을 추상화하여 개발자가 메시지 기반의 마이크로서비스를 보다 쉽게 개발할 수 있게 합니다.
      • 추상화된 메시지 모델: 스프링 클라우드 스트림은 메시지의 발행(Publish), 구독(Subscribe) 모델을 추상화하여, 개발자가 특정 메시지 브로커의 API에 직접 의존하지 않고도 메시지 기반 통신을 구현할 수 있게 합니다.
      • 선언적 프로그래밍 모델: @StreamListener와 같은 어노테이션을 사용하여 메시지 처리기를 쉽게 선언할 수 있으며, 이를 통해 메시지를 수신하고 처리하는 로직을 간결하게 작성할 수 있습니다.
      • 바인더: 스프링 클라우드 스트림은 다양한 메시지 브로커와의 연동을 위한 바인더를 제공합니다. 이 바인더를 사용하면 RabbitMQ, Apache Kafka 등 다양한 메시지 브로커를 쉽게 교체하거나 선택할 수 있습니다.
      • 유연한 구성: 스프링 클라우드 스트림은 애플리케이션의 설정 파일을 통해 메시지 채널, 바인더 설정 등을 유연하게 구성할 수 있습니다. 이를 통해 개발 환경과 운영 환경에서의 설정을 쉽게 변경할 수 있습니다.
      • 스케일 아웃: 스프링 클라우드 스트림을 사용하면 메시지 처리기의 인스턴스 수를 쉽게 조절하여 처리 능력을 확장할 수 있습니다. 이는 마이크로서비스 아키텍처에서 중요한 요소 중 하나입니다.
  • 보안
    • 스프링 시큐리티와의 통합을 통해, 각 마이크로서비스에 대한 보안 정책을 쉽게 적용할 수 있으며, JWT나 OAuth 같은 현대적인 인증 방식을 지원합니다.
  • 테스트 용이성
    • 스프링 부트는 통합 테스트를 위한 강력한 지원을 제공합니다. @SpringBootTest와 같은 어노테이션을 사용하여, 애플리케이션 컨텍스트를 로드하고, 실제 환경과 유사한 조건에서 통합 테스트를 수행할 수 있습니다.

 

오늘은 Spring Boot에 대해서 알아보았습니다.

관련해서 Security 내용도 알아두시면 좋으니 참고 바랍니다!

2024.04.26 - [IT] - [스프링 시큐리티] Spring Security란? (개념, 특징, CSRF, 인증/권한 설정)

 

[스프링 시큐리티] Spring Security란? (개념, 특징, CSRF, 인증/권한 설정)

Spring Security는 Java 기반의 애플리케이션에 대한 인증 및 접근 제어 기능을 제공하는 프레임워크입니다. 주로 Spring 기반 애플리케이션의 보안을 강화하기 위해 사용되며, 웹 보안과 메서드 수준

yuna-ninano.tistory.com

반응형