JINTAE CHOI

게시글

작업 기록 · 2026.09.24 · 12:45

플랫폼 다국어화와 실질적인 ByteCosmos 연구 샌드박스

공개 사이트 다국어화, ByteCosmos 운영자 접근 통제, 데이터 정제·조건 정의·진입 이후 분석·검증을 위한 격리 SQL 연구 환경.

영어 원문 · 직접 작성한 번역

플랫폼 다국어화와 실질적인 ByteCosmos 연구 샌드박스

오늘 플랫폼은 기능이 동작하는 시제품에서 더 지속 가능한 운영 구조로 한 단계 이동했다. 가장 중요한 변화는 지표를 하나 더 만든 것이 아니었다. 공개 인텔리전스, 비공개 연구, 인프라 제약의 경계를 더 명확히 한 것이었다.

공개 사이트 다국어화

Blackdeck, ByteCosmos, jintaechoi.com에 영어를 원문으로 하는 영어·한국어·일본어·중국어 공개 경로를 제공했다.

당시 다국어 처리 흐름은 다음과 같았다.

영어 원문
→ 언어별 URL
→ 번역 대기열
→ 로컬 기계번역 작업
→ 번역 페이지 캐시

언어 선택은 작은 드롭다운으로 구성했다. 저장된 선호가 없으면 대략적인 IP 국가 정보로 언어를 선택하고, 찾지 못하면 영어를 기본값으로 한다. 검색 메타데이터도 같은 경로 구조에 맞춰 언어별 canonical, hreflang 대체 링크, 다국어 사이트맵을 제공했다.

브랜드, 종목 코드, 언어 코드 등 기술 식별자는 자동 번역에서 의도적으로 제외했다.

ByteCosmos 운영자 접근 경계

ByteCosmos Research를 운영자 전용 영역으로 바꿨다. 운영자 아이디는 mckal이며, 비밀번호는 채팅으로 보내지 않고 1회용 설정 페이지에서 만들도록 했다.

최초 비밀번호 설정 중 웹 컨테이너의 OpenSSL/scrypt 메모리 제한 문제가 드러났다. 비밀번호 파생 연산을 수정하고, 해시 생성·올바른 비밀번호 확인·틀린 비밀번호 거부까지 끝까지 테스트했다.

Research 페이지를 다시 바꾼 이유

이전 Research 화면은 깔끔했지만 여전히 파라미터 입력 폼에 가까웠다. SMA, RSI, 거래량, 돌파 임계값은 쉽게 바꿀 수 있었지만 연구 전체 과정을 자연스럽게 수행하기는 어려웠다.

데이터 정리
→ 변수 생성
→ 변환 결과 탐색
→ 조건 정의
→ 매수·매도 규칙으로 사용
→ 이후 결과 확인
→ 체결 가정 검증

RStudio를 예로 들었던 이유도 이런 자유도 때문이다. 실제 요구는 RStudio라는 제품이 아니라 자유로운 연구 과정이었다.

연구 언어로서 SQL

따라서 ByteCosmos Research V2는 표준 Upbit 일별 OHLCV 위에서 SQL을 데이터프레임·모델 연구 언어로 사용한다.

운영자는 이름을 붙인 SQL 단계를 만들고 윈도 함수, CTE, 조인, 순위, 집계, 날짜 필터, 자유로운 연구 열을 사용할 수 있다. 앞 단계의 결과를 다음 단계의 데이터셋으로 이용할 수 있다.

결과 데이터셋의 불리언 SQL 식을 매수 또는 매도 조건으로 지정한다.

sma20 > sma50
AND momentum10 > 0.05
AND volume_ratio > 1.2

이 연구 정의로 현재 원화 시장 전체나 특정 시장 하나를 테스트할 수 있다.

신호뿐 아니라 진입 이후를 보기

연구 결과는 거래 수만 보여주지 않는다.

다음 시가 진입을 기준으로 1·3·5·10·20개 사용 가능한 캔들 이후의 수익률 분포, 진입 이후 표본 경로, 실행 거래, 시장별 계정 결과, 벤치마크 비교, 비용, 낙폭을 보여준다.

더 유용한 질문에 답하기 위한 것이다.

