← 목록으로
개발일지

Pinterest API 프로덕션 승인 · 토큰 자동 갱신 연동

2

글 작성 폼에 Pinterest 동시발행 버튼은 진작 만들어뒀지만, API 프로덕션 접근 승인 대기 중이라 묶어두고 있었습니다. 오늘 승인이 떨어져서 실제로 연결했습니다.

OAuth 플로우와 토큰 구조

Pinterest 개발자 포털에서 바로 발급받은 토큰은 24시간짜리라 쓸 수가 없습니다. 프로덕션 승인의 의미는 pins:write 같은 스코프로 OAuth 2.0 플로우를 돌릴 수 있게 됐다는 것이고, 이 플로우를 통해 발급받은 토큰은 액세스 토큰 30일, 리프레시 토큰 60일입니다.

일회성 OAuth 콜백 라우트 두 개를 만들어서 로컬에서 한 번 돌리고 토큰을 발급받았습니다. 토큰 발급 후 라우트는 삭제했습니다.

첫 시도에서 스코프 오류가 났습니다. pins:writeboards:read만 요청했는데, pins:readboards:write가 없다는 에러였습니다. 스코프를 네 가지로 확장해서 재발급했습니다.

토큰 자동 갱신

리프레시 토큰을 쓸 때마다 Pinterest가 새 리프레시 토큰을 발급합니다. 환경변수는 정적이라 갱신된 토큰을 저장할 수 없으니, 이미 있는 SiteConfig 테이블을 활용했습니다.

로직은 단순합니다. 핀 생성 API 호출 시 401이 오면 리프레시 토큰으로 새 액세스 토큰을 발급받고, 액세스 토큰과 리프레시 토큰 둘 다 DB에 저장합니다. 초기값은 환경변수에서 읽고, 한 번 갱신이 일어나면 그 이후로는 DB가 기준이 됩니다.

액세스 토큰이 30일마다 만료되고 그때 리프레시가 일어나니, 60일짜리 리프레시 토큰은 만료 전에 항상 갱신됩니다. 꾸준히 발행하면 사실상 영구 동작입니다.

초기 연동 과정에서 불필요한 사전 검증 API 호출이 끼어있어서 성공임에도 오류처럼 보이는 UI 문제가 있었습니다. 핀은 실제로 생성됐는데 모달에 에러가 같이 표시되는 식이었습니다. 검증 호출을 제거하고 401 응답 시에만 리프레시하도록 단순화했습니다.

기타 정리

보드가 디자인 팁, NFP 디자인 두 개인데 버튼이 둘 다 "Pinterest"로만 표시되어 구분이 안 됐습니다. 버튼에 설명 레이블을 추가했습니다.

LinkedIn은 브랜드 포지셔닝 정리 전까지 쓸 일이 없어서 발행 폼에서 제거했습니다.