전체 글

Docker를 사용하여 RabbitMQ를 설치하고 설정하는 방법 Docker  Stack을 사용하여 RabbitMQ를 설치 및 설정하는 방법을 소개합니다. RabbitMQ는 Windows, Linux, macOS 등 다양한 환경에서 설치가 가능하지만, 저는 Linux 환경에서 Docker Stack를 활용해 설정을 진행했습니다.   아래에서는 RabbitMQ를 Docker Swarm 환경에서 YAML 파일을 이용해 설치하고, Traefik으로 라우팅을 설정하는 방법을 상세히 설명합니다.   1. Docker Network 생성 다음 명령어를 사용하여 네트워크를 생성합니다docker network create --driver overlay --attachable rabbotmq-network​--driv..
1. RabbitMQ와 메시지 큐의 이해 https://float.tistory.com/309 RabbitMQ[1] RabbitMQ와 메시지 큐의 이해: 마이크로서비스를 위한 비동기 통신RabbitMQ와 **메시지 큐(Message Queue)**에 대해 알아보고, 마이크로서비스 아키텍처에서 어떻게 활용되는지 공부 및 정리한 내용입니다. RabbitMQ를 이해하기 전에, 먼저 메시지 큐가 무엇인지 간단히float.tistory.com  2. RabbitMQ의 핵심 개념https://float.tistory.com/310 RabbitMQ[2] RabbitMQ의 핵심 개념Producer (생산자)Producer는 메시지를 전송하는 애플리케이션입니다.Producer는 Consumer(소비자)에게 직접 메시지를..
일반적인 메시징 시스템 아키텍처우선, 일반적인 메시징 시스템 아키텍처를 살펴봅시다.  Producer(생산자): 메시지를 생성하고 보냅니다.Consumer(소비자): 메시지를 읽어들이고 처리합니다.Message Broker(메시지 브로커): Producer와 Consumer 사이에서 메시지를 중계합니다.흐름: Producer는 메시지를 브로커로 보내고, Consumer는 브로커에서 메시지를 읽습니다.이것이 일반적인 메시징 시스템의 구조입니다.RabbitMQ 메시징 시스템 아키텍처RabbitMQ 아키텍처에서는 위 구조에 추가적으로 Exchange(교환기)라는 컴포넌트가 있습니다.RabbitMQ의 흐름은 다음과 같습니다Producer가 메시지를 Exchange에 보냅니다.Exchange는 메시지를 적절한 Q..
Producer (생산자)Producer는 메시지를 전송하는 애플리케이션입니다.Producer는 Consumer(소비자)에게 직접 메시지를 보내지 않습니다.대신, 메시지를 RabbitMQ 브로커로 전송합니다.Producer는 메시지를 RabbitMQ 브로커로만 보냅니다.이후 Consumer가 RabbitMQ 브로커에서 메시지를 읽어 처리합니다.2. Consumer (소비자)Consumer는 RabbitMQ 브로커로부터 메시지를 읽어들이는 애플리케이션입니다.Producer가 메시지를 브로커에 보낸 후, Consumer는 브로커에 저장된 메시지를 읽어 처리합니다.여러 Consumer가 RabbitMQ 브로커에 동시에 연결될 수 있습니다.예: Consumer1, Consumer2 등이 RabbitMQ 브로커에..
RabbitMQ와 **메시지 큐(Message Queue)**에 대해 알아보고, 마이크로서비스 아키텍처에서 어떻게 활용되는지 공부 및 정리한 내용입니다. RabbitMQ를 이해하기 전에, 먼저 메시지 큐가 무엇인지 간단히 알아보겠습니다. 메시지 큐메시지 큐(Message Queue)는 애플리케이션들이 서로 메시지를 주고받으며 소통할 수 있도록 돕는 시스템입니다.이 시스템은 메시지를 임시로 저장하여, 대상 애플리케이션(소비자)이 바쁘거나 연결이 끊어진 경우에도 메시지를 안전하게 전달할 수 있습니다.메시지 큐의 주요 특징임시 저장: 메시지는 큐에 저장되며, 필요할 때 소비자에 의해 처리됩니다.비동기 통신 지원: 메시지를 보낸 생산자는 응답을 기다리지 않고 다른 작업을 계속 진행할 수 있습니다.메시지 큐의 구..
운영 환경 오픈 후, 속도가 급격히 저하되거나 쿼리 조회가 멈추는 현상이 발생했습니다.  이를 모니터링하면서 문제가 심화되는 것을 확인했고, 이에 따라 원인을 분석하고 해결책을 모색하게 되었습니다. 함수와 배치에서의 쿼리 조회 방식을 변경하여 성능을 크게 개선할 수 있었습니다. 이번 글에서는 제가 진행한 함수 및 쿼리 최적화 과정을 공유하려고 합니다. 문제 분석 및 원인 파악운영 환경에서 배치 작업 중 속도 저하와 조회 멈춤 현상을 겪으면서, 먼저 시스템의 성능을 모니터링하며 문제의 원인을 분석했습니다. 조회 대상은 약 200건 정도였으며, 상태가 '전송완료'인 건들 중 '상태 전송대상'으로 변경된 값들을 조회하는 쿼리였습니다. 이때 대상 건들이 많아지면서 조회 속도가 급격히 떨어지거나, 아예 멈추는 현..
Docker Swarm에서 비밀번호를 안전하게 관리하는 방법: Docker Secrets 사용법 Docker Swarm 환경에서는 env 파일로 민감한 정보를 관리하는 것에 제한이 있습니다. 특히, 패스워드와 같은 정보는 명령문으로 선언할 수도 있지만, 보안을 위해 Docker Secrets을 활용하여 관리하는 것이 좋습니다. 이 글에서는 Docker Secrets를 사용해 비밀번호를 안전하게 저장하고 사용하는 방법을 설명합니다.   1. Docker Secrets를 사용해 비밀번호 관리하기Docker Secrets는 Docker Swarm에서 민감한 정보를 보호하는 방법으로, docker secret create 명령어를 사용하여 비밀번호 등의 중요한 데이터를 안전하게 관리할 수 있습니다. 아래의 단계..
Traefik에서 Let's Encrypt 인증서 발급 문제 해결 및 대시보드 활성화최근 Traefik 설정 중 Let's Encrypt 인증서 발급 문제를 겪었습니다. 이 문제로 인해 Traefik 대시보드가 정상적으로 표시되지 않았으나, 몇 가지 디버깅을 통해 문제를 해결할 수 있었습니다. 이 글에서는 제가 경험한 문제와 해결 과정을 공유합니다. 문제 상황 Traefik 설정에서 Let's Encrypt 인증서를 사용하도록 설정했으나 대시보드에 접근할 수 없었습니다.로그에서 다음과 같은 메시지를 반복적으로 확인했습니다:인증서가 정상적으로 발급되지 않았고, Traefik 대시보드가 로드되지 않는 문제가 발생했습니다.No ACME certificate generation required for domai..
두 가지 구조(Map.Entry와 Pair)의 사용을 비교할 때, 주로 재사용성, 가독성, 그리고 유연성 관점에서 차이가 발생합니다.  1. 재사용성 측면Map.Entry:Map.Entry는 맵의 키-값 쌍을 표현하기 위한 인터페이스로, 맵에서 엔트리를 추출할 때만 사용됩니다.맵 외부에서 이 객체를 사용하기엔 부자연스러우며, 별도로 엔트리 인터페이스를 재사용하는 경우가 드뭅니다.Pair:Pair는 맵 외부에서도 활용 가능한 일반적인 데이터 구조입니다.데이터베이스 쿼리 결과, API 응답 데이터, 또는 임시 데이터 조작 등 다양한 상황에서 유연하게 사용할 수 있습니다.// Map.Entry는 map.entrySet()에서만 유효한 형태Map.Entry entry = map.entrySet().iterato..
해당 게시글은 하이버네이트 공식문서를 읽으면서 정리해 놓은 글이다. https://docs.jboss.org/hibernate/orm/6.6/quickstart/html_single/#modules Getting Started with HibernateHibernate is an Object/Relational Mapping (ORM) solution for programs written in Java and other JVM languages. While a strong background in SQL is not required to use Hibernate, a basic understanding of its concepts is useful - especially the principles ofd..