Toss API 인증 토큰 영속화 저장소 선택

상태

승인

후보군

방안설명
MySQL toss_tokens 테이블 영속화access_token과 expires_at를 DB에 저장. 앱 재시작 후 DB에서 유효 토큰 로드, 만료 시 자동 재발급
메모리 캐싱현행 방식. TossAuthClient가 토큰을 메모리에만 보관. 앱 재시작 시마다 재발급 발생

결정

MySQL toss_tokens 테이블에 access_token과 expires_at를 영속화한다. 앱 시작 시 DB에서 유효한 토큰을 로드하고, 만료 시 동일 POST /oauth2/token 엔드포인트로 재발급 후 저장한다.

결정 이유

  • 직접 호출 검증 결과, 계좌(GET /api/v1/accounts), 보유종목(GET /api/v1/holdings), 주문(GET /api/v1/orders) API 모두 기존 client_credentials 토큰으로 접근 가능함을 확인. OAuth Authorization Code Flow 불필요.
  • 앱 재시작 후 토큰 재발급 없이 즉시 운영 가능.
  • 토큰 만료(~24h) 시 앱이 자동 재발급하므로 사용자 개입 없음.
  • 기존 TOSS_API_KEY·TOSS_SECRET_KEY 환경변수 그대로 사용해 셋업 변경 없음.

검토 대안

방안기각 이유
메모리 캐싱 유지앱 재시작마다 재발급 발생. 장기 운영 시 빈번한 토큰 요청으로 불편
환경변수 직접 주입 (TOSS_USER_TOKEN)토큰 만료 시마다 수동 재발급·주입 필요. 운영 불편

트레이드 오프

  • 득: 앱 재시작 후 즉시 운영. 사용자 셋업 변경 없음. OAuth 브라우저 승인 불필요.
  • 실: toss_tokens 테이블 DDL 추가 필요(TossAuthClient 수정). Toss 성공·MySQL 실패 엣지 케이스에서 토큰 불일치 가능(드문 케이스).