SlideShare ist ein Scribd-Unternehmen logo
1 von 86
Downloaden Sie, um offline zu lesen
네임스페이스, 트레이트, 클로저부터 모범 사례와 최신 도구까지
조시 록하트 지음
정병열 옮김
Modern
PHP
www.hanbit.co.kr
이것이
프로그래밍이다!
이것이 안드로이드다
진정한 안드로이드 개발자로
이끌어줍니다.
SDK 5.0 롤리팝 호환!
책만 보고,
동영상 강좌로도 만족하지 못했다면 Daum
카페 '슈퍼드로이드'에서 만나요
cafe.daum.net/superdroid
박성근 저 | 1,164쪽 | 45,000원
이것이 C언어다
세상에 없던 새로운
C언어 입문서 탄생!
삼성, LG에서 펼쳐졌던
전설의 명강의를 풀타임 동영상 강좌로!
이보다 더 확실한 방법은 없다, 칠판강의
전체 동영상 강좌 유투브 전격 공개!
http://goo.gl/tJK3Tu
서현우 저 | 708쪽 | 25,000원
이것이 자바다
가장 중요한 프로그래밍 언어를 하나
배워야 한다면, 결론은 자바다!
중급 개발자로 나아가기 위한 람다식,
JavaFX, NIO 수록
자바의 모든 것을 알려주는 인터넷 강의
궁금한 것은 카페에서!
cafe.naver.com/thisisjava
신용권 저 | 1,224쪽 | 30,000원
저자직강동영상 제공!
모던 웹을 위한
JavaScript +
jQuery 입문
www.hanbit.co.kr
지금은
모던 웹 시대!
HTML5 분야 부동의 1위 도서
HTML5 표준안 확정에 맞춘 완전 개정판의 귀환!
HTML5 권고안과 최신 웹 브라우저 환경 대응
윤인성 저 | 624쪽 | 30,000원
모던 웹 디자인을 위한
HTML5 +
CSS3 입문
자바스크립트에서 제이쿼리, 제이쿼리 모바일까지
한 권으로 끝낸다!
시대의 흐름에 맞춰 다시 쓴 자바스크립트 교과서
윤인성 저 | 980쪽 | 32,000원
페이스북, 월마트, 링크드인은 왜
Node.js를 선택했는가?
이 물음에 대한 답은 Node.js가 보여주는 빠른 처리 능력 때문이다.
윤인성 저 | 484쪽 | 25,000원
모던 웹을 위한
Node.js
프로그래밍
필요한 것만 배워
바로 현장에서 쓰는 HTML5
순서대로 읽으며 실습할 수 있는 HTML5 자습서
김상형 저 | 700쪽 | 32,000원
HTML5 +
CSS3 정복
표지 동물은 호주검은머리따오기(학명: Threskiornis spinicollis)다. 오스트레일리아, 뉴기니,
인도네시아 일부 지역에 서식한다.
호주검은머리따오기는 75cm까지 자라는 대형 조류다. 성체의 목에 나타나는 독특하고 뻣뻣한 깃
털에서 밀짚따오기straw-necked ibisz라는 영문명이 유래됐으며, 길고 구부러진 부리로 물속에서 곤충,
연체 동물, 개구리 등을 잡아낼 수 있다. 경작지에서는 농작물에 해를 입힐 수 있는 벌레나 메뚜
기, 귀뚜라미 등을 잡아먹기 때문에 농부들이 반기는 새다.
이 새는 떠돌이 생활을 하며 무리를 지어 서식지를 옮겨 다니는데, 얕은 담수성 습지나 인공적으
로 경작된 목초지, 늪지와 산호 지대의 가장자리를 좋아한다. 번식기에는 나뭇가지나 갈대를 모
아 물가의 나무 위에 큰 컵 모양으로 둥지를 틀며 종종 호주흰따오기와 함께 둥지 군집을 이룬다고 알려져 있다. 이런 습성 탓
에, 앙상한 나무의 높은 가지에 서서 하늘을 배경으로 뚜렷한 실루엣을 남기는 장면을 쉽게 목격할 수 있다.
오라일리 책 표지에 등장하는 동물은 대부분 멸종 위기에 처해있으며 모두 세계적으로 중요한 가치를 지닌다. 이들을 돕는 방
법을 알아보려면 http://animals.oreilly.com에 방문하기 바란다.
표지 그림은 『Woods Illustrated Natural History』에서 가져왔다.
Modern PHP :
네임스페이스, 트레이트, 클로저부터 모범 사례와 최신 도구까지
초판발행 2015년 10월 20일
지은이 조시 록하트 / 옮긴이 정병열 / 펴낸이 김태헌
펴낸곳 한빛미디어 (주) / 주소 서울시 마포구 양화로 7길 83 한빛미디어(주) IT출판부
전화 02 – 325 – 5544 / 팩스 02 – 336 – 7124
등록 1999년 6월 24일 제10 – 1779호 / ISBN 978 – 89 – 6848 – 225 – 0 93000
총괄 배용석 / 책임편집 최현우 / 기획 이복연, 강은희 / 편집 홍원규
디자인 강은영
영업 김형진, 김진불, 조유미 / 마케팅 박상용, 송경석, 서은옥 / 제작 박성우
이 책에 대한 의견이나 오탈자 및 잘못된 내용에 대한 수정 정보는 한빛미디어(주)의 홈페이지나 아래 이메일로
알려주십시오. 잘못된 책은 구입하신 서점에서 교환해 드립니다. 책값은 뒤표지에 표시되어 있습니다.
한빛미디어 홈페이지 www.hanbit.co.kr / 이메일 ask@hanbit.co.kr
Published by HANBIT Media, Inc. Printed in Korea
Copyright © 2015 O’Reilly Media & HANBIT Media, Inc. Authorized translation of the English
edition of Modern PHP ISBN: 9781491905012 © 2015 Josh Lockhart. This translation is to be
published and sold by permission of O’Reilly Media, Inc., the owner of all rights to publish and sell
the same.
이 책의 저작권은 오라일리와 한빛미디어 (주)에 있습니다.
저작권법에 의해 보호를 받는 저작물이므로 무단 복제 및 무단 전재를 금합니다.
지금 하지 않으면 할 수 없는 일이 있습니다.
책으로 펴내고 싶은 아이디어나 원고를 메일 ( writer@hanbit.co.kr ) 로 보내주세요.
한빛미디어(주)는 여러분의 소중한 경험과 지식을 기다리고 있습니다.
| 표지 설명 |
로럴을 위해
10
처음으로 실무에 PHP를 사용했던 때는 2002년이었다. 한 중소 규모의 웹 서비스 개발을 맡았
을 때였는데, 처음에는 서블릿으로 개발할 계획이었지만 몇 가지 이유로 최종 기획 단계에서
PHP로 결정됐다. 사이트 전체를 PHP로 개발하는 일은 처음이었던지라 우려도 있었지만 막상
작업해보니 Perl CGI나 서블릿을 사용하는 것보다 쉽고 빠르게 사이트를 구축할 수 있어 새삼
놀랐던 기억이 난다. PHP의 풍부한 내장 라이브러리와 유연한 출력 제어 능력 덕분이었다.
아닌 게 아니라 그즈음 우리나라에서는 이미 PHP가 빠른 속도로 자리를 잡아가고 있었다. 개
발 언어로서뿐만 아니라 호스팅 업체들이 주력으로 지원하는 언어로서도 각광받았다. 단기간
동안 호스팅 서비스 거의 대부분에 PHP가 탑재됐고 한쪽에서는 다양한 PHP 웹 애플리케이션
들이 제작되고 공개됐다. 자생적으로 형성된 국내 커뮤니티 웹 사이트가 대부분 이런 PHP 웹
프로그램들을 이용해 구축됐다. 이 시기에 큰 인기를 끌었던 PuryBBS, 제로보드4 등은 이후
에 나온 테터툴즈나 XE 같은 걸출한 프로젝트의 모태이기도 하다. 이런 면에서 보자면 우리나
라에서 PHP가 저변을 확대하는 과정은 국내 인터넷 문화의 폭발적 확장 과정과 어느 정도 궤
를 같이 한다고도 볼 수 있다.
PHP 같은 고참 스크립트 언어가 아직까지 각종 통계나 인기 순위에서 상위권을 차지하는 데
에는 이유가 있다. 나는 PHP가 지닌 매력의 본질이 자유로운 포용력이라고 생각한다. PHP는
끊임없이 언어 구조를 개선하고 유수의 라이브러리들을 통합하는 한편 스크립트 언어의 태생
적 한계를 극복하려는 시도도 멈추지 않았다. PHP 진영은 늘 다양한 프로젝트로 북적거리는
활기찬 분위기를 이어왔다. 여기에 수많은 개발자들의 활발한 참여가 더해져 PHP 개발 생태
계는 나날이 성숙해지고 있다. 특히 최근 몇 년간 PHP는 탄생 이후 가장 역동적인 변화의 시
기를 겪고 있다고 해도 과언이 아니다. 페이스북과 Hack으로 대변되는 외적 요인을 촉매로 언
어 자체의 근간부터 재정립되고 있으며, 그 결과 PHP 7이라는 또 한번의 큰 도약을 목전에 두
고 있다.
국내에서는 PHP가 대형 솔루션을 개발하기에 적합하지 않다거나 보안에 취약한 언어라고 생
각하는 이들도 있다. 역설적이게도 이런 부정적인 인식은 PHP가 지닌 강점에 기인한다. 입문
옮긴이의 글
11
하기 쉽고 빠르게 개발할 수 있어 단기간에 많은 프로젝트에 도입됐지만 그에 반해 엔터프라이
즈급 솔루션 개발에 사용되거나 다양한 고도화 작업에 심도있게 활용된 사례가 드물기 때문이
다. 스크립트 언어의 특성상 소스코드가 공개되어 있다는 점도 기피 사유 중 하나였으며 국내
SI 프로젝트에 채택되는 플랫폼 구성이 다소 획일적이라는 실정도 한 몫 거들었다. 그러나 이
런 인식과는 달리 현재 PHP는 방대한 솔루션을 많은 개발자가 공동으로 작업할 수 있는 제반
환경을 충분히 갖추고 있다. 의존성과 패키징에 대한 표준이 정립됐으며 이들을 관리할 수 있
는 우수한 도구가 등장했고, 지속적인 통합과 자동화된 테스팅 또한 가능해졌다. 뿐만 아니라
완성도 높은 풀스택 프레임워크와 ORM, 강력한 템플릿 엔진들이 포진하고 있으며 셀 수 없이
많은 오픈소스 컴포넌트를 자유롭게 활용할 수 있다.
PHP의 기술적인 최신 동향과 그에 따른 모범 사례들에 대한 정보를 PHP 초심자나 다른 언어
개발자가 일목요연하게 열람하거나 편리하게 접할 수 있는 창구는 흔치 않다. 몇몇 선도적인
개발자들의 세미나와 블로그 기고만으로는 역부족이다. 특히나 최근 국내에는 PHP 관련 서적
들의 출간도 주춤한 편이어서 아쉬움이 더해가는 상황이었다. 『Modern PHP』는 이런 시점에
서 만난 가뭄의 단비 같은 책이다.
이 책은 ‘모던 PHP’라는 제목 그대로 PHP 언어의 최신 핵심 기능을 요점정리해줄 뿐만 아니
라 유머러스하고 친절한 설명과 이해하기 쉬운 예제를 통해 모범 사례와 발전된 개발 방법까지
제시해주는 실용서다. 저자인 조시 록하트는 유력 프레임워크의 개발자인 동시에 PHP에 대한
인식 제고를 위해 발벗고 나선 오피니언 리더로서, PHP에 대한 자신의 애정과 열정을 이 책에
고스란히 담아 놓았다. 또한 PHP 진영의 전반적인 근황에 대해 넓은 시각으로 잘 설명하고 있
어서 앞으로 공개될 PHP 7을 준비하는 데 있어서도 도움이 될만한 책이다.
PHP의 미래는 여전히 활짝 열려있고 잠재력 역시 무궁무진하다. 모쪼록 국내의 개발자들도
PHP의 짜릿한 변화의 순간에 기꺼이 동참하고 진보된 PHP를 온전히 활용할 수 있게 되기를
바라며, 그 과정에 이 책이 조금이나마 보탬이 될 수 있었으면 한다.
이 책이 나오기까지 도움을 주신 분들에게 진심으로 감사의 마음을 전하고 싶다. 먼저, 처음 번
12
역 의사를 전달했을 때 선뜻 기회를 제공해 준 한빛미디어 측에 감사드린다. 강은희 님과 최현
우 팀장님이 원고의 미숙한 부분을 명확히 짚어주고 적절한 가이드 라인을 제시해 준 덕분에
무사히 작업을 마무리할 수 있었다. 막히는 부분이 있을 때는 종종 주변에 도움을 구했다. 그
때마다 매번 새로운 시각과 다양한 아이디어로 생각의 물꼬를 틔워준 김재영 님에게도 감사드
린다. 마지막으로, 언제나 나를 지지하고 응원해주시는 부모님께 감사의 말씀을 드린다.
_2015년 10월 정병열
옮긴이 정병열 cloudshadow@gmail.com
연세대학교 세라믹 공학과를 졸업하고 개발자와 번역자로 활동하고 있다. 어린 시절 BASIC 언어를 통해 프로그래밍을 처음 경험
했으며 PC통신 시절에는 프로그래밍 관련 동호회에서 활동했다. 2000년대 초반부터 프로그래밍 언어와 플랫폼에 관계없이 다양
한 웹 사이트 및 솔루션 개발 프로젝트를 수행했으며 몇 년간은 리눅스 시스템 엔지니어로 근무하기도 했다. 분야를 가리지 않는 폭
넓은 관심사를 가지고 있으며 흥미를 느끼면 어떻게든 파고들어 습득하고 마는 성격의 소유자다. 현재는 취업포털 업체에서 다양한
업무를 수행하고 있다.
13
온라인에는 수없이 많은 PHP 튜토리얼이 있다. 이들 대부분은 이미 낡고 쓸모 없어진 지 오래
지만 불행히도 구글 검색 결과에 살아남아 여전히 참조자료로 활용된다. 이런 낡은 정보를 무
분별하게 받아들인 PHP 프로그래머는 자신도 모르는 사이에 느리고 보안에 취약한 PHP 애플
리케이션을 만들게 될 위험에 처한다. 나는 2013년에 이러한 문제를 인식했고, 그때 가졌던 문
제의식은 PHP The Right Way(http://www.phptherightway.com)를 시작하는 가장 큰 계기
가 됐다. PHP The Right Way는 PHP 프로그래머가 PHP 커뮤니티 권위자들이 제공하는 품
질 높은 최신 정보에 쉽게 접근할 수 있게 하려고 만든 것이다.
『Modern PHP』는 이와 같은 목표를 지향하는 나의 다음 시도다. 이 책은 참고서가 절대 아니
며 여러분과 내가 친근하고 재미있게 나눈 대화를 담은 기록과도 같다. 나는 최신 PHP 프로
그래밍 언어를 소개하는 한편, 나의 오픈소스 프로젝트와 일상 업무에서 매일 사용하는 최신
PHP 기술을 보여줄 것이다. 그리고 여러분이 최신 코딩 표준을 사용하여 자신의 컴포넌트와
라이브러리들을 PHP 커뮤니티에서 공유할 수 있도록 도울 것이다.
‘커뮤니티’라는 말이 되풀이되어 나올 것이다. 가끔 극적인 사건이 있긴 해도 PHP 커뮤니티는
대체로 프로그래머들에게 친근하고 유용하며 우호적이다. 만약 이 책에서 언급한 특정 내용에
대해 궁금해지면 자신의 지역 PHP 사용자 그룹에 가서 질문해보기 바란다. 여러분이 더 나은
PHP 프로그래머가 되도록 도와줄 개발자들은 얼마든지 가까이에 있을 것이다. 지역 PHP 사
용자 그룹은 당신이 이 책을 다 읽은 후에도 지속적으로 PHP 스킬을 향상할 수 있게 도와줄
귀중한 자원이다.
이 책에 대하여
시작하기에 앞서 몇 가지를 염두에 두었으면 한다.
첫째, 다양한 PHP 사용 방법을 이 책에서 모두 다루기에는 시간이 부족하다. 대신 나의 PHP
사용 방법을 보여줄 것이다. 독단적인 접근 방식임에 분명하지만, 나는 많은 PHP 개발자가 채
들어가며
14
택한 사례와 표준을 그대로 사용한다. 이 책에서 얻은 것들을 여러분의 프로젝트에 즉시 적용
할 수 있을 것이다.
둘째, 여러분이 변수와 조건문, 반복문 등에 익숙하다고 간주한다. PHP를 알아야 하는 것은
아니지만, 최소한 프로그래밍 기초 개념에 대한 기본 이해는 필요하다. 커피를 곁들여도 된다.
그 외의 모든 것은 내가 제공해줄 것이다.
셋째, 나는 여러분이 특정 운영체제를 사용한다고 간주하지 않는다. 하지만 앞으로 나올 코드
예제는 리눅스에서 작성한다. 배시Bash 명령어는 우분투용과 CentOS용을 함께 제공하며 일부
는 OS X에서도 실행할 수 있다. 만약 윈도우 사용자가 이 책의 예제 코드를 실행하고자 한다
면 가급적 리눅스 가상머신을 사용하기 바란다.
이 책의 구성
1부에서는 네임스페이스namespace, 제너레이터generator, 트레이트trait 같은 PHP의 새로운 기능을
설명한다. 모던 PHP 언어를 소개하고 여러분이 지금까지 몰랐을 수도 있는 기능을 선보인다.
2부에서는 PHP 애플리케이션에서 구현해야 할 모범 사례들을 알아본다. PSR에 대해 들어보
았을 것이다. 하지만 그것이 무엇인지, 어떻게 사용하는 것인지 온전하게 확신할 수 있는가?
사용자 입력의 위험을 제거하고 데이터베이스 쿼리를 안전하게 사용하는 방법을 알고 싶은가?
그렇다면 2부를 보라.
3부는 1부와 2부보다 더 기술적이다. 배포, 튜닝, 테스트 그리고 PHP 애플리케이션을 프로파
일링하는 방법을 알아본다. 카피스트라노Capistrano를 이용한 배포 전략을 세우고 PHP유닛PHPUnit
과 트래비스 CITravis CI 같은 테스팅 도구를 이야기한다. 그리고 PHP 애플리케이션의 성능을 높
이기 위한 PHP 튜닝 방법도 알아본다.
부록 A는 PHP-FPM 설치와 구성에 대해 단계별 안내를 제공한다.
15
부록 B는 프로덕션 서버에 유사하게 대응하는 로컬 개발 환경을 구축하는 방법을 설명한다. 또
한 신속한 구축에 도움을 줄 대안 도구로 베이그런트Vagrant, 퍼핏Puppet, 셰프Chef를 알아본다.
감사의 말
이 책은 나의 첫 책이다. 오라일리에서 『Modern PHP』 집필을 제안했을 때 나는 정말이지 흥
분과 두려움에 휩싸여버리고 말았다. 어깨춤이 절로 나올 정도였다. 오라일리가 집필을 제안하
다니, 굉장한 일이지 않은가! 기쁨도 잠시, 흥분을 가라앉히고 나는 스스로에게 정말 그렇게 많
은 양을 쓸 수 있을지 물었다. 책을 쓰는 것은 그리 만만한 작업이 아니기 때문이다.
물론, 즉시 “네”라고 말했다. 가족, 친구, 동료, 편집자, 나를 전적으로 지지해줄 독자들이 있었
기 때문에 기꺼이 『Modern PHP』를 쓰겠다고 할 수 있었다. 그들이 보내준 귀중한 조언에 감
사의 뜻을 밝히고 싶다. 이들이 아니었다면, 이 책은 절대로 나올 수 없었다.
우선, 오라일리 미디어의 담당 편집자 앨리슨 맥도날드(@allyatoreilly)에게 감사하고 싶다.
앨리는 친절하고, 비판적이고, 든든하며, 명석하다. 그녀는 내가 방향을 잃을 때마다 적절히 바
로 잡아주어야 할 정확한 때와 방법을 알고 있었다. 그녀는 내게 있어 최고의 편집자다.
또한 기술 검토를 해준 아담 페어홀름(@adamfairholm)과 에드 핀클러(@funkatron)에게
도 감사한다. 아담은 뉴프랭글드(https://www.newfangled.com)의 뛰어난 웹 개발자며, 뮤직
비디오 데이터베이스 웹 사이트 IMVDb(http://imvdb.com)의 개발자로 유명하다. 에드는 어
마어마한 PHP 실력과 개성적인 팟캐스트 /dev/hell(http://devhell.info), 오픈소싱 정신질환
캠페인Open Sourcing Mental Illness campaign (http://funkatron.com/osmi)으로 잘 알려져 있다. 아담과
에드는 내 초고의 멍청하고 비논리적이며 부정확한 부분들을 지적해주었다. 그들의 노골적이
고 정직한 피드백에 대해서는 어떠한 말로도 감사의 표현을 다 할 수 없다. 그들의 지도와 지혜
에 영원히 감사한다. 최종 원고에 실수나 오류가 있다면 그것은 전적으로 내 책임이다.
16
늘 나를 격려해준 뉴미디어 캠페인New Media Campaigns (http://www.newmediacampaigns.com)의
동료들 엘, 클레이, 크리스, 알렉스, 패트릭, 애슐리, 레니, 클레어, 토드, 파스칼, 헨리, 네이
선! 그리고 처음부터 끝까지 친절하게 격려해준 모든 이에게 고개 숙여 감사한다.
가장 중요한 나의 가족 로럴, 이선, 테사, 찰리, 리사, 글렌, 리즈에게 감사한다. 그들의 격려가
없었다면 절대로 이 책을 낼 수 없었을 것이다. 사랑스러운 나의 아내 로럴, 당신의 인내에 감
사한다. 밤 늦은 집필 작업 때문에 매번 카리부 커피Caribou Coffe1
에 동행해주고 주말에도 아내에
게 소홀했던 나를 이해해줘서 감사한다. 일정을 맞추고 지속적으로 동기부여할 수 있게 해준
것에 감사한다. 지금부터 영원토록 당신을 사랑하겠다.
_저자 조시 록하트
1	 역자주_ 커피숍 체인의 이름이다.
지은이 조시 록하트 Josh Lockhart
조시 록하트는 웹 애플리케이션과 API를 빠르게 개발할 수 있는 초소형 PHP 프레임워크 슬림Slim을 개발했다. 또한 전 세계 PHP
개발자들에게 모범 사례를 장려하고 양질의 정보를 제공하는 권장안으로 유명한 ‘PHP The Right Way’를 창안했으며 지금도 운
영하고 있다.
조시는 노스캐롤라이나주 칼버러에 위치한 풀-서비스 웹 디자인, 개발, 마케팅 에이전시 업체인 뉴미디어 캠페인(http://www.
newmediacampaigns.com/)에서 개발자로 일하고 있다. HTML, CSS, PHP, 자바스크립트, Bash와 다양한 콘텐츠 관리 프
레임워크를 이용한 맞춤 애플리케이션 만들기를 좋아한다. 2008년 노스캐롤라이나대학교 채플힐 캠퍼스 정보문헌학 과정을 수료
했으며 아내인 로럴과 함께 두 마리 개를 키우며 노스캐롤라이나주 채플힐에 거주하고 있다.
조시의 트위터(https://twitter.com/codeguy)를 팔로우하거나 깃허브(https://github.com/codeguy)에서 그의 오픈소스 프
로젝트들을 확인할 수 있다.
17
CONTENTS
		 옮긴이의 글 ��������������������������������������������������������������������������������������������������������������������
6
		 들어가며 ������������������������������������������������������������������������������������������������������������������������
9
PART 1 언어 기능
CHAPTER 1 새로운 PHP
	 1.1	과거 ����������������������������������������������������������������������������������������������������������������������������
27
	 1.2	현재 ����������������������������������������������������������������������������������������������������������������������������
28
	1.3	미래 ����������������������������������������������������������������������������������������������������������������������������
30
CHAPTER 2 기능
	2.1	네임스페이스 ����������������������������������������������������������������������������������������������������������������
31
		 2.1.1	네임스페이스를 사용하는 이유 ��������������������������������������������������������������������������������
33
		 2.1.2	선언 �������������������������������������������������������������������������������������������������������������������
34
		 2.1.3	임포트와 별칭 ������������������������������������������������������������������������������������������������������
35
		 2.1.4	유용한 팁 ������������������������������������������������������������������������������������������������������������
38
	2.2	인터페이스로 코딩하기 ���������������������������������������������������������������������������������������������������
40
	2.3	트레이트 ����������������������������������������������������������������������������������������������������������������������
45
		 2.3.1	트레이트를 사용하는 이유 ��������������������������������������������������������������������������������������
46
		 2.3.2	트레이트 생성 ������������������������������������������������������������������������������������������������������
47
		 2.3.3	트레이트 사용 ������������������������������������������������������������������������������������������������������
49
	2.4	제너레이터 �������������������������������������������������������������������������������������������������������������������
50
		 2.4.1	제너레이터 생성 ���������������������������������������������������������������������������������������������������
51
		 2.4.2	제너레이터 사용 ���������������������������������������������������������������������������������������������������
52
18
CONTENTS
	2.5	클로저 �������������������������������������������������������������������������������������������������������������������������
54
		 2.5.1	생성 �������������������������������������������������������������������������������������������������������������������
55
		 2.5.2	상태 등록 ������������������������������������������������������������������������������������������������������������
56
	2.6	젠드 오피캐시 ���������������������������������������������������������������������������������������������������������������
59
		 2.6.1	젠드 오피캐시 활성화 ��������������������������������������������������������������������������������������������
59
		 2.6.2	젠드 오피캐시 설정 �����������������������������������������������������������������������������������������������
61
		 2.6.3	젠드 오피캐시 사용 �����������������������������������������������������������������������������������������������
62
	2.7	내장 HTTP 서버 �����������������������������������������������������������������������������������������������������������
62
		 2.7.1	서버 실행 ������������������������������������������������������������������������������������������������������������
63
		 2.7.2	서버 설정 ������������������������������������������������������������������������������������������������������������
63
		 2.7.3	라우터 스크립트 ���������������������������������������������������������������������������������������������������
64
		 2.7.4	내장 서버 감지 �����������������������������������������������������������������������������������������������������
64
		 2.7.5	단점 �������������������������������������������������������������������������������������������������������������������
65
	2.8	다음 장에서 다룰 내용 ����������������������������������������������������������������������������������������������������
65
PART 2 모범 사례
CHAPTER 3 표준
	 3.1	PHP-FIG 구조대 ����������������������������������������������������������������������������������������������������������
70
	3.2	프레임워크 상호운용성 ���������������������������������������������������������������������������������������������������
70
		 3.2.1	인터페이스 ����������������������������������������������������������������������������������������������������������
71
		 3.2.2	오토로딩 �������������������������������������������������������������������������������������������������������������
71
		 3.2.3	코드 스타일 ���������������������������������������������������������������������������������������������������������
71
	3.3	PSR ���������������������������������������������������������������������������������������������������������������������������
72
	3.4	PSR-1: 기본 코드 스타일 �����������������������������������������������������������������������������������������������
73
	3.5	PSR-2: 엄격한 코드 스타일 ��������������������������������������������������������������������������������������������
74
19
	3.6	PSR-3: 로거 인터페이스 ������������������������������������������������������������������������������������������������
77
		 3.6.1	PSR-3 로거 작성 ������������������������������������������������������������������������������������������������
78
		 3.6.2	PSR-3 로거 사용 ������������������������������������������������������������������������������������������������
79
	3.7	PSR-4: 오토로더 ����������������������������������������������������������������������������������������������������������
80
		 3.7.1	왜 오토로더가 중요한가 �����������������������������������������������������������������������������������������
80
		 3.7.2	PSR-4 오토로더 전략 ������������������������������������������������������������������������������������������
81
		 3.7.3	PSR-4 오토로더 작성(을 하면 안 되는 이유) �������������������������������������������������������������
82
CHAPTER 4 컴포넌트
	 4.1	컴포넌트를 사용하는 이유 �����������������������������������������������������������������������������������������������
85
	4.2	컴포넌트란 무엇인가 ������������������������������������������������������������������������������������������������������
86
	4.3	컴포넌트 vs. 프레임워크 �������������������������������������������������������������������������������������������������
87
		 4.3.1	모든 프레임워크가 나쁜 것은 아니다 ������������������������������������������������������������������������
88
		 4.3.2	알맞은 도구를 사용하라 �����������������������������������������������������������������������������������������
89
	4.4	컴포넌트 선택 ���������������������������������������������������������������������������������������������������������������
90
		 4.4.1	쇼핑 �������������������������������������������������������������������������������������������������������������������
90
		 4.4.2	선택 �������������������������������������������������������������������������������������������������������������������
91
		 4.4.3	피드백 남기기 ������������������������������������������������������������������������������������������������������
92
	4.5	컴포넌트 사용 ���������������������������������������������������������������������������������������������������������������
92
		 4.5.1	컴포넌트 설치 ������������������������������������������������������������������������������������������������������
93
		 4.5.2	컴포넌트 사용법 ���������������������������������������������������������������������������������������������������
94
		 4.5.3	예제 프로젝트 ������������������������������������������������������������������������������������������������������
96
		 4.5.4	컴포저와 사설 저장소 ������������������������������������������������������������������������������������������
100
	4.6	컴포넌트 만들기 ����������������������������������������������������������������������������������������������������������
101
		 4.6.1	벤더와 패키지명 �������������������������������������������������������������������������������������������������
102
		 4.6.2	네임스페이스 �����������������������������������������������������������������������������������������������������
103
		 4.6.3	파일시스템 구성 �������������������������������������������������������������������������������������������������
103
20
CONTENTS
		 4.6.4	composer.json 파일 �����������������������������������������������������������������������������������������
104
		 4.6.5	README 파일 �������������������������������������������������������������������������������������������������
106
		 4.6.6	컴포넌트 구현 ����������������������������������������������������������������������������������������������������
107
		 4.6.7	버전 관리 ����������������������������������������������������������������������������������������������������������
109
		 4.6.8	패키지스트 등록 �������������������������������������������������������������������������������������������������
109
		 4.6.9	컴포넌트 사용 ����������������������������������������������������������������������������������������������������
111
CHAPTER 5 모범 사례
	 5.1	위험 제거, 유효성 검사, 예외 처리 �����������������������������������������������������������������������������������
114
		 5.1.1	입력값 위험 제거 ������������������������������������������������������������������������������������������������
114
		 5.1.2	유효성 검사 �������������������������������������������������������������������������������������������������������
118
		 5.1.3	출력 예외 처리 ���������������������������������������������������������������������������������������������������
119
	5.2	비밀번호 ��������������������������������������������������������������������������������������������������������������������
120
		 5.2.1	사용자 비밀번호를 절대 알 수 없게 할 것 ����������������������������������������������������������������
120
		 5.2.2	비밀번호에 절대 제한을 두지 말 것 ������������������������������������������������������������������������
120
		 5.2.3	사용자 비밀번호를 절대 이메일로 보내지 말 것 ��������������������������������������������������������
121
		 5.2.4	사용자 비밀번호를 bcrypt로 해시하라 �������������������������������������������������������������������
121
		 5.2.5	비밀번호 해싱 API ����������������������������������������������������������������������������������������������
122
		 5.2.6	PHP 5.5.0 이전의 비밀번호 해싱 API �������������������������������������������������������������������
127
	5.3	날짜, 시간, 시간대 ��������������������������������������������������������������������������������������������������������
128
		 5.3.1	기본 시간대 지정 ������������������������������������������������������������������������������������������������
128
		 5.3.2	DateTime 클래스 ����������������������������������������������������������������������������������������������
129
		 5.3.3	DateInterval 클래스 �������������������������������������������������������������������������������������������
130
		 5.3.4	DateTimeZone 클래스 ��������������������������������������������������������������������������������������
132
		 5.3.5	DatePeriod 클래스 ��������������������������������������������������������������������������������������������
133
		 5.3.6	nesbot/carbon 컴포넌트 �����������������������������������������������������������������������������������
134
	5.4	데이터베이스 ��������������������������������������������������������������������������������������������������������������
134
21
		 5.4.1	PDO 확장 ��������������������������������������������������������������������������������������������������������
135
		 5.4.2	데이터베이스 연결과 DSN �����������������������������������������������������������������������������������
135
		 5.4.3	준비된 구문 �������������������������������������������������������������������������������������������������������
138
		 5.4.4	쿼리 결과 ����������������������������������������������������������������������������������������������������������
140
		 5.4.5	트랜잭션 �����������������������������������������������������������������������������������������������������������
143
	5.5	멀티바이트 문자열 �������������������������������������������������������������������������������������������������������
147
		 5.5.1	문자 인코딩 �������������������������������������������������������������������������������������������������������
147
		 5.5.2	UTF-8 데이터 ��������������������������������������������������������������������������������������������������
148
	5.6	스트림 �����������������������������������������������������������������������������������������������������������������������
149
		 5.6.1	스트림 래퍼 �������������������������������������������������������������������������������������������������������
150
		 5.6.2	스트림 콘텍스트 �������������������������������������������������������������������������������������������������
153
		 5.6.3	스트림 필터 �������������������������������������������������������������������������������������������������������
154
		 5.6.4	사용자 정의 스트림 필터 ��������������������������������������������������������������������������������������
156
	5.7	오류와 예외 ����������������������������������������������������������������������������������������������������������������
159
		 5.7.1	예외 �����������������������������������������������������������������������������������������������������������������
160
		 5.7.2	예외 처리기 �������������������������������������������������������������������������������������������������������
164
		 5.7.3	오류 �����������������������������������������������������������������������������������������������������������������
165
		 5.7.4	오류 처리기 �������������������������������������������������������������������������������������������������������
167
		 5.7.5	개발 과정에서 오류와 예외 다루기 �������������������������������������������������������������������������
169
		 5.7.6	프로덕션 �����������������������������������������������������������������������������������������������������������
171
PART 3 배포, 테스팅, 튜닝
CHAPTER 6 호스팅
	 6.1	공유 서버 �������������������������������������������������������������������������������������������������������������������
177
	6.2	가상 사설 서버 ������������������������������������������������������������������������������������������������������������
178
22
CONTENTS
	6.3	전용 서버 �������������������������������������������������������������������������������������������������������������������
179
	6.4	PaaS ������������������������������������������������������������������������������������������������������������������������
179
	6.5	호스팅 선택 ����������������������������������������������������������������������������������������������������������������
180
CHAPTER 7 프로비저닝
	 7.1	목표 ��������������������������������������������������������������������������������������������������������������������������
182
	7.2	서버 설정 �������������������������������������������������������������������������������������������������������������������
182
		 7.2.1	최초 로그인 �������������������������������������������������������������������������������������������������������
183
		 7.2.2	소프트웨어 업데이트 �������������������������������������������������������������������������������������������
183
		 7.2.3	비루트 사용자 ����������������������������������������������������������������������������������������������������
184
		 7.2.4	SSH 키 쌍 인증 �������������������������������������������������������������������������������������������������
185
		 7.2.5	비밀번호 인증 및 루트 로그인 비활성화 ������������������������������������������������������������������
187
	7.3	PHP-FPM ����������������������������������������������������������������������������������������������������������������
188
		 7.3.1	설치 �����������������������������������������������������������������������������������������������������������������
188
		 7.3.2	전역 설정 ����������������������������������������������������������������������������������������������������������
189
		 7.3.3	풀 설정 �������������������������������������������������������������������������������������������������������������
190
	7.4	엔진엑스 ��������������������������������������������������������������������������������������������������������������������
193
		 7.4.1	설치 �����������������������������������������������������������������������������������������������������������������
193
		 7.4.2	가상 호스트 �������������������������������������������������������������������������������������������������������
193
	7.5	서버 프로비저닝 자동화 ������������������������������������������������������������������������������������������������
197
	7.6	서버 프로비저닝 위임 ���������������������������������������������������������������������������������������������������
197
	7.7	추가 자료 �������������������������������������������������������������������������������������������������������������������
198
	7.8	다음 장에서 다룰 내용 ��������������������������������������������������������������������������������������������������
198
CHAPTER 8 튜닝
	 8.1	php.ini 파일 ���������������������������������������������������������������������������������������������������������������
199
23
	8.2	메모리 �����������������������������������������������������������������������������������������������������������������������
200
	8.3	젠드 오피캐시 �������������������������������������������������������������������������������������������������������������
201
	8.4	파일 업로드 ����������������������������������������������������������������������������������������������������������������
203
	8.5	최대 실행 시간 ������������������������������������������������������������������������������������������������������������
204
	8.6	세션 처리 �������������������������������������������������������������������������������������������������������������������
205
	8.7	출력 버퍼링 ����������������������������������������������������������������������������������������������������������������
205
	8.8	리얼패스 캐시 �������������������������������������������������������������������������������������������������������������
206
	8.9	다음 장에서 다룰 내용 ��������������������������������������������������������������������������������������������������
206
CHAPTER 9 배포
	 9.1	버전 관리 �������������������������������������������������������������������������������������������������������������������
207
	9.2	배포 자동화 ����������������������������������������������������������������������������������������������������������������
208
		 9.2.1	단순하게 �����������������������������������������������������������������������������������������������������������
208
		 9.2.2	예측 가능하게 ����������������������������������������������������������������������������������������������������
208
		 9.2.3	가역적으로 ��������������������������������������������������������������������������������������������������������
208
	9.3	카피스트라노 ��������������������������������������������������������������������������������������������������������������
208
		 9.3.1	작동 �����������������������������������������������������������������������������������������������������������������
209
		 9.3.2	설치 �����������������������������������������������������������������������������������������������������������������
210
		 9.3.3	설정 �����������������������������������������������������������������������������������������������������������������
210
		 9.3.4	인증 �����������������������������������������������������������������������������������������������������������������
212
		 9.3.5	원격 서버 ����������������������������������������������������������������������������������������������������������
212
		 9.3.6	카피스트라노 훅 �������������������������������������������������������������������������������������������������
213
		 9.3.7	애플리케이션 배포 ����������������������������������������������������������������������������������������������
214
		 9.3.8	애플리케이션 되돌리기 ����������������������������������������������������������������������������������������
214
	9.4	참고 자료 �������������������������������������������������������������������������������������������������������������������
214
	9.5	다음 장에서 다룰 내용 ��������������������������������������������������������������������������������������������������
215
24
CONTENTS
CHAPTER 10 테스팅
	 10.1	테스트를 하는 이유 ������������������������������������������������������������������������������������������������������
217
	 10.2	테스트 시점 ���������������������������������������������������������������������������������������������������������������
218
		 10.2.1	개발 전 �������������������������������������������������������������������������������������������������������������
218
		 10.2.2	개발 도중 ����������������������������������������������������������������������������������������������������������
218
		 10.2.3	개발 후 �������������������������������������������������������������������������������������������������������������
219
	 10.3	테스트 대상 ����������������������������������������������������������������������������������������������������������������
219
	 10.4	테스트 방법 ����������������������������������������������������������������������������������������������������������������
219
		 10.4.1	단위 테스트 �������������������������������������������������������������������������������������������������������
220
		 10.4.2	테스트 주도 개발(TDD) ���������������������������������������������������������������������������������������
220
		 10.4.3	행위 주도 개발(BDD) ������������������������������������������������������������������������������������������
221
	 10.5	PHP유닛 �������������������������������������������������������������������������������������������������������������������
222
		 10.5.1	디렉터리 구조 ����������������������������������������������������������������������������������������������������
222
		 10.5.2	PHP유닛 설치 ���������������������������������������������������������������������������������������������������
223
		 10.5.3	Xdebug 설치 ����������������������������������������������������������������������������������������������������
224
		 10.5.4	PHP유닛 설정 ���������������������������������������������������������������������������������������������������
224
		 10.5.5	Whovian 클래스 �����������������������������������������������������������������������������������������������
226
		 10.5.6	WhovianTest 테스트 케이스 �������������������������������������������������������������������������������
227
		 10.5.7	테스트 수행 �������������������������������������������������������������������������������������������������������
230
		 10.5.8	코드 커버리지 ����������������������������������������������������������������������������������������������������
231
	 10.6	트래비스 CI를 통한 지속적인 테스팅 �������������������������������������������������������������������������������
232
		 10.6.1	설정 �����������������������������������������������������������������������������������������������������������������
232
		 10.6.2	실행 �����������������������������������������������������������������������������������������������������������������
233
	 10.7	참고 자료 �������������������������������������������������������������������������������������������������������������������
234
	 10.8	다음 장에서 다룰 내용 ��������������������������������������������������������������������������������������������������
234
25
CHAPTER 11 프로파일링
	 11.1	프로파일러 사용 시점 ���������������������������������������������������������������������������������������������������
235
	 11.2	프로파일러 종류 ����������������������������������������������������������������������������������������������������������
236
	 11.3	Xdebug ��������������������������������������������������������������������������������������������������������������������
236
		 11.3.1	설정 �����������������������������������������������������������������������������������������������������������������
237
		 11.3.2	발동 �����������������������������������������������������������������������������������������������������������������
237
		 11.3.3	분석 �����������������������������������������������������������������������������������������������������������������
238
	 11.4	XHProf ���������������������������������������������������������������������������������������������������������������������
238
		 11.4.1	설치 �����������������������������������������������������������������������������������������������������������������
238
		 11.4.2	XHGUI ������������������������������������������������������������������������������������������������������������
239
		 11.4.3	설정 �����������������������������������������������������������������������������������������������������������������
240
		 11.4.4	발동 �����������������������������������������������������������������������������������������������������������������
240
	 11.5	뉴렐릭 프로파일러 �������������������������������������������������������������������������������������������������������
241
	 11.6	블랙파이어 프로파일러 �������������������������������������������������������������������������������������������������
241
	 11.7	참고 자료 �������������������������������������������������������������������������������������������������������������������
242
	 11.8	다음 장에서 다룰 내용 ��������������������������������������������������������������������������������������������������
242
CHAPTER 12 HHVM과 Hack
	 12.1	HHVM ����������������������������������������������������������������������������������������������������������������������
244
		 12.1.1	페이스북과 PHP ������������������������������������������������������������������������������������������������
244
		 12.1.2	HHVM과 젠드 엔진의 동등성 �������������������������������������������������������������������������������
246
		 12.1.3	HHVM은 내게 적당한가 ��������������������������������������������������������������������������������������
246
		 12.1.4	설치 �����������������������������������������������������������������������������������������������������������������
247
		 12.1.5	설정 �����������������������������������������������������������������������������������������������������������������
248
		 12.1.6	확장 �����������������������������������������������������������������������������������������������������������������
249
26
CONTENTS
		 12.1.7	슈퍼바이저를 이용한 HHVM 관제 �������������������������������������������������������������������������
249
		 12.1.8	HHVM, FastCGI, 엔진엑스 ���������������������������������������������������������������������������������
251
	 12.2	Hack 언어 �����������������������������������������������������������������������������������������������������������������
253
		 12.2.1	PHP를 Hack으로 변환하기 ���������������������������������������������������������������������������������
253
		 12.2.2	타입이란 �����������������������������������������������������������������������������������������������������������
254
		 12.2.3	정적 타이핑 �������������������������������������������������������������������������������������������������������
256
		 12.2.4	동적 타이핑 �������������������������������������������������������������������������������������������������������
256
		 12.2.5	Hack은 양손잡이다 ��������������������������������������������������������������������������������������������
257
		 12.2.6	Hack 타입 검사 �������������������������������������������������������������������������������������������������
258
		 12.2.7	Hack 모드 ��������������������������������������������������������������������������������������������������������
258
		 12.2.8	Hack 문법 ��������������������������������������������������������������������������������������������������������
259
		 12.2.9	Hack 데이터 구조 ����������������������������������������������������������������������������������������������
261
		 12.2.10	HHVM/Hack vs. PHP ��������������������������������������������������������������������������������������
262
	 12.3	참고 자료 �������������������������������������������������������������������������������������������������������������������
264
CHAPTER 13 커뮤니티
	 13.1	지역 PUG ������������������������������������������������������������������������������������������������������������������
265
	 13.2	컨퍼런스 ��������������������������������������������������������������������������������������������������������������������
266
	 13.3	멘토링 �����������������������������������������������������������������������������������������������������������������������
266
	 13.4	최신 정보 �������������������������������������������������������������������������������������������������������������������
266
		 13.4.1	웹 사이트 ����������������������������������������������������������������������������������������������������������
266
		 13.4.2	메일링 리스트 ����������������������������������������������������������������������������������������������������
267
		 13.4.3	트위터 ��������������������������������������������������������������������������������������������������������������
267
		 13.4.4	팟캐스트 �����������������������������������������������������������������������������������������������������������
267
		 13.4.5	유머 �����������������������������������������������������������������������������������������������������������������
267
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기
『Modern PHP』 - 미리보기

Weitere ähnliche Inhalte

Was ist angesagt?

D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기Soojin Ro
 
5.yobi를 활용한 개발자 협업 및 배포 프로세스
5.yobi를 활용한 개발자 협업 및 배포 프로세스5.yobi를 활용한 개발자 협업 및 배포 프로세스
5.yobi를 활용한 개발자 협업 및 배포 프로세스NAVER D2
 
JavaScript로 오픈소스를 해보자. bsJS
JavaScript로 오픈소스를 해보자. bsJSJavaScript로 오픈소스를 해보자. bsJS
JavaScript로 오픈소스를 해보자. bsJSNAVER D2
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)Jay Park
 
[D2 campus]착 하면 척! chak 서비스 개발기
[D2 campus]착 하면 척! chak 서비스 개발기[D2 campus]착 하면 척! chak 서비스 개발기
[D2 campus]착 하면 척! chak 서비스 개발기NAVER D2
 
JavaScript 프레임워크 살펴보기
JavaScript 프레임워크 살펴보기JavaScript 프레임워크 살펴보기
JavaScript 프레임워크 살펴보기항희 이
 
개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님NAVER D2
 
커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님NAVER D2
 
소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵중선 곽
 
[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로
[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로
[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로Sungwoo Park
 
진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)
진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)
진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)우영 주
 
Web Framework (웹 프레임워크)
Web Framework (웹 프레임워크)Web Framework (웹 프레임워크)
Web Framework (웹 프레임워크)Junsu Kim
 
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017devCAT Studio, NEXON
 
Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기nexusz99
 
BEM을 깨우치다.
BEM을 깨우치다.BEM을 깨우치다.
BEM을 깨우치다.우영 주
 
PHPStorm - tool for php
PHPStorm - tool for phpPHPStorm - tool for php
PHPStorm - tool for phpSungbum Hong
 
학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님NAVER D2
 
[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔NAVER D2
 
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재NAVER D2
 
Slipp 발표 자료 20151212
Slipp 발표 자료 20151212Slipp 발표 자료 20151212
Slipp 발표 자료 20151212Jinsoo Jung
 

Was ist angesagt? (20)

D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
 
5.yobi를 활용한 개발자 협업 및 배포 프로세스
5.yobi를 활용한 개발자 협업 및 배포 프로세스5.yobi를 활용한 개발자 협업 및 배포 프로세스
5.yobi를 활용한 개발자 협업 및 배포 프로세스
 
JavaScript로 오픈소스를 해보자. bsJS
JavaScript로 오픈소스를 해보자. bsJSJavaScript로 오픈소스를 해보자. bsJS
JavaScript로 오픈소스를 해보자. bsJS
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)
 
[D2 campus]착 하면 척! chak 서비스 개발기
[D2 campus]착 하면 척! chak 서비스 개발기[D2 campus]착 하면 척! chak 서비스 개발기
[D2 campus]착 하면 척! chak 서비스 개발기
 
JavaScript 프레임워크 살펴보기
JavaScript 프레임워크 살펴보기JavaScript 프레임워크 살펴보기
JavaScript 프레임워크 살펴보기
 
개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님
 
커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님
 
소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵
 
[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로
[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로
[취업특강] IT분야에서 행복하게 일하기 - SW 개발자를 중심으로
 
진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)
진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)
진보한 개발 환경에서 품질 좋은 코드 생산 (WebStorm)
 
Web Framework (웹 프레임워크)
Web Framework (웹 프레임워크)Web Framework (웹 프레임워크)
Web Framework (웹 프레임워크)
 
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
 
Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기
 
BEM을 깨우치다.
BEM을 깨우치다.BEM을 깨우치다.
BEM을 깨우치다.
 
PHPStorm - tool for php
PHPStorm - tool for phpPHPStorm - tool for php
PHPStorm - tool for php
 
학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님
 
[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔
 
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
 
Slipp 발표 자료 20151212
Slipp 발표 자료 20151212Slipp 발표 자료 20151212
Slipp 발표 자료 20151212
 

Ähnlich wie 『Modern PHP』 - 미리보기

『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기복연 이
 
​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기복연 이
 
Dive into OpenSource
Dive into OpenSourceDive into OpenSource
Dive into OpenSourceHyun-woo Park
 
3주차 language
3주차 language3주차 language
3주차 language준혁 이
 
『파이썬 라이브러리를 활용한 머신러닝』 맛보기
『파이썬 라이브러리를 활용한 머신러닝』 맛보기『파이썬 라이브러리를 활용한 머신러닝』 맛보기
『파이썬 라이브러리를 활용한 머신러닝』 맛보기복연 이
 
네이버 오픈소스 세미나 - 오픈소스 프로젝트 참여하기 NAVER 박은정
네이버 오픈소스 세미나 - 오픈소스 프로젝트 참여하기 NAVER 박은정네이버 오픈소스 세미나 - 오픈소스 프로젝트 참여하기 NAVER 박은정
네이버 오픈소스 세미나 - 오픈소스 프로젝트 참여하기 NAVER 박은정NAVER Engineering
 
성장하는 서버 개발자 되기 - Wanted Livetalk
성장하는 서버 개발자 되기 - Wanted Livetalk성장하는 서버 개발자 되기 - Wanted Livetalk
성장하는 서버 개발자 되기 - Wanted LivetalkKyuhyun Byun
 
[OSS 개발자 포럼] 오픈소스를 활용한 개발자 자기 개발
[OSS 개발자 포럼] 오픈소스를 활용한 개발자 자기 개발[OSS 개발자 포럼] 오픈소스를 활용한 개발자 자기 개발
[OSS 개발자 포럼] 오픈소스를 활용한 개발자 자기 개발Daniel Juyung Seo
 
프로그래머를 꿈꾸는 학부 후배들에게
프로그래머를 꿈꾸는 학부 후배들에게프로그래머를 꿈꾸는 학부 후배들에게
프로그래머를 꿈꾸는 학부 후배들에게Matthew (정재화)
 
오픈소스, 빡! 끝! - 제7회 삼성소프트웨어멤버십 기술전
오픈소스, 빡! 끝! - 제7회 삼성소프트웨어멤버십 기술전오픈소스, 빡! 끝! - 제7회 삼성소프트웨어멤버십 기술전
오픈소스, 빡! 끝! - 제7회 삼성소프트웨어멤버십 기술전Daniel Juyung Seo
 
Lablup Conf 2022 - 강시온.pdf
Lablup Conf 2022 - 강시온.pdfLablup Conf 2022 - 강시온.pdf
Lablup Conf 2022 - 강시온.pdfssuserb90ae2
 
PoApper Introduction
PoApper IntroductionPoApper Introduction
PoApper IntroductionByungjin Park
 
[OSS개발자포럼, 국민대 여름캠프] 개발자로 멋지게 살아보자 - 구글 서주영 (주석 포함)
[OSS개발자포럼, 국민대 여름캠프] 개발자로 멋지게 살아보자 - 구글 서주영 (주석 포함)[OSS개발자포럼, 국민대 여름캠프] 개발자로 멋지게 살아보자 - 구글 서주영 (주석 포함)
[OSS개발자포럼, 국민대 여름캠프] 개발자로 멋지게 살아보자 - 구글 서주영 (주석 포함)Daniel Juyung Seo
 
[GDG DevFest Seoul 2016] 오픈 소스를 통해 개발 근육 강화하기
[GDG DevFest Seoul 2016] 오픈 소스를 통해 개발 근육 강화하기[GDG DevFest Seoul 2016] 오픈 소스를 통해 개발 근육 강화하기
[GDG DevFest Seoul 2016] 오픈 소스를 통해 개발 근육 강화하기Daniel Juyung Seo
 
오픈소스 생태계 일원으로서의 개발자(자막 버전)
오픈소스 생태계 일원으로서의 개발자(자막 버전)오픈소스 생태계 일원으로서의 개발자(자막 버전)
오픈소스 생태계 일원으로서의 개발자(자막 버전)JeongHun Byeon
 
파이콘 2017 그만퇴근합시다_이지호
파이콘 2017 그만퇴근합시다_이지호파이콘 2017 그만퇴근합시다_이지호
파이콘 2017 그만퇴근합시다_이지호Jiho Lee
 
『오픈스택 인 액션』 - 맛보기
『오픈스택 인 액션』 - 맛보기『오픈스택 인 액션』 - 맛보기
『오픈스택 인 액션』 - 맛보기복연 이
 
나의 오픈소스 사용기
나의 오픈소스 사용기나의 오픈소스 사용기
나의 오픈소스 사용기주호 강
 
[Hello world]n forge
[Hello world]n forge[Hello world]n forge
[Hello world]n forgeNAVER D2
 
나는 요리를 오픈소스로 배웠다.
나는 요리를 오픈소스로 배웠다.나는 요리를 오픈소스로 배웠다.
나는 요리를 오픈소스로 배웠다.Rhio kim
 

Ähnlich wie 『Modern PHP』 - 미리보기 (20)

『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기
 
​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기
 
Dive into OpenSource
Dive into OpenSourceDive into OpenSource
Dive into OpenSource
 
3주차 language
3주차 language3주차 language
3주차 language
 
『파이썬 라이브러리를 활용한 머신러닝』 맛보기
『파이썬 라이브러리를 활용한 머신러닝』 맛보기『파이썬 라이브러리를 활용한 머신러닝』 맛보기
『파이썬 라이브러리를 활용한 머신러닝』 맛보기
 
네이버 오픈소스 세미나 - 오픈소스 프로젝트 참여하기 NAVER 박은정
네이버 오픈소스 세미나 - 오픈소스 프로젝트 참여하기 NAVER 박은정네이버 오픈소스 세미나 - 오픈소스 프로젝트 참여하기 NAVER 박은정
네이버 오픈소스 세미나 - 오픈소스 프로젝트 참여하기 NAVER 박은정
 
성장하는 서버 개발자 되기 - Wanted Livetalk
성장하는 서버 개발자 되기 - Wanted Livetalk성장하는 서버 개발자 되기 - Wanted Livetalk
성장하는 서버 개발자 되기 - Wanted Livetalk
 
[OSS 개발자 포럼] 오픈소스를 활용한 개발자 자기 개발
[OSS 개발자 포럼] 오픈소스를 활용한 개발자 자기 개발[OSS 개발자 포럼] 오픈소스를 활용한 개발자 자기 개발
[OSS 개발자 포럼] 오픈소스를 활용한 개발자 자기 개발
 
프로그래머를 꿈꾸는 학부 후배들에게
프로그래머를 꿈꾸는 학부 후배들에게프로그래머를 꿈꾸는 학부 후배들에게
프로그래머를 꿈꾸는 학부 후배들에게
 
오픈소스, 빡! 끝! - 제7회 삼성소프트웨어멤버십 기술전
오픈소스, 빡! 끝! - 제7회 삼성소프트웨어멤버십 기술전오픈소스, 빡! 끝! - 제7회 삼성소프트웨어멤버십 기술전
오픈소스, 빡! 끝! - 제7회 삼성소프트웨어멤버십 기술전
 
Lablup Conf 2022 - 강시온.pdf
Lablup Conf 2022 - 강시온.pdfLablup Conf 2022 - 강시온.pdf
Lablup Conf 2022 - 강시온.pdf
 
PoApper Introduction
PoApper IntroductionPoApper Introduction
PoApper Introduction
 
[OSS개발자포럼, 국민대 여름캠프] 개발자로 멋지게 살아보자 - 구글 서주영 (주석 포함)
[OSS개발자포럼, 국민대 여름캠프] 개발자로 멋지게 살아보자 - 구글 서주영 (주석 포함)[OSS개발자포럼, 국민대 여름캠프] 개발자로 멋지게 살아보자 - 구글 서주영 (주석 포함)
[OSS개발자포럼, 국민대 여름캠프] 개발자로 멋지게 살아보자 - 구글 서주영 (주석 포함)
 
[GDG DevFest Seoul 2016] 오픈 소스를 통해 개발 근육 강화하기
[GDG DevFest Seoul 2016] 오픈 소스를 통해 개발 근육 강화하기[GDG DevFest Seoul 2016] 오픈 소스를 통해 개발 근육 강화하기
[GDG DevFest Seoul 2016] 오픈 소스를 통해 개발 근육 강화하기
 
오픈소스 생태계 일원으로서의 개발자(자막 버전)
오픈소스 생태계 일원으로서의 개발자(자막 버전)오픈소스 생태계 일원으로서의 개발자(자막 버전)
오픈소스 생태계 일원으로서의 개발자(자막 버전)
 
파이콘 2017 그만퇴근합시다_이지호
파이콘 2017 그만퇴근합시다_이지호파이콘 2017 그만퇴근합시다_이지호
파이콘 2017 그만퇴근합시다_이지호
 
『오픈스택 인 액션』 - 맛보기
『오픈스택 인 액션』 - 맛보기『오픈스택 인 액션』 - 맛보기
『오픈스택 인 액션』 - 맛보기
 
나의 오픈소스 사용기
나의 오픈소스 사용기나의 오픈소스 사용기
나의 오픈소스 사용기
 
[Hello world]n forge
[Hello world]n forge[Hello world]n forge
[Hello world]n forge
 
나는 요리를 오픈소스로 배웠다.
나는 요리를 오픈소스로 배웠다.나는 요리를 오픈소스로 배웠다.
나는 요리를 오픈소스로 배웠다.
 

Mehr von 복연 이

​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기
​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기
​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기복연 이
 
​『골빈해커의 3분 딥러닝』 맛보기
​『골빈해커의 3분 딥러닝』 맛보기​『골빈해커의 3분 딥러닝』 맛보기
​『골빈해커의 3분 딥러닝』 맛보기복연 이
 
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기복연 이
 
『이펙티브 디버깅』 맛보기
『이펙티브 디버깅』 맛보기『이펙티브 디버깅』 맛보기
『이펙티브 디버깅』 맛보기복연 이
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법복연 이
 
『아마존 웹 서비스 인 액션』 맛보기
『아마존 웹 서비스 인 액션』 맛보기『아마존 웹 서비스 인 액션』 맛보기
『아마존 웹 서비스 인 액션』 맛보기복연 이
 
『밑바닥부터 시작하는 딥러닝』 - 미리보기
『밑바닥부터 시작하는 딥러닝』 - 미리보기『밑바닥부터 시작하는 딥러닝』 - 미리보기
『밑바닥부터 시작하는 딥러닝』 - 미리보기복연 이
 
『행복한 프로그래밍(개정판)』 - 맛보기
『행복한 프로그래밍(개정판)』 - 맛보기『행복한 프로그래밍(개정판)』 - 맛보기
『행복한 프로그래밍(개정판)』 - 맛보기복연 이
 
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기복연 이
 
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기복연 이
 
『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기복연 이
 
『데이터 분석을 통한 네트워크 보안』 - 맛보기
『데이터 분석을 통한 네트워크 보안』 - 맛보기『데이터 분석을 통한 네트워크 보안』 - 맛보기
『데이터 분석을 통한 네트워크 보안』 - 맛보기복연 이
 
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기복연 이
 
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기복연 이
 
『누워서 읽는 알고리즘』 - 미리보기
『누워서 읽는 알고리즘』 - 미리보기『누워서 읽는 알고리즘』 - 미리보기
『누워서 읽는 알고리즘』 - 미리보기복연 이
 
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도복연 이
 
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 미리보기
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 미리보기『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 미리보기
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 미리보기복연 이
 
어서 와! 번역은 처음이지?
어서 와! 번역은 처음이지?어서 와! 번역은 처음이지?
어서 와! 번역은 처음이지?복연 이
 
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기복연 이
 
『게임 매니악스 액션 게임 알고리즘』 - 미리보기
『게임 매니악스 액션 게임 알고리즘』 - 미리보기『게임 매니악스 액션 게임 알고리즘』 - 미리보기
『게임 매니악스 액션 게임 알고리즘』 - 미리보기복연 이
 

Mehr von 복연 이 (20)

​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기
​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기
​『9가지 사례로 익히는 고급 스파크 분석(2판) 』 맛보기
 
​『골빈해커의 3분 딥러닝』 맛보기
​『골빈해커의 3분 딥러닝』 맛보기​『골빈해커의 3분 딥러닝』 맛보기
​『골빈해커의 3분 딥러닝』 맛보기
 
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
『DirectX 12를 이용한 3D 게임 프로그래밍 입문』 - 맛보기
 
『이펙티브 디버깅』 맛보기
『이펙티브 디버깅』 맛보기『이펙티브 디버깅』 맛보기
『이펙티브 디버깅』 맛보기
 
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
『이펙티브 디버깅』 - 디버깅 지옥에서 탈출하는 66가지 전략과 기법
 
『아마존 웹 서비스 인 액션』 맛보기
『아마존 웹 서비스 인 액션』 맛보기『아마존 웹 서비스 인 액션』 맛보기
『아마존 웹 서비스 인 액션』 맛보기
 
『밑바닥부터 시작하는 딥러닝』 - 미리보기
『밑바닥부터 시작하는 딥러닝』 - 미리보기『밑바닥부터 시작하는 딥러닝』 - 미리보기
『밑바닥부터 시작하는 딥러닝』 - 미리보기
 
『행복한 프로그래밍(개정판)』 - 맛보기
『행복한 프로그래밍(개정판)』 - 맛보기『행복한 프로그래밍(개정판)』 - 맛보기
『행복한 프로그래밍(개정판)』 - 맛보기
 
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
 
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기
『9가지 사례로 익히는 고급 스파크 분석』 - 맛보기
 
『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기
 
『데이터 분석을 통한 네트워크 보안』 - 맛보기
『데이터 분석을 통한 네트워크 보안』 - 맛보기『데이터 분석을 통한 네트워크 보안』 - 맛보기
『데이터 분석을 통한 네트워크 보안』 - 맛보기
 
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
 
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
『크리스 크로퍼드의 인터랙티브 스토리텔링』 맛보기
 
『누워서 읽는 알고리즘』 - 미리보기
『누워서 읽는 알고리즘』 - 미리보기『누워서 읽는 알고리즘』 - 미리보기
『누워서 읽는 알고리즘』 - 미리보기
 
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 구성 지도
 
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 미리보기
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 미리보기『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 미리보기
『프로젝트 성패를 결정짓는 데이터 모델링 이야기』 - 미리보기
 
어서 와! 번역은 처음이지?
어서 와! 번역은 처음이지?어서 와! 번역은 처음이지?
어서 와! 번역은 처음이지?
 
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
 
『게임 매니악스 액션 게임 알고리즘』 - 미리보기
『게임 매니악스 액션 게임 알고리즘』 - 미리보기『게임 매니악스 액션 게임 알고리즘』 - 미리보기
『게임 매니악스 액션 게임 알고리즘』 - 미리보기
 

Kürzlich hochgeladen

Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 

Kürzlich hochgeladen (6)

Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 

『Modern PHP』 - 미리보기

  • 1. 네임스페이스, 트레이트, 클로저부터 모범 사례와 최신 도구까지 조시 록하트 지음 정병열 옮김 Modern PHP
  • 2. www.hanbit.co.kr 이것이 프로그래밍이다! 이것이 안드로이드다 진정한 안드로이드 개발자로 이끌어줍니다. SDK 5.0 롤리팝 호환! 책만 보고, 동영상 강좌로도 만족하지 못했다면 Daum 카페 '슈퍼드로이드'에서 만나요 cafe.daum.net/superdroid 박성근 저 | 1,164쪽 | 45,000원 이것이 C언어다 세상에 없던 새로운 C언어 입문서 탄생! 삼성, LG에서 펼쳐졌던 전설의 명강의를 풀타임 동영상 강좌로! 이보다 더 확실한 방법은 없다, 칠판강의 전체 동영상 강좌 유투브 전격 공개! http://goo.gl/tJK3Tu 서현우 저 | 708쪽 | 25,000원 이것이 자바다 가장 중요한 프로그래밍 언어를 하나 배워야 한다면, 결론은 자바다! 중급 개발자로 나아가기 위한 람다식, JavaFX, NIO 수록 자바의 모든 것을 알려주는 인터넷 강의 궁금한 것은 카페에서! cafe.naver.com/thisisjava 신용권 저 | 1,224쪽 | 30,000원 저자직강동영상 제공!
  • 3. 모던 웹을 위한 JavaScript + jQuery 입문 www.hanbit.co.kr 지금은 모던 웹 시대! HTML5 분야 부동의 1위 도서 HTML5 표준안 확정에 맞춘 완전 개정판의 귀환! HTML5 권고안과 최신 웹 브라우저 환경 대응 윤인성 저 | 624쪽 | 30,000원 모던 웹 디자인을 위한 HTML5 + CSS3 입문 자바스크립트에서 제이쿼리, 제이쿼리 모바일까지 한 권으로 끝낸다! 시대의 흐름에 맞춰 다시 쓴 자바스크립트 교과서 윤인성 저 | 980쪽 | 32,000원 페이스북, 월마트, 링크드인은 왜 Node.js를 선택했는가? 이 물음에 대한 답은 Node.js가 보여주는 빠른 처리 능력 때문이다. 윤인성 저 | 484쪽 | 25,000원 모던 웹을 위한 Node.js 프로그래밍 필요한 것만 배워 바로 현장에서 쓰는 HTML5 순서대로 읽으며 실습할 수 있는 HTML5 자습서 김상형 저 | 700쪽 | 32,000원 HTML5 + CSS3 정복
  • 4.
  • 5.
  • 6. 표지 동물은 호주검은머리따오기(학명: Threskiornis spinicollis)다. 오스트레일리아, 뉴기니, 인도네시아 일부 지역에 서식한다. 호주검은머리따오기는 75cm까지 자라는 대형 조류다. 성체의 목에 나타나는 독특하고 뻣뻣한 깃 털에서 밀짚따오기straw-necked ibisz라는 영문명이 유래됐으며, 길고 구부러진 부리로 물속에서 곤충, 연체 동물, 개구리 등을 잡아낼 수 있다. 경작지에서는 농작물에 해를 입힐 수 있는 벌레나 메뚜 기, 귀뚜라미 등을 잡아먹기 때문에 농부들이 반기는 새다. 이 새는 떠돌이 생활을 하며 무리를 지어 서식지를 옮겨 다니는데, 얕은 담수성 습지나 인공적으 로 경작된 목초지, 늪지와 산호 지대의 가장자리를 좋아한다. 번식기에는 나뭇가지나 갈대를 모 아 물가의 나무 위에 큰 컵 모양으로 둥지를 틀며 종종 호주흰따오기와 함께 둥지 군집을 이룬다고 알려져 있다. 이런 습성 탓 에, 앙상한 나무의 높은 가지에 서서 하늘을 배경으로 뚜렷한 실루엣을 남기는 장면을 쉽게 목격할 수 있다. 오라일리 책 표지에 등장하는 동물은 대부분 멸종 위기에 처해있으며 모두 세계적으로 중요한 가치를 지닌다. 이들을 돕는 방 법을 알아보려면 http://animals.oreilly.com에 방문하기 바란다. 표지 그림은 『Woods Illustrated Natural History』에서 가져왔다. Modern PHP : 네임스페이스, 트레이트, 클로저부터 모범 사례와 최신 도구까지 초판발행 2015년 10월 20일 지은이 조시 록하트 / 옮긴이 정병열 / 펴낸이 김태헌 펴낸곳 한빛미디어 (주) / 주소 서울시 마포구 양화로 7길 83 한빛미디어(주) IT출판부 전화 02 – 325 – 5544 / 팩스 02 – 336 – 7124 등록 1999년 6월 24일 제10 – 1779호 / ISBN 978 – 89 – 6848 – 225 – 0 93000 총괄 배용석 / 책임편집 최현우 / 기획 이복연, 강은희 / 편집 홍원규 디자인 강은영 영업 김형진, 김진불, 조유미 / 마케팅 박상용, 송경석, 서은옥 / 제작 박성우 이 책에 대한 의견이나 오탈자 및 잘못된 내용에 대한 수정 정보는 한빛미디어(주)의 홈페이지나 아래 이메일로 알려주십시오. 잘못된 책은 구입하신 서점에서 교환해 드립니다. 책값은 뒤표지에 표시되어 있습니다. 한빛미디어 홈페이지 www.hanbit.co.kr / 이메일 ask@hanbit.co.kr Published by HANBIT Media, Inc. Printed in Korea Copyright © 2015 O’Reilly Media & HANBIT Media, Inc. Authorized translation of the English edition of Modern PHP ISBN: 9781491905012 © 2015 Josh Lockhart. This translation is to be published and sold by permission of O’Reilly Media, Inc., the owner of all rights to publish and sell the same. 이 책의 저작권은 오라일리와 한빛미디어 (주)에 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 복제 및 무단 전재를 금합니다. 지금 하지 않으면 할 수 없는 일이 있습니다. 책으로 펴내고 싶은 아이디어나 원고를 메일 ( writer@hanbit.co.kr ) 로 보내주세요. 한빛미디어(주)는 여러분의 소중한 경험과 지식을 기다리고 있습니다. | 표지 설명 |
  • 7.
  • 8.
  • 10. 10 처음으로 실무에 PHP를 사용했던 때는 2002년이었다. 한 중소 규모의 웹 서비스 개발을 맡았 을 때였는데, 처음에는 서블릿으로 개발할 계획이었지만 몇 가지 이유로 최종 기획 단계에서 PHP로 결정됐다. 사이트 전체를 PHP로 개발하는 일은 처음이었던지라 우려도 있었지만 막상 작업해보니 Perl CGI나 서블릿을 사용하는 것보다 쉽고 빠르게 사이트를 구축할 수 있어 새삼 놀랐던 기억이 난다. PHP의 풍부한 내장 라이브러리와 유연한 출력 제어 능력 덕분이었다. 아닌 게 아니라 그즈음 우리나라에서는 이미 PHP가 빠른 속도로 자리를 잡아가고 있었다. 개 발 언어로서뿐만 아니라 호스팅 업체들이 주력으로 지원하는 언어로서도 각광받았다. 단기간 동안 호스팅 서비스 거의 대부분에 PHP가 탑재됐고 한쪽에서는 다양한 PHP 웹 애플리케이션 들이 제작되고 공개됐다. 자생적으로 형성된 국내 커뮤니티 웹 사이트가 대부분 이런 PHP 웹 프로그램들을 이용해 구축됐다. 이 시기에 큰 인기를 끌었던 PuryBBS, 제로보드4 등은 이후 에 나온 테터툴즈나 XE 같은 걸출한 프로젝트의 모태이기도 하다. 이런 면에서 보자면 우리나 라에서 PHP가 저변을 확대하는 과정은 국내 인터넷 문화의 폭발적 확장 과정과 어느 정도 궤 를 같이 한다고도 볼 수 있다. PHP 같은 고참 스크립트 언어가 아직까지 각종 통계나 인기 순위에서 상위권을 차지하는 데 에는 이유가 있다. 나는 PHP가 지닌 매력의 본질이 자유로운 포용력이라고 생각한다. PHP는 끊임없이 언어 구조를 개선하고 유수의 라이브러리들을 통합하는 한편 스크립트 언어의 태생 적 한계를 극복하려는 시도도 멈추지 않았다. PHP 진영은 늘 다양한 프로젝트로 북적거리는 활기찬 분위기를 이어왔다. 여기에 수많은 개발자들의 활발한 참여가 더해져 PHP 개발 생태 계는 나날이 성숙해지고 있다. 특히 최근 몇 년간 PHP는 탄생 이후 가장 역동적인 변화의 시 기를 겪고 있다고 해도 과언이 아니다. 페이스북과 Hack으로 대변되는 외적 요인을 촉매로 언 어 자체의 근간부터 재정립되고 있으며, 그 결과 PHP 7이라는 또 한번의 큰 도약을 목전에 두 고 있다. 국내에서는 PHP가 대형 솔루션을 개발하기에 적합하지 않다거나 보안에 취약한 언어라고 생 각하는 이들도 있다. 역설적이게도 이런 부정적인 인식은 PHP가 지닌 강점에 기인한다. 입문 옮긴이의 글
  • 11. 11 하기 쉽고 빠르게 개발할 수 있어 단기간에 많은 프로젝트에 도입됐지만 그에 반해 엔터프라이 즈급 솔루션 개발에 사용되거나 다양한 고도화 작업에 심도있게 활용된 사례가 드물기 때문이 다. 스크립트 언어의 특성상 소스코드가 공개되어 있다는 점도 기피 사유 중 하나였으며 국내 SI 프로젝트에 채택되는 플랫폼 구성이 다소 획일적이라는 실정도 한 몫 거들었다. 그러나 이 런 인식과는 달리 현재 PHP는 방대한 솔루션을 많은 개발자가 공동으로 작업할 수 있는 제반 환경을 충분히 갖추고 있다. 의존성과 패키징에 대한 표준이 정립됐으며 이들을 관리할 수 있 는 우수한 도구가 등장했고, 지속적인 통합과 자동화된 테스팅 또한 가능해졌다. 뿐만 아니라 완성도 높은 풀스택 프레임워크와 ORM, 강력한 템플릿 엔진들이 포진하고 있으며 셀 수 없이 많은 오픈소스 컴포넌트를 자유롭게 활용할 수 있다. PHP의 기술적인 최신 동향과 그에 따른 모범 사례들에 대한 정보를 PHP 초심자나 다른 언어 개발자가 일목요연하게 열람하거나 편리하게 접할 수 있는 창구는 흔치 않다. 몇몇 선도적인 개발자들의 세미나와 블로그 기고만으로는 역부족이다. 특히나 최근 국내에는 PHP 관련 서적 들의 출간도 주춤한 편이어서 아쉬움이 더해가는 상황이었다. 『Modern PHP』는 이런 시점에 서 만난 가뭄의 단비 같은 책이다. 이 책은 ‘모던 PHP’라는 제목 그대로 PHP 언어의 최신 핵심 기능을 요점정리해줄 뿐만 아니 라 유머러스하고 친절한 설명과 이해하기 쉬운 예제를 통해 모범 사례와 발전된 개발 방법까지 제시해주는 실용서다. 저자인 조시 록하트는 유력 프레임워크의 개발자인 동시에 PHP에 대한 인식 제고를 위해 발벗고 나선 오피니언 리더로서, PHP에 대한 자신의 애정과 열정을 이 책에 고스란히 담아 놓았다. 또한 PHP 진영의 전반적인 근황에 대해 넓은 시각으로 잘 설명하고 있 어서 앞으로 공개될 PHP 7을 준비하는 데 있어서도 도움이 될만한 책이다. PHP의 미래는 여전히 활짝 열려있고 잠재력 역시 무궁무진하다. 모쪼록 국내의 개발자들도 PHP의 짜릿한 변화의 순간에 기꺼이 동참하고 진보된 PHP를 온전히 활용할 수 있게 되기를 바라며, 그 과정에 이 책이 조금이나마 보탬이 될 수 있었으면 한다. 이 책이 나오기까지 도움을 주신 분들에게 진심으로 감사의 마음을 전하고 싶다. 먼저, 처음 번
  • 12. 12 역 의사를 전달했을 때 선뜻 기회를 제공해 준 한빛미디어 측에 감사드린다. 강은희 님과 최현 우 팀장님이 원고의 미숙한 부분을 명확히 짚어주고 적절한 가이드 라인을 제시해 준 덕분에 무사히 작업을 마무리할 수 있었다. 막히는 부분이 있을 때는 종종 주변에 도움을 구했다. 그 때마다 매번 새로운 시각과 다양한 아이디어로 생각의 물꼬를 틔워준 김재영 님에게도 감사드 린다. 마지막으로, 언제나 나를 지지하고 응원해주시는 부모님께 감사의 말씀을 드린다. _2015년 10월 정병열 옮긴이 정병열 cloudshadow@gmail.com 연세대학교 세라믹 공학과를 졸업하고 개발자와 번역자로 활동하고 있다. 어린 시절 BASIC 언어를 통해 프로그래밍을 처음 경험 했으며 PC통신 시절에는 프로그래밍 관련 동호회에서 활동했다. 2000년대 초반부터 프로그래밍 언어와 플랫폼에 관계없이 다양 한 웹 사이트 및 솔루션 개발 프로젝트를 수행했으며 몇 년간은 리눅스 시스템 엔지니어로 근무하기도 했다. 분야를 가리지 않는 폭 넓은 관심사를 가지고 있으며 흥미를 느끼면 어떻게든 파고들어 습득하고 마는 성격의 소유자다. 현재는 취업포털 업체에서 다양한 업무를 수행하고 있다.
  • 13. 13 온라인에는 수없이 많은 PHP 튜토리얼이 있다. 이들 대부분은 이미 낡고 쓸모 없어진 지 오래 지만 불행히도 구글 검색 결과에 살아남아 여전히 참조자료로 활용된다. 이런 낡은 정보를 무 분별하게 받아들인 PHP 프로그래머는 자신도 모르는 사이에 느리고 보안에 취약한 PHP 애플 리케이션을 만들게 될 위험에 처한다. 나는 2013년에 이러한 문제를 인식했고, 그때 가졌던 문 제의식은 PHP The Right Way(http://www.phptherightway.com)를 시작하는 가장 큰 계기 가 됐다. PHP The Right Way는 PHP 프로그래머가 PHP 커뮤니티 권위자들이 제공하는 품 질 높은 최신 정보에 쉽게 접근할 수 있게 하려고 만든 것이다. 『Modern PHP』는 이와 같은 목표를 지향하는 나의 다음 시도다. 이 책은 참고서가 절대 아니 며 여러분과 내가 친근하고 재미있게 나눈 대화를 담은 기록과도 같다. 나는 최신 PHP 프로 그래밍 언어를 소개하는 한편, 나의 오픈소스 프로젝트와 일상 업무에서 매일 사용하는 최신 PHP 기술을 보여줄 것이다. 그리고 여러분이 최신 코딩 표준을 사용하여 자신의 컴포넌트와 라이브러리들을 PHP 커뮤니티에서 공유할 수 있도록 도울 것이다. ‘커뮤니티’라는 말이 되풀이되어 나올 것이다. 가끔 극적인 사건이 있긴 해도 PHP 커뮤니티는 대체로 프로그래머들에게 친근하고 유용하며 우호적이다. 만약 이 책에서 언급한 특정 내용에 대해 궁금해지면 자신의 지역 PHP 사용자 그룹에 가서 질문해보기 바란다. 여러분이 더 나은 PHP 프로그래머가 되도록 도와줄 개발자들은 얼마든지 가까이에 있을 것이다. 지역 PHP 사 용자 그룹은 당신이 이 책을 다 읽은 후에도 지속적으로 PHP 스킬을 향상할 수 있게 도와줄 귀중한 자원이다. 이 책에 대하여 시작하기에 앞서 몇 가지를 염두에 두었으면 한다. 첫째, 다양한 PHP 사용 방법을 이 책에서 모두 다루기에는 시간이 부족하다. 대신 나의 PHP 사용 방법을 보여줄 것이다. 독단적인 접근 방식임에 분명하지만, 나는 많은 PHP 개발자가 채 들어가며
  • 14. 14 택한 사례와 표준을 그대로 사용한다. 이 책에서 얻은 것들을 여러분의 프로젝트에 즉시 적용 할 수 있을 것이다. 둘째, 여러분이 변수와 조건문, 반복문 등에 익숙하다고 간주한다. PHP를 알아야 하는 것은 아니지만, 최소한 프로그래밍 기초 개념에 대한 기본 이해는 필요하다. 커피를 곁들여도 된다. 그 외의 모든 것은 내가 제공해줄 것이다. 셋째, 나는 여러분이 특정 운영체제를 사용한다고 간주하지 않는다. 하지만 앞으로 나올 코드 예제는 리눅스에서 작성한다. 배시Bash 명령어는 우분투용과 CentOS용을 함께 제공하며 일부 는 OS X에서도 실행할 수 있다. 만약 윈도우 사용자가 이 책의 예제 코드를 실행하고자 한다 면 가급적 리눅스 가상머신을 사용하기 바란다. 이 책의 구성 1부에서는 네임스페이스namespace, 제너레이터generator, 트레이트trait 같은 PHP의 새로운 기능을 설명한다. 모던 PHP 언어를 소개하고 여러분이 지금까지 몰랐을 수도 있는 기능을 선보인다. 2부에서는 PHP 애플리케이션에서 구현해야 할 모범 사례들을 알아본다. PSR에 대해 들어보 았을 것이다. 하지만 그것이 무엇인지, 어떻게 사용하는 것인지 온전하게 확신할 수 있는가? 사용자 입력의 위험을 제거하고 데이터베이스 쿼리를 안전하게 사용하는 방법을 알고 싶은가? 그렇다면 2부를 보라. 3부는 1부와 2부보다 더 기술적이다. 배포, 튜닝, 테스트 그리고 PHP 애플리케이션을 프로파 일링하는 방법을 알아본다. 카피스트라노Capistrano를 이용한 배포 전략을 세우고 PHP유닛PHPUnit 과 트래비스 CITravis CI 같은 테스팅 도구를 이야기한다. 그리고 PHP 애플리케이션의 성능을 높 이기 위한 PHP 튜닝 방법도 알아본다. 부록 A는 PHP-FPM 설치와 구성에 대해 단계별 안내를 제공한다.
  • 15. 15 부록 B는 프로덕션 서버에 유사하게 대응하는 로컬 개발 환경을 구축하는 방법을 설명한다. 또 한 신속한 구축에 도움을 줄 대안 도구로 베이그런트Vagrant, 퍼핏Puppet, 셰프Chef를 알아본다. 감사의 말 이 책은 나의 첫 책이다. 오라일리에서 『Modern PHP』 집필을 제안했을 때 나는 정말이지 흥 분과 두려움에 휩싸여버리고 말았다. 어깨춤이 절로 나올 정도였다. 오라일리가 집필을 제안하 다니, 굉장한 일이지 않은가! 기쁨도 잠시, 흥분을 가라앉히고 나는 스스로에게 정말 그렇게 많 은 양을 쓸 수 있을지 물었다. 책을 쓰는 것은 그리 만만한 작업이 아니기 때문이다. 물론, 즉시 “네”라고 말했다. 가족, 친구, 동료, 편집자, 나를 전적으로 지지해줄 독자들이 있었 기 때문에 기꺼이 『Modern PHP』를 쓰겠다고 할 수 있었다. 그들이 보내준 귀중한 조언에 감 사의 뜻을 밝히고 싶다. 이들이 아니었다면, 이 책은 절대로 나올 수 없었다. 우선, 오라일리 미디어의 담당 편집자 앨리슨 맥도날드(@allyatoreilly)에게 감사하고 싶다. 앨리는 친절하고, 비판적이고, 든든하며, 명석하다. 그녀는 내가 방향을 잃을 때마다 적절히 바 로 잡아주어야 할 정확한 때와 방법을 알고 있었다. 그녀는 내게 있어 최고의 편집자다. 또한 기술 검토를 해준 아담 페어홀름(@adamfairholm)과 에드 핀클러(@funkatron)에게 도 감사한다. 아담은 뉴프랭글드(https://www.newfangled.com)의 뛰어난 웹 개발자며, 뮤직 비디오 데이터베이스 웹 사이트 IMVDb(http://imvdb.com)의 개발자로 유명하다. 에드는 어 마어마한 PHP 실력과 개성적인 팟캐스트 /dev/hell(http://devhell.info), 오픈소싱 정신질환 캠페인Open Sourcing Mental Illness campaign (http://funkatron.com/osmi)으로 잘 알려져 있다. 아담과 에드는 내 초고의 멍청하고 비논리적이며 부정확한 부분들을 지적해주었다. 그들의 노골적이 고 정직한 피드백에 대해서는 어떠한 말로도 감사의 표현을 다 할 수 없다. 그들의 지도와 지혜 에 영원히 감사한다. 최종 원고에 실수나 오류가 있다면 그것은 전적으로 내 책임이다.
  • 16. 16 늘 나를 격려해준 뉴미디어 캠페인New Media Campaigns (http://www.newmediacampaigns.com)의 동료들 엘, 클레이, 크리스, 알렉스, 패트릭, 애슐리, 레니, 클레어, 토드, 파스칼, 헨리, 네이 선! 그리고 처음부터 끝까지 친절하게 격려해준 모든 이에게 고개 숙여 감사한다. 가장 중요한 나의 가족 로럴, 이선, 테사, 찰리, 리사, 글렌, 리즈에게 감사한다. 그들의 격려가 없었다면 절대로 이 책을 낼 수 없었을 것이다. 사랑스러운 나의 아내 로럴, 당신의 인내에 감 사한다. 밤 늦은 집필 작업 때문에 매번 카리부 커피Caribou Coffe1 에 동행해주고 주말에도 아내에 게 소홀했던 나를 이해해줘서 감사한다. 일정을 맞추고 지속적으로 동기부여할 수 있게 해준 것에 감사한다. 지금부터 영원토록 당신을 사랑하겠다. _저자 조시 록하트 1 역자주_ 커피숍 체인의 이름이다. 지은이 조시 록하트 Josh Lockhart 조시 록하트는 웹 애플리케이션과 API를 빠르게 개발할 수 있는 초소형 PHP 프레임워크 슬림Slim을 개발했다. 또한 전 세계 PHP 개발자들에게 모범 사례를 장려하고 양질의 정보를 제공하는 권장안으로 유명한 ‘PHP The Right Way’를 창안했으며 지금도 운 영하고 있다. 조시는 노스캐롤라이나주 칼버러에 위치한 풀-서비스 웹 디자인, 개발, 마케팅 에이전시 업체인 뉴미디어 캠페인(http://www. newmediacampaigns.com/)에서 개발자로 일하고 있다. HTML, CSS, PHP, 자바스크립트, Bash와 다양한 콘텐츠 관리 프 레임워크를 이용한 맞춤 애플리케이션 만들기를 좋아한다. 2008년 노스캐롤라이나대학교 채플힐 캠퍼스 정보문헌학 과정을 수료 했으며 아내인 로럴과 함께 두 마리 개를 키우며 노스캐롤라이나주 채플힐에 거주하고 있다. 조시의 트위터(https://twitter.com/codeguy)를 팔로우하거나 깃허브(https://github.com/codeguy)에서 그의 오픈소스 프 로젝트들을 확인할 수 있다.
  • 17. 17 CONTENTS 옮긴이의 글 �������������������������������������������������������������������������������������������������������������������� 6 들어가며 ������������������������������������������������������������������������������������������������������������������������ 9 PART 1 언어 기능 CHAPTER 1 새로운 PHP 1.1 과거 ���������������������������������������������������������������������������������������������������������������������������� 27 1.2 현재 ���������������������������������������������������������������������������������������������������������������������������� 28 1.3 미래 ���������������������������������������������������������������������������������������������������������������������������� 30 CHAPTER 2 기능 2.1 네임스페이스 ���������������������������������������������������������������������������������������������������������������� 31 2.1.1 네임스페이스를 사용하는 이유 �������������������������������������������������������������������������������� 33 2.1.2 선언 ������������������������������������������������������������������������������������������������������������������� 34 2.1.3 임포트와 별칭 ������������������������������������������������������������������������������������������������������ 35 2.1.4 유용한 팁 ������������������������������������������������������������������������������������������������������������ 38 2.2 인터페이스로 코딩하기 ��������������������������������������������������������������������������������������������������� 40 2.3 트레이트 ���������������������������������������������������������������������������������������������������������������������� 45 2.3.1 트레이트를 사용하는 이유 �������������������������������������������������������������������������������������� 46 2.3.2 트레이트 생성 ������������������������������������������������������������������������������������������������������ 47 2.3.3 트레이트 사용 ������������������������������������������������������������������������������������������������������ 49 2.4 제너레이터 ������������������������������������������������������������������������������������������������������������������� 50 2.4.1 제너레이터 생성 ��������������������������������������������������������������������������������������������������� 51 2.4.2 제너레이터 사용 ��������������������������������������������������������������������������������������������������� 52
  • 18. 18 CONTENTS 2.5 클로저 ������������������������������������������������������������������������������������������������������������������������� 54 2.5.1 생성 ������������������������������������������������������������������������������������������������������������������� 55 2.5.2 상태 등록 ������������������������������������������������������������������������������������������������������������ 56 2.6 젠드 오피캐시 ��������������������������������������������������������������������������������������������������������������� 59 2.6.1 젠드 오피캐시 활성화 �������������������������������������������������������������������������������������������� 59 2.6.2 젠드 오피캐시 설정 ����������������������������������������������������������������������������������������������� 61 2.6.3 젠드 오피캐시 사용 ����������������������������������������������������������������������������������������������� 62 2.7 내장 HTTP 서버 ����������������������������������������������������������������������������������������������������������� 62 2.7.1 서버 실행 ������������������������������������������������������������������������������������������������������������ 63 2.7.2 서버 설정 ������������������������������������������������������������������������������������������������������������ 63 2.7.3 라우터 스크립트 ��������������������������������������������������������������������������������������������������� 64 2.7.4 내장 서버 감지 ����������������������������������������������������������������������������������������������������� 64 2.7.5 단점 ������������������������������������������������������������������������������������������������������������������� 65 2.8 다음 장에서 다룰 내용 ���������������������������������������������������������������������������������������������������� 65 PART 2 모범 사례 CHAPTER 3 표준 3.1 PHP-FIG 구조대 ���������������������������������������������������������������������������������������������������������� 70 3.2 프레임워크 상호운용성 ��������������������������������������������������������������������������������������������������� 70 3.2.1 인터페이스 ���������������������������������������������������������������������������������������������������������� 71 3.2.2 오토로딩 ������������������������������������������������������������������������������������������������������������� 71 3.2.3 코드 스타일 ��������������������������������������������������������������������������������������������������������� 71 3.3 PSR ��������������������������������������������������������������������������������������������������������������������������� 72 3.4 PSR-1: 기본 코드 스타일 ����������������������������������������������������������������������������������������������� 73 3.5 PSR-2: 엄격한 코드 스타일 �������������������������������������������������������������������������������������������� 74
  • 19. 19 3.6 PSR-3: 로거 인터페이스 ������������������������������������������������������������������������������������������������ 77 3.6.1 PSR-3 로거 작성 ������������������������������������������������������������������������������������������������ 78 3.6.2 PSR-3 로거 사용 ������������������������������������������������������������������������������������������������ 79 3.7 PSR-4: 오토로더 ���������������������������������������������������������������������������������������������������������� 80 3.7.1 왜 오토로더가 중요한가 ����������������������������������������������������������������������������������������� 80 3.7.2 PSR-4 오토로더 전략 ������������������������������������������������������������������������������������������ 81 3.7.3 PSR-4 오토로더 작성(을 하면 안 되는 이유) ������������������������������������������������������������� 82 CHAPTER 4 컴포넌트 4.1 컴포넌트를 사용하는 이유 ����������������������������������������������������������������������������������������������� 85 4.2 컴포넌트란 무엇인가 ������������������������������������������������������������������������������������������������������ 86 4.3 컴포넌트 vs. 프레임워크 ������������������������������������������������������������������������������������������������� 87 4.3.1 모든 프레임워크가 나쁜 것은 아니다 ������������������������������������������������������������������������ 88 4.3.2 알맞은 도구를 사용하라 ����������������������������������������������������������������������������������������� 89 4.4 컴포넌트 선택 ��������������������������������������������������������������������������������������������������������������� 90 4.4.1 쇼핑 ������������������������������������������������������������������������������������������������������������������� 90 4.4.2 선택 ������������������������������������������������������������������������������������������������������������������� 91 4.4.3 피드백 남기기 ������������������������������������������������������������������������������������������������������ 92 4.5 컴포넌트 사용 ��������������������������������������������������������������������������������������������������������������� 92 4.5.1 컴포넌트 설치 ������������������������������������������������������������������������������������������������������ 93 4.5.2 컴포넌트 사용법 ��������������������������������������������������������������������������������������������������� 94 4.5.3 예제 프로젝트 ������������������������������������������������������������������������������������������������������ 96 4.5.4 컴포저와 사설 저장소 ������������������������������������������������������������������������������������������ 100 4.6 컴포넌트 만들기 ���������������������������������������������������������������������������������������������������������� 101 4.6.1 벤더와 패키지명 ������������������������������������������������������������������������������������������������� 102 4.6.2 네임스페이스 ����������������������������������������������������������������������������������������������������� 103 4.6.3 파일시스템 구성 ������������������������������������������������������������������������������������������������� 103
  • 20. 20 CONTENTS 4.6.4 composer.json 파일 ����������������������������������������������������������������������������������������� 104 4.6.5 README 파일 ������������������������������������������������������������������������������������������������� 106 4.6.6 컴포넌트 구현 ���������������������������������������������������������������������������������������������������� 107 4.6.7 버전 관리 ���������������������������������������������������������������������������������������������������������� 109 4.6.8 패키지스트 등록 ������������������������������������������������������������������������������������������������� 109 4.6.9 컴포넌트 사용 ���������������������������������������������������������������������������������������������������� 111 CHAPTER 5 모범 사례 5.1 위험 제거, 유효성 검사, 예외 처리 ����������������������������������������������������������������������������������� 114 5.1.1 입력값 위험 제거 ������������������������������������������������������������������������������������������������ 114 5.1.2 유효성 검사 ������������������������������������������������������������������������������������������������������� 118 5.1.3 출력 예외 처리 ��������������������������������������������������������������������������������������������������� 119 5.2 비밀번호 �������������������������������������������������������������������������������������������������������������������� 120 5.2.1 사용자 비밀번호를 절대 알 수 없게 할 것 ���������������������������������������������������������������� 120 5.2.2 비밀번호에 절대 제한을 두지 말 것 ������������������������������������������������������������������������ 120 5.2.3 사용자 비밀번호를 절대 이메일로 보내지 말 것 �������������������������������������������������������� 121 5.2.4 사용자 비밀번호를 bcrypt로 해시하라 ������������������������������������������������������������������� 121 5.2.5 비밀번호 해싱 API ���������������������������������������������������������������������������������������������� 122 5.2.6 PHP 5.5.0 이전의 비밀번호 해싱 API ������������������������������������������������������������������� 127 5.3 날짜, 시간, 시간대 �������������������������������������������������������������������������������������������������������� 128 5.3.1 기본 시간대 지정 ������������������������������������������������������������������������������������������������ 128 5.3.2 DateTime 클래스 ���������������������������������������������������������������������������������������������� 129 5.3.3 DateInterval 클래스 ������������������������������������������������������������������������������������������� 130 5.3.4 DateTimeZone 클래스 �������������������������������������������������������������������������������������� 132 5.3.5 DatePeriod 클래스 �������������������������������������������������������������������������������������������� 133 5.3.6 nesbot/carbon 컴포넌트 ����������������������������������������������������������������������������������� 134 5.4 데이터베이스 �������������������������������������������������������������������������������������������������������������� 134
  • 21. 21 5.4.1 PDO 확장 �������������������������������������������������������������������������������������������������������� 135 5.4.2 데이터베이스 연결과 DSN ����������������������������������������������������������������������������������� 135 5.4.3 준비된 구문 ������������������������������������������������������������������������������������������������������� 138 5.4.4 쿼리 결과 ���������������������������������������������������������������������������������������������������������� 140 5.4.5 트랜잭션 ����������������������������������������������������������������������������������������������������������� 143 5.5 멀티바이트 문자열 ������������������������������������������������������������������������������������������������������� 147 5.5.1 문자 인코딩 ������������������������������������������������������������������������������������������������������� 147 5.5.2 UTF-8 데이터 �������������������������������������������������������������������������������������������������� 148 5.6 스트림 ����������������������������������������������������������������������������������������������������������������������� 149 5.6.1 스트림 래퍼 ������������������������������������������������������������������������������������������������������� 150 5.6.2 스트림 콘텍스트 ������������������������������������������������������������������������������������������������� 153 5.6.3 스트림 필터 ������������������������������������������������������������������������������������������������������� 154 5.6.4 사용자 정의 스트림 필터 �������������������������������������������������������������������������������������� 156 5.7 오류와 예외 ���������������������������������������������������������������������������������������������������������������� 159 5.7.1 예외 ����������������������������������������������������������������������������������������������������������������� 160 5.7.2 예외 처리기 ������������������������������������������������������������������������������������������������������� 164 5.7.3 오류 ����������������������������������������������������������������������������������������������������������������� 165 5.7.4 오류 처리기 ������������������������������������������������������������������������������������������������������� 167 5.7.5 개발 과정에서 오류와 예외 다루기 ������������������������������������������������������������������������� 169 5.7.6 프로덕션 ����������������������������������������������������������������������������������������������������������� 171 PART 3 배포, 테스팅, 튜닝 CHAPTER 6 호스팅 6.1 공유 서버 ������������������������������������������������������������������������������������������������������������������� 177 6.2 가상 사설 서버 ������������������������������������������������������������������������������������������������������������ 178
  • 22. 22 CONTENTS 6.3 전용 서버 ������������������������������������������������������������������������������������������������������������������� 179 6.4 PaaS ������������������������������������������������������������������������������������������������������������������������ 179 6.5 호스팅 선택 ���������������������������������������������������������������������������������������������������������������� 180 CHAPTER 7 프로비저닝 7.1 목표 �������������������������������������������������������������������������������������������������������������������������� 182 7.2 서버 설정 ������������������������������������������������������������������������������������������������������������������� 182 7.2.1 최초 로그인 ������������������������������������������������������������������������������������������������������� 183 7.2.2 소프트웨어 업데이트 ������������������������������������������������������������������������������������������� 183 7.2.3 비루트 사용자 ���������������������������������������������������������������������������������������������������� 184 7.2.4 SSH 키 쌍 인증 ������������������������������������������������������������������������������������������������� 185 7.2.5 비밀번호 인증 및 루트 로그인 비활성화 ������������������������������������������������������������������ 187 7.3 PHP-FPM ���������������������������������������������������������������������������������������������������������������� 188 7.3.1 설치 ����������������������������������������������������������������������������������������������������������������� 188 7.3.2 전역 설정 ���������������������������������������������������������������������������������������������������������� 189 7.3.3 풀 설정 ������������������������������������������������������������������������������������������������������������� 190 7.4 엔진엑스 �������������������������������������������������������������������������������������������������������������������� 193 7.4.1 설치 ����������������������������������������������������������������������������������������������������������������� 193 7.4.2 가상 호스트 ������������������������������������������������������������������������������������������������������� 193 7.5 서버 프로비저닝 자동화 ������������������������������������������������������������������������������������������������ 197 7.6 서버 프로비저닝 위임 ��������������������������������������������������������������������������������������������������� 197 7.7 추가 자료 ������������������������������������������������������������������������������������������������������������������� 198 7.8 다음 장에서 다룰 내용 �������������������������������������������������������������������������������������������������� 198 CHAPTER 8 튜닝 8.1 php.ini 파일 ��������������������������������������������������������������������������������������������������������������� 199
  • 23. 23 8.2 메모리 ����������������������������������������������������������������������������������������������������������������������� 200 8.3 젠드 오피캐시 ������������������������������������������������������������������������������������������������������������� 201 8.4 파일 업로드 ���������������������������������������������������������������������������������������������������������������� 203 8.5 최대 실행 시간 ������������������������������������������������������������������������������������������������������������ 204 8.6 세션 처리 ������������������������������������������������������������������������������������������������������������������� 205 8.7 출력 버퍼링 ���������������������������������������������������������������������������������������������������������������� 205 8.8 리얼패스 캐시 ������������������������������������������������������������������������������������������������������������� 206 8.9 다음 장에서 다룰 내용 �������������������������������������������������������������������������������������������������� 206 CHAPTER 9 배포 9.1 버전 관리 ������������������������������������������������������������������������������������������������������������������� 207 9.2 배포 자동화 ���������������������������������������������������������������������������������������������������������������� 208 9.2.1 단순하게 ����������������������������������������������������������������������������������������������������������� 208 9.2.2 예측 가능하게 ���������������������������������������������������������������������������������������������������� 208 9.2.3 가역적으로 �������������������������������������������������������������������������������������������������������� 208 9.3 카피스트라노 �������������������������������������������������������������������������������������������������������������� 208 9.3.1 작동 ����������������������������������������������������������������������������������������������������������������� 209 9.3.2 설치 ����������������������������������������������������������������������������������������������������������������� 210 9.3.3 설정 ����������������������������������������������������������������������������������������������������������������� 210 9.3.4 인증 ����������������������������������������������������������������������������������������������������������������� 212 9.3.5 원격 서버 ���������������������������������������������������������������������������������������������������������� 212 9.3.6 카피스트라노 훅 ������������������������������������������������������������������������������������������������� 213 9.3.7 애플리케이션 배포 ���������������������������������������������������������������������������������������������� 214 9.3.8 애플리케이션 되돌리기 ���������������������������������������������������������������������������������������� 214 9.4 참고 자료 ������������������������������������������������������������������������������������������������������������������� 214 9.5 다음 장에서 다룰 내용 �������������������������������������������������������������������������������������������������� 215
  • 24. 24 CONTENTS CHAPTER 10 테스팅 10.1 테스트를 하는 이유 ������������������������������������������������������������������������������������������������������ 217 10.2 테스트 시점 ��������������������������������������������������������������������������������������������������������������� 218 10.2.1 개발 전 ������������������������������������������������������������������������������������������������������������� 218 10.2.2 개발 도중 ���������������������������������������������������������������������������������������������������������� 218 10.2.3 개발 후 ������������������������������������������������������������������������������������������������������������� 219 10.3 테스트 대상 ���������������������������������������������������������������������������������������������������������������� 219 10.4 테스트 방법 ���������������������������������������������������������������������������������������������������������������� 219 10.4.1 단위 테스트 ������������������������������������������������������������������������������������������������������� 220 10.4.2 테스트 주도 개발(TDD) ��������������������������������������������������������������������������������������� 220 10.4.3 행위 주도 개발(BDD) ������������������������������������������������������������������������������������������ 221 10.5 PHP유닛 ������������������������������������������������������������������������������������������������������������������� 222 10.5.1 디렉터리 구조 ���������������������������������������������������������������������������������������������������� 222 10.5.2 PHP유닛 설치 ��������������������������������������������������������������������������������������������������� 223 10.5.3 Xdebug 설치 ���������������������������������������������������������������������������������������������������� 224 10.5.4 PHP유닛 설정 ��������������������������������������������������������������������������������������������������� 224 10.5.5 Whovian 클래스 ����������������������������������������������������������������������������������������������� 226 10.5.6 WhovianTest 테스트 케이스 ������������������������������������������������������������������������������� 227 10.5.7 테스트 수행 ������������������������������������������������������������������������������������������������������� 230 10.5.8 코드 커버리지 ���������������������������������������������������������������������������������������������������� 231 10.6 트래비스 CI를 통한 지속적인 테스팅 ������������������������������������������������������������������������������� 232 10.6.1 설정 ����������������������������������������������������������������������������������������������������������������� 232 10.6.2 실행 ����������������������������������������������������������������������������������������������������������������� 233 10.7 참고 자료 ������������������������������������������������������������������������������������������������������������������� 234 10.8 다음 장에서 다룰 내용 �������������������������������������������������������������������������������������������������� 234
  • 25. 25 CHAPTER 11 프로파일링 11.1 프로파일러 사용 시점 ��������������������������������������������������������������������������������������������������� 235 11.2 프로파일러 종류 ���������������������������������������������������������������������������������������������������������� 236 11.3 Xdebug �������������������������������������������������������������������������������������������������������������������� 236 11.3.1 설정 ����������������������������������������������������������������������������������������������������������������� 237 11.3.2 발동 ����������������������������������������������������������������������������������������������������������������� 237 11.3.3 분석 ����������������������������������������������������������������������������������������������������������������� 238 11.4 XHProf ��������������������������������������������������������������������������������������������������������������������� 238 11.4.1 설치 ����������������������������������������������������������������������������������������������������������������� 238 11.4.2 XHGUI ������������������������������������������������������������������������������������������������������������ 239 11.4.3 설정 ����������������������������������������������������������������������������������������������������������������� 240 11.4.4 발동 ����������������������������������������������������������������������������������������������������������������� 240 11.5 뉴렐릭 프로파일러 ������������������������������������������������������������������������������������������������������� 241 11.6 블랙파이어 프로파일러 ������������������������������������������������������������������������������������������������� 241 11.7 참고 자료 ������������������������������������������������������������������������������������������������������������������� 242 11.8 다음 장에서 다룰 내용 �������������������������������������������������������������������������������������������������� 242 CHAPTER 12 HHVM과 Hack 12.1 HHVM ���������������������������������������������������������������������������������������������������������������������� 244 12.1.1 페이스북과 PHP ������������������������������������������������������������������������������������������������ 244 12.1.2 HHVM과 젠드 엔진의 동등성 ������������������������������������������������������������������������������� 246 12.1.3 HHVM은 내게 적당한가 �������������������������������������������������������������������������������������� 246 12.1.4 설치 ����������������������������������������������������������������������������������������������������������������� 247 12.1.5 설정 ����������������������������������������������������������������������������������������������������������������� 248 12.1.6 확장 ����������������������������������������������������������������������������������������������������������������� 249
  • 26. 26 CONTENTS 12.1.7 슈퍼바이저를 이용한 HHVM 관제 ������������������������������������������������������������������������� 249 12.1.8 HHVM, FastCGI, 엔진엑스 ��������������������������������������������������������������������������������� 251 12.2 Hack 언어 ����������������������������������������������������������������������������������������������������������������� 253 12.2.1 PHP를 Hack으로 변환하기 ��������������������������������������������������������������������������������� 253 12.2.2 타입이란 ����������������������������������������������������������������������������������������������������������� 254 12.2.3 정적 타이핑 ������������������������������������������������������������������������������������������������������� 256 12.2.4 동적 타이핑 ������������������������������������������������������������������������������������������������������� 256 12.2.5 Hack은 양손잡이다 �������������������������������������������������������������������������������������������� 257 12.2.6 Hack 타입 검사 ������������������������������������������������������������������������������������������������� 258 12.2.7 Hack 모드 �������������������������������������������������������������������������������������������������������� 258 12.2.8 Hack 문법 �������������������������������������������������������������������������������������������������������� 259 12.2.9 Hack 데이터 구조 ���������������������������������������������������������������������������������������������� 261 12.2.10 HHVM/Hack vs. PHP �������������������������������������������������������������������������������������� 262 12.3 참고 자료 ������������������������������������������������������������������������������������������������������������������� 264 CHAPTER 13 커뮤니티 13.1 지역 PUG ������������������������������������������������������������������������������������������������������������������ 265 13.2 컨퍼런스 �������������������������������������������������������������������������������������������������������������������� 266 13.3 멘토링 ����������������������������������������������������������������������������������������������������������������������� 266 13.4 최신 정보 ������������������������������������������������������������������������������������������������������������������� 266 13.4.1 웹 사이트 ���������������������������������������������������������������������������������������������������������� 266 13.4.2 메일링 리스트 ���������������������������������������������������������������������������������������������������� 267 13.4.3 트위터 �������������������������������������������������������������������������������������������������������������� 267 13.4.4 팟캐스트 ����������������������������������������������������������������������������������������������������������� 267 13.4.5 유머 ����������������������������������������������������������������������������������������������������������������� 267