brunch

매거진 일과 썰

You can make anything
by writing

C.S.Lewis

by 황금별 Jan 22. 2024

[토스페이먼츠] 브랜드페이 연동/인터뷰 경험(1/2)

토스페이먼츠를 이용하여 결제 서비스를 개발하게 된 이유와 소개

1. 들어가기

 이직 후, 첫 프로젝트로 “초소형 전기차 대여 서비스”를 개발하였습니다. 서비스를 제공하는 여러 업체 및 앱과 마찬가지로, 대여 서비스에서 결제 기능은 필수로 들어가야 합니다. 이를 위해 PG(Payment Gateway, 결제대행사, 이하 PG)사를 선택하여 해당 기업에서 제공하는 결제기능을 앱(혹은 웹) 내에 연동하게 되면, 이용한 서비스 금액을 정산받을 수 있습니다. 프로젝트에서 결제 기능을 개발하는 과정 역시 쉽지 않았습니다. 이번 글에서는 PG사 선택, API 개발, SDK 연동, 결제 테스트 까지 겪은 여러 과정들을 나열해보려 합니다. 그리고 다음 글에서는 토스페이먼츠에서 브랜드페이 연동 이후 토스페이먼츠 DX팀과의 개발자 리뷰를 했던 경험에 대해서도 함께 이야기해보려 합니다.


2. 결재대행(PG)사 선택

PG사는 왜?

 고객은 서비스를 이용하고 이용한 비용을 지불하기 위해 `결제`를 합니다. 하지만 결제를 위해서는 고객의 개인정보(이름, 주민등록번호 등)와 금융정보(카드, 계좌 등) 필요하고, 이를 검증하는 과정까지 필요합니다. 대부분 회사에서는 비즈니스 로직과 함께 결제를 위한 다양한 기능을 자체적으로 개발하기 어렵고, 불가능할 수 있습니다. 때문에 이러한 결제를 대행해주는 기업인 결제대행사가 필요하고 PG사를 선택 및 연동하여 서비스 이용료를 결제할 수 있습니다.


토스페이먼츠를 선택한 이유

 PG사는 타사의 앱에서 자신들의 결제 서비스를 연동할 수 있도록 `API` 혹은 `Development Kit`을 제공하는 것으로 알고 있습니다. 저희는 자체 제작한 디자인을 적용하고, 기능의 유연한 변화를 위해 API로 결제 서비스를 연결하고자 하였습니다. 무엇보다 전체 개발 기간이 약 4개월 정도로 짧았기 때문에 계약과 개발, 테스트 과정이 최소한으로 걸릴 수 있었으면 한다는 요구사항이 있었습니다. 그 외 여러 내부적인 이슈와 겹쳐, 결론적으로 아래와 같은 가지 이유로 인해 토스페이먼츠를 PG사로 선택하여 개발하기로 하였습니다. 


개발과정에서 도움이 되는 공개된 정보(Documents 등)가 필요함

제공되는 개발계에서 테스트가 가능해야 함

PG사 계약 기간을 최대 2주 내외로 할 수 있어야 함

API 기능 혹은 SDK를 제공해야 함


 기존 백엔드 개발자분께 서비스의 결제 기능 개발 히스토리에 대해 자문을 구할 기회가 있었습니다. 현재 운영중인 서비스는 PG사로 토스페이먼츠를 연동하여 운영중이고, 이 과정에서 계약기간은 약 2~3주로 짧게 이루어졌다고 전달받았습니다. 또한 토스페이먼츠 개발자 센터에서 개발/테스트에 필요한 다양한 정보를 제공하고 있다는 것을 알게 되었습니다. 이를 종합적으로 보아 토스페이먼츠로 개발과 테스트가 무리없을 것이라 판단하였습니다.


3. 토스페이먼츠 API와 SDK 연결

 토스페이먼츠의 API를 연동하면서 기획 및 계약 과정에서 API를 변경하거나, SDK를 추가 연결하기도 하였습니다. 아래에는 그 이유와 과정에 대해 공유하고자 합니다.



`코어 API`와 `브랜드페이 API`

 API를 변경하게 된 이유를 설명하기 앞서, 토스페이먼츠에서 제공하는 두 가지 API를 소개드릴 필요가 있습니다. 토스페이먼츠에서는 `코어 API``브랜드페이 API`를 제공하고 있습니다. 두 API 모두 결제를 위한 다양한 기능을 제공하고 있지만, 사용하는 방법에서 약간의 차이가 있습니다.


 두 API 모두 `결제를 위한 고유값`이 있습니다. 코어 API에서는 `billingKey`라는 고유값이 있고, 브랜드페이 API에서는 `methodKey`라는 고유값이 있습니다. 두 값 모두 결제를 위한 키(유니크한 인증값)이라는 점에서 같습니다. 하지만 이를 발급하여 이용하는 과정이 다르기 때문에 결제 수단 등록 및 결제로직이 달라질 수 있습니다. 결제로직이 바뀔 수 있다는 것은 개발 기간이 짧은 프로젝트에서는 치명적인 리스크입니다. 때문에 프로젝트 매니저님과 토스페이먼츠와의 빠른 계약 진행 및 사전에 필요한 내용을 부탁드렸습니다.


