RabbitMQ로 SAGA 패턴 구현
·
Backend
SAGA 패턴?MSA에서 분산 트랜잭션 처리를 위해 도입한 패턴이다.각 서비스의 로컬 트랜잭션들이 순차적으로 업데이트를 해나가며,트랜잭션 실패 시 보상 트랜잭션을 수행하여 이전 서비스들의 트랜잭션을 롤백한다. SAGA 아키텍처 구조도 Order와 Product는 Producer이고, Product와 Payment는 Consumer가 된다.즉 Product의 경우 동시에 Producer와 Consumer의 역할을 한다. SAGA 플로우정상 흐름Order application에 클라이언트 요청이 들어오면, Order에서 필요한 로직을 수행하고 exchange에 메시지를 보낸다.exchange가 message를 product.queue로 라우팅한다.product는 product.queue의 메시지를 컨슘하여 ..
LLM 프롬프트 엔지니어링: 잠재력을 최대한 끌어내는 비결
·
log
최근 LLM(대형 언어 모델)에 대해 고민해보면서, ChatGPT, Claude, Gemini 같은 모델들이 AI 기술의 정점을 이룬다는 사실을 다시 한번 느끼게 됐다. 이 도구들이 가진 잠재력을 최대한 활용하기 위해서는 프롬프트 엔지니어링이 필수적이라는 생각을 하게 됐다. 그래서 오늘은 프롬프트 엔지니어링에 대해 다뤄보려고 한다. LLM의 잠재력LLM은 방대한 데이터로부터 학습된 모델로, 입력된 텍스트를 바탕으로 다양한 결과를 생성할 수 있다.하지만 우리가 원하는 결과를 얻기 위해서는 적절한 프롬프트가 필요하다. 예를 들어, ChatGPT는 대화형 AI로서 사용자와 자연스러운 대화를 이어가는 데 탁월하고, Claude는 창의적인 글쓰기와 문제 해결 능력을 발휘하며, Gemini는 방대한 지식을 바탕으로..
Spring Data JPA를 이용한 BaseEntity와 데이터 감사 로그 기능
·
Backend/SpringBoot
데이터 보존과 감사 로그가 필요하다는 요구사항이 있다.데이터 보존: 모든 데이터는 완전 삭제되지 않고 숨김 처리로 관리(숨김과 삭제는 다른 필드에서 동작) → 논리적 삭제데이터 감사 로그: 모든 정보에 생성일, 생성 아이디, 수정일, 수정 아이디, 삭제일, 삭제 아이디를 포함위와 같은 정보들은 모든 엔티티에 공통으로 들어가야 한다.간단하게 엔티티마다 해당 정보들을 컬럼으로 넣어준다. 하지만 이렇게 된다면 코드 중복이 우려된다.그렇다면, 코드 중복을 줄이면서 구현할 방법이 있을까? BaseEntityEntity들이 공통적으로 사용하는 속성을 하나로 묶어 BaseEntity라는 부모 클래스를 생성한다.BaseEntity 클래스를 생성하여 공통 속성을 담고, 엔티티가 상속받을 수 있도록 하면, 공통 속성에 대..
인프라 아키텍처 시각화
·
infra
그리기 툴1) draw.iohttps://app.diagrams.net/ Flowchart Maker & Online Diagram SoftwareFlowchart Maker and Online Diagram Software draw.io is free online diagram software. You can use it as a flowchart maker, network diagram software, to create UML online, as an ER diagram tool, to design database schema, to build BPMN online, as a circuit dapp.diagrams.net국룰.  2) cloud crafthttps://www.cloudcraft.co..
데이터베이스 Lock
·
computer science/Database
DB Lock 이란?데이터베이스에서 여러 트랜잭션이 동시에 같은 데이터에 접근할 때, 데이터의 무결성(일관성)을 보장하기 위해 사용되는 메커니즘한 트랜잭션이 특정 데이터에 대해 작업을 하고 있을 때 다른 트랜잭션이 그 데이터에 접근하지 못하도록 잠그는 것 (Lock)이를 통해 데이터의 일관성을 유지하고, 동시에 발생할 수 있는 충돌을 방지할 수 있다.  DB Lock 필요성데이터베이스는 여러 사용자나 시스템이 동시에 데이터를 읽고 쓰는 환경에서 운영된다.이런 환경에서 발생할 수 있는 사례는 다음과 같다. Dirty Read (더티 리드) 한 트랜잭션이 데이터를 수정 중일 때 다른 트랜잭션이 그 데이터를 읽는 상황.만약 첫 번째 트랜잭션이 롤백된다면, 두 번째 트랜잭션은 잘못된 데이터를 읽은 것이 된다.트..
Prometheus & Grafana & Loki 모니터링
·
Backend
모니터링: 시스템을 실시간으로 관찰하고 측정하는 것 모니터링의 중요성💡 모니터링 도구를 사용하여 시스템의 상태를 추적하고, 문제를 감지하고, 성능을 최적화하며, 장애 발생 시 빠르게 대응할 수 있다.  프로메테우스(Prometheus) 연동Prometheus란?Prometheus는 오픈소스 모니터링 툴로 시계열 데이터베이스를 사용하여 메트릭 데이터를 수집하고, 쿼리 및 시각화를 통해 시스템 상태를 모니터링하고 경고를 설정할 수 있다. Prometheus의 주요 구성 요소Prometheus 서버: 메트릭 데이터를 수집하고 저장하는 핵심 컴포넌트로, 각 타겟으로부터 데이터를 주기적으로 스크랩하여 시계열 데이터베이스에 저장한다.시계열 데이터베이스(Time Series Database, TSDB)는 시간에 따..
Kafka 기본 개념 및 연동 실험
·
Backend
Kafka란Kafka는 분산 스트리밍 플랫폼으로, 주로 실시간 데이터 피드의 빅 데이터 처리를 목적으로 사용된다.Kafka는 메시지 큐와 유사하지만, 대용량 데이터 스트림을 저장하고 실시간으로 분석하거나 처리하는 데 중점을 둔다.💡 처리하는 메시지량: kafka >>> RabbitMQ Kafka의 역할실시간 데이터 처리: 대용량 데이터를 실시간으로 처리하고 분석한다.데이터 통합: 다양한 소스에서 데이터를 수집하고 이를 통합하여 분석한다.내결함성: 데이터 손실 없이 안정적으로 데이터를 저장하고 전송한다. Kafka 장단점- -장점- -신뢰성데이터 복제: 데이터를 여러 브로커에 복제하여 저장하므로, 단일 브로커 장애 시에도 데이터 손실을 방지할 수 있다.확인 메커니즘: 데이터가 소비자에게 성공적으로 전달되..
RabbitMQ 기본 개념 및 실습
·
Backend
RabbitMQ란RabbitMQ는 메시지 브로커다.메시지 브로커는 데이터(메시지)를 송신자(프로듀서)로부터 수신자(컨슈머)에게 전달하는 중간 매개체 역할을 한다.RabbitMQ는 메시지를 큐(queue)에 저장하고, 필요할 때 적절한 수신자(컨슈머)에게 전달한다. RabbitMQ의 역할비동기 처리: 데이터를 비동기적으로 처리하여 시스템의 응답성을 높인다.부하 분산: 여러 소비자에게 메시지를 분산시켜 시스템의 부하를 균형 있게 분산한다.내결함성: 메시지를 안전하게 저장하여 시스템 장애 시 데이터 손실을 방지한다. RabbitMQ 장단점---장점---신뢰성메시지 지속성: RabbitMQ는 메시지를 디스크에 저장하여 시스템 장애 발생 시에도 메시지가 손실되지 않도록 한다.확인 메커니즘: 메시지가 성공적으로 소..
대규모 스트림 처리
·
Backend
대규모 시스템 도입인터넷에서는 수백만 명의 사용자가 동시에 접속하고 상호작용할 수 있는 시스템을 구축해야 하는 상황이 자주 발생한다.이러한 시스템은 단순히 많은 사용자를 처리하는 것뿐만 아니라, 안정성과 신뢰성을 유지하면서 고성능을 제공해야 한다.기능에 대한 테스트를 통해 애플리케이션이 정상적으로 동작하는것을 확인하는 것은 당연한 것이다.성능 테스트를 통해 내가 만든 애플리케이션의 성능을 측정하여 애플리케이션이 실제 환경에서 어떻게 동작하는지 미리 검증하고, 신뢰성 있는 시스템을 구축해야 한다. 동시 접속자와 초당 요청량(TPS)시스템을 사용할 사용자 수를 파악하는 것이 중요하다. 시스템 모니터링을 통해 하루에 몇 명의 사용자가 접속하는지 알 수 있다.그러나 단순히 하루 접속량을 파악하는 것만으로는 충분..
Redis 응용 - 검색 결과 캐싱
·
데이터베이스/Redis
검색 결과 캐싱Pagination with @EnableSpringDataWebSupportApplication 에 다음 어노테이션을 추가한다.@EnableSpringDataWebSupport(pageSerializationMode = VIA_DTO)@EnableSpringDataWebSupport(pageSerializationMode = VIA_DTO)@SpringBootApplicationpublic class RedisApplication { public static void main(String[] args) { SpringApplication.run(RedisApplication.class, args); }} 스프링 부트 3.3.1 버전에서 위 어노테이션이 없으면 war..
조원준입니다
'분류 전체보기' 카테고리의 글 목록 (2 Page)