dv 환경에서 pg 연동하기 ('우리 안의...

36
DV 환경에서 PG 연동하기 20151119, '우리 안의 소리' 한종원 ([email protected])

Upload: jongwon-han

Post on 15-Apr-2017

304 views

Category:

Software


8 download

TRANSCRIPT

Page 1: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

DV 환경에서 PG 연동하기

2015년 11월 19일, '우리 안의 소리' 한종원 ([email protected])

Page 2: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

원래는...• 원래 주제는 'PG 해킹하기'

• 하지만.. 실패?!? 아직 진행중?!?

• 현재까지 진행 내용: "DV 환경 구축 완료 및 PG 연동 완료"

• 주제 변경: 'DV환경에서 PG 연동하기'

3

Page 3: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

발표 내용• DV 환경이란 무엇인가?

• PG 란 무엇인가?

• DV 환경에서 PG 연동을 위한 요구사항 정리 (4가지)

• 요구사항을 만족하는 환경 구축

4

Page 4: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

DV 환경이란?

Page 5: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

DV 환경이란?• 개발자 1인 혼자 사용하는 별도의 격리된 환경

• 가장 불안정한(unstable) code가 실행되는 환경

• 사용자(개발자)가 직접 관리(유지 보수)해야한다.

6

Page 6: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

개발에서 운영까지 Phase• 최소 3 phase로 나눔: DV / QA / OP

7

Page 7: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

PG 란?

Page 8: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

PG 란?• Payment Gate: 전자 지급 결제 대행 서비스

• PG사는 주요 신용카드사, 은행, 통신사 등과 미리 계약이 되어있다.

• 사용자는 PG사와 계약만 하면, 다양한 결제 수단(신용카드, 계좌이체, 에스크로, 모바일결제...)을 사용할 수 있다.

• 민감한 정보(신용카드 번호 등) 관리에 대한 부담이 줄어든다.

9

Page 9: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

PG 화면 예시• PG를 사용한 경우(좌)와 아닌 경우(우)

10

Page 10: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

4가지 요구 사항

Page 11: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

요구 사항 1• DV 환경 전체를 local(laptop/desktop)에 구축

• 비용 절감을 위해 AWS 나 IDC server는 사용하지 않음

• 단, client(iOS app)는 실제 device(iPhone)에서 실행되어야한다.

12

Page 12: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

요구 사항 2• Provisioning 과정이 단순하고 빨라서 반복하기 쉬워야한다.

• (re)Provisioning은 개발 과정에서 생기는 DV 환경의 엔트로피를 해결하기 위한 가장 확실한 방법

• 하지만, (re)provisioining이 어렵고 오래걸리면 개발자들이 하기를 꺼려한다.

13

Page 13: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

"시간은 금이야, 친구!"

Page 14: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

요구 사항 3• Python으로 작성된 backend API 서버에 PG사의

module을 연동한다.

• PG사에서 지원하는 PL은 ASP, JSP, PHP 뿐이다.

• PG사의 API spec 문서가 대외비에다가 실제 동작 내용과 다소 상이하다.

15

Page 15: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

요구 사항 4• PG사에서 지원하는 결제 기능 중에 "정기 과금"만 사용한다.

16

Page 16: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

요구 사항 (summary)• DV 환경 전체를 local(laptop/desktop)에 구축

• Provisioning 과정이 단순하고 빨라서 반복하기 쉬워야한다.

• Python으로 작성된 backend API 서버에 PG사의 module을 연동한다.

• PG사에서 지원하는 결제 기능 중에 "정기 과금"만 사용한다.

17

Page 17: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

이렇게 구축했습니다.

Page 18: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

전체 System 구성

19

Page 19: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

전체 System 구성 (cont.)• Vagrant VM

• OpenVPN

• NAT

20

Page 20: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

Three Combination - 1• Vagrant VM

• 미리 만들어진 VM image에서 VM을 생성

• Provisioining 과정을 단순하게 만들고, 속도도 향상됨

21

Page 21: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

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

Page 22: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

Three Combination - 1 (cont.)• Vagrant VM 사용시, 외부에서 VM 접근의 문제점.

• port forwarding 방법은...

• 1024 이하의 숫자의 경우에 보안적으로 제한되어있음.

• VM간에 port 충돌 고려.

• VM를 접근할 때 host의 IP address를 사용해야함.

• 그래서 OpenVPN + NAT 방법을 선택

23

Page 23: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

Three Combination - 2• OpenVPN

• Local (Laptop/Desktop) 외부에 위치한 device(iPhone)에게 사설 IP(예: 10.8.0.0/8)를 할당

24

Page 24: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

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

Page 25: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

Three Combination - 3• NAT

• 특정 사설 IP(예: 10.8.0.0/8)에 발생된 traffic을 다른 IP 대역으로 forwarding

26

Page 26: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

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

Page 27: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

Live Demo 1'vagrant up'

Page 28: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

해결된 요구 사항• DV 환경 전체를 local(laptop/desktop)에 구축

• Provisioning 과정이 단순하고 빨라서 반복하기 쉬워야한다.

• Python으로 작성된 backend API 서버에 PG사의 module을 연동한다.

• PG사에서 지원하는 결제 기능 중에 "정기 과금"만 사용한다.

29

Page 29: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

정기 과금이란?

Page 30: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

PG사의 정기과금• '정기 과금'보다는 '자동 과금'이 더 정확하다고 보임

31

Page 31: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

PG사의 정기과금• 2단계로 나뉘어짐

• 최초 1회 시행하는 'BillKey 발급'

• 실제로 결제를 진행하는 'Auto Payment'

32

Page 32: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

PG사의 정기과금 (cont.)• 최초 1회 시행하는 'BillKey 발급'!1,2: 사용자가 'BillKey' 발급 요청

3,4,5: PG사 mobile page redirect

(사용자가 신용카드 정보 입력)

6: PG사에서 'BillKey' 발급

7, 8: 발급된 'BillKey'를 DB에 저장

33

Page 33: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

PG사의 정기과금 (cont.)• 실제로 결제를 진행하는 'Auto Payment'!1,2: 사용자가 'Auto Payment' 요청

3: 'BillKey' 정보로 결제 요청

4: PG사에서 결제 결과 전달

5,6: 사용자에게 결제 결과를 전달

34

Page 34: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

Live Demo 2'BillKey and Auto Payment'

Page 35: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

해결된 요구 사항• DV 환경 전체를 local(laptop/desktop)에 구축

• Provisioning 과정이 단순하고 빨라서 반복하기 쉬워야한다.

• Python으로 작성된 backend API 서버에 PG사의 module을 연동한다.

• PG사에서 지원하는 결제 기능 중에 "정기 과금"만 사용한다.

36

Page 36: DV 환경에서 PG 연동하기 ('우리 안의 소리', 2015-11-19)

발표 내용 review• DV 환경이란 무엇인가?

• PG 란 무엇인가?

• DV 환경에서 PG 연동을 위한 요구사항 정리 (4가지)

• 요구사항을 만족하는 환경 구축

• 세번째 요구사항은 아직 진행중...

37