[Spring] WebSocketConfig StompConfig SSL 설정 및 failover 설정
서버개발

[Spring] WebSocketConfig StompConfig SSL 설정 및 failover 설정

AmazonMQ의 ActiveMQ를 이용해서 외부 브로커 설정을 하다보니 생기는 문제들이 조금 있었다. 

ssl 인증 때문에 되지 않는 오류가 있었고, active서버가 갑자기 내려가고 standby가 올라가면서 작동하여 배포 프로젝트에서 Stomp가 동작하지 않는 것이다.

 

일단 엔드포인트를 보면

웹 콘솔을 위한 클라이언트과 엔드포인트들 모두 ssl 인증이 필요하다. 그렇기 때문에 로컬에서 작업할 때와는 달리 SSL 처리를 해주어야 하고, active와 standby로 이중으로 구성되어 있는데 이 중 하나가 동작이 안될 시 다른 쪽으로 동작하게 된다. 하지만 stompconfig에는 아래의 failover:(~~)를 host로 설정해주었을 경우 동작하지 않기 때문에 별도의 설정을 해주어야한다. 

일단 failover 설정을 먼저 보자면 aws에서 제공하는 두 개의 엔드포인트를 앞의 프로토콜과 뒤의 포트를 제외한 나머지 부분을 쉼표로 구분해서 넣어준다. (해당 값들은 secret하게 보관해야한다. - 아래 발행 글 참고)

 

[Github Actions] Github Secrets에 secret파일 등록(secret.yml 등)

Github Secrets에 Secret파일 등록으로 CI/CD 깃허브에 올릴 때는 조심해야하는 파일들이 있는데 AWS, API 등에 접근할 수 있는 키를 가진 환경변수 등이 공유될 경우 큰 문제가 생길 수 있다. 그렇기 때문

mumomu.tistory.com

 

그리고 StompConfig에서 brokerRelayHost에서 해당 변수와 나머지 필요한 값들을 yml파일로부터 받아주고 failover를 해줄 변수 index를 0으로 초기화한다.

그리고 Supplier<? extends SocketAddress>를 반환하는 메서드를 생성하여 내부에서 index를 0~1로 바뀌는 로직을 작성해 client에서 접속 시도 시 계속 이 메서드를 방문하도록 설정한다.

configureMessageBroker 메서드는 재 호출되지 않기 때문에 그 메서드 내부에서 index를 변경해주어도 주소가 변경되지 않는다. ReactorNettyTcpClient 부분을 보면 ssl 인증을 할때 .secure을 넣어주면 되는데 이때 /r must be follwed /n 이런 오류가 뜨는 경우가 있다.

 

이런 경우에는 포트가 잘못되었을 가능성이 있는데 endpoints를 openwire에서 stomp로 변경

(즉 포트를 61617 -> 61614로 변경)해본다면 정상적으로 작동할 것이다. 

 

SSL인증만 사용하고 failover를 사용하지 않는다면 remoteAddress대신 host와 port를 지정해서 사용하면 된다.

  ReactorNettyTcpClient<byte[]> client = new ReactorNettyTcpClient<>(tcpClient -> tcpClient
                //.remoteAddress(socketAddressSupplier())
                .host(호스트주소)
                .port(포트)
                .secure(SslProvider.defaultClientProvider()),
                new StompReactorNettyCodec());

 

AmazonMQ의 activemq관련 document가 많지 않아 찾기 어려웠던.. 찾아도 수정할게 많았던 문제였다..

그러나 현재 이 방법은 계속 stand by가 동작 중일 경우 두 번째 try에 STOMP 연결이 되는 단점이 있다. 그렇기 때문에 해결 방법을 모색해봐야겠다.

 

 

 

#activemq stomp #stompconfig ssl #stompconfig /r must be followed /n #websocketconfig ssl #websocketconfig failover #stompconfig failover #websocket ssl #stomp ssl #websocket failover #stomp failover #spring stomp failover