주차 회고 2주차 2026-08-06

2주차 회고 — "만약 계산기"로 완성한 한 주

2주차 목표(작동하는 매매 로직 + 대시보드)를 완성한 뒤, 멈추지 않고 방문자가 직접 조작하는 "만약 계산기"까지 만들어낸 한 주.

한 줄 요약: 2주차 목표는 “작동하는 매매 로직 + 대시보드 초안”이었는데, 그걸 이틀 만에 끝내고도 멈추지 않았다. 다 만든 그래프가 원래 원했던 것과 다르다는 걸 알아채고, 방문자가 직접 종목·날짜·금액을 골라보는 “만약 계산기”까지 만들어냈다.

이런 분께 도움돼요: 목표를 다 채웠는데도 “이게 진짜 내가 원하던 거 맞나?” 다시 물어본 경험이 궁금한 분, 계정·로그인 없이 방문자가 조작하는 기능을 만들고 싶은 분.

Before

1주차 끝엔 “AAPL 1종목, AI 판단 한 번 성공”이 전부였다. 2주차 목표는 그걸 10종목 전체로 확장하고, 매일 자동으로 돌게 하고, 대시보드로 보여주는 것 — 여기까지가 로드맵에 적힌 이번 주의 할 일이었다.

이번 주 하이라이트 — “만약 계산기”

목표는 8/3~8/4 이틀 만에 끝났다. 10종목 매매 로직, GitHub Actions 자동 실행, 대시보드 3종(상태표·그래프·히스토리)까지 — 로드맵의 2주차 목표가 그대로 완성됐다.

그런데 여기서 멈추지 않았다. “AI 판단 vs Buy & Hold(그냥 계속 보유)” 비교 그래프를 추가로 만들고 나서, 이런 설명을 받았다.

“방문자가 ‘시작 날짜 + 금액’만 골라보면, AI가 그동안 실제로 내린 판단 기록을 가지고 ‘그때 넣었으면 지금 얼마가 됐을지’를 계산해서 보여주는 거예요. 계정·로그인 없이, 지금 있는 데이터만으로 만들 수 있어요.”

방금 만든 그래프와는 완전히 다른, 방문자가 직접 조작하는 기능이었다. 여기서 중요했던 건 이미 만든 걸 버리지 않고 “이건 방금 만든 것과 다르다”는 걸 먼저 인정한 것이다. 그리고 범위가 애매했던 지점(전체 포트폴리오에 나눠 넣기 vs 종목 하나에만)은 짐작으로 밀어붙이지 않고 선택지를 만들어 되물어서 정했다.

만들다 보니 지금까지 종목별 “그날 가격”이 아예 저장되고 있지 않았다는 것도 발견했다 — 과거로는 소급이 안 됐고, 그날부터 새로 가격을 기록에 남기는 걸로 범위를 좁혔다. 결과적으로 서버 없이, 빌드 시점에 페이지에 심어둔 데이터로 브라우저가 바로 계산하는 기능이 완성됐다.

// 매수/매도 판단을 현금·보유수량에 반영하는 규칙 — 이걸 종목의 기록 위에서
// 날짜순으로 돌리기만 하면, "그때 넣었으면 지금 얼마"가 계산된다
export function applyDecision(state, 판단, 가격) {
  if (판단 === '매수' && state.보유수량 === 0) {
    const 수량 = Math.floor(state.현금 / 가격);
    if (수량 > 0) {
      state.현금 -= 수량 * 가격;
      state.보유수량 = 수량;
    }
  } else if (판단 === '매도' && state.보유수량 > 0) {
    state.현금 += state.보유수량 * 가격;
    state.보유수량 = 0;
  }
}

막힘 → 해결

  • 스펙이 도중에 바뀐 걸 알아챈 순간 — 이미 만든 그래프를 버리지 않고, 범위를 다시 확인해서 재설계했다.
  • 가격 히스토리가 아예 없었던 것 — 과거 소급은 포기하고, 그 시점부터 새로 쌓기 시작했다.
  • 커스텀 도메인 시도, 그리고 되돌리기 — “이 프로젝트만의 독립된 주소”를 무료로 만들어보려고 Vercel 프로젝트 이름을 바꿔봤는데, 새로 만든 주소가 로그인 화면만 뜨는 걸 발견했다. Vercel의 “대표 도메인” 지정이 한 단계 더 필요한 걸 그제서야 알았고, 화면을 보면서 확인하는 게 안전할 것 같아서 그날은 원래 상태로 깔끔하게 되돌렸다. 안 되는 걸 억지로 끝까지 밀어붙이기보다, 애매한 지점에서 되돌려두는 것도 이번 주에 배운 판단이었다.
  • 중복 실행 버그, 뿌리까지 — 수동 실행과 예약 실행이 겹쳐서 매매 기록이 두 번씩 쌓이던 걸 발견했다. 예전에 한 번 “고쳤다”고 생각했던 문제였는데, 사실은 눈에 보이는 숫자만 정리했을 뿐 진짜 원인(같은 날 중복 실행을 막는 장치가 없던 것)은 그대로였다. 이번엔 데이터만 정리하지 않고, 재발 방지 가드까지 넣었다.

After

  • 2주차 목표(작동하는 매매 로직 + 대시보드)를 완성했고, 그 위에 방문자가 직접 조작하는 “만약 계산기”까지 얹었다.
  • /simplify로 코드를 점검해서, 실제로 있던 중복(매수/매도 규칙이 두 곳에 따로 타이핑돼 있던 것)을 찾아 정리했다.
  • 데이터 파이프라인의 재발 방지 장치까지 넣어서, 지금은 사람 개입 없이도 매일 밤 안정적으로 도는 상태다.

배운 점 / 재사용 자산

  • 다 만든 뒤에도 “이게 맞나?”를 한 번 더 짚기 — 이미 만든 걸 버리는 게 아니라, “방금 만든 것과 다르다”를 먼저 인정하고 범위를 다시 물어보면 된다.
  • 범위가 애매하면 선택지로 되묻기 — 열린 질문 대신 구체적인 선택지 2~3개를 만들어 고르게 하면 훨씬 빨리 정해진다.
  • “고쳤다”고 끝내지 않고 원인까지 확인하기 — 증상(중복 기록)만 지우고 넘어갔던 게 다시 터졌다. 데이터를 정리할 땐 원인(재발 방지 장치)까지 같이 봐야 한다.
  • 안 되면 되돌리는 것도 판단이다 — 커스텀 도메인처럼 한 단계 더 필요한 걸 알게 됐을 때, 억지로 끝까지 밀어붙이지 않고 원래 상태로 깔끔하게 되돌린 뒤 다음으로 넘어갔다.
  • 3주차 계획: 지금 만든 걸 계속 다듬을지, 새 기능을 하나 더 추가할지 아직 열어두고, 이번 주처럼 문제점을 찾으면 바로바로 고치면서 진행한다.