티스토리 뷰
RSocketConnectorConfigurer 개요
RSocketConnectorConfigurer는 Spring에서 RSocket 클라이언트(RSocketRequester)를 구성할 때 사용되는 인터페이스입니다.
이를 활용하면 커넥션 설정, 보안, 데이터 압축, Keep-Alive 등의 다양한 설정을 세밀하게 조정할 수 있습니다.
1. 주요 역할
RSocketConnectorConfigurer는 RSocketRequester를 생성할 때 내부적으로 사용되는 RSocketConnector를 설정할 수 있도록 도와줍니다.
주요 역할은 다음과 같습니다.
- 전송(Transport) 설정: TCP, WebSocket, HTTP/2 등 다양한 전송 방식을 설정
- Keep-Alive 설정: 연결 유지 및 타임아웃 값 설정
- 보안(Security) 설정: 인증 및 TLS(SSL) 설정
- 압축(Compression) 설정: 데이터 압축 활성화
- RSocket 리스너 설정: 커넥션 수립, 종료 시 리스너 등록
2. 사용 방법
1) RSocketConnectorConfigurer 인터페이스 구현
아래 예제는 TCP 기반 RSocket 클라이언트에서 Keep-Alive 및 데이터 압축을 활성화하는 설정을 포함하고 있습니다.
import io.rsocket.core.RSocketConnector;
import org.springframework.messaging.rsocket.RSocketConnectorConfigurer;
import org.springframework.stereotype.Component;
@Component
public class CustomRSocketConfigurer implements RSocketConnectorConfigurer {
@Override
public void configure(RSocketConnector connector) {
connector.keepAlive(Duration.ofSeconds(20), Duration.ofSeconds(90)) // Keep-Alive 설정
.reconnect(Retry.backoff(5, Duration.ofSeconds(2))) // 재연결 설정
.compressWith(DefaultPayloadCompressor.snappy()); // 데이터 압축 활성화
}
}
2) RSocketRequester와 함께 사용
RSocketRequester를 생성할 때 RSocketConnectorConfigurer를 적용할 수 있습니다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.rsocket.RSocketRequester;
@Configuration
public class RSocketClientConfig {
@Bean
public RSocketRequester rSocketRequester(RSocketRequester.Builder builder,
RSocketConnectorConfigurer configurer) {
return builder
.rsocketConnector(configurer) // 설정 적용
.tcp("localhost", 7000); // TCP로 연결
}
}
3. 주요 설정 옵션
RSocketConnectorConfigurer를 통해 설정할 수 있는 주요 옵션은 다음과 같습니다.
1) Keep-Alive 설정
RSocket 연결이 유지되는 동안 주기적으로 Keep-Alive 패킷을 전송하여 연결을 유지합니다.
connector.keepAlive(Duration.ofSeconds(30), Duration.ofSeconds(120));
- 첫 번째 인자: Keep-Alive 패킷을 보내는 주기
- 두 번째 인자: 서버 응답이 없을 때 연결을 종료하는 타임아웃
2) 재연결(Retry) 설정
네트워크 오류 발생 시 자동으로 재연결할 수 있도록 설정할 수 있습니다.
import reactor.util.retry.Retry;
connector.reconnect(Retry.backoff(3, Duration.ofSeconds(1)));
- Retry.backoff(3, Duration.ofSeconds(1)):
- 최대 3회까지 재시도
- 1초 간격으로 백오프(backoff) 적용
3) 데이터 압축 설정
네트워크 트래픽을 줄이기 위해 RSocket 데이터 압축을 활성화할 수 있습니다.
import io.rsocket.core.DefaultPayloadCompressor;
connector.compressWith(DefaultPayloadCompressor.snappy());
- DefaultPayloadCompressor.snappy(): Snappy 압축 적용
- DefaultPayloadCompressor.deflate(5): Deflate 압축 적용 (5는 압축 레벨)
4) TLS/SSL 보안 설정
TLS/SSL을 사용하여 보안이 강화된 RSocket 통신을 설정할 수 있습니다.
connector.transport(TlsClientTransport.create("localhost", 7000));
4. 정리
- RSocketConnectorConfigurer는 Spring에서 RSocket 클라이언트(RSocketRequester)의 설정을 조정하는 인터페이스입니다.
- Keep-Alive, 재연결(Retry), 데이터 압축, 보안(TLS/SSL) 설정 등을 세밀하게 조정할 수 있습니다.
- RSocketRequester를 생성할 때 .rsocketConnector(configurer)를 사용하여 설정을 적용할 수 있습니다.