[MSA] MSA에서 JPA Entity 연관관계를 어떻게 풀어낼까?
·
Spring/Spring Cloud
MSA환경의 특성MSA환경에서는 독립된 도메인을 갖고 있으며 DB또한 분리해서 분리해서 사용하게 된다. 그리고 다른 서비스 서버의 DB는 직접적으로 조회하지 않고 요청 또는 이벤트 구독, 별도의 검색 서버를 분리하여 데이터의 무결성, 정합성등을 일치 시킨다.그렇다면 Entity간의 관계(1:1, 1:M, M:1, M:N)은 어떻게 풀어낼까?그 방법에 대해선 많은 방법이 있겠지만 내가 생각하는 방식은 두 가지이다. 이 설명을 하기위해 두 개의 서버를 간단히 설명하고자 한다. Movie와 Theater는 1:M의 관계이다. 영화관에서 한개의 영화는 여러개의 상영관이 있다는 것을 관계로 풀어낸 것이다. 생각해보니 Theater는 좌석이라는 뜻으로 의미가 부정확하지만 넘어가 주길 바란다ㅎㅎ 1. Entity를 ..
[MSA - Resilienc4j] CircuitBreaker, fallback 메서드 개발하기
·
Spring/Spring Cloud
Resilience4j란?MSA환경에서는 각각의 서비스를 호출하여 통신을 이루는 시스템이다.통신 과정에서 통신이 원활히 진행되지 않아 늦게 데이터를 반환받는 지연의 상태 또는 장애가 발생하여 통신이 실패하는 상황이 발생한다.이에 대한 대처를 하기 위해 이 Resilience4j를 사용하여 CircuitBreaker , fallover, retry 등의 설정을 통해 장애를 직접 대처할 수 있도록 예방한다.위 작업을 수행하기 위해 윈도우-슬라이드 알고리즘을 사용해서 작업 단위를 한칸씩 이동하며 상태를 체크하는 방식이다.Resilience4j는 언제 사용해야 할까?위에서 말했듯이 주로 다른 서버에 호출을 하여 원하는 데이터를 받아오거나 어떤 이벤트를 날릴때 사용한다. 내 애플리케이션의 서비스 레이어에 이벤트를..
[MSA - Spring Cloud] Spring Cloud Gateway 개발하기
·
Spring/Spring Cloud
이전에는 Eureka 서버가 직접 서비스에 주소를 알려주고 통신하는 방법을 사용했다. 이 과정에서 gateway를 추가해서 들어오는 요청의 전후처리와 인증/인가를 수행할 수 있도록 설정해 보려고 한다. API Gateway의 기능라우팅인증/인가로드 밸런싱모니터링 및 로깅요청 및 응답 변환 Spring Cloud Gateway 란?SpringCloud Neflix 패키지의 일부로 msa 환경에서 널리 사용된다. 클라우드의 요청을 적절한 서비스로 라우팅 시켜주고, 다양한 필터링 기능을 제공한다.Gateway 또한 EurekaClient로 취급하며 Server와 통신한다.내부에는 Globalfilter, GatewayFilter라는 추상체가 존재하고 해당 추상체를 통해 filterChain메서드를 실행시킬 수..
[MSA] 멀티 모듈에서 중복되는 코드를 서브모듈끼리 공유하는 방법
·
Spring/Spring Cloud
멀티 모듈을 모노 리포지터리로 구성하여 사용하던 중 FeignClient를 사용한 모듈 간 통신 중에 의문이 하나 들었다.모듈 간 통신하는 과정에서 전달하는 DTO는 형태가 동일한데 이걸 굳이 각 모듈이 필요할 때마다 모듈에 동일한 DTO를 만들어야 할까?그래서 루트에서 서브 모듈 간 데이터를 공유하기 위한 설정방법을 찾아보게 되었다. 여기서 엄청난 삽질을 하게 되었지만 자주 일어날만한 상황은 아닌지라 가장 마지막 트러블 해결 과정에서 적어보겠다.갑자기 생각난 공유 배우님의 빡친짤 나도 실패할때마다 딱 저 표정이였다. 프로젝트 구조 확인하기혼자 실습하는 mas-movie-reservation 프로젝트는 다음과 같은 구조를 지니고 있다.나는 여기서 movie 모듈과 user모듈을 공유할 것이고, 그 이유는..
[MSA - Spring Cloud] Eureka Client 개발하기(feat. FeignClient)
·
Spring/Spring Cloud
이번에는 Service Registry에 등록할 Client 서버를 개발해보려고 한다.User Service에서 회원가입후 로그인 API에 요청을 보내면 비즈니스 로직중 Auth 서비스에 토큰 생성을 요청하는 로직이 수행되어 두 클라이언트 서버간 통신이 이루어지는 작업을 함께 알아보려고 한다. 이때 사용하는 FeignClient에 대해서도 같이 알아보자.우선 프로젝트를 모두 생성하고나서 비즈니스 로직과 함께 FeignClient에 대해 알아보겠다.Dependency 설정dependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'org.springframework.boot:..
[MSA - Spring Cloud] Eureka Server 개발하기(feat. Service Discovery란? 서버/클라이언트 사이드 디스커버리 전략)
·
Spring/Spring Cloud
MSA 환경을 구성하는데 있어 가장 먼저 개설하는 서버이다. 내가 사용한 기술은 Netflix가 개발한 Eureka라는 기술이며 서비스를 등록하고 디스커버리 하는 역할을 수행한다.Netflix는 왜 MSA 환경이 필요했을까?Netflix.io GithubNetflix MSA 사례 (출처 삼성SDS)우리는 면접에서 언제든지 왜 MSA를 사용했어요? 왜 자바를 사용했나요? 라는 물음에 대답할 준비를 해야 한다... 남들이 다 하는 기술과 아키텍처이니까요.. 라고 할 순 없기에 모노리딕 서비스 아키텍처와 어떤 차별점이 있는지 어떤 장점이 있어서 대기업들이 넷플릭스 당하다 라는 말을 만들며 MSA 도입에 따라나서게 됐는지 알아보면 좋을 것 같다. 아래 내용은 위 링크에 대한 내용을 정리한 내용이기에 이미 읽고 ..