티스토리 뷰
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 강의 | Dowon Lee - 인프런
Dowon Lee | , 클라우드 네이티브 아키텍처를 구축하고, 마이크로서비스 앱 개발에 도전하세요! 🚧 [사진] IT 시스템에는 매년 수많은 기술이 생겨나고, 사라지고 있습니다. 새롭게 출시된 개념이나
www.inflearn.com
으로 공부한 내용을 정리하는 내용 입니다.
Spring boot 개념
스프링 부트(Spring Boot)는 스프링의 문제점을 해결해 주기 위해 개발된 스프링의 프레임워크로 개발자들이 더 쉽고 빠르게 스프링 애플리케이션을 개발하도록 도와주기 위해 개발되었습니다.
개발 초기에 "스프링 부트 스타터"라는 프로젝트명으로 시작되었는데요. 이름에서도 느껴지듯이 간단한 설정과 구성을 통해 스프링 애플리케이션의 개발을 빠르게 시작할 수 있도록 도와주는 프로젝트였습니다.
시간이 흘러 프로젝트명은 "스프링 부트"로 변경되었고, 2014년 4월에 공식적으로 스프링 부트1.0이 출시되었습니다.
스프링 부트는 기업용 애플리케이션 개발을 더 쉽고 빠르게 하도록 도와주며, 모니터링, 건강 상태 확인(Health Check), 로깅, 설정관리 등 운영에 필요한 필수 기능을 내장하고 있는 프레임워크로 어떤 특징을 갖고 있는지 함께 살펴보겠습니다.
Spring Boot의 특징
스프링 부트는 기본적인 설정과 보일러 플레이트 코드(여러 곳에서 재사용되는 코드) 작성을 최소화하고, 자동 설정과 컨벤션을 통해 개발자들이 빠르게 애플리케이션을 개발할 수 있도록 지원하는 스프링 프레임워크입니다.
스프링 부트를 사용하면 내장형 서버를 사용하여 별도의 웹 애플리케이션 서버(Web Application Server)를 설치할 필요 없이 애플리케이션을 실행할 수 있으며, 다양한 스프링 프레임워크 기능과 라이브러리, 서드파티 라이브러리와의 통합을 간편하게 구성할 수 있는데요.
주요 특징을 요약하면 다음과 같습니다.
- 간결한 설정
스프링 부트는 번거로운 XML 설정이 필요 없으며, 최소한의 설정으로 Spring을 사용할 수 있고, 기본적인 설정을 자동으로 처리하므로 개발자가 많은 설정 작업을 하지 않아도 됩니다. 설정으로 인한 불편사항을 해소하여 개발자는 애플리케이션 개발에 집중할 수 있습니다.
- 내장 서버
스프링 부트는 내장된 서버(내장 Tomcat, Jetty, Undertow)를 제공하여 별도의 서버 설정 없이 애플리케이션을 실행할 수 있습니다.
배포를 위해 War 파일을 생성해서 Tomcat에 배포할 필요 없으며, JAR 파일에는 모든 의존성 라이브러리가 포함되어 있어 외부 서버 없이도 애플리케이션을 실행할 수 있습니다. 이는 애플리케이션의 배포와 관리를 간편하게 만들어 줍니다.
- 의존성 관리 간소화
스프링 부트는 여러 3rd party 라이브러리를 사용할 때, 발생하는 라이브러리 버전 충돌로 인한 문제를 해결하기 위해서, 이미 테스트된 여러 라이브러리들의 묶음 패키지를 제공합니다.
3rd party 의존성 관리를 용이하게 하기 위한 ‘starter’ 의존성 통합 모듈을 제공하여 Maven/Gradel 설정 시 버전 관리가 간편합니다.
스프링 부트에서 제공하는 의존성 세트를 통해 개발자는 버전 충돌이나 복잡한 의존성 설정에 대해 걱정하지 않고 필요한 의존성을 쉽게 지정할 수 있습니다.
- 운영 편의성
스프링 부트는 애플리케이션의 상태 모니터링, 로깅, 보안 설정 등 운영에 필요한 기능들을 제공합니다. 이를 통해 애플리케이션의 운영과 관리가 편리해지고 안정성이 향상됩니다.
스프링 부트는 스프링(Spring Legacy)의 장점은 그대로 계승하면서, 기존의 문제가 되는 부분을 보완하여 기업용 애플리케이션의 개발 생산성 및 서비스 운영, 성능을 모두 해결해 줄 수 있습니다.
이렇듯 스프링 부트는 개발자들의 개발 생산성을 높이고, 애플리케이션의 유연성, 확장성을 제공할 뿐만 아니라, 스프링 프레임 워크들과 강력하게 호환되고, 생태계와의 통합을 가능하게 합니다. 이러한 장점을 가진 스프링 부트를 활용해서 업무에 적용할 수 있는 범위를 살펴보도록 하겠습니다.
Spring Boot를 활용할 수 있는 범위
스프링 부트는 스프링 기반의 웹 애플리케이션, 마이크로 서비스, RESTful API 등 다양한 애플리케이션의 개발을 간편하게 해주는 도구로 폭넓게 사용되고 있습니다. 대표적인 활용 범위를 예시한다면 다음과 같은 업무에 적용할 수 있습니다.
- 웹 애플리케이션 개발
스프링 부트는 웹 애플리케이션 개발에 적합한 프레임워크입니다. RESTful API, 웹 서비스, 마이크로 서비스 등 다양한 웹 애플리케이션을 개발할 수 있습니다. 내장된 톰캣 서버를 사용하거나 외부 서버에 배포하여 사용할 수 있습니다.
- 배치 처리
스프링 부트는 배치 처리 작업에도 많이 사용됩니다. 대용량 데이터 처리, 일괄 작업, 정기적인 스케줄링 작업 등을 효과적으로 처리할 수 있습니다. 스프링 배치와의 통합을 통해 배치 처리 작업을 쉽게 개발하고 실행할 수 있습니다.
- 데이터 베이스 액세스
스프링 부트는 다양한 데이터베이스와의 연동을 지원합니다. JDBC, JPA, Spring Data JPA 등을 통해 데이터베이스 액세스를 간편하게 처리할 수 있습니다. 데이터베이스 연동에 필요한 설정과 관련된 작업을 자동화하여 개발자의 부담을 줄여줍니다.
- 보안과 인증
스프링 부트는 보안과 인증에 필요한 기능을 제공합니다. 스프링 시큐리티와의 통합을 통해 다양한 보안 요구사항을 처리할 수 있습니다. 사용자 인증, 권한 부여, 세션 관리 등을 간편하게 구현할 수 있습니다.
- 클라우드 네이티브 애플리케이션
스프링 부트는 클라우드 네이티브 애플리케이션 개발을 위한 기능을 제공합니다. 마이크로 서비스 아키텍처, 컨테이너화, 스케일링, 로깅 및 모니터링 등을 지원하여 클라우드 환경에서의 애플리케이션 개발과 배포를 용이하게 합니다.
결론적으로 스프링 부트는 기업용 애플리케이션을 개발하기 위한 가장 널리 사용되고 있는 프레임워크로서 스프링 프레임워크에 비해 더욱 간편하고 빠른 개발을 가능하게 하며, 유연하고 안정적인 마이크로 서비스 아키텍처를 구축하는 데에 적합한 도구로 인정받고 있습니다.
Spring Cloud Eureka 개념
서비스 레지스트리와 서비스 디스커버리
MSA에서 마이크로서비스 관리와 운영을 위한 패턴 중 서비스 레지스트리와 서비스 디스커버리가 있습니다.
서비스 간 통신 시 서비스 위치 (포트, 호스트) 가 정적이던 전통적인 어플리케이션 / 아키텍처와는 달리 주소가 동적으로 변화하고 (클라우드 환경, 오토 스케일링, 컨테이너 기반의 배포 등) 서비스 역시 무수히 많은 마이크로서비스에서는 서비스 위치에 대한 관리가 많이 복잡해지게 되는데, 이를 해결하기 위해 서비스 레지스트리 패턴과 서비스 디스커버리 패턴이 등장하게 됩니다.
서비스 레지스트리와 서비스 디스커버리 패턴에 대한 설명은 다음과 같습니다.
서비스 레지스트리 : 마이크로서비스 / 관리, 운영을 위한 기반 서비스의 주소와 유동적인 IP를 매핑하여 저장하는 패턴
서비스 디스커버리 : 클라이언트가 여러 개의 마이크로서비스를 호출하기 위해 최적 경로를 찾아주는 라우팅 기능, 적절한 부하 분산을 위한 로드 밸런싱 기능을 제공해야 하는데 이와 관련된 패턴
Spring Cloud Eureka
Eureka Server
- REST API 기반으로 다양한 언어에서 사용 가능
- 레지스트리의 모든 정보는 모든 Eureka Client에서 복제되어 있으며 가용 중인 모든 서비스들의 목록을 확인할 수 있고 30초마다 목록이 갱신
- Eureka Client들에게 자신이 가지고 있는 Eureka Client들의 정보를 공유, Eureka Client들 (대표적으로 Spring Cloud Gateway, Ribbon, Zipkin 등) 에서 이를 사용
- 일정 간격으로 Client로부터 핑을 전달 받아 가용 상태임을 확인하며 일정 횟수 이상 핑이 안 된다면 Eureka Client를 레지스트리에서 제외
- 가용 상태의 서비스 목록 확인 시 서비스의 이름을 기준으로 탐색, 로드 밸런싱을 위해 내부적으로 Ribbon (클라이언트 측의 로드 밸런서) 을 사용
Eureka Client
- 서비스 시작 시 Eureka Server에 자신의 정보를 등록
- 등록된 후 30초마다 레지스트리에 핑을 전송하여 자신의 가용 상태를 알림
- 레지스트리로부터 다른 Eureka Client의 서비스 정보를 확인
사용 방법
1. Spring boot를 이용한 Eureka 프로젝트 생성(https://start.spring.io/)
2. Eureka Server를 사용하기 위한 Dependencies 추가(Eureka Server 필수, Lombok 필수-사용성)
3. application yml에 Eureka 서버 설정
- eureka.client.register-with-eureka
레지스트리에 자신을 등록할지에 대한 여부 - eureka.client.fetch-registry
레지스트리에 있는 정보를 가져올지에 대한 여부
true 설정시 검색 할 때마다 Eureka Server를 호출하는 대신 레지스트리가 로컬로 캐싱
#application.yml
eureka:
client:
register-with-eureka: false
fetch-registry: false
실제 동작 화면
정리
Eureka Server
각각의 마이크로서비스들의 호출 URL을 등록하는 역할을 한다고 개념을 정리 했습니다. 마이크로서비스라는 것이 서비스가 N개로 나눠져 있는 것인데 그것들을 정리해놓은 사전이라고 생각하면 됩니다.
Eureka Client
Eureka Server에 등록할 각각의 마이크로서비스라고 생각하면 됩니다.
'공부하는 키보드르륵 > JAVA' 카테고리의 다른 글
[MSA] API Gate Way - CustomFilter (0) | 2025.04.07 |
---|---|
[MSA] API Gate Way - Java로 설정 (0) | 2025.04.07 |
[MSA] Spring Cloud Gateway vs Spring Cloud Gateway MVC (0) | 2025.04.01 |
[MSA] API Gate Way - 시작하기 (0) | 2025.04.01 |
[MSA] Service 생성 및 Eureka 등록 (0) | 2025.03.26 |
- Total
- Today
- Yesterday
- springboot
- 코딩셰프
- 행운
- spring cloud gateway mvc
- Flutter
- 소근육발달
- Spring
- Spring cloud gateway
- 갤럭시s25울트라
- 로또구매팁
- 육아
- 플러터
- json
- android
- 로또
- 내돈내산
- 개발자
- 코드팩토리
- MSA
- DART
- 안드로이드
- apigateway
- java
- 인생역전
- 반응형레이아웃
- 실내데이트
- 정보처리기사
- 난임부부
- EUREKA
- spring msa
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |