본문 바로가기

전체 글17

매일 한걸음씩 2021. 3. 31.
뭐? MSA? 그렇다면 Zuul로 Gateway를 구현해보자. - 01 Netflix/zuul Zuul is a gateway service that provides dynamic routing, monitoring, resiliency, security, and more. - Netflix/zuul github.com Eureka, Hystrix등과 같이 Netflix OSS에 포함 된 API 게이트웨이 Zuul 1.x은 Servlet의 Blocking API를 사용되어 개발되었기 때문에 기본적으로 Blocking 방식으로 동작을 하고, 이를 보완하기 위해 Thread pool을 사용했지만, 오랫동안 연결이 유지되어야 하는 Websocket과 같은 연결을 지원하지 않았지만, Zuul 2.0부터는 Netty 기반 Non-blocking으로 동작합니다. 💡 Spring Clo.. 2021. 3. 30.
헥사고날 아키텍처(Hexagonal Architecture) 기존의 계층형 아키텍처는 DIP를 적용해도 한계가 있고, 도메인이 인프라에 의존하게 되면서 도메인적인 관심사와 기술적인 관심사가 섞이게 됩니다. MSA에서는 여러 종류의 어플리케이션을 호출하는 시스템과 상호작용하는 저장소가 존재하기 때문에 다양한 인터페이스를 필요로 합니다. 하지만 시스템의 관점에서는 호출하는 시스템과 Infra 간에 큰 차이가 없습니다. 이러한 사상에서 탄생한 헥사고날 아키텍처는 '포트와 어댑터 아키텍처' 라고도 불리며 비즈니스 로직을 표현하는 내부 영역과 인터페이스 처리를 담당하는 외부 영역으로 나뉩니다. 내부 영역은 순수한 비즈니스 로직을 표현하는 영역으로 외부 영역과 연계되는 포트(Port)를 가지고 있고, 외부 영역은 외부에서 들어오는 요청을 처리하는 인 바운드 어댑터(Inbou.. 2021. 3. 27.
Event를 발행해 느슨한 결합을 가져보자 도메인 모델간에 강한 의존성을 갖게 되면 트랜잭션의 범위가 커지고 시스템이 복잡해지는 경우가 발생합니다. 이를 해결하기 위해 Spring에서는 이벤트를 발행하고 핸들링하는 방법을 제공해줍니다. 시나리오 주문을 하면 주문 완료 Sms를 발송한다. @RequiredArgsConstructor @Service public class OrderService { private final OrderRepository orderRepository; private final SmsClient smsClient; public void placeOrder(OrderRequest orderRequest) { Order order = new Order(orderRequest.getOrderId()); order.place().. 2021. 3. 27.
프로젝트 패키지 구성은 어떻게 하는게 좋을까? 프로젝트를 처음 구성할 때, 패키지를 어떻게 구성해야 할지 많은 고민을 하게 됩니다. 인터넷에 있는 수많은 프로젝트가 있지만 어째서 이 클래스는 이 패키지에 있는 걸까? 라는 명확한 이유를 몰랐고 어떠한 기준으로 패키지를 구성하면 될지 개인적인 생각과 정말 간단한 시나리오로 구상해봤습니다. 예제로 사용될 시나리오는 다음과 같습니다. "사용자는 원하는 제품을 구매 요청 후 결제를 하면 배송이 완료 된다." //마법의 물품 배송;; 코드를 작성하기 전에 먼저 계층형 아키텍쳐에 대해 알아보겠습니다. 계층형 아키텍쳐 Layered Architecture라고 불리며 각 레이어에 특정 관심사와 관련된 객체만을 포함하게 만들어 관심사가 분리된 코드 구성을 목표로 하는 아키텍처입니다. 각 레이어는 밑에 있는 레이어에 .. 2021. 3. 25.