목표분산 시스템으로 구성 되어있는 각 서비스에 이벤트를 발행하고각 서비스의 데이터의 일관성을 보장한다. 구성도- 주문 서비스 주문을 생성하고 결제가 완료되면 주문 생성 이벤트를 발행한다.- 재고 서비스 주문 완료된 상품들의 재고를 차감 한다- 배송 서비스 주문 완료된 상품들을 배송 시킨다고려사항주문이 생성되면 반드시 재고를 지우고 배송을 처리 해야 한다.그런데카프카에 이벤트 발행이 불가능 하다면 ?결제 API에서 실패 한다면 ?주문 생성이 실패 한다면 ?위 사항들로 인해 주문은 생성되지 않을 수 있다.또, 모든 사항에 주문을 실패하게 해서 처음부터 주문을 다시 하게 만든다면 그것은 서비스에 대한 신뢰하락으로 이어질 것이다.Transcation OutBox Pattern 개념분산시스템의 데이터 정합성을 ..
전체 글
imSoo TecBlogproblem스프링 배치를 실행 시키면 배치는 아래와 같이 관련된 테이블을 생성하는데,생성이 되지 않아 / 찾지 못해 생기는 에러이다. solution1. 자동생성application.properties 에 해당 옵션을 설정해주면 자동으로 관련 테이블이 생성된다.spring.batch.initialize-schema=always하지만 스프링 5.0 부터는 @EnableBatchProcessing 을 사용하면 위 옵션을 막아 생성이 안된다. 2. 직접 생성 위 방법으로 안된다면 직접 생성을 해주어야 한다.아래 링크를 확인하여 직접 생성해준다. https://soobysu.tistory.com/146 [오류노트] Spring Batch [ Could not obtain sequence value ]pro..
KafkaTransactionManager ( 카프카 트랜잭션 처리 )스프링 부트에서 트랜잭션을 사용하기 위해서는 단순히 spring.kafka.producer.transaction-id-prefix값을 설정하기만 하면 된다. (application.yml 혹은 KafkaProducerConfig에 설정)스프링 부트에서는 자동적으로 KafkaTransactionManager bean을 구성하고 listener 컨테이너를 연결한다.@Beanpublic ProducerFactory producerFactory() { ... DefaultKafkaProducerFactory factory = new DefaultKafkaProducerFactory(props); factory.setTransa..
이벤트 발행을 보장하는 방법Event Driven Architecture 에서의 이벤트 발행을 보장하는 방법은 여러가지 있다.MSA로 설계된 분산시스템 에서는 데이터의 일관성을 유지 하는것은 매우 중요하다.아웃박스 패턴은 서비스 간의 데이터를 최소 한번 이상 전달하여두 서비스 간의 데이터의 정합성을 목표로 한다.멱등성최소 한번 이상 전달 하더라도 데이터가 동일 해야 한다. 위 말을 들으면 멱등성 이라는 것이 떠오를 것이다.그러므로 데이터가 중복 처리 되더라도 같은 결과를 얻을 수 있게멱등성을 고려하는 것이 중요하다. 목표 - 데이터의 일관성 메시지 손실 방지: 아웃박스 패턴은 로컬 트랜잭션을 통해 작업의 원자성을 보장하고 이벤트를 데이터 베이스에 저장하여, 전송 과정에서 발생..
모놀로식 아키텍처 (Monolithic Architecture)하나의 WAS에서 모든 기능을 처리하도록 구성한다.장점구조가 간단하다시스템 운영과 개발이 편리하다네트워크로 인한 지연 및 데이터 유실 안전하다디버깅이 쉽다 ( 로그 추적에 용이하다 )트랜잭션 관리가 편하다장애에 견고하다단점기능이 많아지면 복잡해질 수 있다 (스파게티 코드)코드베이스가 어지럽다 ( HTML, JS, CSS 파일을 포함해야 하므로 )클라이언트 코드에 버그를 수정하더라도 서버를 다시 실해야하 하는 불편함이 있다Git 브랜치도 많아지고 관리가 어렵다애플리케이션에 대한 확장이 비효율적이다점차 늘어나는 사용자의 요청을 감당하기 위해 시스템을 확장하여 고가용성을 확보해야 한다.소스코드가 증가함에 따라 서버의 빌드시간은 점차 늘어나게 되고,..
problemec2에 올릴 수 있었지만 ec2 메모리가 부족해서 이렇게 된거 ElastiCache 를 사용해보려고 한다.solutionElastiCache 란Amazon ElastiCache는 인 메모리 데이터베이스 캐싱 시스템을 제공하여 애플리케이션이 데이터를 검색 할 수있는 성능, 속도 및 중복성을 향상시키는 클라우드 캐싱 서비스이다.https://ap-northeast-2.console.aws.amazon.com/elasticache/home https://ap-northeast-2.console.aws.amazon.com/elasticache/home?region=ap-northeast-2#/ ap-northeast-2.console.aws.amazon.com1. Start위 링크에 접속해서 오른..
problem ec2에서는 db의 접속이 가능 했지만 외부( intellij , db접속 툴 )에서 접속이 안됐다확인한것1. Inbound(인바운드) 규칙 확인2. 퍼블릭 엑세스 설정 확인두 설정 모두 마친 상태인데 연결 불가가 떳다. solution이유는 RDS에 설정되어 있는 서브넷이 private으로 되어 있어서,내부에서의 접근은 가능 했지만 외부에서 접근할 수 없었던 것이다. 이제 이걸 해결하려면 public으로 변경해 주면 된다.1. AWS 검색창 왼쪽 위에 있는 검색창에 VPC를 검색 후 들어간다.2. 대시보드 아래에 라우팅 테이블에 들어간다. 3.RDS로 시작하는 라우팅 테이블에 들어간다.4. 하단에 라우팅 탭에 라우팅 편집에 들어가서 라우팅 추가 버튼을 눌러준다.대상주소 : 0.0.0.0/..
problem프로필 , 로고 업로드 기능을 위해 서버에서 이미지 처리 기능으로 S3를 사용 했다.S3 의 버켓에 특정 확장자 업로드를 방지하는 정책을 적용 해보기로 했다.solution적용 할 버킷에 접속한다.권한 탭으로 이동 후 아래에 내려오면 버킷 정책이 있다{ "Version": "2012-10-17", "Id": "Policy1717078661759", "Statement": [ { "Sid": "Stmt1717078657627", "Effect": "Deny", "Principal": "*", "Action": [ "s3:GetObject", ..