일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- GoF
- redirect-gateway
- 디자인패턴
- 구조체
- replication lag
- 2024 톨스토이문학상 수상
- go
- model context protocol
- Kubernetes
- 서비스메쉬
- golang
- esbuild
- GIT
- context7
- cosine similarity metric
- sqs fifo queue
- Infra
- authorizationpolicy
- javascript
- AI
- 오블완
- Intellij
- 티스토리챌린지
- elasticsearch
- 캡슐화
- typescript
- RDS
- AWS
- ssh 에이전트
- goland
- Today
- Total
Fall in IT.

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

1. 배경: 자동 회로 설계 툴과 부품 매칭우리는 자동 회로 설계 도구를 개발하면서, 회로에 배치할 다양한 부품들을 적절히 배치하기 위해 부품의 타입과 카테고리를 자동으로 매칭하는 작업이 필요했다. 사전에 정의된 매칭 데이터가 없는 경우에는 부품 분석 서버에 분석을 요청하고, 그 결과로부터 카테고리와 타입 정보를 전달받는 구조로 설계했다.2. 처리 방식: 비동기 분석과 메시지 응답 구조부품 분석 작업은 종류가 방대하고, 처리 시간도 예측하기 어려웠다. 따라서 동기 요청이 아닌 비동기 방식으로 분석 요청을 보내고, 분석 결과는 메시지 큐를 통해 응답받는 구조를 설계했다. 이렇게 함으로써 시스템은 다양한 부품 분석 요청을 병렬로 처리할 수 있고, 결과는 분산된 여러 인스턴스에서 수신 및 반영할 수 있게 되었..
MSA 아키텍처로 여러 서비스를 운영하면서, 저는 도메인 단위로 유스케이스를 묶는 구조를 사용해 왔습니다.예를 들어, User 서비스에서는인증 관련 로직은 AuthUsecase회원 정보 관련 로직은 UserUsecase이렇게 기능별로 Usecase를 구분해 구성했습니다.AuthUsecase에는 이메일 인증, 휴대폰 인증, 본인 인증 등을, UserUsecase에는 회원가입, 로그인, 유저 정보 조회, 비밀번호 재설정 등 다양한 메서드를 구현해 관리했습니다.처음에는 이 구조가 충분히 단순하고 효과적이었습니다. 하지만 서비스가 점차 확장되고 비즈니스 요구사항이 복잡해지면서 한계가 드러났습니다.문제의 시작: 사용자 유형에 따른 분기 증가시간이 지나면서 User 서비스는 B2B와 B2C 사용자를 동시에 지원하게..
1. 문제 상황어드민 페이지에서 관리자가 신규 상품을 등록한 직후, 목록을 조회했을 때 등록한 상품이 목록에 나타나지 않는 현상이 발생했습니다. 이 문제는 사용자 입장에서 혼란을 줄 수 있고, 등록 여부에 대한 오해로 이어질 수 있기 때문에 즉시 분석이 필요했습니다.2. 문제 확인 과정테스트 중 어드민 페이지에서 상품 등록 후 곧바로 목록을 조회했을 때, 신규 상품이 조회되지 않는 현상을 직접 확인할 수 있었습니다.처음에는 클라이언트 측 캐싱 문제를 의심했지만, 서버에서 응답한 JSON 로그를 추적해본 결과, 실제로 응답 데이터에 새로 등록된 상품이 포함되지 않았습니다.흥미롭게도, 몇 초 후 다시 상품 목록을 조회했을 때는 등록한 상품이 정상적으로 나타났습니다. 또한, 테스트 코드에서 상품 등록 직후 5..
최근 AI 기반 코딩 도구들이 급격히 발전하면서, "정확한 문서 기반 코드 생성"에 대한 수요가 높아졌습니다.특히, 최신 프레임워크/라이브러리는 LLM의 학습 시점을 벗어나기 때문에, 낡은 정보에 기반한 답변이 큰 문제로 떠오르고 있습니다.이 문제를 해결해주는 도구가 바로 Context7입니다.이 글에서는 MCP 프로토콜, Context7의 핵심 기능, 그리고 동작 흐름까지 간단하게 정리합니다.MCP(Model Context Protocol)란?MCP는 Claude, Cursor, Windsurf 등 코딩 어시스턴트 툴이 외부 컨텍스트 소스와 통신할 수 있도록 만든 표준 프로토콜입니다.쉽게 말해, LLM에게 "이 문서도 참고해서 답해줘!"라고 알려줄 수 있게 해주는 통로입니다.MCP는 JSON 기반의 요..