Skip to content

Commit 03ba381

Browse files
authored
Merge pull request #169 from CleanEngine/feat/chartdata
Feat:도커 파일 추가,SRP,OCP원칙에 맞게 코드 리펙토링
2 parents 8b53497 + 6ee8284 commit 03ba381

File tree

11 files changed

+522
-216
lines changed

11 files changed

+522
-216
lines changed

monitoring/docker-compose.yml

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ services:
3434
image: mariadb:latest
3535
container_name: mariadb2
3636
ports:
37-
- "3306:3306"
37+
- "3307:3306"
3838
env_file:
3939
- ../docker/local.properties
4040
environment:
@@ -66,6 +66,25 @@ services:
6666
- monitoring-net
6767
restart: unless-stopped
6868

69+
# --- 추가된 InfluxDB 서비스 ---
70+
influxdb:
71+
image: influxdb:2.7
72+
container_name: influxdb
73+
ports:
74+
- "8086:8086"
75+
volumes:
76+
- influxdb_data:/var/lib/influxdb2
77+
environment:
78+
- DOCKER_INFLUXDB_INIT_MODE=setup
79+
- DOCKER_INFLUXDB_INIT_USERNAME=k6-user # 임의의 사용자/비밀번호
80+
- DOCKER_INFLUXDB_INIT_PASSWORD=k6-password
81+
- DOCKER_INFLUXDB_INIT_ORG=k6-org
82+
- DOCKER_INFLUXDB_INIT_BUCKET=k6-bucket
83+
- DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=vJvTx5b8vjgH7mu-M-BsEvdy5_COovexAjyniVhMF1yPzvsp2g8kp62opqXVMq6ICAq2tLJxxD6ifXPBZ9YVmA==
84+
networks:
85+
- monitoring-net
86+
restart: unless-stopped
87+
6988
grafana:
7089
image: grafana/grafana:11.0.0
7190
container_name: grafana
@@ -77,9 +96,10 @@ services:
7796
networks:
7897
- monitoring-net
7998
restart: unless-stopped
80-
depends_on:
99+
depends_on: # --- 수정된 부분 ---
81100
- prometheus
82101
- jaeger
102+
- influxdb
83103

84104
jaeger:
85105
image: jaegertracing/all-in-one:latest
@@ -96,6 +116,7 @@ volumes:
96116
grafana_data: {}
97117
mariadb_data:
98118
driver: local
119+
influxdb_data: {} # --- 추가된 부분 ---
99120

100121
networks:
101122
app-network:
@@ -104,3 +125,8 @@ networks:
104125
monitoring-net:
105126
name: monitoring-net
106127
driver: bridge
128+
129+
130+
# export K6_INFLUXDB_ORGANIZATION=k6-org
131+
# - export K6_INFLUXDB_BUCKET=k6-bucket
132+
# ./k6 run --out xk6-influxdb=http://localhost:8086 /Users/jangbongjun/coin/src/test/resources/k6/chart-stomp-test.js

