
1. Redis Pub/Sub 자바 구독 코드
라이브러리
// build.gradle
implementation 'redis.clients:jedis:5.1.0'
구독 코드 (Subscriber)
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;
public class RedisSubscriber {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost", 6379);
JedisPubSub listener = new JedisPubSub() {
@Override
public void onMessage(String channel, String message) {
System.out.println("Received message from channel " + channel + ": " + message);
}
};
jedis.subscribe(listener, "my-channel"); // 블로킹됨
}
}
발행 코드 (Publisher)
Jedis jedis = new Jedis("localhost", 6379);
jedis.publish("my-channel", "Hello from Redis");
2. AWS SQS Long Polling 자바 구독 코드
라이브러리
implementation 'software.amazon.awssdk:sqs:2.25.27'
설정
AWS 자격 증명은 ~/.aws/credentials 또는 환경 변수, EC2 role 등을 사용할 수 있습니다.
메시지 수신 코드
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.*;
import java.util.List;
public class SqsConsumer {
public static void main(String[] args) {
String queueUrl = "https://sqs.ap-northeast-2.amazonaws.com/123456789012/my-queue";
try (SqsClient sqsClient = SqsClient.create()) {
while (true) {
ReceiveMessageRequest receiveRequest = ReceiveMessageRequest.builder()
.queueUrl(queueUrl)
.waitTimeSeconds(20) // long polling
.maxNumberOfMessages(5)
.build();
List messages = sqsClient.receiveMessage(receiveRequest).messages();
for (Message message : messages) {
System.out.println("Received: " + message.body());
// 메시지 삭제
DeleteMessageRequest deleteRequest = DeleteMessageRequest.builder()
.queueUrl(queueUrl)
.receiptHandle(message.receiptHandle())
.build();
sqsClient.deleteMessage(deleteRequest);
}
}
}
}
}
차이점 요약
항목 Redis Pub/Sub AWS SQS
| 메시지 저장 | X (전송 시점만 유효) | O (지정 시간 동안 보관 가능) |
| 메시지 순서 | 보장 안됨 | FIFO 가능 (FIFO Queue 사용 시) |
| 구독 방식 | 블로킹, 실시간 | Polling 기반 (long polling) |
| 확장성 | 수동 설정 필요 | AWS 인프라로 자동 확장 |
Redis는 빠른 메시지 전달이 필요할 때,
SQS는 안정성 있는 메시지 큐잉이 필요할 때 적합합니다.
'데이터베이스 > Redis' 카테고리의 다른 글
| Redis로 캐시 구현하는 방법 (0) | 2025.05.10 |
|---|---|
| Redis 자료구조 완벽 정리: Strings, Lists, Sets, Hashes, Sorted Sets (0) | 2025.05.05 |
| Redis TTL (Time-To-Live) 이란? (0) | 2025.03.03 |
| Redis RDB vs AOF 비교 (0) | 2025.03.03 |
| Redis Pipelining이란? (1) | 2025.03.03 |