상점등록과 API 선택

 토스페이먼츠는 결제대행 계약을 위해서 `상점등록`이라는 과정이 필요합니다. 또, 등록된 상점 별로 결제 및 정산이 가능한 구조입니다. 상점등록 과정에서 개발하는 앱의 프로토타입을 계약 담당자에게 제출하고, 심사를 받게 됩니다. 심사는 약 2~3주 소요된다고 이해하고 있었습니다. 개발하는 서비스는 문제가 없었으나, 서비스 이용료 결제 부분에서 API를 변경해야 한다고 가이드 받아, 기존 개발된 내용을 변경해야 한다고 통보를 받았습니다. 그 이유는 다음과 같았습니다.


코어 API는 현재, `정기결제 서비스`를 연동하기 위한 서비스만 부분적으로 API 사용을 허용하고 있다. 또한 추후  코어 API를 이용하는 고객을 줄이고, 브랜드페이 API를 사용하는 것을 권장할 계획이다.


 단 건 결제로 이루어지는 저희 서비스에서는 코어 API를 연동할 수 없다고 판단되어 브랜드페이 API와 브랜드페이 SDK를 이용하여 개발하는 방법을 가이드 받았습니다. 여러차례 문의하여 코어 API가 아닌 브랜드 페이를 API를 이용하라는 가이드를 받았고, 별다른 선택지가 없어 구조를 변경하였습니다.


4. 위기를 기회로…

 토스페이먼츠 브랜드페이 API를 연동하기 위해 구조를 개선하기 위해 코어 API와 차이를 확인했습니다. 결제를 위한 `methodKey`를 이용하는 방법과 더불어 `Access-Token`, `Refresh-Token`을 이용 및 관리해야 했습니다. 이와 더불어 여러가지 확인해야 할 사항들이 많았습니다.


자동결제와 자동결제(빌링)의 차이는 무엇인가?

결제수단 등록은 어떻게 하고, methodKey는 어떻게 확인하는가?

등록된 결제 수단은 어떻게 관리해야 하는가?

결제 요청 후 결제 과정을 어떻게 확인하는가?

토스페이먼츠를 가입한 고객 별 AccessToken, RefreshToken의 유효기간은?

약관 동의는 몇 가지를 해야하고, 어떻게 하는가?

SDK 연결은 어떻게 해야 하는가?


 브랜드페이 API를 연동하며 새롭게 리서치하는 과정에서는 위와 같은 문의사항들이 발생하였습니다. 하나씩 메일로 문의하고 답변을 기다리기에는 시간적 여유가 없었기에 다른 문의 채널이 필요한 상황이었습니다. 그러던 중 홈페이지 상단에 `커뮤니티/지원` 탭에서 실시간문의를 확인할 수 있었습니다. 실시간 문의는 Discord 채널에서 이루어지며, 빠른 시간에 실시간으로 대응해주셨습니다.


(사실 기술지원 탭을 늦게 발견했습니다. 부끄럽습니다.)



5. 운영계 릴리즈

 제공되는 문서가 친절하여 개발과 테스트 과정에서 특별한 문제는 발견되지 않았습니다. 단, 운영 레벨에서 올라가게 되면 발견될 수 있는 여러 이슈에 대해서는 추가적인 테스트가 필요했습니다. 그중 가장 중점적으로 논의했던 다섯 가지 테스트 케이스는 아래와 같습니다.


기명/무기명 법인카드 등록 가능 여부

카드 유효기간 검증

카드 소유자 검증

약관동의 여부 검증

부분 금액 결제 취소, 전체 금액 결제 취소


 결제 프로세스에서 검증해야 할 다섯 가지 케이스를 가장 우선적으로 테스트 해야 했습니다. 토스페이먼츠는 상점 이라는 개념의 관리자용 콘솔이 존재합니다. 이를 통해 결제가 되었는지, 부분 금액 취소 등의 테스트가 쉽게 가능했습니다. 또한 위의 케이스와 별개로, 추가로 테스트가 필요할 경우 다행히 토스페이먼츠 운영계 상점에서 결제로그를 확인하고, 내부 DB의 결제키(paymentKey)와 비교할 수 있어 운영 테스트에 특별한 문제를 경험하지 못했습니다.


 이번 글에서는 토스페이먼츠의 두 가지 API에 대한 설명과 토스페이먼츠를 선택한 이유, 개발 및 계약 과정에서 발생한 문제 해결, 그리고 운영계 릴리즈 과정에서 확인한 체크리스트를 정리해보았습니다. 다음 글에서는 토스페이먼츠 DX팀 분들과 토스페이먼츠 개발자 리뷰에 대한 경험과, 제가 느낀 토스페이먼츠의 장/단점에 대해 이야기해보고자 합니다.



2부에 계속…

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari