Upload
jongwon-han
View
304
Download
8
Embed Size (px)
Citation preview
원래는...• 원래 주제는 'PG 해킹하기'
• 하지만.. 실패?!? 아직 진행중?!?
• 현재까지 진행 내용: "DV 환경 구축 완료 및 PG 연동 완료"
• 주제 변경: 'DV환경에서 PG 연동하기'
3
발표 내용• DV 환경이란 무엇인가?
• PG 란 무엇인가?
• DV 환경에서 PG 연동을 위한 요구사항 정리 (4가지)
• 요구사항을 만족하는 환경 구축
4
DV 환경이란?
DV 환경이란?• 개발자 1인 혼자 사용하는 별도의 격리된 환경
• 가장 불안정한(unstable) code가 실행되는 환경
• 사용자(개발자)가 직접 관리(유지 보수)해야한다.
6
개발에서 운영까지 Phase• 최소 3 phase로 나눔: DV / QA / OP
7
PG 란?
PG 란?• Payment Gate: 전자 지급 결제 대행 서비스
• PG사는 주요 신용카드사, 은행, 통신사 등과 미리 계약이 되어있다.
• 사용자는 PG사와 계약만 하면, 다양한 결제 수단(신용카드, 계좌이체, 에스크로, 모바일결제...)을 사용할 수 있다.
• 민감한 정보(신용카드 번호 등) 관리에 대한 부담이 줄어든다.
9
PG 화면 예시• PG를 사용한 경우(좌)와 아닌 경우(우)
10
4가지 요구 사항
요구 사항 1• DV 환경 전체를 local(laptop/desktop)에 구축
• 비용 절감을 위해 AWS 나 IDC server는 사용하지 않음
• 단, client(iOS app)는 실제 device(iPhone)에서 실행되어야한다.
12
요구 사항 2• Provisioning 과정이 단순하고 빨라서 반복하기 쉬워야한다.
• (re)Provisioning은 개발 과정에서 생기는 DV 환경의 엔트로피를 해결하기 위한 가장 확실한 방법
• 하지만, (re)provisioining이 어렵고 오래걸리면 개발자들이 하기를 꺼려한다.
13
"시간은 금이야, 친구!"
요구 사항 3• Python으로 작성된 backend API 서버에 PG사의
module을 연동한다.
• PG사에서 지원하는 PL은 ASP, JSP, PHP 뿐이다.
• PG사의 API spec 문서가 대외비에다가 실제 동작 내용과 다소 상이하다.
15
요구 사항 4• PG사에서 지원하는 결제 기능 중에 "정기 과금"만 사용한다.
16
요구 사항 (summary)• DV 환경 전체를 local(laptop/desktop)에 구축
• Provisioning 과정이 단순하고 빨라서 반복하기 쉬워야한다.
• Python으로 작성된 backend API 서버에 PG사의 module을 연동한다.
• PG사에서 지원하는 결제 기능 중에 "정기 과금"만 사용한다.
17
이렇게 구축했습니다.
전체 System 구성
19
전체 System 구성 (cont.)• Vagrant VM
• OpenVPN
• NAT
20
Three Combination - 1• Vagrant VM
• 미리 만들어진 VM image에서 VM을 생성
• Provisioining 과정을 단순하게 만들고, 속도도 향상됨
21
Three Combination - 1 (cont.)
# -*- mode: ruby -*-!# vi: set ft=ruby :!!# sample 'Vagrantfile'!Vagrant.configure(2) do |config|! config.vm.box = "ubuntu/trusty64"!! config.vm.provider "virtualbox" do |v|!! v.cpus = 1! v.memory = 128! end!! config.vm.provision "shell", path: "provisioning.sh"! config.vm.network "private_network", ip: "192.168.100.99"! config.vm.network "forwarded_port", guest: 1194, host: 1194, protocol: "udp"!end
22
Three Combination - 1 (cont.)• Vagrant VM 사용시, 외부에서 VM 접근의 문제점.
• port forwarding 방법은...
• 1024 이하의 숫자의 경우에 보안적으로 제한되어있음.
• VM간에 port 충돌 고려.
• VM를 접근할 때 host의 IP address를 사용해야함.
• 그래서 OpenVPN + NAT 방법을 선택
23
Three Combination - 2• OpenVPN
• Local (Laptop/Desktop) 외부에 위치한 device(iPhone)에게 사설 IP(예: 10.8.0.0/8)를 할당
24
Three Combination - 2 (cont.)#!/usr/bin/env bash!set -e!!# sample 'provisioning.sh'!apt-get -y clean!apt-get -y update!apt-get -y install openvpn!apt-get -y install easy-rsa!!cp -R /vagrant/configuration ~/!!PP=~/configuration/etc!cp -R ${PP}/openvpn/* /etc/openvpn/!cp ${PP}/sysctl.conf /etc/sysctl.conf!cp ${PP}/default/ufw /etc/default/ufw!cp ${PP}/ufw/before.rules /etc/ufw/before.rules!!ufw allow ssh!ufw allow 1194/udp!!ufw --force enable!!service openvpn start 25
Three Combination - 3• NAT
• 특정 사설 IP(예: 10.8.0.0/8)에 발생된 traffic을 다른 IP 대역으로 forwarding
26
Three Combination - 3 (cont.)
# sample '/etc/ufw/before.rules'!!(...)!!# START OPENVPN RULES!# NAT table rules!*nat!:POSTROUTING ACCEPT [0:0]!# Allow traffic from OpenVPN client to eth0 and eth1!-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE!-A POSTROUTING -s 10.8.0.0/8 -o eth1 -j MASQUERADE!COMMIT!# END OPENVPN RULES!!(...)
27
Live Demo 1'vagrant up'
해결된 요구 사항• DV 환경 전체를 local(laptop/desktop)에 구축
• Provisioning 과정이 단순하고 빨라서 반복하기 쉬워야한다.
• Python으로 작성된 backend API 서버에 PG사의 module을 연동한다.
• PG사에서 지원하는 결제 기능 중에 "정기 과금"만 사용한다.
29
정기 과금이란?
PG사의 정기과금• '정기 과금'보다는 '자동 과금'이 더 정확하다고 보임
31
PG사의 정기과금• 2단계로 나뉘어짐
• 최초 1회 시행하는 'BillKey 발급'
• 실제로 결제를 진행하는 'Auto Payment'
32
PG사의 정기과금 (cont.)• 최초 1회 시행하는 'BillKey 발급'!1,2: 사용자가 'BillKey' 발급 요청
3,4,5: PG사 mobile page redirect
(사용자가 신용카드 정보 입력)
6: PG사에서 'BillKey' 발급
7, 8: 발급된 'BillKey'를 DB에 저장
33
PG사의 정기과금 (cont.)• 실제로 결제를 진행하는 'Auto Payment'!1,2: 사용자가 'Auto Payment' 요청
3: 'BillKey' 정보로 결제 요청
4: PG사에서 결제 결과 전달
5,6: 사용자에게 결제 결과를 전달
34
Live Demo 2'BillKey and Auto Payment'
해결된 요구 사항• DV 환경 전체를 local(laptop/desktop)에 구축
• Provisioning 과정이 단순하고 빨라서 반복하기 쉬워야한다.
• Python으로 작성된 backend API 서버에 PG사의 module을 연동한다.
• PG사에서 지원하는 결제 기능 중에 "정기 과금"만 사용한다.
36
발표 내용 review• DV 환경이란 무엇인가?
• PG 란 무엇인가?
• DV 환경에서 PG 연동을 위한 요구사항 정리 (4가지)
• 요구사항을 만족하는 환경 구축
• 세번째 요구사항은 아직 진행중...
37