이번 포스팅에서는 서비스의 여러 구간에서의 실패에 대한 처리 방법에 대해 알아본다. 최근 예외 상황에 대한 처리에 관심을 가지게 되었다. 사용자에게 어색함을 주지 않고 안정적인 서비스를 제공하려면 여러 구간에서 예외처리가 적절하게 이뤄져야 한다고 생각하여 간단하게 정리해 보았다. 비즈니스 로직 에러 처리 메서드에서 null을 반환한다..? 오래...
서비스에서 실패에 대한 다양한 처리 방법
[디자인 패턴] 전략 패턴을 서비스에 적용하기
이번 글에서는 디자인 패턴 중 하나인 전략 패턴에 대해 알아본다. 전략 패턴 전략 패턴은 객체 지향 설계 패턴 중 하나로, 여러 알고리즘을 서로 교체할 수 있도록 설계하는 방법이다. 런타임 시점에 동적으로 알고리즘을 선택할 수 있는 특징을 가지고 있다. 전략 패턴을 사용하는 주요 목적은 행위의 변화를 클라이언트 코드에 영향을 미치지 않고도 유연하...
Reactor Kafka를 이용한 비동기 메시지 처리
Kafka는 메시지 브로커로 실시간 데이터 처리를 위한 높은 처리량, 낮은 지연 시간을 지닌 플랫폼을 제공하는 것이 목표이다. 확장 가능한 pub/sub 메시지 큐로 정의할 수 있으며, 스트리밍 데이터를 처리하기 위한 기업 인프라를 위한 고부가 가치 기능이다. 위키백과 시스템에서 Kafka를 이용하면 실시간 데이터 스트리밍, 확장성, 내구성 ...
[DDD] 도메인 모델과 바운디드 컨텍스트
도메인 모델과 경계 Bounded context는 의미적으로 구분되는 경계를 말한다. 하나의 상품에서 카테고리 컨텍스트와 재고 컨텍스트는 서로 의미가 다르다. 이렇게 하나의 모델을 구성하고 있어도 하위 모델들은 명시적으로 구분되는 경계를 가져야 한다. Bounded Context 모델의 경계를 결정하고, 한 개의 바운디드 컨텍스트는 논리적으로 한...
[DDD] 도메인 서비스
MSA 아키텍처에서는 하나의 루트 애그리거트로 도메인 로직을 구현하지 못할 가능성이 높다. 상품을 등록하거나 구매하는 경우 각 동작에 필요한 여러 유효성 검사가 필요하다. 상품을 등록하는 부분에서는 상품을 등록할 수 있는 사용자인지, 상품 등록이 가능한 셀러인지 등의 로직이 필요하고, 상품 구매 시에는 상품에 대한 할인 정책, 배송비, 총 지불 금액 ...
[DDD] 애그리거트
이전 글에서 도메인 모델과 도메인 주도 개발을 위한 아키텍처를 알아봤다. 이번 글에서는 도메인 모델을 잘 이해할 수 있도록 만들어주는 aggregate(애그리거트)에 대해 알아본다. Aggregate 애그리거트는 관련된 객체를 하나로 묶는 역할을 한다. 애그리거트로 묶어서 보면 모델간의 관계를 모델 수준과 상위 수준에서 이해하기 용이하다. 애그리거...
[DDD] 도메인 모델과 아키텍처
도메인 주도 개발 시작하기(최범균 저) 책을 읽고 정리한 내용입니다. DDD란 ?? Domain Driven Design은 도메인 패턴을 중심으로 설계하는 방식을 말한다. 아키텍처 설계를 도메인 모델과 도메인 로직에 초점을 맞추는 것이다. Ubiquitous language(보편적 언어)의 사용으로 도메인 전문가와 개발자 간의 커뮤니케이션 ...
대규모 트래픽을 고려한 장애 허용 with circuit breaker
대규모 트래픽 발생 시 지연에 대비하는 방법 서비스에서 사용자 수가 급격히 증가하는 이벤트가 있을 때, 대규모 트래픽을 효율적으로 처리하는 것이 중요하다. MSA로 구성된 서비스에서 지연 발생 시 장애 전파를 막기 위해서는 발생한 장애가 다른 micro service에 영향을 주지 않아야 한다. 정보 조회의 경우 응답 시간이 길어지거나 응답에 실패할...
[Effective Java] Method
매개변수가 유효한지 검사하라 대부분의 메서드와 생성자는 매개변수가 특정 조건을 만족해야 원하는 동작을 할 수 있다. 매개변수에 대한 제약 조건은 메서드가 실행되기 전에 검증이 되어야 한다. 메서드가 동작하기 전에 오류를 잡아야 오류 발생 지점을 쉽게 찾을 수 있다. 만약 null이 아닌 0보다 큰 값을 요구하는 메서드가 있다고 가정한다면, 메서드가 ...
kafka consumer 예외 처리와 재시도 전략
테스트 환경 spring boot: 2.1.4.RELEASE jdk: 1.8 spring-kafka: 2.2.5.RELEASE 지금까지 Kafka consumer를 구성할 때 정말 간단한 설정만 하고, 사용했었다. spring-kafka를 이용해 @KafkaListener로 consumer의 기본 속성 값을 사용했다. 회원 정보가 변경되는 ...