본문으로 바로가기

전자 결제 서비스 제공 업체를 탐색했으니 일반적인 결제 절차가 이루어지는 과정에 대해 알아봅시다.

iamport에서 제공해주는 정보를 정리한 것입니다.

 

iamport/iamport-manual

아임포트(iamport) 결제연동을 위한 매뉴얼입니다. Contribute to iamport/iamport-manual development by creating an account on GitHub.

github.com

 

이해 당사자

* 가맹점 서버
이 글을 보고 있는 당신이 구성할 백엔드 서버.
비즈니스 로직을 수행하는 곳이니 WAS일 터이다.

* PG(결제대행사)
가맹점과 카드회사간 네트워크 망을 구축해 카드 결제 승인 등 업무를 하는 부가통신사업자이다.
KG이니시스, KCP, 토스페이먼츠(구 LG U+) 가 시장의 60%을 쥐고 있다고 한다. (나무위키 피셜)

 

* 카드사 서버

신한 카드 서버, 농협 카드 서버 등 실제 카드 정보를 제공하는 금융권의 서버입니다.

 

결제 프로세스 전반

상식적인 결제 프로세스(해외)는 아래와 같습니다. 설명할 필요도 없이 직관적입니다.

문제는 이 방식을 한국에서는 사용할 수 없다는 겁니다.

한국에서는 카드사, 일부 PG사(적격PG로 선정된 곳)를 제외하고는 카드정보를 저장할 수 없도록 규정되어 있습니다.

아래 구성은 가맹점 서버에서 받은 카드 정보(카드 번호, 유효기간, CVC 등)을 마음만 먹으면 저장할 수 있는 구조죠.

https://github.com/iamport/iamport-manual/blob/master/%EC%9D%B8%EC%A6%9D%EA%B2%B0%EC%A0%9C/background.md

 

한국에서는 아래와 같이 결제 프로세스가 이루어집니다.

브라우저에서 곧바로 카드사 서버에 요청을 보내 인증 결과를 회신하고

인증이 성공했을 경우 결제 요청을 가맹점 서버에 가맹점 서버에 전송하는 겁니다.

 

한국에서는 결제 요청이 클라이언트의 브라우저에서 이루어지기 때문에 우리는 결제 위변조 서버에서 별도로 여부를 검증해야할 필요가 있습니다.

 

https://github.com/iamport/iamport-manual/blob/master/%EC%9D%B8%EC%A6%9D%EA%B2%B0%EC%A0%9C/background.md

 

 

k-인증

한국식 결제구조(k-결제구조)에 따르면 사용자의 브라우저에서 카드사로 카드 번호, 유효기간, CVC 등을 전송합니다.

카드사 서버에서는 이 카드 번호가 실제로 있는 번호인지, 유효한 지 등을 체크합니다.

 

이 인증 절차에 대해서 크게 안심클릭 계열, ISP 계열 두 계열로 나뉘어져 있다.

웹에서는 상관 없는데 모바일 앱에서는 이 인증 절차의 차이로 인해 모바일 브라우저와 WebView 앱결제의 방식에 차이가 발생하게 되어  있어 알아둘 필요가 있다. 이는 후술하겠다.

 

다시 돌아와서, 카드 정보를 카드사 서버로 전송하는 도중 발생할 수 있는 중간자 공격 등 보안에 대한 문제들은 카드사가 책임져야 하고, 이에 따라 별도의 프로그램 설치가 요구되는 겁니다. ActiveX, 키보드 보안 프로그램 등등 그 무지막지한 프로그램들이 이를 위한 겁니다.

 

 

https://github.com/iamport/iamport-manual/blob/master/%EC%9D%B8%EC%A6%9D%EA%B2%B0%EC%A0%9C/background.md

 

실제로 결제가 이루어지는 화면은 아래와 같습니다.

유저가 겪는 프로세스는 아래와 같습니다.

PG(KG 이니시스)에서 제공하는 화면에서 결제할 카드사(신한카드)를 선택합니다.

