물류 관리 및 배송 시스템을 위한 MSA 기반 플랫폼 개발
나는 Security 파트와 User파트를 맡았다.
프로젝트를 마치며 튜터님께 피드백이 온것들을 정리해보겠습니다.
인프라설계서
MSA 서비스 중 Object Service 는 서비스 명을 보고도 해당 서비스가 어떤 역할을 할지를 유추할 수 있는 이름으로 변경하시면 좋습니다. 대면피드백때도 말씀드린 내용인데요! Object Service 의 root 에그리거트 이름을 따라가면 좋습니다 :)
*Gateway 에서 Auth 서비스를 호출할 때에 localhost 로 Auth 서비스를 호출하고 계신 것 같습니다.
해당 부분을 FeignClient 으로 호출하도록 변경하면 추후 Auth 서비스가 확장되서 여러개의 서버로 동작할 때, FeignClient 의 로드벨런싱도 자동으로 적용할 수 있는 장점이 있습니다.
auth 서비스 구조는JWT 발급 및 검증API를 제공하고, 로그인시 JWT를 발급하며, 검증api를 통해 클라이언트가 보낸 JWT가 유효한지 확인하는 구조이다.
* OrderService:87 에서 Entity 의 Setter 를 사용하여 객체를 업데이트 해주고 있는 것을 확인했습니다.
DDD의 관점에서 엔티티는 자신의 상태를 스스로 관리해야 하며, 엔티티 내부 함수로만 상태 변경이 이루어져야 합니다.
이유는 Setter를 통해 외부에서 임의로 상태를 변경하면, 도메인 규칙이나 비즈니스 로직을 위반할 위험이 있어 엔티티의 무결성을 잃을 수 있기 때문입니다. Order 엔티티 내에 public void update() 함수로 구현하시면 더 좋습니다 :) * 위 내용과 같은 이유로 서비스에서 Builder 로 엔티티 객체를 생성하는 것도 지양하시는 것이 좋습니다.
예를 들어, 주문 금액이 생성되거나 변경될 때마다 주문 금액을 한글로 표현하는 String koreanPrice 변수가 있다고 가정해봅시다. 주문이 생성되거나 수정될 때마다 해당 규칙을 적용해야 하는데, 서비스 계층에서 Builder 패턴을 사용해 엔티티를 생성하거나 setter 를 이용해서 엔티티를 수정한다면, 도메인 규칙이 외부로 분산되게 되어 유지보수 및 디버깅이 어려워질 수 있습니다. * FeignClient 구현체 = '인프라스트럭처 계층' (외부요청 이기에) FeignClient Interface = '응용 계층' ( DIP를 위함 ), FeignClient 에서 사용하는 DTO = '응용 계층' 으로 변경이 필요합니다!
'개발관련' 카테고리의 다른 글
Netfilx는 PassPort ? (1) | 2024.09.27 |
---|---|
<캡슐화> JPA 엔티티 생성시 Setter를 지양하는이유 (0) | 2024.09.24 |
Gateway 에 관하여 내가 프로젝트를 진행하면서 해야할것 (2) | 2024.09.13 |
[Spring Security] @EnableMethodSecurity와 @EnableGlobalMethodSecurity (0) | 2024.09.10 |
DDD란? (1) | 2024.09.06 |