인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

마비미님의 프로필 이미지

작성한 질문수

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Orders Microservice - 개요

jpa msa 에 대한 질문입니다!

작성

·

986

3

안녕하세요 강사님! 강의 너무 재밌게 잘 보고있습니다!

.

마이크로서비스 환경에선 jpa 연관관계 맵핑(@OneToMany, @ManyToOne...) 이런게 불가능할 것 같은데 그래서 설정을 하지 않으신건지 궁금합니다!

또한 마이크로 서비스에선 외래키같은 설정은 따로 안해줘도 되는건가요?!

답변 1

12

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요, 이도원입니다.

MSA에서 JPA의 맵핑 작업을 할 수 도있겠지만, 이것은 어디까지나 Service 경계에 속해 있는, 같은 로직의 경우에 적합한 경우라고 생각됩니다.

기존의 개발처럼 애플리케이션에 필요한 비즈니스 로직을 SQL이나 Stored Procedure 등에 포함된 것을 DB와 종속성을 최소화 하면서 MSA로 비즈니스 로직을 옮기는 것이 MSA 사용 목적 중에 하나라고 생각합니다. 

그렇다면, 기존 모놀리스 방식에써 또는 관계형 데이터베이스에 외래키를 이용해서 데이터를 분리하여 저장하고, 저장된 데이터를 다시 하나의 SQL과 JOIN을 사용하여 가져오는 이유는 무엇일까요? 거기에는 여러가지 합당한 이유와 장점들이 있겠지만, 데이터의 중복을 최소화하기 위함이고, 데이터의 무결성을 지켜주기 위해서라고 생각됩니다. 스토리지 가격이 비쌀테부터 사용되던 관계형 데이터베이스의 기본적인 규칙이었던 셈입니다. 

그러나, 최근에는 스토리지의 가격이 저렴해졌고, MSA와 같이 비즈니스 로직을 서비스 단위로 분리하여 개발하려고 할때는, 데이터의 중복성보다는 서비스와의 독립성이나 종속성을 최소화하거나 없애는 것이 중요한 포인트 여겨지고 있습니다. 여기에서 발생하는 데이터의 중복과 무결성 처리를 위해서 이벤트 소싱등의 방법을 통해 데이터 동기화와 사가패턴등을 이용하여 트랜잭션의 처리를 해결해 주고 있습니다. 

선택에 관한 문제라고 생각됩니다만, MSA에서 외래키 설정 및 JPA의 맵핑도 가능하지만, 서비스의 경계에 맞는 상황인지 파악하셔서 작업해야 하지 않을까 하는......... 어디까지나 제 의견입니다. ^^;

감사합니다. 

마비미님의 프로필 이미지
마비미
질문자

그랬던거군요!! 심오있는 답변 감사합니다ㅎㅎ