More Related Content Similar to DynamoDB를 이용한 PHP와 Django간 세션 공유 - 강대성 (피플펀드컴퍼니) (20) More from AWSKRUG - AWS한국사용자모임 (20) DynamoDB를 이용한 PHP와 Django간 세션 공유 - 강대성 (피플펀드컴퍼니)2. 발표자 소개 - 강대성
컴퓨터 전공, 경제학 부전공
게임회사 3년 - MMORPG Server
통신회사 2년 - 인사관리시스템
금융회사 6년 - 해외선물, FX거래 시스템
록앤올(김기사) 2년 - 교통정보 분석, 도착 예정시간 예측
피플펀드컴퍼니 2015.9~ - IT에 관련된 모든 것
취미 아이스하키
대한아이스하키협회 심판 2007~
5. HTTP는 요청과 응답이 기본
1. Client가 Network 연결요청
2. Client Send : “GET /”
3. Client Receive : 서버에서 보내준 응답코드와 데이터
6. $ telnet www.peoplefund.co.kr 80
Trying 54.230.249.173...
Connected to www.peoplefund.co.kr.
Escape character is '^]'.
GET / HTTP/1.1
Host:www.peoplefund.co.kr
HTTP/1.1 301 Moved Permanently
Content-Type: text/html
Content-Length: 185
Connection: keep-alive
Cache-control: no-cache="set-cookie"
Date: Wed, 12 Oct 2016 09:32:09 GMT
Location: https://www.peoplefund.co.kr/
Server: nginx/1.8.0
Set-Cookie: AWSELB=B767911E04A99448F556239B476475AFDB72146E1ABCB8CFD11579EEEDBB3584E589A5BFCD5F4F7BC97980B65
50238C25A98B832279B887AABB51135C6BA6A4573B44E3E;PATH=/
Strict-Transport-Security: max-age=4227
X-Cache: Miss from cloudfront
Via: 1.1 83c6b175725bb99d681119f66901f43f.cloudfront.net (CloudFront)
X-Amz-Cf-Id: HgqIla-fhj-A1QX_cXxA7844M_CV1bnoUoIoLfUZPp04WawpEdqIMA==
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.10.0</center>
</body>
</html>
TCP/IP 접속
HTTP 요청
HTTP 응답
7. HTTP
접속, 요청, 응답, 끊음
(무엇인가 또 필요하면)
접속, 요청, 응답, 끊음
(무엇인가 또 필요하면)
접속, 요청, 응답, 끊음
* keepalive를 사용하면 일정시간 동안 네트웍 끊음을 방지하고 다음 요청을 보낼 수 있음
11. Cookie :
HTTP Server가 Client에게 요청하는
작은 기록 정보
Server to Client : “Set-Cookie:User=1024”
Client to Server : “Cookie:User=1024”
12. All Input is Evil
(모든 입력은 악랄함)
평범한 유저 : “Cookie:User=1024”
악성 유저 : “Cookie:User=1246”
“Cookie:User=1247”
14. HTTP Session
고유한 값을 사용하여 Client를 구분하고,
서버에는 고유한 값과 매칭된 값을 저장
고유한 값 예제 : 88qtlekagmmap8ir3denn3ogu4
17. 유일한 값을 서버에서 할당,
“88qtlekagmmap8ir3denn3ogu4”
Client를 구분하는 용도로 사용.
21. HOW TO SAVE THE PRINCESS IN 8 PROGRAMMING LANGUAGES
https://toggl.com/programming-princess
23. 시스템을 통째로 들어내고 새로 작성한 후
PHP ~2016.X.09 23:59
Django 2016.X.10 00:00~
이래도 될까?
28. 로그인 연동은 어떻게?
일단 시작은 가볍게!
PHP와 Django간 연동
/var/lib/php5 내 session 파일을 이용
40. PHP
use AwsDynamoDbDynamoDbClient;
use AwsDynamoDbSessionHandler;
$dynamodbclient = new DynamoDbClient([
'region' => $DYNAMO_REGION,
'version' => 'latest',
'credentials' => [
'key' => $DYNAMO_KEY,
'secret' => $DYNAMO_SECRET,
],
]);
$sessionHandler = SessionHandler::fromClient($dynamodbclient, [
'table_name' => $DYNAMO_TABLE,
'session_lifetime' => 3600,
'locking_strategy' => 'pessimistic'
]);
$sessionHandler->register();
41. Python Django
_awssession = boto3.session.Session( DYNAMODB_ACCESSKEY, DYNAMODB_SECRETKEY,
region_name=DYNAMODB_REGION)
_dynamodb = _awssession.client('dynamodb')
_res = _dynamodb.get_item( TableName = DYNAMODB_TABLE, Key = { 'id':{'S':'PHPSESSID_'+session_key}})
_session_contents = _res['Item']['data']['S'].encode( DEFAULT_ENCODING_PHP_SESSION_FILE )
_session_expire = int( _res['Item']['expires']['N'].encode( DEFAULT_ENCODING_PHP_SESSION_FILE) )
if _session_expire < int( time.time() ):
raise AuthProcessException('SESSION_EXPIRED')
session_dict = phpserialize.loads(session_contents)
44. IAM을 통한 Access 제어
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": “Stmt14?????????”,
"Effect": "Allow",
"Action": [
"dynamodb:*"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": [
“52.???.???.???/32”,
"52.???.???.???/32"
]
}
},
"Resource": [
“arn:aws:dynamodb:ap-northeast-2:????????????:table/TABLENAME”
]
}
]
}