Files
stocksearch/CLAUDE.md
2026-03-31 19:32:59 +09:00

3.5 KiB

CLAUDE.md

이 파일은 Claude Code(claude.ai/code)가 이 저장소에서 작업할 때 참고하는 가이드입니다.

명령어

# 애플리케이션 실행
go run main.go

# 바이너리 빌드
go build -o stockSearch .

# 전체 테스트 실행
go test ./...

# 단일 테스트 실행
go test -run TestFunctionName ./...

# 린트 실행 (golangci-lint 설치 필요)
golangci-lint run

작업 방침

  • 필요한 명령어(빌드, 테스트 등)는 사용자에게 묻지 않고 직접 실행한다.
  • /Users/hayato5246/GolandProjects/stockSearch/kiwoom_api_doc.txt 이 문서는 키움증권 REST API 문서입니다.
  • Bash Commmand 실행 시 묻지 말고 직접 실행하고 테스트 까지 처리해서 확인한다.
  • 코드 수정시 사용자에게 묻지 말고 직접 수정한다.

언어 설정

  • 코드 주석은 한글로만 작성한다.
  • 사용자에 대한 답변은 가능한 모든 부분을 한글로 작성한다.

프로젝트 정보

  • 모듈명: stocksearch
  • Go 버전: 1.22 이상
  • 키움증권 REST API 기반 주식 시세 웹서비스 (api.kiwoom.com)

아키텍처

main.go → 라우터 설정, WebSocket Hub 고루틴 시작, HTTP 서버 실행
config/         환경변수 (.env) 로딩
models/         순수 데이터 구조체 (비즈니스 로직 없음)
services/       키움 API 클라이언트, 토큰 관리, 캐시, 비즈니스 로직
handlers/       HTTP 핸들러 (HTML 렌더링 / JSON API / WebSocket)
websocket/      Hub 패턴 실시간 시세 (1초 Ticker + gorilla/websocket)
middleware/     로깅, 패닉 복구
templates/      Go html/template SSR (layout/base.html 상속)
static/         Tailwind CSS, Lightweight Charts, WebSocket 클라이언트 JS

레이어 의존성: handlers → services → models, websocket → services

템플릿 구조: 각 페이지별 독립 템플릿 세트 파싱 (content 블록 충돌 방지)

  • NewPageHandler()에서 base.html + 각 페이지 html을 별도 ParseFiles로 파싱
  • render()에서 ExecuteTemplate(w, "base.html", data) 호출

주요 설계 사항

  • 토큰 관리: services/token_service.go — 서버 시작 시 토큰 발급, 만료 1시간 전 자동 갱신
    • 응답 필드: token (access token), expires_dt (YYYYMMDDHHmmss)
  • 캐시: services/cache_service.go — sync.Map 기반 TTL 캐시 (현재가 1초, 차트 5분, 등락률 1분)
  • WebSocket Hub: websocket/hub.go — 1초 Ticker로 구독 종목 시세 조회 → 클라이언트에 브로드캐스트
  • Rate Limit: KiwoomClient에 golang.org/x/time/rate 적용 (초당 18건)
  • 관심종목: 클라이언트 localStorage 저장, WebSocket 실시간 구독

키움증권 REST API

  • 기본 URL: https://api.kiwoom.com
  • 공통 요청: POST, JSON body, 헤더에 api-id, authorization: Bearer {token}, cont-yn, next-key
  • 토큰 발급: POST /oauth2/token (appkey + secretkey)
  • 현재가 ka10001: POST /api/dostk/stkinfocur_prc, pred_pre, flu_rt, trde_qty, open_pric, high_pric, low_pric, stk_nm
  • 체결정보 ka10003: POST /api/dostk/stkinfocntr_infr[0].cntr_str (체결강도)
  • 일봉 ka10005: POST /api/dostk/mrkcondstk_ddwkmm[] (date, open_pric, high_pric, low_pric, close_pric, trde_qty)
  • 등락률순위 ka10027: POST /api/dostk/rkinfopred_pre_flu_rt_upper[]

환경 설정

.env 파일 (.gitignore에 등록됨):

KIWOOM_APP_KEY=...
KIWOOM_APP_SECRET=...
KIWOOM_BASE_URL=https://api.kiwoom.com
SERVER_PORT=8080