분류 전체보기
[RabbitMQ] 메시지 속성에 대하여
[RabbitMQ] 메시지 속성에 대하여
2026.01.18들어가기 전이번 포스팅에서는 RabbitMQ에서 메시지를 발행할 때 설정할 수 있는 메시지 속성에 대해서 알아보겠습니다. 메시지 속성RabbitMQ에서 설정할 수 있는 메시지 속성은 아래와 같습니다. 속성유형사용처명시된 내용content-type짧은 문자열애플리케이션MIME Types를 사용해 메시지 본문의 유형을 지정하는데 사용content-encoding짧은 문자열애플리케이션메시지 본문이 zlib, deflate, 또는 Base64와 같은 특별한 방법으로 인코딩되는지 지정하는데 사용app-id짧은 문자열애플리케이션메시지를 발행하는 애플리케이션을 정의할때 사용correlation-id짧은 문자열애플리케이션메시지가 다른 메시지 혹은 고유하게 식별 가능한 항목을 참조하고 있는 경우, correlation..
[RabbitMQ] 익스체인지, 큐 생성 및 연결하는 방법과 메시지 발행 및 소비하는 과정
[RabbitMQ] 익스체인지, 큐 생성 및 연결하는 방법과 메시지 발행 및 소비하는 과정
2026.01.13들어가기 전이번 포스팅에서는 RabbitMQ에서 메시지 발행과 소비하는 과정에 대해서 알아보고 Java와 RabbitMQ 라이브러리를 이용해서 익스체인지와 큐를 연결하는 방법에 대해서 알아보겠습니다. 메시지를 발행하고 소비하기 전에 선행되어야 할 작업이 있습니다.메시지를 발행하고 소비하려면 익스체인지와 큐를 각각 선언한 후 서로 연결해야 합니다.먼저 익스체인지와 큐를 선언하고 연결하는 방법에 대해 알아보겠습니다. 익스체인지 선언하는 방법Exchange.Declare 명령에 익스체인지 이름, 유형, 그리고 메시지 처리에 필요한 메타데이터를 전달하면 RabbitMQ는 익스체인지를 선언합니다.익스체인지를 생성한 후 Exchange.DeclareOk 메서드 프레임을 응답으로 전송합니다.특정 이유로 Exchang..
[RabbitMQ] AMQP 프레임 유형
[RabbitMQ] AMQP 프레임 유형
2026.01.11들어가기 전이번 포스팅에서는 RabbitMQ에서 AMQP를 활용하여 통신하는 방식과 AMQP의 5가지 프레임 유형에 대해서 알아보겠습니다. RabbitMQ가 AMQP를 활용하여 통신하는 방법RabbitMQ는 AMQP 메시지 브로커로 클라이언트와의 연결 수립 및 제어 과정에서 프로토콜 레벨의 명령–응답(Command–Reply) 방식의 통신을 사용합니다.RabbitMQ은 일반적인 웹 기반 API의 통신 방식과 다릅니다.일반적인 HTTP 기반 API에서는 클라이언트가 요청을 보내고, 서버는 해당 요청에 대한 응답만 반환합니다.응답을 하고 서버가 클라이언트한테 다시 요청을 보내지 않습니다.반면 AMQP에서는 클라이언트뿐만 아니라 서버 역시 메서드 프레임을 통해 명령을 전송할 수 있습니다.AMQP로 통신을 시..
[RabbitMQ] RabbitMQ 기능과 장점
[RabbitMQ] RabbitMQ 기능과 장점
2026.01.05들어가기 전이번 포스팅에서는 간단하게 RabbitMQ에 기능과 장점에 대해서 알아볼 예정입니다.RabbitMQ와 Spring을 연동하는 방법에 대해서 궁금하신 분은 아래 포스팅을 참고하시면 도움이 될 거 같습니다. [RabbitMQ] RabbitMQ 개념 및 Spring 연동들어가기 전이번 포스팅에서는 RabbitMQ에 대해서 알아보고 RabbitMQ와 Spring을 연동하는 방법에 대해서 알아보겠습니다. RabbitMQRabbitMQ는 클라우드 환경, 온프레미스에 쉽게 배포할 수 있는 안정적인hoestory.tistory.com RabbitMQ 소개RabbitMQ는 얼랭(Erlang)이라는 프로그래밍 언어로 구현되었고 유연한 메시지 라우팅, 메시지 내구성 설정, 데이터 센터 간 통신 등 메시지 지향..
[Spring Batch] 스프링 배치 아키텍처 및 흐름
[Spring Batch] 스프링 배치 아키텍처 및 흐름
2025.12.31들어가기 전이번 포스팅에서는 스프링 배치의 기본 아키텍처와 흐름에 대해서 알아볼 예정입니다.그리고 스프링 배치의 처리 모델인 Chunk 모델과 Tasklet 모델에 대해서 함께 알아보겠습니다. 스프링 배치 처리 모델스프링 배치 처리 모델에는 아래 두 가지 모델이 있습니다.Chunk 모델Tasklet 모델Chunk 모델Chunk 모델은 일정한 단위(청크)로 대용량 데이터를 처리하는 방식입니다.commit-interval이라는 설정값을 통해 청크에 포함될 최대 레코드 수를 조정할 수 있습니다.ItemReader, ItemProcessor, ItemWriter 인터페이스를 통해 청크 단위로 데이터를 처리합니다. Chunk 모델 처리 과정 ChunkBasedTasklet은 청크 단위에 따라 ItemReade..
[Java] Socket에 대하여
[Java] Socket에 대하여
2025.11.14들어가기 전이번 포스팅에서는 Socket이 무엇인지와 Http와의 차이점을 알아보고 예제를 만들어가면서 Socket에 대해서 알아보겠습니다. Socket이란? 소켓은 네트워크 통신을 위한 양쪽 끝단을 의미합니다.IP*와 Port*의 조합으로 통신을 위한 세션을 설정하고 데이터를 송수신하는 데 사용합니다.통신을 위해서 서버와 클라이언트는 소켓을 생성하고 생성된 소켓 간에 통신하여 데이터를 송수신을 합니다.서버 소켓은 하나만 생성할 수 있고 클라이언트 소켓은 여러 개 생성하여 하나의 서버에 연결하여 통신할 수 있습니다. IP란?IP 주소는 인터넷에 연결된 각 기기를 구별하기 위해 사용되는 고유한 번호입니다.IP는 프로토콜 그 자체이고 IP주소는 IP통신을 하기 위해 각 기기들을 구분하는 고유번호라고 이해..
바쁜 하루를 위한 작은 서비스 개발
바쁜 하루를 위한 작은 서비스 개발
2025.10.19요즘 회사 - 집 - 취침 - 회사.. 이런 일상을 반복을 하게 되면서 하루하루 정신없는 삶을 살고 있습니다.매일 정신없는 삶을 살다 보니 사소한 것들을 챙기지 못하는 상황이 발생하여 피해를 보고 있습니다. 가장 큰 피해는 요즘 비 오는 날 우산을 챙기지 않고 지하철을 내리는 순간 비가 내리거나 아니면 퇴근할 때 비가 오는 날이 많더라고요..그래서 비 안 맞으려고 지하철 역까지 빠르게 뛰어가거나 비 그칠 때까지 야근을 한다든가.. 이런 일상을 반복하고 있습니다. 그래서 이런 반복되는 피해를 방지하고자 제가 가지고 있는 기술을 살려 개발을 진행하였습니다.매일 오전 6시에 제가 출근하는 지역, 거주하고 있는 지역을 기준으로 ChatGpt를 활용해서 최저 및 최고 온도, 날씨, 비 올 확률을 문자로 알려주..
Rate Limit에 대하여(토큰, 누출, 고정 윈도우 - Spring + Redis)
Rate Limit에 대하여(토큰, 누출, 고정 윈도우 - Spring + Redis)
2025.10.10들어가기 전이번 포스팅에서는 Rate Limit에 대해서 알아보면서 Redis와 Spring을 활용해서 Rate Limiter를 구현해 볼 예정입니다.Rate Limit 알고르짐에는 토큰, 누출, 고정 윈도우, 이동 윈도우, 이동 윈도우 카운터가 있는데 이번 포스팅에서는 토큰, 누출, 고정 윈도우에 대해서만 다룰 예정입니다. Rate Limit이란?Rate Limit은 서버가 특정 임계치까지만 클라이언트의 요청을 받는 방법입니다.서버의 자원은 무한하지 않기 때문에 안정적인 서비스를 제공하기 위해서 사용되는 혼잡 제어 기법입니다.예를 들면 서버에서 클라이언트의 요청을 5분에 최대 5번 처리할 수 있는 정책을 세우게 되면 5분 사이에 5개의 요청은 처리하지만 6번째부터는 클라이언트 요청을 처리하지 않습니..
[Java] 함수형 인터페이스
[Java] 함수형 인터페이스
2025.08.02들어가기 전이번 포스팅에서는 자바에서 지원해 주는 함수형 인터페이스에 대해서 알아보겠습니다. 함수형 인터페이스란?함수형 인터페이스는 추상 메서드가 "하나만" 존재하는 인터페이스를 의미합니다.추상 메서드 외의 default, static 메서드가 존재하더라도 추상 메서드가 하나만 존재하면 함수형 인터페이스로 선언할 수 있습니다.만약 추상 메서드가 존재하지 않거나 하나를 초과할 경우에는 함수형 인터페이스가 될 수 없습니다.함수형 인터페이스를 생성하는 방법은 @FunctionalInterface 어노테이션을 선언하면 됩니다. @FunctionalInterfacepublic interface FunctionalInterfaceEx { void call();} 위와 같이 추상 메서드가 하나만 존재하면 정..
[Spring] Filter + @Transactional 조합, 과연 가능할까?
[Spring] Filter + @Transactional 조합, 과연 가능할까?
2025.05.25들어가기 전이번 포스팅에서는 Filter에 @Transactional을 사용했을 때 트랜잭션이 정상적으로 수행이 되는지 알아보겠습니다. 개요현업에서 개발된 코드 중 Filter 내부에서 @Transactional을 사용하는 로직을 보게 되었을 때,"과연 이 조합이 정상적으로 트랜잭션을 처리할 수 있을까?"라는 의문이 생겼습니다.Filter는 일반적으로 서블릿 컨테이너에서 실행되기 때문에 Spring의 AOP 기반 @Transactional이 정상적으로 작동하지 않을 수도 있다는 생각이 들었고, 이에 대한 정확한 동작 방식을 실험을 통해 확인해 보기로 했습니다.이번 글에서는 해당 실험 과정을 예시 코드와 함께 살펴보며 Filter + @Transactional 조합이 어떤 조건에서 동작하는지 확인해 보겠습..
[MySQL] 네임드 락이란?
[MySQL] 네임드 락이란?
2025.05.24들어가기 전이번 포스팅에서는 MySQL에서 제공하는 네임드락에 대해서 알아보겠습니다. MySQL 네임드락이란?비관적 락처럼 테이블 또는 데이터 행에 락을 거는 게 아닌 특정 이름에 락을 걸어서 다른 세션에서 특정 이름으로 자원에 접근하려고 할 때 대기하게 하는 기능입니다.네임드 락을 관리하는 단위는 세션입니다.세션이 종료되면 락도 자동으로 해제됩니다. 락과 관련되어 MySQL에서 지원해 주는 명령어는 아래와 같습니다.GET_LOCK(lock_name, timeout)RELEASE_LOCK(lock_name)RELEASE_ALL_LOCKS()IS_FREE_LOCK(lock_name)IS_USED_LOCK(lock_name)MySQL에서 제공하는 네임드락이 무엇이고 어떤 명령어를 제공하는지 알아봤습니다.이..
[Spring + Redis] 스핀락과 분산락에 대하여
[Spring + Redis] 스핀락과 분산락에 대하여
2025.05.01들어가기 전이번 포스팅에서는 Redis에서 제공하는 스핀락과 분산락에 대해서 알아보겠습니다.예제에서 ReentrantLock, Mysql 네임드 락, Redis를 사용할 예정인데 ReentrantLock에 대해서 모르시는 분은 아래 포스팅을 참고 후 이어서 이번 포스팅을 읽으시는 것을 추천드리겠습니다. [Java] synchronized와 ReentrantLock에 대해서들어가기 전멀티 스레드 환경에서 동시에 접근하면 데이터 무결성이 깨질 수 있습니다.이러한 현상을 방지하기 위해 synchronized와 ReentrantLock을 사용해서 임계 영역에 하나의 자원만 접근하게 하hoestory.tistory.com Redis가 무엇인지 궁금하신 분은 아래 포스팅을 참고하시기 바랍니다. [Redis] ..