본문으로 건너뛰기
DEVKBS
작업 원장
009Vstro2023.11비공개

TradingBot 어드민

돈이 자동으로 움직이는 화면에 필요한 안전장치

기간
2023.11
분류
백오피스
역할
프론트엔드 단독
구성
사내 프로젝트

화면 비공개거래소 API 키와 실제 자산 정보가 노출되는 사내 운영 화면이라 공개하지 않습니다.어떤 문제를 어떻게 풀었는지는 아래에 정리해 두었습니다.

01개요

거래소 API를 통해 정해진 조건으로 주문을 반복 실행하는 봇의 관리자 화면을 만들었습니다. 작업 기간은 2주였습니다.

이 화면의 특수성은 명확했습니다. 버튼 하나가 실제 자산을 움직입니다. 일반적인 관리자 화면에서는 실수로 잘못 누르면 데이터를 되돌리면 되지만, 여기서는 체결된 주문을 되돌릴 수 없습니다. 그래서 기능을 많이 넣는 것보다 '실수로 실행되지 않게 만드는 것'이 설계의 중심이었습니다.

인증도 평소보다 무겁게 잡았습니다. 거래소 API 키가 걸린 화면이라 접근 경로 자체를 좁혀야 했습니다.

02기술 결정

문제가 무엇이었고, 무엇을 골랐고, 그래서 어떻게 됐는지.

  1. 결정 01

    되돌릴 수 없는 동작은 한 단계 더 막는다

    문제
    주문 실행과 취소가 같은 화면에 있고, 둘 다 버튼 한 번이면 끝납니다. 목록을 훑다가 잘못 누르면 그대로 체결됩니다.
    선택
    실행 계열 동작에는 확인 단계를 두고, 그 단계에서 지금 무엇이 실행되는지(수량·간격·대상)를 다시 문장으로 보여줬습니다. 취소처럼 되돌릴 수 있는 동작은 그대로 한 번에 되게 뒀습니다.
    결과
    실수로 실행되는 경로가 사라졌습니다. 모든 동작에 확인창을 붙이면 아무도 읽지 않게 되므로, 되돌릴 수 없는 것에만 붙인 것이 중요했습니다.
  2. 결정 02

    지금 봇이 살아 있는지를 화면의 1급 정보로 둔다

    문제
    자동 매매는 사람이 보지 않는 동안에도 돌아갑니다. 관리 화면에 들어왔을 때 가장 먼저 알아야 하는 것은 목록이 아니라 '지금 돌고 있는가'인데, 그 정보가 표 안에 묻혀 있었습니다.
    선택
    동작 상태와 마지막 실행 시각을 화면 최상단에 고정해 항상 먼저 보이게 했습니다.
    결과
    화면을 열자마자 상태를 알 수 있게 됐습니다. 멈춰 있는 줄 모르고 기다리거나, 돌고 있는 줄 모르고 중복 실행하는 상황이 없어졌습니다.
  3. 결정 03

    인증은 직접 만들지 않는다

    문제
    2주짜리 일정에서 로그인 세션을 직접 구현하면, 기능을 만들 시간이 줄어들 뿐 아니라 검증되지 않은 인증 코드가 자산을 다루는 화면 앞에 서게 됩니다.
    선택
    검증된 인증 라이브러리를 도입해 세션 처리를 맡기고, 나는 접근 제어 규칙만 정의했습니다.
    결과
    일정 안에 기능을 끝낼 수 있었고, 인증에서 실수할 여지도 줄었습니다. 직접 만들지 않기로 하는 것 역시 설계 판단이라는 걸 다시 확인했습니다.

03주요 기능

  • 자동 매매 설정

    거래 간격과 조건을 지정해 봇의 동작 규칙을 등록.

  • 실행·취소 제어

    실행은 확인 단계를 거치고, 취소는 즉시 반영되도록 비대칭 설계.

  • 동작 상태 표시

    현재 가동 여부와 마지막 실행 시각을 화면 상단에 고정 노출.

  • 인증 기반 접근 제어

    NextAuth.js로 세션을 관리하고 화면 접근을 제한.

04회고

되돌릴 수 있는 화면과 없는 화면은 아예 다른 물건입니다. 되돌릴 수 없는 동작에만 마찰을 주고 나머지는 가볍게 두는 방식은, 나중에 금 거래 앱을 만들 때 그대로 다시 꺼내 썼습니다.

2주라는 기간 안에서 무엇을 직접 만들지 않을 것인가를 먼저 정한 것이 이 프로젝트를 끝낼 수 있었던 이유였습니다.