Spring boot with Microservices spring cloud

홍성우·2023년 2월 27일

spring boot

목록 보기
3/3

모놀리스 아키텍처
모든 로직을 하나의 어플리케이션 형태로 묶어 서비스하는 형태

비즈니스의 로직이 커질수록 복잡성이 증가한다.
예를 들어 비즈니스로직안에 상품,지불,주문라는 로직속에 하나의 로직만 수정하여도 다른 로직에 영향을 줄 수 있다.

즉, 모놀리식 어플리케이션은 그 규모가 커질수록 개발 및 유지보수,배포에 이르기 까지 많은 문제점이 있다.
전체코드에 대한 복잡성과 이해도가 증가된다.

모놀리식 아키텍처의 발전된 아키텍처로 SOA(서비스 지향 아키텍처)가 있다. 서로 통신을 주고 받는 방법은 SOAP(Simple Object Application Protocol) 프로토콜을 이용한다.

(ESB(미들웨어) - 운영체제와 프로그램간 연결되기 위한 중간 프로그램으로
서버로 따지면 proxy같은 의미.)

SOA와 MicroService는 비슷한 형태이지만 SOA는 SOAP로 통신을 하고
MicroService는 REST 형식으로 통신한다.

마이크로 서비스 아키텍처

기존 대규모 어플리케이션을 개발하는 방식은 하나의 통합된 애플리케이션으로 개발하는 방법이었다면 마이크로 서비스는 소규모의 독립적 구성요소로 개발하는 방식

장점

  • 모듈별 독립적으로 개발 및 유지관리,배포 할수 있다.
  • 특정 시스템에 에러발생하여도 전체 시스템은 다운되지 않는다.
  • 특정 서비스별로 트랙픽에 맞게 서버의 크기를 조절할수 있다.

단점

  • 디버깅/추적이 어렵다.
  • 어플리케이션 CI/CD 과정이 중요해 진다.

단점을 보완하고자 나온 기술이 Spring Cloud가 있다.

spring cloud장점

spring cloud 단점

MSA아키텍처로 서비스를 구성하고 클라이언트가 해당서비스에 접근하려면 API GATEWAY를 통해 들어온다.

A,B,C는 각각의 WAS,DB를 가지고 있는 상태이다.

API GATEWay에는 zuul이라는 도구가 있다.

다수의 필요한 서비스를 어떻게 찾는가? - Eureka
다수 서비스의 인스턴스를 어떨헤 결정하는가? - Ribbon
개별적인 서비스가 응답하지 않을때 - Hystrix
보안, 속도 제한과 같은 서비스 접근 제어 - OAuth2
다수의 서비스는 서로 어떻게 커뮤니케이션하는가? - Http/메세징
서비스간 ACID는 어떻게 달성하는가? - CQRS

ACID(원자성,일관성,고립성,지속성) - 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질

Spring cloud config 이해

Spring cloud config를 진행하기에
https://start.spring.io에서 프로젝트를 생성한다.
dependcy 라이브러리는 3개를 추가한다.

1.configclient
2.spring boot Actuor(모니터링을 하기위한)
3.Spring web (테스트 용도)

Eureka 테스트 해보기

Eureka란 MSA 서비스의 모듈의 위치를 찾아주는 도구이다.

그림처럼 클라이언트의 요청이들어오면 api gateWay가 요청을 받고
A,B,C의 맞는 서비스를 찾아준다.
(파란색부분이 유레카의 기능)
즉 분산시스템에서 사용된다.

유레카 테스트 진행

[eureka-server 설정]

resources/application.yml


default 포트 8761
name : 서버 이름
[register-with-eureka,fetch-registry 설명]
register-with-eureka: false // 기본값은 true
fetch-registry : false // 기본값은 true

eureka-server가 eureka-client역할도 수행할수 있다.
작성한 server가 client로 등록 될수 있다.
client로 등록하면 다른 마이크로서비스들이 참조할수 있다.

application.yml을 설정을 마치고
어플리케이션 설정 부분에 @EnableEurekaServer 어노테이션을 등록한다.

[eureka-client 설정]

Eureka-server설정과 마찬가지로 application.yml을 작성해야한다.

서버설정과 다르게
serviceUrl:
defaultZone: {서버설정uri입력}


client 어플리케이션에는 특별한 설정이 없다.

테스트 진행

서버를 먼저 실행후 클라이언트를 실행시킨다.
[eureka-server 실행]

[eureka-client1 실행]

확인하기
http://localhost:8761/ 로 접속

해당 서비스를 확인할수 있다.
여기서 9002 port번호 하나를 더 생성해서 서버 Scale-out

(여기서 client는 MSA의 한 모듈을 의미한다).

profile
제 블로그를 방문해 주셔서 감사합니다

0개의 댓글