GRPC, DDD

Ena JJJ·2023년 6월 4일
0

GRPC

장점:

javascript에서 많은 오버헤드를 발생시키는 json의 직렬화 및 역직렬화를 수행하지 않으며, 이진데이터를 통해서 데이터를 송수신 하기 때문에, 성능이 api통신에 비해서 뛰어나다.

메세지 유형 정의 : protocol buffers를 사용하여 메시지 유형을 정의하고 직렬화한다. 이를 통해 데이터 구조를 명확하게 정의하고, 메시지 유형에 대해 컴파일된 코드를 생성하여 타입 안정성을 보장한다. 또한, 메시지 유형의 업데이트와 버전 관리도 용이하게 처리할 수 있다.

과거에는 PostMan에서 grpc를 지원하지 않아서 이용하기 꺼려지는 면이 있었지만, 최근에는 grpc를 postMan에서 지원을 해주며 편리하게 사용이 가능하다고 한다.

단점:

현재 서로 다른 형상관리 툴을 이용하고 있기 때문에, .proto 파일 동기화를 시행할 추가적인 작업이 필요하다.

기존의 코드를 클라이언트 서버 모든 부분에서 고쳐서 사용해야 한다.

만약 고치게 된다면, 클라이언트의 요청이 있을 때마다 .proto 파일을 수정하여 클라이언트와 공유해야 하며, 동기화를 지속적으로 해줘야하는 문제가 있다.

사용법

네스트 공식 문서 : https://docs.nestjs.com/microservices/grpc

프로토 파일 정의 .proto

DDD의 Aggregate

Aggrete

  • 데이터 변경의 단위로 다루는 연관 객체의 묶음
  • 연관된 엔티티와 값 객체들의 묶음

Aggregate는 모델이나 비즈니스 도메인을 이해하기 위한 거시적인 방법으로 사용된다.

Setter를 이용하여 Aggregate에 속한 객체를 직접 변경해서는 안된다.

일관성을 지켜줘야한다.


//피해야할 로직 
ShippingInfo si = order.getShippingInfo();
si.setAddress(newAddress);

이렇게 구성하기 위해서는

  1. 단순히 필드를 변경하는 setter를 public 범위로 만들지 않는다
    • 함수를 이용하여 changeName() 같은 방식을 이용한다
  2. VO(value object 도메인 객체)는 불변으로 구현한다.
    • VO의 값을 변경하는 방법은 새로운 VO를 전달해서 값을 변경하는 방법밖에 없도록 한다

0개의 댓글