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 실패 엣지 케이스에서 토큰 불일치 가능(드문 케이스).