카테고리 없음

springboot 에서 redis pub sub 활용한 메시지 브로커 설정

jw-backend 2024. 7. 1. 19:36
반응형

1. Redis 의존성 추가

먼저 build.gradle 또는 pom.xml 파일에 Redis 관련 의존성을 추가합니다.

build.gradle

groovy

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-redis'
    implementation 'org.springframework.boot:spring-boot-starter-websocket'
    implementation 'org.springframework.boot:spring-boot-starter-redis'
}

pom.xml

xml

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-redis</artifactId>
    </dependency>
</dependencies>

2. WebSocketConfig 설정

WebSocket 설정 클래스에서 Redis를 브로커로 설정합니다.

java

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        // 내장 브로커 사용 대신 Redis 브로커 사용 설정
        config.enableStompBrokerRelay("/topic", "/queue")
              .setRelayHost("localhost") // Redis 서버 호스트
              .setRelayPort(6379) // Redis 서버 포트
              .setClientLogin("guest") // Redis 서버 로그인 (필요시 설정)
              .setClientPasscode("guest"); // Redis 서버 패스코드 (필요시 설정)
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws").withSockJS();
    }
}

3. Redis 설정 클래스

Redis 설정 클래스를 추가하여 Redis 연결을 설정합니다.

java

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;

@Configuration
public class RedisConfig {

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        return new LettuceConnectionFactory("localhost", 6379);
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory());
        return template;
    }
}

이제 Redis를 브로커로 사용하는 WebSocket 설정이 완료되었습니다. 이렇게 하면 WebSocket 메시징 브로커로 Redis를 사용하여 더 효율적인 실시간 통신을 구현할 수 있습니다.

Kafka는 여전히 백엔드 시스템 간의 비동기 메시징에 사용되고, WebSocket을 통해 클라이언트와 서버 간의 실시간 통신을 처리하게 됩니다. Redis는 WebSocket 브로커로서 메시지 전달을 관리하게 됩니다.