일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- EC2
- JPA
- querydls
- Java
- aop
- Kafka
- 프로그래머스
- 어노테이션
- spring boot
- 멀티 모듈
- Intellij
- trouble shooting
- springboot
- Redis
- 아키텍처
- Til
- 객체지향원칙
- algorithm
- MSA
- docker
- Github Actions
- 유효성 검사
- DevOps
- 테스트 코드
- rabbitmq
- swagger
- JWT
- testcode
- CI/CD
- AWS
- Today
- Total
목록MSA (7)
개발노트
개요MSA 환경에서 재고 감소 로직을 RabbitMQ와 함께 구현할 때, 메시지 처리 순서가 보장되지 않은 문제가 발생할 수 있다.RabbitMQ는 비동기로 메시지를 처리하며, 소비자(Consumer)가 여러 개일 경우 메시지가 동시에 여러 스레드에서 처리될 수 있다. 문제 1: 메시지 처리 속도 차이로 인한 순서 불일치@RabbitListener(queues = "${stockMessage.queue.stock.request}")public void handleStockDecrementRequest(StockDecrementMessage stockDecrementMessage) { productEventService.decreaseStock(stockDecrementMessage);}handleS..

개요order 와 product 간의 메시지를 주고 받는 과정에서 ListenerExecutionFailedException: Listener method could not be invoked with the incoming message에러가 발생해 해결한 과정을 정리해본다. Messagepackage com.devsquad10.product.application.dto.message;import java.util.UUID;import lombok.AllArgsConstructor;import lombok.Builder;import lombok.Data;import lombok.NoArgsConstructor;import lombok.ToString;@ToString@Builder@Data@AllAr..
개요DDD의 계층구조는 내가 알고있던 계층구조와는 조금 다른 개념이라 정리해본다. DDD( Domain-Driven Design )에서의 계층 구조 ( Layered Architecture )DDD에서 계층형 아키텍처 ( Layered Architecture )는 애플리케이션을 여러 개의 독립적인 계층으로 나누어 각 계층이특정한 역할을 담당하도록 하는 설계 방식입니다. 이러한 계층 구조를 적용하면 관심사의 분리 (Separation of Concerns)를 실현할 수 있어 유지보수성과 확장성이 좋아집니다. DDD의 계층 구조DDD에서는 일반적으로 다음과 같은 4가지 계층을 사용한다.사용자 인터페이스 ( User Interface, UI ) 또는 프레젠테이션 ( Presentation ) 계층애플리케이션..

개요오늘부터 프로젝트를 시작하게되었다 아마도 RabbitMQ 보단 kafka를 쓰게될 것 같다.redis도 kafka 도 처음 프로젝트에 적용하는거라 잘할 수 있을지 걱정이 앞선다.확실히 이해하고 넘어가기위해서 정리하면서 복습해본다. Kafka 란?kafka는 분산 스트리밍 플랫폼이자 메시지 큐 시스템이다. 원래 LinkedIn에서 로그 데이터를 처리하기 위해 개발되었으며,이후 Apach 프로젝트로 오픈 소스화 되었다. kafka는 주로 대규모 데이터 파이프라인 구축, 로그 수집, 실시간 데이터 스트리밍 및 메시지 큐로 사용된다. kafka의 주요 특징은 내구성, 확장성, 고가용성이다. 데이터는 파티션을 통해 분산 저장되며, 여러 브로커에서 데이터가 복제되어 장애에 강하게 설계되어있다. Kafka의 주요..

개요RabbitMQ 에 대해 강의로 처음 접하게되었다. 개념와 사용법에 대해 정리해본다. RabbitMQ 란?AMQP ( Advanced Message Queuing Protocol ) 기반의 오픈 소스 메시지 브로커 ( Message Broker ) 이다.애플리케이션 간의 비동기 메시지 처리를 지원하여, 높은 확장성과 안정성을 가진 분산 시스템을 구축할 때 유용하다. RabbitMQ의 핵심 개념RabbitMQ는 메시지를 모내는 Producer( 발행자 ) 와 메시지를 받는 Consumer ( 구독자 ) 사이에서 Broker 역할을 수행한다. 즉, Producer가 메시지를 Queue에 전달하면 Consumer가 메시지를 가져가는 방식으로 동작한다. 1. Message ( 메시지 ) Produc..

CircuitBreaker해석하면 누전 차단기 라는 뜻이다.코드의 흐름을 회로라고 생각하고 과부하가 걸리거나 단락으로 인한 피해를 막기 위해 자동으로 회로를 정지 시키는 장치라고 정의되어있다한다. 서버에서 사용하면 외부 시스템이나 서비스와의 통시 중에 장애가 발생했을 때 시스템 전체로 장애가 전파되는것을 방지하는 메커니즘이다. 키 포인트는 차단 인 것 같다. 상태3가지의 보통 상태(OPEN , CLOSED, HALF_OPEN)와 특별한 상태(DISABLED, FORCED_OPEN)를 가지고있다.보통 상태 3가지에 대해서만 정리해보겠다. CLOSED (정상상태)정상적으로 동작하는 상태요청이 서비스로 전달되고 응답을 기다린다.실패율이 설정한 임계치보다 낮으면 현 상태를 유지함 평상 시의 호출되고 응답을 받..

개요MSA 강의를 수강중 각 서버마다 중복되는 모듈이 나오면 서버마다 새로 생성해줘야하는 불편함을 느꼈다.때마침 다른 수강생분께서 이 문제를 해결하는 글을 올려주셔서 참고해 내가 이해하기 편하게 다시 정리해보려한다. 프로젝트 구성 기존의 프로젝트들과 동일한 패키지 경로의 프로젝트를 하나 생성해준다.com.spring-cloud.eureka.** 경로로 구성해왔지만 지금 생성하는 프로젝트는 최상위 모듈로 사용할것이기 때문에나는 com.spring-cloud.eureka로 프로젝트를 생성했다. 그 다음 기존의 프로젝트들을 하위 모듈로 가져온다. 프로젝트안에 그냥 넣으면된다.(나는 그렇게 돌아갔다)방금 생성한 project 라는 이름의 프로젝트를 최상위 모듈로 사용하고 기존의 프로젝트들을 하위 모듈로 사용..