일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- RDS
- AI
- context7
- go
- 오블완
- GoF
- GIT
- blank import
- 디자인패턴
- elasticsearch
- Kubernetes
- authorizationpolicy
- 캡슐화
- Intellij
- javascript
- redirect-gateway
- goland
- 티스토리챌린지
- AWS
- go-sql-driver
- sqs fifo queue
- replication lag
- 2024 톨스토이문학상 수상
- database/sql
- golang
- typescript
- esbuild
- 구조체
- Infra
- ssh 에이전트
- Today
- Total
목록2025/07 (2)
Fall in IT.

DB 업데이트와 SQS 메시지 발송을 하나의 트랜잭션 즉, 원자적 단위로 묶을 수 없다.그 이유는관계형 데이터베이스 트랜잭션은 DB 내부에서만 원자성이 보장되고SQS(혹은 대부분의 메시지 큐)는 데이터베이스와의 2PC(분산 트랜잭션, XA 트랜잭션)을 지원하지 않기 때문이다.즉, 둘은 완전히 별도의 시스템이기 때문에 원자적 보장이 없으므로, 하나만 성공하거나 실패할 수 있는 상황이 생길 수 있다.나는 주로 어떤 방식으로 구현했는가? (어떤 선택을 했었더라..?)DB 업데이트 트랜잭션을 실행한다.트랜잭션 커밋에 성공하면 SQS 메시지를 전송한다.트랜잭션 커밋에 실패하면 SQS 메시지를 전송하지 않는다.SQS 메시지를 전송에 실패할 경우 DB에 기록하고 후처리가 가능하도록 한다.내가 선택한 방식에 대한 이유..

1. 배경: 자동 회로 설계 툴과 부품 매칭우리는 자동 회로 설계 도구를 개발하면서, 회로에 배치할 다양한 부품들을 적절히 배치하기 위해 부품의 타입과 카테고리를 자동으로 매칭하는 작업이 필요했다. 사전에 정의된 매칭 데이터가 없는 경우에는 부품 분석 서버에 분석을 요청하고, 그 결과로부터 카테고리와 타입 정보를 전달받는 구조로 설계했다.2. 처리 방식: 비동기 분석과 메시지 응답 구조부품 분석 작업은 종류가 방대하고, 처리 시간도 예측하기 어려웠다. 따라서 동기 요청이 아닌 비동기 방식으로 분석 요청을 보내고, 분석 결과는 메시지 큐를 통해 응답받는 구조를 설계했다. 이렇게 함으로써 시스템은 다양한 부품 분석 요청을 병렬로 처리할 수 있고, 결과는 분산된 여러 인스턴스에서 수신 및 반영할 수 있게 되었..