feat: 새로운 안전 규칙 및 최적화 적용을 통한 트레이딩 시스템 개선
변경 사항 (Changes): 구문 오류(Syntax error) 및 토큰 낭비를 방지하기 위해 에이전트 쉘(Agent shell)과 파이썬 코드 스니펫에 다수의 신규 안전 규칙(Safety rules)을 추가함. 스키마 검증 및 적절한 SQL 포맷팅을 보장하기 위해 임시(Ad-hoc) 데이터베이스 쿼리 작성 가이드라인을 도입함. 코드 수정 후 UI 기능이 정상 작동하는지 확인하기 위해, 백테스트 웹 서비스 재시작 및 브라우저 검증에 대한 새로운 규칙을 구현함. 시스템 전반의 무결성(Integrity)을 유지하기 위해 실전 매매(Live trading), 웹 백테스팅, 파라미터 탐색(Parameter searches) 간의 일관성 검사(Consistency checks) 체계를 확립함. 기대 효과 (Impact): 이러한 개선 사항들은 트레이딩 시스템의 견고성(Robustness)과 신뢰성을 향상시키며, 에러 발생을 최소화하고 다양한 시스템 컴포넌트 간의 원활한 상호작용을 보장함.
This commit is contained in:
71
logs/market_open_sim_smoke.stdout
Normal file
71
logs/market_open_sim_smoke.stdout
Normal file
@@ -0,0 +1,71 @@
|
||||
[23:19:24] === market_open_sim_smoke START ===
|
||||
[23:19:24] log=/home/hoon/kis_bot/logs/market_open_sim_smoke.log
|
||||
[23:19:24] 📌 target_candidates_history 테이블 확인/생성
|
||||
[23:19:24] 📌 ws_price_validation 테이블 확인/생성
|
||||
[23:19:24] 📌 stock_share_meta 테이블 확인/생성
|
||||
[23:19:24] 📊 DB 테이블 생성/확인 완료
|
||||
[23:19:24] ✅ TradeDB 초기화 완료: MariaDB 192.168.0.141:3306/kis_quant_db
|
||||
[23:19:24] ✅ 달력: today=2026-07-12 next_open=2026-07-13 prev_td=2026-07-10 web_defaults=2026-07-03~2026-07-10
|
||||
[23:19:24] ✅ 전략 ON=['SCALP', 'SHORT', 'MOMENTUM', 'BREAKOUT'] OFF=['RANGE_BREAK', 'UPDOW', 'DBBAND']
|
||||
[23:19:24] ✅ TAIL_SKIP_HTS_SCAN_DUPES=false
|
||||
[23:19:24] ✅ SHORT_SKIP_HTS_SCAN_DUPES=false
|
||||
[23:19:24] ✅ MOMENTUM_SKIP_HTS_SCAN_DUPES=false
|
||||
[23:19:24] ✅ BREAKOUT_SKIP_HTS_SCAN_DUPES=false
|
||||
[23:19:24] ✅ SCALP_SKIP_HTS_SCAN_DUPES=false
|
||||
[23:19:24] ✅ 장시간 판정 (fake 2026-07-13 09:05:00): market=True buy=True guard=True
|
||||
[23:19:24] ✅ 엔진 DB 기본값 로드: tail_keys=82 mom=45 scalp=41 bo=44
|
||||
[23:19:24] ✅ active_trades HOLDING: BREAKOUT=1, MOMENTUM=10, SCALP=28
|
||||
[23:19:24] 🔑 모의 토큰 유효 (15.1h 남음) → 재사용
|
||||
[23:19:25] HTTP 500 on GET https://openapivts.koreainvestment.com:29443/uapi/domestic-stock/v1/trading/inquire-balance (1/5) → 백오프 후 재시도
|
||||
[23:19:26] ✅ KISClient 생성 ok mock=True acct=***0245
|
||||
[23:19:26] ✅ 잔고 조회 응답 type=dict
|
||||
[23:19:26] ✅ 장시작 리포트 문자열 생성 OK (미전송)
|
||||
|
||||
=== 모멘텀 (MOMENTUM) ===
|
||||
필드 canonical(실매/파서치) web 왕복후 판정
|
||||
------------------------------------------------------------------------------
|
||||
sl_pct(손절) 0.02 0.02 OK 비율
|
||||
tp_pct(익절) 0.03 0.03 OK 비율
|
||||
tp_max_pct(익절상한) 0.05 0.05 OK 비율
|
||||
shoulder_min_high 0.003 0.003 OK 비율
|
||||
shoulder_cut_pct 0.001 0.001 OK 비율
|
||||
mom_rsi_min 50 50 OK 그대로
|
||||
mom_rsi_max 80 80 OK 그대로
|
||||
mom_vol_mult 1.05 1.05 OK 그대로
|
||||
mom_vol_win 5 5 OK 정수
|
||||
max_daily 100 100 OK 정수
|
||||
[23:19:26] ✅ verify_momentum parity OK
|
||||
|
||||
=== 돌파 (BREAKOUT) ===
|
||||
[A] 웹 vs param_search (동일 함수여야 100% 일치)
|
||||
OK — 공통 42개 키 전부 일치
|
||||
[B] 웹 엔진비율 vs 실매 DB 비율
|
||||
필드 canonical(실매/파서치) web 왕복후 판정
|
||||
------------------------------------------------------------------------------
|
||||
BREAKOUT_STOP_LOSS_PCT 0.015 0.015 OK 비율
|
||||
[23:19:26] ✅ verify_breakout parity OK
|
||||
|
||||
=== 꼬리 (TAIL/SHORT) ===
|
||||
필드 canonical(실매/파서치) web 왕복후 판정
|
||||
------------------------------------------------------------------------------
|
||||
sl_pct 0.03 0.03 OK 비율
|
||||
tp_pct 0.05 0.05 OK 비율
|
||||
shoulder_min_high 0.005 0.005 OK 비율
|
||||
shoulder_cut_pct 0.002 0.002 OK 비율
|
||||
rsi_threshold 85 85 OK 그대로
|
||||
rsi_period 14 14 OK 정수
|
||||
max_daily 20 20 OK 정수
|
||||
stop_atr_mult 2 2 OK 그대로
|
||||
target_atr_mult 1.5 1.5 OK 그대로
|
||||
[23:19:26] ✅ verify_tail parity OK
|
||||
[23:19:26] ✅ 실매↔웹↔파람 변환 정합 스모크 통과
|
||||
[23:19:27] 📊 orders 테이블 확인/생성 완료
|
||||
[23:19:28] 🔧 [백테-합성] 1M→3M 구멍 보강 2312봉 (종목 264)
|
||||
[23:19:36] ✅ 꼬리 백테 2026-07-10: trades=3 pnl=3077
|
||||
[23:19:45] 🔑 모의 토큰 유효 (15.0h 남음) → 재사용
|
||||
[23:19:45] 📂 [예수금캐시] kv_store 복원: 463,253,718원 (updated=2026-07-12 15:34:11)
|
||||
[23:19:45] ⏰ 실전 토큰 만료/없음 → 갱신 시도 (남은시간: -4.7h)
|
||||
[23:19:45] ✅ 실전 토큰 발급 완료 | 만료: 2026-07-13 23:19:45 | 앞12자: eyJ0eXAiOiJK…
|
||||
[23:19:46] ✅ 돌파 백테 2026-07-10: trades=19 pnl=-57826
|
||||
[23:19:46] === SUMMARY ok=19 err=0 ===
|
||||
[23:19:46] RESULT: PASS
|
||||
91
logs/market_open_sim_smoke_run.out
Normal file
91
logs/market_open_sim_smoke_run.out
Normal file
@@ -0,0 +1,91 @@
|
||||
[03:16:41] === market_open_sim_smoke START ===
|
||||
[03:16:41] log=/home/hoon/kis_bot/logs/market_open_sim_smoke.log
|
||||
[03:16:41] 📌 target_candidates_history 테이블 확인/생성
|
||||
[03:16:41] 📌 ws_price_validation 테이블 확인/생성
|
||||
[03:16:41] 📌 stock_share_meta 테이블 확인/생성
|
||||
[03:16:41] 📊 DB 테이블 생성/확인 완료
|
||||
[03:16:41] ✅ TradeDB 초기화 완료: MariaDB 192.168.0.141:3306/kis_quant_db
|
||||
[03:16:41] ✅ 달력: today=2026-07-16 next_open=2026-07-17 prev_td=2026-07-16 web_defaults=2026-07-09~2026-07-16
|
||||
[03:16:41] ✅ 전략 ON=['SCALP', 'SHORT', 'MOMENTUM', 'BREAKOUT'] OFF=['RANGE_BREAK', 'UPDOW', 'DBBAND']
|
||||
[03:16:41] ✅ TAIL_SKIP_HTS_SCAN_DUPES=false
|
||||
[03:16:41] ✅ SHORT_SKIP_HTS_SCAN_DUPES=false
|
||||
[03:16:41] ✅ MOMENTUM_SKIP_HTS_SCAN_DUPES=false
|
||||
[03:16:41] ✅ BREAKOUT_SKIP_HTS_SCAN_DUPES=false
|
||||
[03:16:41] ✅ SCALP_SKIP_HTS_SCAN_DUPES=false
|
||||
[03:16:41] ✅ 장시간 판정 (fake 2026-07-17 09:05:00): market=True buy=True guard=True
|
||||
[03:16:41] ✅ 엔진 DB 기본값 로드: tail_keys=82 mom=49 scalp=41 bo=44
|
||||
[03:16:41] ✅ active_trades HOLDING: (없음)
|
||||
[03:16:41] 🔑 모의 토큰 유효 (10.9h 남음) → 재사용
|
||||
[03:16:41] ✅ KISClient 생성 ok mock=True acct=***0245
|
||||
[03:16:41] ✅ 잔고 조회 응답 type=dict
|
||||
[03:16:41] ✅ 장시작 리포트 문자열 생성 OK (미전송)
|
||||
|
||||
=== 모멘텀 (MOMENTUM) ===
|
||||
필드 canonical(실매/파서치) web 왕복후 판정
|
||||
------------------------------------------------------------------------------
|
||||
sl_pct(손절) 0.05 0.05 OK 비율
|
||||
tp_pct(익절) 0.03 0.03 OK 비율
|
||||
tp_max_pct(익절상한) 0.05 0.05 OK 비율
|
||||
shoulder_min_high 0.03 0.03 OK 비율
|
||||
shoulder_cut_pct 0.004 0.004 OK 비율
|
||||
mom_rsi_min 52 52 OK 그대로
|
||||
mom_rsi_max 100 100 OK 그대로
|
||||
mom_vol_mult 3 3 OK 그대로
|
||||
mom_vol_win 5 5 OK 정수
|
||||
max_daily 30 30 OK 정수
|
||||
[03:16:41] ✅ verify_momentum parity OK
|
||||
|
||||
=== 돌파 (BREAKOUT) ===
|
||||
[A] 웹 vs param_search (동일 함수여야 100% 일치)
|
||||
OK — 공통 42개 키 전부 일치
|
||||
[B] 웹 엔진비율 vs 실매 DB 비율
|
||||
필드 canonical(실매/파서치) web 왕복후 판정
|
||||
------------------------------------------------------------------------------
|
||||
BREAKOUT_STOP_LOSS_PCT 0.05 0.05 OK 비율
|
||||
[03:16:41] ✅ verify_breakout parity OK
|
||||
|
||||
=== 스캘핑 (SCALP) ===
|
||||
필드 canonical(실매/파서치) web 왕복후 판정
|
||||
------------------------------------------------------------------------------
|
||||
sl_pct(손절) 0.035 0.035 OK 비율
|
||||
tp_pct(익절) 0.03 0.03 OK 비율
|
||||
tp_max_pct(익절상한) 0.04 0.04 OK 비율
|
||||
drop_rate(낙폭) 0.01 0.01 OK 비율
|
||||
shoulder_min_high 0.03 0.03 OK 비율
|
||||
shoulder_cut_pct 0.001 0.001 OK 비율
|
||||
rsi_oversold 23 23 OK 그대로
|
||||
rsi_period 3 3 OK 정수
|
||||
max_daily 100 100 OK 정수
|
||||
use_macd_cross False False OK bool
|
||||
skip_hts_scan_dupes False False OK bool
|
||||
[B] param_search _ui_to_engine vs 실매 비율
|
||||
필드 canonical(실매/파서치) web 왕복후 판정
|
||||
------------------------------------------------------------------------------
|
||||
sl_pct 0.035 0.035 OK 비율
|
||||
tp_pct 0.03 0.03 OK 비율
|
||||
tp_max_pct 0.04 0.04 OK 비율
|
||||
drop_rate 0.01 0.01 OK 비율
|
||||
shoulder_min_high 0.03 0.03 OK 비율
|
||||
shoulder_cut_pct 0.001 0.001 OK 비율
|
||||
[03:16:41] ✅ verify_scalping parity OK
|
||||
|
||||
=== 꼬리 (TAIL/SHORT) ===
|
||||
필드 canonical(실매/파서치) web 왕복후 판정
|
||||
------------------------------------------------------------------------------
|
||||
sl_pct 0.03 0.03 OK 비율
|
||||
tp_pct 0.05 0.05 OK 비율
|
||||
shoulder_min_high 0.007 0.007 OK 비율
|
||||
shoulder_cut_pct 0.0015 0.0015 OK 비율
|
||||
rsi_threshold 78 78 OK 그대로
|
||||
rsi_period 14 14 OK 정수
|
||||
max_daily 10 10 OK 정수
|
||||
stop_atr_mult 2 2 OK 그대로
|
||||
target_atr_mult 1.5 1.5 OK 그대로
|
||||
[03:16:41] ✅ verify_tail parity OK
|
||||
[03:16:41] ✅ 실매↔웹↔파람 변환 정합 스모크 통과
|
||||
[03:16:41] 📊 orders 테이블 확인/생성 완료
|
||||
[03:16:42] ✅ 꼬리 백테 2026-07-16: trades=0 pnl=0
|
||||
[03:16:42] ⚠️ ws_ticks 데이터 없음 — B안 OHLC high 폴백 (틱 수집 후 재백테 권장)
|
||||
[03:16:42] ✅ 돌파 백테 2026-07-16: trades=0 pnl=0
|
||||
[03:16:42] === SUMMARY ok=20 err=0 ===
|
||||
[03:16:42] RESULT: PASS
|
||||
1
logs/momentum_mode_combo_backfill_latest.logpath
Normal file
1
logs/momentum_mode_combo_backfill_latest.logpath
Normal file
@@ -0,0 +1 @@
|
||||
logs/momentum_mode_combo_backfill_20260716_024407.log
|
||||
1
logs/momentum_ratchet_ab_latest.logpath
Normal file
1
logs/momentum_ratchet_ab_latest.logpath
Normal file
@@ -0,0 +1 @@
|
||||
logs/momentum_ratchet_ab_20260716_021703.log
|
||||
1
logs/optuna_breakout_fine_latest.jsonpath
Normal file
1
logs/optuna_breakout_fine_latest.jsonpath
Normal file
@@ -0,0 +1 @@
|
||||
/home/hoon/kis_bot/kis_trader/backtest/results/optuna_breakout_fine_20260716_030605.json
|
||||
1
logs/optuna_breakout_latest.jsonpath
Normal file
1
logs/optuna_breakout_latest.jsonpath
Normal file
@@ -0,0 +1 @@
|
||||
/home/hoon/kis_bot/kis_trader/backtest/results/optuna_breakout_fine_20260716_030605.json
|
||||
1
logs/optuna_breakout_wide_latest.jsonpath
Normal file
1
logs/optuna_breakout_wide_latest.jsonpath
Normal file
@@ -0,0 +1 @@
|
||||
/home/hoon/kis_bot/kis_trader/backtest/results/optuna_breakout_wide_20260716_025835.json
|
||||
1
logs/optuna_latest.jsonpath
Normal file
1
logs/optuna_latest.jsonpath
Normal file
@@ -0,0 +1 @@
|
||||
/home/hoon/kis_bot/kis_trader/backtest/results/optuna_breakout_fine_20260716_030605.json
|
||||
1
logs/optuna_momentum_fine_latest.jsonpath
Normal file
1
logs/optuna_momentum_fine_latest.jsonpath
Normal file
@@ -0,0 +1 @@
|
||||
/home/hoon/kis_bot/kis_trader/backtest/results/optuna_momentum_fine_20260716_023221.json
|
||||
1
logs/optuna_momentum_latest.jsonpath
Normal file
1
logs/optuna_momentum_latest.jsonpath
Normal file
@@ -0,0 +1 @@
|
||||
/home/hoon/kis_bot/kis_trader/backtest/results/optuna_momentum_fine_20260716_023221.json
|
||||
1
logs/optuna_momentum_ratchet_ab_latest.jsonpath
Normal file
1
logs/optuna_momentum_ratchet_ab_latest.jsonpath
Normal file
@@ -0,0 +1 @@
|
||||
/home/hoon/kis_bot/kis_trader/backtest/results/momentum_ratchet_ab_20260716_021733.json
|
||||
1
logs/param_search_optuna_breakout_fine_latest.logpath
Normal file
1
logs/param_search_optuna_breakout_fine_latest.logpath
Normal file
@@ -0,0 +1 @@
|
||||
logs/param_search_optuna_breakout_fine_20260716_030435.log
|
||||
1
logs/param_search_optuna_breakout_fine_latest.study
Normal file
1
logs/param_search_optuna_breakout_fine_latest.study
Normal file
@@ -0,0 +1 @@
|
||||
breakout_fine_wideTune_20260715_20260716_030435
|
||||
1
logs/param_search_optuna_breakout_wide_latest.logpath
Normal file
1
logs/param_search_optuna_breakout_wide_latest.logpath
Normal file
@@ -0,0 +1 @@
|
||||
logs/param_search_optuna_breakout_wide_20260716_025746.log
|
||||
1
logs/param_search_optuna_breakout_wide_latest.study
Normal file
1
logs/param_search_optuna_breakout_wide_latest.study
Normal file
@@ -0,0 +1 @@
|
||||
breakout_wide_20260715_20260716_025746
|
||||
1
logs/param_search_optuna_momentum_fine_latest.logpath
Normal file
1
logs/param_search_optuna_momentum_fine_latest.logpath
Normal file
@@ -0,0 +1 @@
|
||||
logs/param_search_optuna_momentum_fine_20260716_022448.log
|
||||
1
logs/param_search_optuna_momentum_fine_latest.study
Normal file
1
logs/param_search_optuna_momentum_fine_latest.study
Normal file
@@ -0,0 +1 @@
|
||||
momentum_fine_lateRatchet_20260715_20260716_022448
|
||||
1
logs/param_search_optuna_momentum_wide_latest.logpath
Normal file
1
logs/param_search_optuna_momentum_wide_latest.logpath
Normal file
@@ -0,0 +1 @@
|
||||
logs/param_search_optuna_momentum_wide_20260716_013324.log
|
||||
1
logs/param_search_optuna_momentum_wide_latest.study
Normal file
1
logs/param_search_optuna_momentum_wide_latest.study
Normal file
@@ -0,0 +1 @@
|
||||
momentum_wide_20260715_20260716_013324
|
||||
1
logs/param_search_optuna_scalp_fine_latest.logpath
Normal file
1
logs/param_search_optuna_scalp_fine_latest.logpath
Normal file
@@ -0,0 +1 @@
|
||||
logs/param_search_optuna_scalp_fine_20260716_005745.log
|
||||
1
logs/param_search_optuna_scalp_fine_latest.study
Normal file
1
logs/param_search_optuna_scalp_fine_latest.study
Normal file
@@ -0,0 +1 @@
|
||||
scalp_fine_wideTune_20260715_20260716_005745
|
||||
1
logs/param_search_optuna_scalp_wide_latest.logpath
Normal file
1
logs/param_search_optuna_scalp_wide_latest.logpath
Normal file
@@ -0,0 +1 @@
|
||||
logs/param_search_optuna_scalp_wide_20260716_004618.log
|
||||
1
logs/param_search_optuna_scalp_wide_latest.study
Normal file
1
logs/param_search_optuna_scalp_wide_latest.study
Normal file
@@ -0,0 +1 @@
|
||||
scalp_wide_20260715_20260716_004618
|
||||
1
logs/param_search_optuna_tail_coarse_latest.logpath
Normal file
1
logs/param_search_optuna_tail_coarse_latest.logpath
Normal file
@@ -0,0 +1 @@
|
||||
logs/param_search_optuna_tail_coarse_20260711_025821.log
|
||||
1
logs/param_search_optuna_tail_fine_latest.logpath
Normal file
1
logs/param_search_optuna_tail_fine_latest.logpath
Normal file
@@ -0,0 +1 @@
|
||||
logs/param_search_optuna_tail_fine_20260716_011800.log
|
||||
1
logs/param_search_optuna_tail_fine_latest.study
Normal file
1
logs/param_search_optuna_tail_fine_latest.study
Normal file
@@ -0,0 +1 @@
|
||||
tail_fine_wide1Tune_20260715_20260716_011800
|
||||
1
logs/param_search_optuna_tail_full_latest.logpath
Normal file
1
logs/param_search_optuna_tail_full_latest.logpath
Normal file
@@ -0,0 +1 @@
|
||||
/home/hoon/kis_bot/logs/param_search_optuna_tail_full_20260711_105425.log
|
||||
1
logs/param_search_optuna_tail_wide2_latest.logpath
Normal file
1
logs/param_search_optuna_tail_wide2_latest.logpath
Normal file
@@ -0,0 +1 @@
|
||||
logs/param_search_optuna_tail_wide2_20260716_011239.log
|
||||
1
logs/param_search_optuna_tail_wide2_latest.study
Normal file
1
logs/param_search_optuna_tail_wide2_latest.study
Normal file
@@ -0,0 +1 @@
|
||||
tail_wide2_20260715_20260716_011239
|
||||
1
logs/param_search_optuna_tail_wide_latest.logpath
Normal file
1
logs/param_search_optuna_tail_wide_latest.logpath
Normal file
@@ -0,0 +1 @@
|
||||
logs/param_search_optuna_tail_wide_20260716_010944.log
|
||||
1
logs/param_search_optuna_tail_wide_latest.study
Normal file
1
logs/param_search_optuna_tail_wide_latest.study
Normal file
@@ -0,0 +1 @@
|
||||
tail_wide_20260715_20260716_010944
|
||||
43
logs/tail_live_review_20260709.txt
Normal file
43
logs/tail_live_review_20260709.txt
Normal file
@@ -0,0 +1,43 @@
|
||||
=== 7/9 SHORT 실매 검토 (2026-07-09 12:27 KST) ===
|
||||
|
||||
[env] id=625, TAIL_REENTRY_MIN_EDGE_KRW=2000, skip_hts=false
|
||||
|
||||
[체결] buy/sell on 2026-07-09: 3건, 당일 실현합 -7,053원
|
||||
376980 buy=07-08 11:47 sell=07-09 08:30 pnl=-9,355 손절 (전일 포지션)
|
||||
114840 buy=10:21 sell=10:27 pnl=+1,024 래칫컷
|
||||
424870 buy=12:09 sell=12:24 pnl=+1,278 래칫컷
|
||||
|
||||
[종목별 당일 실현]
|
||||
376980: 1회, -9,355원
|
||||
114840: 1회, +1,024원
|
||||
424870: 1회, +1,278원
|
||||
|
||||
[journalctl 탈락 TOP — 09:00~]
|
||||
탈락-봉등락: ~24,550 (1차 병목, skip_hts=false)
|
||||
탈락-데이터: ~13,108
|
||||
탈락-종목일일손익: 11,036 (전부 114840 재진입 엣지 미달)
|
||||
탈락-패턴: 438
|
||||
|
||||
[게이트 상세]
|
||||
114840: +1,024원 < 2,000원 (재진입 최소엣지 미달) × 11,036
|
||||
손실한도 차단: 0건
|
||||
|
||||
[7/8 대비]
|
||||
7/8: 2~3건, -7,665원 | 봉등락·유니버스
|
||||
7/9: 3건(신규2), -7,053원 | 봉등락 >> 게이트(엣지)
|
||||
|
||||
|
||||
[백테스트 7/9 — skip_hts=false (DB)]
|
||||
Case A edge=2000: trades=1 pnl=+327
|
||||
Case B edge=0: trades=1 pnl=+327
|
||||
→ 당일 재진입 시나리오 없어 A/B 동일. 실매 3건 vs 백테 1건 갭은 봉등락·유니버스·전일포지션(376980) 차이.
|
||||
|
||||
[배포]
|
||||
env 스냅샷 id=626 (12:29)
|
||||
봇 재시작 PID=192324 (12:29:17)
|
||||
engine reentry_min_edge_krw=0 확인
|
||||
|
||||
[모니터링 — 7/10]
|
||||
journalctl -u kis_trader_main.service -f | grep -E "종목일일손익|114840|424870"
|
||||
tail -f logs/tail_symbol_gate_verify_20260709.log # 백테 결과
|
||||
재진입 최소엣지 미달 로그 0건 기대 (엣지=0)
|
||||
Reference in New Issue
Block a user