이 조건이 참이었을 때, 이후에는 보통 어떤 일이 벌어졌는가?

시점별 재구성

연구 엔진은 과거의 각 판단 날짜에서 그 시점까지 존재한 캔들만으로 SQL 파이프라인을 다시 만든다.

전체 과거 데이터로 변수를 한 번 계산하고 나중에 결과를 잘라내면, 미래를 참조하는 계산이 과거 판단에 정보를 흘려보낼 수 있다. 새 경로는 각 판단을 당시 이용 가능한 데이터 구간에서 다시 계산한다.

t일 종가에서 확인된 신호는 다음 사용 가능한 시가에 체결한다.

보수적인 가정도 명시했다. 모든 체결에 수수료와 슬리피지를 적용하고, 갭 손절은 시가에 처리한다. 일 캔들이 손절·익절을 모두 건드렸지만 장중 순서를 알 수 없다면 손절을 먼저 적용한다.

연구 실행 격리

SQL 엔진은 공개 웹 프로세스 안에서 실행하지 않는다.

별도 research-sandbox 컨테이너가 공유 대기열을 통해 크기가 제한된 JSON 작업을 받는다.

  • 네트워크 없음
  • 애플리케이션 DB 없음
  • Wallet·API 자격 증명 없음
  • Docker 소켓 없음
  • 표준 OHLCV 파일에 대한 읽기 전용 접근
  • 메모리 512MiB 제한
  • CPU 0.45 제한
  • 작업당 18초 강제 제한

승인된 OHLCV를 읽은 뒤 DuckDB의 외부 접근을 차단한다. 외부 파일 읽기, 확장 설치, 환경값 조회, 네트워크 접근은 허용하지 않는다.

당시 표준 데이터셋은 현재 Upbit 원화 시장 289개의 일별 OHLCV 51,940개 행으로 구성되어 있었다.

배포 테스트에서 현재 289개 시장 전체의 시점별 홀드아웃 평가가 샌드박스 제한 안에 완료되었다.

홀드아웃은 블라인드 검증의 증거가 아님

화면에서는 더 정확한 표현인 시간순 홀드아웃을 사용한다.

마지막 과거 구간을 반복해 확인하면서 모델을 수정하면 그 구간은 튜닝 과정의 일부가 된다. 진짜 블라인드 테스트를 하려면 별도로 보호한 평가 구간을 공개하기 전에 연구 버전을 고정해야 한다.

과거 상장폐지와 당시 시장 구성도 아직 복원하지 않았으므로 현재 대상 시장에는 생존편향이 남아 있다.

승인한 연구 정의

연구를 승인한 작업공간으로 저장할 수 있게 했다. 저장 객체에는 SQL 단계, 조건 데이터셋, 매수·매도 식, 시장 범위, 검증 설정, 수수료, 슬리피지, 손절·익절, 최대 보유 기간이 포함된다.

연구 정의를 저장한다고 공개 관찰 후보가 자동 발행되는 것은 아니다.

화면 정리

대시보드와 연구 컴포넌트가 화면 폭을 늘리지 않도록 모바일 크기 제한을 강화했다. 넓은 연구 테이블은 페이지 전체를 넘치게 하지 않고 자신의 패널 안에서만 가로 스크롤한다.

별도 Leaders 페이지도 제거했다. 주도 코인 목록이 이미 ByteCosmos 첫 화면에 있으므로 /leaders는 첫 화면의 해당 영역으로 이동한다.

검증

배포 전 확인 사항은 다음과 같다.

  • ByteCosmos 자동 테스트 12개 통과
  • 웹에서 샌드박스로 이어지는 대기열을 통한 SQL 탐색 완료
  • BTC 시점별 홀드아웃 평가 성공
  • 현재 시장 전체 평가 성공
  • 외부 파일·환경 접근 쿼리 거부
  • 샌드박스 네트워크 차단 확인
  • 연구 작업이 별도 자원 제한 안에서 실행되는 동안 공개 홈페이지 정상 응답

오늘의 핵심 교훈은 연구 제품이 자유도를 제공하더라도 운영 서버 자체를 노트북으로 열어서는 안 된다는 것이다.