카드사가 제공하는 화면에 카드 번호 등 정보를 입력하면 해당 정보가 카드사 서버로 날아가게 됩니다.

https://github.com/iamport/iamport-manual/blob/master/%EC%9D%B8%EC%A6%9D%EA%B2%B0%EC%A0%9C/background.md

 

카드정보에 대한 확인이 완료되면 카드사는 1회성 인증키를 PG사에 제공하며, 이 인증키가 실제 결제에 사용됩니다.

 

 

k-결제

카드사 서버에서 인증이 완료되면 카드사 서버는 PG사에게 1회성 인증키, 주문번호, 구매자 연락처 등을 PG사에게 제공합니다. 물론 브라우저에서도 어느 정도 정보를 주고요. (아임 포트를 실제로 사용해보면서 실습과 함께 살펴보겠습니다.)

 

어쨌거나 우리가 짠 서버에서 PG 서버로 요청을 보내고 PG 서버는 인증 절차를 통해 발급 받은 인증키와 정보와 함께 결제 승인 요청을 보냅니다. 물론 카드의 한도가 초과되었다던가, 분실 신고가 된 카드하면 승인을 반려합니다.

 

카드번호 / 유효기간 / 비밀번호가 틀리게 되면 애초에 그런 카드가 존재하지 않는 것이니 "인증 단계"에서 실패가 되고 한도초과 / 분실카드일 경우에는 "인증" 단계는 통과하지만 "결제" 단계에서 실패가 됩니다.

 

 

https://github.com/iamport/iamport-manual/blob/master/%EC%9D%B8%EC%A6%9D%EA%B2%B0%EC%A0%9C/background.md

 

 

 

카드 정보 인증 방식에 따른 차이

앞서 인증단계에서 카드정보를 인증하는 기술적 방식에 따라 국내 카드사들은 크게 2가지로 분류된다고 하였다.

 

  • 안심클릭 계열 (신한 / 현대 / 하나(외환) / 롯데 / 삼성 / NH )
  • ISP 계열 ( KB국민 / 우리 / BC수협, 전북, 광주, 제주, 신협, 새마을금고 등 )

 

안심 클릭 계열 

 

아래와 같이 보안 키보드를 통해 카드 정보를 입력하는 방법이고, 가장 친숙한 방법입니다.

Window 운영 체제에서는 카드사의 프로그램이 직접 디바이스를 컨트롤하기 때문에 (보안 키보드) 아래와 같은 키보드가 화면에 보이지 않는다면 그것도 안심 클릭 계열이라고 생각하시면 됩니다.

 

ISP 계열과 달리 별도의 설치가 없어 모바일 브라우저에서나 WebView 앱결제나 같다는 장점이 있습니다.

(단, 안드로이드 단말에서는 백신앱 설치여부를 확인하는 과정이 있어 백신앱에 대한 URL scheme처리가 일부 필요하다고 한다...)

 

 

ISP 계열

 

전자인증서를 통해 사전에 등록된 카드정보를 인증하는 방식이다.

그러니까 카드 정보로 ISP인증서를 만들고, 그 인증서를 사용하기 때문에 카드별로 ISP인증서 발급 후 비밀번호를 입력하면 카드정보를 입력할 필요가 없게 된다.

 

모바일 결제에서는 스마트폰에 ISP앱 설치/인증서복사를 요구하며 설치된 ISP앱으로 이동하여 카드정보 인증 절차를 거치고 다시 원래 결제프로세스로 돌아온다. 쉬운 말로 ISP를 위한 별도의 앱을 별도 설치해야하고, 잠깐 나갔다가 다시 돌아오는 작업을 해줘야 한다는 거다.

때문에 WebView 앱결제에 있어서 ISP앱으로 빠져나가 인증을 하고, 다시 앱으로 돌아오기 위해 URL scheme정의/처리가 필요합니다

 

솔직히 저는 살면서 이 계열의 인증 방식을 이용해본 적이 없습니다.

 

 


darren, dev blog
블로그 이미지 DarrenKwonDev 님의 블로그
VISITOR 오늘 / 전체