Files
MBN_STOCK_WEBVIEW/docs/NAMED_NXT_THEME_RESTORE.md

4.5 KiB

저장 PList의 테마_NXT 복원

기준일: 2026-07-12 원본(읽기 전용): C:\Users\MD\source\repos\MBN_STOCK_N 현재 구현: LegacyNamedNxtThemeRestoreService, MainWindow.NamedNxtThemeRestore.cs, named-nxt-theme-restore-workflow.js

원본 동작

원본 Control/UC4.cs는 NXT 테마를 테마_NXT ^ 제목(NXT) ^ 컷 ^ 테마-현재가(정렬) ^ PageN ^ code로 저장한다. 그러나 Scene/s5074.cs, s5077.cs, s5088.cs는 저장 code를 그대로 사용하지 않고 장면 생성 때 MariaDB SB_LIST에서 SB_TITLESB_MARKET='NXT'로 code를 다시 찾는다.

  • NXT는 현재가만 지원한다. 예상체결가는 UC4에서 즉시 거부한다.
  • 지원 컷은 5단(s5074, 5개), 6종목(s5077, 6개), 12종목(s5088, 12개)이다.
  • 정렬은 입력순, 상승률순, 하락률순이다. 정렬 표기가 없으면 원본 최종 분기와 같이 하락률순이다.
  • 장면 생성 시 로컬 시간이 00:0012:59이면 PRE, 13:0023:59이면 AFTER badge를 사용한다.
  • 페이지 수는 현재 종목 수를 5/6/12로 나눈 올림값이며 현재 구현의 공통 안전 상한은 20페이지다.

현재 닫힌 복원 경계

Oracle named load의 테마_NXT 행은 기존 Web 문자열 매퍼를 통과하지 않는다. 모든 해당 행을 한 correlated native batch로 보내고 다음을 모두 만족할 때만 playable entry로 바꾼다.

  1. 원본 7필드 grammar와 지원 컷·현재가·정렬이 정확하다.
  2. MariaDB에서 suffix를 제거한 제목이 SB_MARKET='NXT' 안에서 정확히 한 행이다.
  3. 그 현재 code도 NXT SB_LIST 안에서 유일하다.
  4. LegacyThemeSelectionService preview가 schema, code/title/market, item code/index와 순서를 검증한다.
  5. 정지되지 않았고 현재가가 0이 아닌 live item이 한 개 이상이다.

성공하면 송출 selection은 PAGED_NXT_THEME와 현재 code를 사용한다. 실패한 행은 화면에 남지만 미신뢰 상태이며 PREPARE가 차단된다. batch pending 동안 편집, DB mutation, 페이지 preflight와 PREPARE도 잠긴다. native 오류와 각 행 실패는 retryable=false이고 자동 재시도하지 않는다.

과거 code와 저장 왕복 정책

제목이 exact unique인 경우에만 과거 code를 현재 code로 매핑한다. 이 매핑은 “비슷한 제목”이나 code 숫자 거리 추정이 아니라 원본 장면이 사용한 exact-title lookup을 재현한 것이다.

  • 실행·페이지 조회: 현재 MariaDB code만 사용한다.
  • 같은 named list를 다시 저장: native 검증을 통과한 현재 세션에서만 원본 group/title/cut/subtype/과거 code를 그대로 보존하고, PageN만 fresh live 결과로 다시 계산한다.
  • 로컬 저장 후 재시작 또는 검증 표식이 없는 객체: 과거 code 왕복 저장 권한이 없다. named list를 다시 load해 fresh 검증해야 한다.
  • PREPARE 직전 PRE/AFTER session을 로컬 시각으로 다시 계산하되, code/title 검증 proof와 원본 7필드 identity는 유지한다.

이 정책은 원본 PList와의 상호운용성을 유지하면서도 stale code를 Tornado 장면 조회에 사용하지 않게 한다.

실제 read-only 감사 결과

2026-07-12 실제 Oracle/MariaDB에 DB write 없이 실행한 결과다.

항목 결과
활성 테마_NXT 48
서로 다른 저장 제목 24
raw grammar 변형 1
grammar 5단 표그래프 / 테마-현재가(입력순) 48행
exact unique 현재 title/code로 매핑 48
저장 code와 현재 code가 다름 48
validated preview가 비어 있음 48
현재 playable 복원 0

따라서 구현은 48행을 안전하게 식별하고 현재 code까지 찾지만, 현재 MariaDB의 해당 24개 테마에 preview item이 없으므로 모두 PreviewEmpty로 차단하는 것이 정상 결과다. 운영자가 SB_ITEMv_all_stock live 연계를 복구하기 전에는 이 행들을 PREPARE해서는 안 된다.

KRX 테마 행은 이 batch의 후보가 아니며 이번 변경에서 자동 복원 정책을 바꾸지 않았다.

검증

  • Core focused: 30/30 통과
  • Web workflow/app integration focused: 12/12 통과
  • actual DB audit: Oracle/MariaDB healthy, NXT 48행 전부 exact identity mapped, 48행 PreviewEmpty
  • 전체 DB smoke는 같은 실행에서 비교 장면용 현재 종목 데이터가 변해 s5026/s5029/s5087 세 장면이 실패했다. NXT audit 자체 실패가 아니며 전체 smoke 성공으로 기록하지 않는다.

실제 Tornado 명령, 운영 DB write, 원본 파일 수정은 수행하지 않았다.