유연하게 확장할 수 있는 PHP 웹 개발 이야기

105
유연하게 확장할 있는 PHP 개발 이야기 용영환 PHPKorea http://xenonix.com 2014.11.08 Session 1-5 XECon + PHPFest 2014

description

XECon + PHPFest 2014 발표 자료입니다.

Transcript of 유연하게 확장할 수 있는 PHP 웹 개발 이야기

Page 1: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

유연하게 확장할 수 있는

PHP 웹 개발 이야기

용영환

PHPKorea

http://xenonix.com

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 2: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

유연하게 확장한다?

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 3: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

http://sports.donga.com/3/all/20110317/35666621/3

Page 4: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

확장이 필요한 경우라면

일하는 사람이 늘었거나

돈 내는 사람이 늘었거나.

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 5: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

일하는 사람만 늘었다면…

미안하다!!!

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 6: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

미안하지만

어찌됐든

일은 해야 한다.

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 7: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

돈 내는 사람이 늘었다면…

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 8: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

서버에 장애가 나도

일단

땡큐여서 미안하다!!!

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 9: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

서비스가 성장함에 따라

유연하게 확장하는

길목을

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 10: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

세 가지로 나눠 보면

인간 + 프로그램 + 시스템

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 11: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

처음부터 다 대응하면

좋겠지만…

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 12: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

다음 대응 단계를

알고 준비하고 있으면

좋을 것 같습니다.

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 13: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

초기

개발자 1명?

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 14: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

그리고

우리는

돈이 없다.

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 15: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

그래서, 가볍게 시작합니다.

서버 1 대 = 웹 + DB

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 16: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

mysql_connect

( “127.0.0.1” …);

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 17: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

이용자

Page 18: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

웹 서버 <분리> DBMS

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 19: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

웹 서버

DBMS

Page 20: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

mysql_connect

( “192.168.0.100” …);

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 21: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

OPcache

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 22: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

이용자

Page 23: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

정적 파일과

동적 파일 분리

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 24: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

function getImgUrl($path)

{

return $path;

}

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 25: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

<img src=“

<?php echo

getImgUrl(‘/hello.png’)

?>

” />

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 26: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

웹 서버

DBMS

이미지 웹 서버

Page 27: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

function getImgUrl($path)

{

return

‘http://img.phpk.org’.$path;

}

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 28: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

ob_start( );

미리 HTML 파일로 생성

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 29: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

이용자

Page 30: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

웹 서버 추가

1 + 1 = 2 대

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 31: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

웹 서버

DBMS

웹 서버

Page 32: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

이렇게

확장하면

참 좋겠습니다만…

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 33: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

웹 서버

DBMS

웹 서버

Page 34: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

웹 서버

DBMS

웹 서버

L4 스위치

Page 35: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

웹 서버

DBMS

웹 서버

프록시 서버

Page 36: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

이용자

Page 37: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

웹 서버 추가

1 + 1 + 1 = 3 대

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 38: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

웹 서버 웹 서버

DBMS

웹 서버

프록시 서버

Page 39: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 40: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

이제

안정화가 된 것 같으니

개발자를 구해봅니다.

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 41: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

개발자

Page 42: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

협업 개발 환경 필요

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 43: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

이슈 트래킹 시스템

소스 저장소, 문서 저장소,

개발 서버, IDE, 소스 리뷰,

통일된 빌드 환경

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 44: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

이슈 트래킹 시스템

JIRA? Mantis?

지금은 그냥 Yobi

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 45: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

소스 저장소

SVN + GIT

CVS는 요즘 안씁니다.

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 46: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

문서 저장소

Confluence

지금은 그냥 NAS

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 47: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

개발 서버

CentOS 가상머신

or

성능 좋은 개발서버 한대

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 48: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

개발자 PC

개발자 PC

개발자 PC

개발자 PC

개발 서버 개발 서버

개발 서버 개발 서버

