Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

3,578 views

Published on

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

Published in: Technology
  • Be the first to comment

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

  1. 1. 유연하게 확장할 수 있는 PHP 웹 개발 이야기 용영환 PHPKorea http://xenonix.com 2014.11.08 Session 1-5 XECon + PHPFest 2014
  2. 2. 유연하게 확장한다? 2014.11.08 Session 1-5 XECon + PHPFest 2014
  3. 3. 2014.11.08 Session 1-5 XECon + PHPFest 2014 http://sports.donga.com/3/all/20110317/35666621/3
  4. 4. 확장이 필요한 경우라면 일하는 사람이 늘었거나 돈 내는 사람이 늘었거나. 2014.11.08 Session 1-5 XECon + PHPFest 2014
  5. 5. 일하는 사람만 늘었다면… 미안하다!!! 2014.11.08 Session 1-5 XECon + PHPFest 2014
  6. 6. 미안하지만 어찌됐든 일은 해야 한다. 2014.11.08 Session 1-5 XECon + PHPFest 2014
  7. 7. 돈 내는 사람이 늘었다면… 2014.11.08 Session 1-5 XECon + PHPFest 2014
  8. 8. 서버에 장애가 나도 일단 땡큐여서 미안하다!!! 2014.11.08 Session 1-5 XECon + PHPFest 2014
  9. 9. 서비스가 성장함에 따라 유연하게 확장하는 길목을 2014.11.08 Session 1-5 XECon + PHPFest 2014
  10. 10. 세 가지로 나눠 보면 인간 + 프로그램 + 시스템 2014.11.08 Session 1-5 XECon + PHPFest 2014
  11. 11. 처음부터 다 대응하면 좋겠지만… 2014.11.08 Session 1-5 XECon + PHPFest 2014
  12. 12. 다음 대응 단계를 알고 준비하고 있으면 좋을 것 같습니다. 2014.11.08 Session 1-5 XECon + PHPFest 2014
  13. 13. 초기 개발자 1명? 2014.11.08 Session 1-5 XECon + PHPFest 2014
  14. 14. 그리고 우리는 돈이 없다. 2014.11.08 Session 1-5 XECon + PHPFest 2014
  15. 15. 그래서, 가볍게 시작합니다. 서버 1 대 = 웹 + DB 2014.11.08 Session 1-5 XECon + PHPFest 2014
  16. 16. mysql_connect ( “127.0.0.1” …); 2014.11.08 Session 1-5 XECon + PHPFest 2014
  17. 17. 2014.11.08 Session 1-5 XECon + PHPFest 2014 이용자
  18. 18. 웹 서버 <분리> DBMS 2014.11.08 Session 1-5 XECon + PHPFest 2014
  19. 19. 2014.11.08 Session 1-5 XECon + PHPFest 2014 웹 서버 DBMS
  20. 20. mysql_connect ( “192.168.0.100” …); 2014.11.08 Session 1-5 XECon + PHPFest 2014
  21. 21. OPcache 2014.11.08 Session 1-5 XECon + PHPFest 2014
  22. 22. 2014.11.08 Session 1-5 XECon + PHPFest 2014 이용자
  23. 23. 정적 파일과 동적 파일 분리 2014.11.08 Session 1-5 XECon + PHPFest 2014
  24. 24. function getImgUrl($path) { return $path; } 2014.11.08 Session 1-5 XECon + PHPFest 2014
  25. 25. <img src=“ <?php echo getImgUrl(‘/hello.png’) ?> ” /> 2014.11.08 Session 1-5 XECon + PHPFest 2014
  26. 26. 2014.11.08 Session 1-5 XECon + PHPFest 2014 웹 서버 DBMS 이미지 웹 서버
  27. 27. function getImgUrl($path) { return ‘http://img.phpk.org’.$path; } 2014.11.08 Session 1-5 XECon + PHPFest 2014
  28. 28. ob_start( ); 미리 HTML 파일로 생성 2014.11.08 Session 1-5 XECon + PHPFest 2014
  29. 29. 2014.11.08 Session 1-5 XECon + PHPFest 2014 이용자
  30. 30. 웹 서버 추가 1 + 1 = 2 대 2014.11.08 Session 1-5 XECon + PHPFest 2014
  31. 31. 2014.11.08 Session 1-5 XECon + PHPFest 2014 웹 서버 DBMS 웹 서버
  32. 32. 이렇게 확장하면 참 좋겠습니다만… 2014.11.08 Session 1-5 XECon + PHPFest 2014
  33. 33. 2014.11.08 Session 1-5 XECon + PHPFest 2014 웹 서버 DBMS 웹 서버
  34. 34. 2014.11.08 Session 1-5 XECon + PHPFest 2014 웹 서버 DBMS 웹 서버 L4 스위치
  35. 35. 2014.11.08 Session 1-5 XECon + PHPFest 2014 웹 서버 DBMS 웹 서버 프록시 서버
  36. 36. 2014.11.08 Session 1-5 XECon + PHPFest 2014 이용자
  37. 37. 웹 서버 추가 1 + 1 + 1 = 3 대 2014.11.08 Session 1-5 XECon + PHPFest 2014
  38. 38. 2014.11.08 Session 1-5 XECon + PHPFest 2014 웹 서버 웹 서버 DBMS 웹 서버 프록시 서버
  39. 39. 2014.11.08 Session 1-5 XECon + PHPFest 2014
  40. 40. 이제 안정화가 된 것 같으니 개발자를 구해봅니다. 2014.11.08 Session 1-5 XECon + PHPFest 2014
  41. 41. 2014.11.08 Session 1-5 XECon + PHPFest 2014 개발자
  42. 42. 협업 개발 환경 필요 2014.11.08 Session 1-5 XECon + PHPFest 2014
  43. 43. 이슈 트래킹 시스템 소스 저장소, 문서 저장소, 개발 서버, IDE, 소스 리뷰, 통일된 빌드 환경 2014.11.08 Session 1-5 XECon + PHPFest 2014
  44. 44. 이슈 트래킹 시스템 JIRA? Mantis? 지금은 그냥 Yobi 2014.11.08 Session 1-5 XECon + PHPFest 2014
  45. 45. 소스 저장소 SVN + GIT CVS는 요즘 안씁니다. 2014.11.08 Session 1-5 XECon + PHPFest 2014
  46. 46. 문서 저장소 Confluence 지금은 그냥 NAS 2014.11.08 Session 1-5 XECon + PHPFest 2014
  47. 47. 개발 서버 CentOS 가상머신 or 성능 좋은 개발서버 한대 2014.11.08 Session 1-5 XECon + PHPFest 2014
  48. 48. 2014.11.08 Session 1-5 XECon + PHPFest 2014 개발자 PC 개발자 PC 개발자 PC 개발자 PC 개발 서버 개발 서버 개발 서버 개발 서버 가상머신 개발서버
  49. 49. 2014.11.08 Session 1-5 XECon + PHPFest 2014 개발 서버 개발자 PC 개발자 PC 개발자 PC 개발자 PC
  50. 50. IDE 이클립스 PDT 2014.11.08 Session 1-5 XECon + PHPFest 2014
  51. 51. 장점 : 소스 저장소에서 Checkout 만 받으면 동일한 코드 환경이 유지 2014.11.08 Session 1-5 XECon + PHPFest 2014
  52. 52. 통일된 빌드 환경 현재 Ant 조만간 Maven 2014.11.08 Session 1-5 XECon + PHPFest 2014
  53. 53. 2014.11.08 Session 1-5 XECon + PHPFest 2014 개발 서버 개발자 PC 개발자 PC 개발자 PC 개발자 PC
  54. 54. 빌드 프로그램을 사용하면 PHP 프로젝트를 ZIP 같은 파일로 패키징 할 수 있습니다. 2014.11.08 Session 1-5 XECon + PHPFest 2014
  55. 55. 패키징을 하면 배포가 수월하다. 2014.11.08 Session 1-5 XECon + PHPFest 2014
  56. 56. www.php-maven.org 2014.11.08 Session 1-5 XECon + PHPFest 2014
  57. 57. 개발자를 뽑았으니 뭔가를 더 만들겠죠. 2014.11.08 Session 1-5 XECon + PHPFest 2014
  58. 58. 2014.11.08 Session 1-5 XECon + PHPFest 2014 기능
  59. 59. 2014.11.08 Session 1-5 XECon + PHPFest 2014 웹 서버 웹 서버 DBMS 웹 서버
  60. 60. 2014.11.08 Session 1-5 XECon + PHPFest 2014 웹 서버 웹 서버 DBMS 웹 서버 DBMS
  61. 61. 2014.11.08 Session 1-5 XECon + PHPFest 2014 웹 서버 웹 서버 DBMS 웹 서버 DBMS
  62. 62. 라운드 로빈 $db_no = rand(0,1); mysql_connect ( $db [ $db_no ] ,…); 2014.11.08 Session 1-5 XECon + PHPFest 2014
  63. 63. 2014.11.08 Session 1-5 XECon + PHPFest 2014 이용자
  64. 64. 2014.11.08 Session 1-5 XECon + PHPFest 2014 웹 서버 웹 서버 DBMS 웹 서버 DBMS 웹 서버 DBMS
  65. 65. 2014.11.08 Session 1-5 XECon + PHPFest 2014 웹 서버 웹 서버 DBMS 웹 서버 DBMS 웹 서버 DBMS 프록시 서버
  66. 66. mysql_connect ( “192.168.0.99” …); 2014.11.08 Session 1-5 XECon + PHPFest 2014
  67. 67. 2014.11.08 Session 1-5 XECon + PHPFest 2014
  68. 68. Memcached 같은 메모리 캐시 2014.11.08 Session 1-5 XECon + PHPFest 2014
  69. 69. 이용자를 위한 맞춤형 정보가 있다면 2014.11.08 Session 1-5 XECon + PHPFest 2014
  70. 70. 로그인을 어떻게 유지할 것인가 2014.11.08 Session 1-5 XECon + PHPFest 2014
  71. 71. 방법 1 2014.11.08 Session 1-5 XECon + PHPFest 2014
  72. 72. 2014.11.08 Session 1-5 XECon + PHPFest 2014 웹 서버 웹 서버 DBMS 웹 서버 DBMS 웹 서버 DBMS 프록시 서버 세션 DB
  73. 73. 방법 2 2014.11.08 Session 1-5 XECon + PHPFest 2014
  74. 74. 쿠키를 직접 이용한다. 2014.11.08 Session 1-5 XECon + PHPFest 2014
  75. 75. 이용자 서버를 분리 2014.11.08 Session 1-5 XECon + PHPFest 2014
  76. 76. 2014.11.08 Session 1-5 XECon + PHPFest 2014 DBMS 웹 서버 프록시 서버 user.phpk.org DBMS
  77. 77. 2014.11.08 Session 1-5 XECon + PHPFest 2014 user1 DBMS user2 DBMS
  78. 78. 자신의 “이용자 서버”가 어디인지 어떻게 아는가 2014.11.08 Session 1-5 XECon + PHPFest 2014
  79. 79. $_SESSION[“user_server”] = “user1”; 2014.11.08 Session 1-5 XECon + PHPFest 2014
  80. 80. 회원들에게 이메일 발송을 해야한다면… 2014.11.08 Session 1-5 XECon + PHPFest 2014
  81. 81. 2014.11.08 Session 1-5 XECon + PHPFest 2014 PHP Worker MQ SMTP 비동기
  82. 82. MQ ActiveMQ RabbitMQ ZeroMQ … 2014.11.08 Session 1-5 XECon + PHPFest 2014
  83. 83. PHP 프로젝트의 기능 분리 2014.11.08 Session 1-5 XECon + PHPFest 2014
  84. 84. PHP 코드에서 컨트롤러를 분리하면 데이터 처리 부분을 분리할 수 있다. 2014.11.08 Session 1-5 XECon + PHPFest 2014
  85. 85. 2014.11.08 Session 1-5 XECon + PHPFest 2014
  86. 86. 플러그인 방식? 2014.11.08 Session 1-5 XECon + PHPFest 2014
  87. 87. class HelloModule { } 2014.11.08 Session 1-5 XECon + PHPFest 2014
  88. 88. Interface Module{ public function run(); } 2014.11.08 Session 1-5 XECon + PHPFest 2014
  89. 89. $moduleList[ ] = ‘HelloModule’; 2014.11.08 Session 1-5 XECon + PHPFest 2014
  90. 90. foreach ( $moduleList as $module ) $module->run(); 2014.11.08 Session 1-5 XECon + PHPFest 2014
  91. 91. API 방식? 2014.11.08 Session 1-5 XECon + PHPFest 2014
  92. 92. 2014.11.08 Session 1-5 XECon + PHPFest 2014 DBMS 웹 서버 프록시 서버 API 웹 서버 JSON
  93. 93. AJAX 방식? 2014.11.08 Session 1-5 XECon + PHPFest 2014
  94. 94. 데이터 객체의 분리 2014.11.08 Session 1-5 XECon + PHPFest 2014
  95. 95. class ArticleDAO extends DB { } 2014.11.08 Session 1-5 XECon + PHPFest 2014
  96. 96. DB 객체가 DB 연결을 담당한다. 2014.11.08 Session 1-5 XECon + PHPFest 2014
  97. 97. 이렇게 컨트롤러를 분리하면 테스트가 가능하다. 2014.11.08 Session 1-5 XECon + PHPFest 2014
  98. 98. PHP UnitTest 2014.11.08 Session 1-5 XECon + PHPFest 2014
  99. 99. 2014.11.08 Session 1-5 XECon + PHPFest 2014
  100. 100. 2014.11.08 Session 1-5 XECon + PHPFest 2014
  101. 101. 2014.11.08 Session 1-5 XECon + PHPFest 2014 Front-End PHP Back-End PHP
  102. 102. 2014.11.08 Session 1-5 XECon + PHPFest 2014 이용자
  103. 103. 2014.11.08 Session 1-5 XECon + PHPFest 2014 웹 서버 Nginx Cache 프록시 서버
  104. 104. 2014.11.08 Session 1-5 XECon + PHPFest 2014 웹 서버 FestCGI PHP/Hack 서버 DBMS
  105. 105. 2014.11.08 Session 1-5 XECon + PHPFest 2014

×