src/main/java/com/cleanengine/coin/chart/handler/TradeEventHandler.java

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public class TradeEventHandler {
2323
private final WebsocketSendService websocketSendService;
2424
private final ChartSubscriptionService chartSubscriptionService; // 주입
2525
private final RealTimeDataPrevRateService realTimeDataPrevRateService;
26+
2627
//event로 이벤틀 처리해야한다.
2728
//eventListener는 void로 처리를 해야한다
2829
@TransactionalEventListener
@@ -37,8 +38,29 @@ public void handleTradeEvent(TradeExecutedEvent event) {
3738
TradeEventDto tradeEventDto = getTradeEventDto(trade);
3839
log.debug("TradeEventHandler 수신 : {}", trade);
3940

40-
// 실시간 데이터 체결내역
41-
// 해당 종목에 대한 구독자가 있는지 확인
41+
// 실시간 데이터 전송
42+
processRealTimeTradeRate(ticker, tradeEventDto);
43+
44+
//전날 종가 변동률 전송
45+
processPrevRateData(ticker, tradeEventDto);
46+
}
47+
48+
public void processPrevRateData(String ticker, TradeEventDto tradeEventDto) {
49+
if (chartSubscriptionService.isSubscribedToPrevRate(ticker)) {
50+
log.debug("종목 {} 전일 대비 변동률 구독자 확인됨. 데이터 전송 시작.", ticker);
51+
try {
52+
PrevRateDto dto = realTimeDataPrevRateService.generatePrevRateData(tradeEventDto);
53+
websocketSendService.sendPrevRate(dto, dto.getTicker()); // dto.getTicker()는 이미 ticker와 동일
54+
log.debug("종목 {} 전일 대비 변동률 전송 완료 : {}", ticker, dto);
55+
} catch (Exception e) {
56+
log.error("종목 {} 전일 대비 변동률 전송 중 오류: {}", ticker, e.getMessage(), e);
57+
}
58+
} else {
59+
log.debug("종목 {} 전일 대비 변동률 구독자 없음. 데이터 전송 생략.", ticker);
60+
}
61+
}
62+
63+
public void processRealTimeTradeRate(String ticker, TradeEventDto tradeEventDto) {
4264
if (chartSubscriptionService.isSubscribedToRealTimeTradeRate(ticker)) {
4365
log.debug("종목 {} 실시간 체결 정보 구독자 확인됨. 데이터 처리 및 전송 시작.", ticker);
4466

@@ -54,21 +76,6 @@ public void handleTradeEvent(TradeExecutedEvent event) {
5476
} else {
5577
log.debug("종목 {} 실시간 체결 정보 구독자 없음. 데이터 전송 생략.", ticker);
5678
}
57-
58-
//전날 종가 변동률 전송
59-
if(chartSubscriptionService.isSubscribedToPrevRate(ticker)) {
60-
log.debug("종목 {} 전일 대비 변동률 구독자 확인됨. 데이터 전송 시작.", ticker);
61-
try {
62-
PrevRateDto dto = realTimeDataPrevRateService.generatePrevRateData(tradeEventDto);
63-
websocketSendService.sendPrevRate(dto, dto.getTicker()); // dto.getTicker()는 이미 ticker와 동일
64-
log.debug("종목 {} 전일 대비 변동률 전송 완료 : {}", ticker, dto);
65-
} catch (Exception e) {
66-
log.error("종목 {} 전일 대비 변동률 전송 중 오류: {}", ticker, e.getMessage(), e);
67-
}
68-
}else {
69-
log.debug("종목 {} 전일 대비 변동률 구독자 없음. 데이터 전송 생략.", ticker);
70-
}
71-
7279
}
7380

7481
@NotNull

src/main/java/com/cleanengine/coin/chart/repository/ChartDataRepository.java

Lines changed: 0 additions & 36 deletions
This file was deleted.

src/main/java/com/cleanengine/coin/chart/repository/H2ChartDataRepository.java

Lines changed: 0 additions & 55 deletions
This file was deleted.

src/main/java/com/cleanengine/coin/chart/repository/MariaDbChartDataRepository.java

Lines changed: 0 additions & 94 deletions
This file was deleted.

src/main/java/com/cleanengine/coin/chart/service/ChartSubscriptionService.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,7 @@ public Set<String> getAllRealTimeTradeRateSubscribedTickers() {
4545

4646
//종목에 대한 구독 여부
4747
public boolean isSubscribedToRealTimeTradeRate(String ticker) {
48-
if (ticker == null || ticker.trim().isEmpty()) {
49-
return false; // 유효하지 않은 티커는 구독되지 않은 것으로 처리
50-
}
48+
validateTicker(ticker);
5149
return realTimeTradeRateSubscribedTickers.contains(ticker);
5250
}
5351

@@ -76,9 +74,7 @@ public Set<String> getAllRealTimeOhlcSubscribedTickers() {
7674
}
7775

7876
public boolean isSubscribedToRealTimeOhlc(String ticker) {
79-
if (ticker == null || ticker.trim().isEmpty()) {
80-
return false; // 유효하지 않은 티커는 구독되지 않은 것으로 처리
81-
}
77+
validateTicker(ticker);
8278
return realTimeOhlcSubscribedTickers.contains(ticker);
8379
}
8480

@@ -103,9 +99,7 @@ public Set<String> getAllPrevRateSubscribedTickers(String ticker) {
10399
}
104100

105101
public boolean isSubscribedToPrevRate(String ticker) {
106-
if (ticker == null || ticker.trim().isEmpty()) {
107-
return false; // 유효하지 않은 티커는 구독되지 않은 것으로 처리
108-
}
102+
validateTicker(ticker);
109103
return PrevRateSubscribedTickers.contains(ticker);
110104
}
111105

src/main/java/com/cleanengine/coin/chart/service/minute/MinuteOhlcDataServiceImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@ void validateTradeList(List<Trade> trades) {
9494
// OHLC 계산 로직
9595
@NotNull
9696
static OhlcData calculateOhlcData(List<Trade> trades) {
97-
double open = trades.get(0).getPrice();
98-
double close = trades.get(trades.size() - 1).getPrice();
97+
double open = trades.getFirst().getPrice();
98+
double close = trades.getLast().getPrice();
9999

100100
double high = trades.stream()
101101
.mapToDouble(Trade::getPrice)

src/main/java/com/cleanengine/coin/trade/entity/Trade.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ public class Trade {
2323

2424
@Column(name = "trade_time", nullable = false)
2525
@CreationTimestamp
26-
//생성 타임은 추후 논의 예정
2726
private LocalDateTime tradeTime;
2827

2928
@Column(name = "buy_user_id", nullable = false)

0 commit comments

Comments
 (0)