가상머신 개발서버

Page 49: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

개발 서버

개발자 PC

개발자 PC

개발자 PC

개발자 PC

Page 50: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

IDE

이클립스 PDT

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 51: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

장점 :

소스 저장소에서

Checkout 만 받으면

동일한 코드 환경이 유지

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 52: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

통일된 빌드 환경

현재 Ant

조만간 Maven

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 53: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

개발 서버

개발자 PC

개발자 PC

개발자 PC

개발자 PC

Page 54: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

빌드 프로그램을 사용하면

PHP 프로젝트를

ZIP 같은 파일로 패키징

할 수 있습니다.

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 55: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

패키징을 하면

배포가 수월하다.

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 56: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

www.php-maven.org

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 57: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

개발자를 뽑았으니

뭔가를 더 만들겠죠.

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 58: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

기능

Page 59: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

웹 서버 웹 서버

DBMS

웹 서버

Page 60: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

웹 서버 웹 서버

DBMS

웹 서버

DBMS

Page 61: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

웹 서버 웹 서버

DBMS

웹 서버

DBMS

Page 62: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

라운드 로빈

$db_no = rand(0,1);

mysql_connect

( $db [ $db_no ] ,…);

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 63: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

이용자

Page 64: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

웹 서버 웹 서버

DBMS

웹 서버

DBMS

웹 서버

DBMS

Page 65: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

웹 서버 웹 서버

DBMS

웹 서버

DBMS

웹 서버

DBMS

프록시 서버

Page 66: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

mysql_connect

( “192.168.0.99” …);

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 67: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 68: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

Memcached 같은

메모리 캐시

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 69: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

이용자를 위한

맞춤형 정보가 있다면

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 70: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

로그인을

어떻게 유지할 것인가

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 71: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

방법 1

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 72: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

웹 서버 웹 서버

DBMS

웹 서버

DBMS

웹 서버

DBMS

프록시 서버 세션 DB

Page 73: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

방법 2

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 74: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

쿠키를

직접 이용한다.

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 75: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

이용자 서버를 분리

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 76: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

DBMS

웹 서버

프록시 서버

user.phpk.org

DBMS

Page 77: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

user1

DBMS

user2

DBMS

Page 78: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

자신의 “이용자 서버”가

어디인지 어떻게 아는가

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 79: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

$_SESSION[“user_server”]

= “user1”;

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 80: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

회원들에게

이메일 발송을

해야한다면…

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 81: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

PHP

Worker MQ SMTP

비동기

Page 82: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

MQ

ActiveMQ

RabbitMQ

ZeroMQ …

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 83: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

PHP 프로젝트의

기능 분리

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 84: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

PHP 코드에서

컨트롤러를 분리하면

데이터 처리 부분을

분리할 수 있다.

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 85: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 86: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

플러그인 방식?

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 87: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

class HelloModule { }

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 88: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

Interface Module{

public function run();

}

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 89: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

$moduleList[ ] =

‘HelloModule’;

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 90: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

foreach (

$moduleList as $module

) $module->run();

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 91: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

API 방식?

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 92: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

DBMS

웹 서버

프록시 서버

API 웹 서버

JSON

Page 93: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

AJAX 방식?

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 94: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

데이터 객체의 분리

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 95: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

class ArticleDAO

extends DB { }

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 96: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

DB 객체가

DB 연결을

담당한다.

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 97: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

이렇게

컨트롤러를 분리하면

테스트가 가능하다.

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 98: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

PHP UnitTest

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 99: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 100: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

Page 101: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

Front-End PHP

Back-End PHP

Page 102: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

이용자

Page 103: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

웹 서버

Nginx Cache

프록시 서버

Page 104: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014

웹 서버

FestCGI PHP/Hack

서버 DBMS

Page 105: 유연하게 확장할 수 있는 PHP 웹 개발 이야기

2014.11.08 Session 1-5 XECon + PHPFest 2014