Signalio — 한국 시장 정보 지도와 전략 검증 엔진 2026.09.20

로그인을 없앴다 — 시그날리오 웹은 읽기 전용 공개 대시보드가 됐다

로그인해야만 할 수 있는 일이 "키움 API 키 관리" 하나뿐이었다. 1년에 두세 번 쓰는 문에 비밀번호와 TOTP와 백업코드를 달아두고 있었다.

로그인을 통째로 들어냈다. 시그날리오 웹에는 이제 쓰기 엔드포인트가 하나도 없다.

"로그인하면 뭘 할 수 있는데?"

이 질문에서 시작했다. 답하려고 코드를 세어봤더니, 로그인해야만 할 수 있는 일이 "키움 API 키 관리" 하나뿐이었다. 나머지 메뉴는 전부 백엔드 미구현이었다.

1년에 두세 번 쓰는 문에 비밀번호 + TOTP + 백업코드를 달아두고 있었던 셈이다.

그래서 판단 기준을 하나로 좁혔다. "장중에 휴대폰으로 긴급 청산 버튼을 누를 일이 있는가." 없었다. 완전 자동화를 목표로 하는 시스템에서 사람이 개입하는 순간은 설계에 없다.

확정한 구조

웹 (누구나, 로그인 없음)서버 CLI (SSH, root)
잔고·평가손익·보유종목 (실제 원화)키움 API 키 등록·삭제·연결테스트
시그널·유니버스·매매기록주문·긴급청산
전략 정의 읽기전략 파라미터 변경

읽는 것은 전부 공개, 조작은 전부 서버 안. 웹과 CLI 사이에 겹치는 면이 없다.

제거한 것

  • api/v1/auth/ 5개, api/v1/broker/ 5개 — 남은 API는 public/summary.php 하나
  • pages/login.php, pages/register.php, core/auth.php, core/totp.php
  • app.js 693 → 285줄, api.js 143 → 73줄(GET만), 사이드바 메뉴 8 → 5

지우지 않고 archive/removed-20260919/로 옮겼다. 이 프로젝트는 git을 안 쓰기 때문에 복구 경로를 손으로 남겨야 한다.

새로 만든 것

bin/broker.php — 계좌 관리 CLI. list / add / test / balance / delete.

앱 키와 시크릿은 인자가 아니라 프롬프트로 받는다(에코 끔). 셸 히스토리와 ps 출력에 시크릿이 남지 않게 하려는 것이다. 키움은 VPS IP만 화이트리스트에 넣어놨으니 어차피 서버에서 실행해야 한다.

배포하고 확인한 것

  • 업로드 14 / 서버 삭제 14 / 실패 0
  • 서버에서 키움 실호출 성공 — balance 2 → 예수금 ₩1,000,000
  • 익명 브라우저로 접속하니 그 ₩1,000,000이 그대로 보인다. 콘솔 에러 0
  • /login·/register는 301로 홈으로 보낸다

랜딩 문구도 갈아치웠다. "이용 방법(회원가입 → 구독)"이었던 자리를 "하루 동작 방식"으로 바꿨다. 가입 유도 문구는 0건이 됐다.

왜 공개하나

숫자를 숨기면 아무것도 증명할 수 없기 때문이다. 계좌번호만 가리고 잔고·손익은 실제 원화 그대로 내보낸다. 전략 로직도 공개해도 상관없다고 본다 — 알아도 그대로 따라 할 수 있는 영역이 아니다.

남은 건 이 대시보드에 채울 진짜 기록이다.

Signalio — 한국 시장 정보 지도와 전략 검증 엔진 프로젝트로