Skip to content

Commit bf76268

Browse files
SimoKiiclaude
andcommitted
Refactor: 커넥터 시작·종료 제어를 단일 진입점으로 위임
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 98f374c commit bf76268

2 files changed

Lines changed: 42 additions & 18 deletions

File tree

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.rabbittick.streamer.connector;
2+
3+
import java.util.List;
4+
5+
import org.springframework.boot.context.event.ApplicationReadyEvent;
6+
import org.springframework.context.event.EventListener;
7+
import org.springframework.stereotype.Component;
8+
9+
import lombok.extern.slf4j.Slf4j;
10+
11+
/**
12+
* 등록된 모든 {@link ExchangeConnector}의 시작과 종료를 조율하는 컴포넌트.
13+
*
14+
* <p>Spring이 {@code List<ExchangeConnector>}를 자동 주입하므로
15+
* 새로운 거래소 커넥터를 추가하면 이 클래스의 수정 없이 자동으로 관리 대상에 포함된다.
16+
*/
17+
@Slf4j
18+
@Component
19+
public class ConnectorManager {
20+
21+
private final List<ExchangeConnector> connectors;
22+
23+
public ConnectorManager(List<ExchangeConnector> connectors) {
24+
this.connectors = connectors;
25+
}
26+
27+
/**
28+
* Spring 애플리케이션이 완전히 준비된 후 활성화된 모든 커넥터를 시작한다.
29+
*
30+
* @param event Spring 애플리케이션 준비 완료 이벤트
31+
*/
32+
@EventListener(ApplicationReadyEvent.class)
33+
public void startAll(ApplicationReadyEvent event) {
34+
log.info("ConnectorManager: 등록된 커넥터 {}개 중 활성화된 커넥터를 시작합니다.", connectors.size());
35+
connectors.stream()
36+
.filter(ExchangeConnector::isEnabled)
37+
.forEach(connector -> {
38+
log.info("[{}] 커넥터 시작", connector.getExchangeName());
39+
connector.start();
40+
});
41+
}
42+
}

src/main/java/com/rabbittick/streamer/connector/UpbitConnector.java

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88

99
import org.springframework.beans.factory.annotation.Autowired;
1010
import org.springframework.beans.factory.annotation.Value;
11-
import org.springframework.boot.context.event.ApplicationReadyEvent;
12-
import org.springframework.context.event.EventListener;
1311
import org.springframework.core.env.Environment;
1412
import org.springframework.stereotype.Component;
1513
import org.springframework.web.reactive.socket.WebSocketSession;
@@ -104,22 +102,6 @@ public UpbitConnector(WebSocketClient webSocketClient,
104102
this.objectMapper = objectMapper;
105103
}
106104

107-
/**
108-
* Spring 애플리케이션이 완전히 준비된 후 WebSocket 연결을 시작한다.
109-
*
110-
* <p>Commit 4에서 {@code ConnectorManager}로 이관 예정.
111-
*
112-
* @param event Spring 애플리케이션 준비 완료 이벤트
113-
*/
114-
@EventListener(ApplicationReadyEvent.class)
115-
public void startWebSocketConnection(ApplicationReadyEvent event) {
116-
log.debug("설정 로드 확인 - tickerEnabled: {}, tradeEnabled: {}, orderbookEnabled: {}",
117-
tickerEnabled, tradeEnabled, orderbookEnabled);
118-
log.info("활성화된 데이터 타입 - Ticker: {}, Trade: {}, OrderBook: {}",
119-
tickerEnabled, tradeEnabled, orderbookEnabled);
120-
start();
121-
}
122-
123105
@Override
124106
public String getExchangeName() {
125107
return "UPBIT";

0 commit comments

Comments
 (0)