결론적으로 말하자면, 이 책은 PHP초보 개발자와 기초를 좀 더 확실히 다져서 라라벨 같은 인기 프레임워크에 도전 하려는 초중급 개발자에게 최고의 교과서라고 생각합니다.
구글의 엔지니어인 데이비드 스클라가 알려 주는 쉽고 놀라운 PHP 언어만의매력을 꼭 한번 체험해 보길 바랍니다.
1. 기본 정보
(1) 제목: 러닝 PHP (PHP입문에서 프레임워크를 활용한 실전 프로그래밍까지)
(2) 저자: 데이비드스클라
(3) 번역: 정병열
(4) 발행: 2017년 04월 01일
(5) 출판사: 한빛미디어
2. 누가 이 책을 읽어야 할까?
이 책은 다음과 같은 사람들에게 매우 유용합니다.
(1) PHP 개발을 이제 막 시작하는 초보 개발자, 그래서 훌륭한 지침서가 필요한 개발자
(2) 아직도 PHP 5.2이하의구닥다리 환경에서 개발하고 있는 프로그래머
(3) 워드프레스, XE와같은 유명 PHP CMS의 확장 기능을 개발하고자 하는 개발자
(4) PHP 코드를 이해하고 동료 개발자와의 협업을 원활하게 하고자하는 프론트엔드 개발자와 디자이너
3. 지갑을 열게 하는 이 책만의 장점
(1) 번역이 깔끔하여 읽고 이해하는데 전혀 지장이 없습니다.
(2) PHP 7의 최신 내용을 담고 있는 기본서이자 업무에 즉시적용이 가능한 실용서입니다.
(3) 예제 소스는 PHP 표준권고(PSR)를 준수함으로 올바른 코딩 스타일을 익히는데 도움이 됩니다.
(4) 초보 프로그래머를 위해 PHP프로그래밍의의 기본 규칙에서 데이터(문자, 숫자, 변수 등) 다루기까지 상세히 설명하고 있습니다.
(5) DB 조작을 위한 PDO 객체, 다국어 홈페이지 구축을 위한 국제화와 지역화, 예외처리와 디버깅등 홈페이지 구축에 필요한 필수 주제를 자세히 다루고 있습니다
(6) 각 장의 말미에 지금까지 다룬 내용을 핵심만 짧게 요약하여기술해 줍니다.
(7) 각 주제를 완벽하게 학습하도록 도와주는 연습문제와 해답풀이를제공합니다. (연습문제를 꼭 풀어 보세요.)
4. 함께 읽으면 좋아요.
이 책을 통해서 PHP의 문법, 함수, DB조작, 패키지 설치, 디버깅등을 익히고 나면 실제 간단한 웹사이트를 스스로 구축할 수 있습니다.
단만 현장에서 여러 개발자와 협업을 통해 비즈니스용 시스템을 구축하기 위해서는 고급 개발방법에 대한 심화학습이요구됩니다. 특히 요즘에는 다양한 프레임워크 기반의 현대적인 PHP7 기술로 개발을 해야 합니다.
객체지향 코딩, 코드 재활용을 위한 트레이트 사용, 협업을 위한 네임스페이스와 PSR 표준 코딩법, Composer에 의한 컴포넌트 관리 그리고 PHP의 최적화 방법등이 이에 해당됩니다.
그래서 열거한 기술들을 자세히 살펴 볼 수 있는 책들을 아래에 소개합니다.
* Modern PHP: 조시 록하트, 한빛미디어
* 만들면서 배우는CodeIgniter 프레임워크: 변종원, 한빛미디어
* 쉽게 배우는 라라벨5 프로그래밍: 정광섭, 위키북스
* 라라벨로 배우는 실전 PHP 웹프로그래밍: 김주원, 제이펍
5. 목차 별 핵심내용
개발에 필요한 필수 지식 중에 이 책에서 주목해야 할 주제에 대해서 간략하게 소개하고자 합니다. 1장에서 7장까지의 내용은 기초 중에 기초인 변수, 조건문, 반복문, 배열, 함수, 파일, 객체에대한 내용이지만 정말 딱 필요한 핵심만 짚어 설명하고 있으므로 부담 없이 읽어 보면 됩니다. 단, 연습문제는 반드시 풀어 보길 당부 드립니다.
참고로 6장의 주제인 객체(Object)은별도의 서적을 봐야 할 정도로 방대한 내용이고 고급 주제입니다. 아쉽게도 국내에는 PHP 객체지향을 다룬 책이 없습니다. 원서를 참고하든지 Java 언어 관련 책을 참조해야 합니다.
08장. 정보 저장: 데이터베이스
PHP 관련 도서를 볼 때 가장 불만스러웠던 점이 MySQL에 대해 너무 많은 분량을 할애한다는 것입니다. 분명 PHP 서적인데 MySQL에 대한 분량이 거의 절반인 경우도 많습니다. 이런 관점에서 이 책은 적절하게 이 장에서만 MySQL을 이용한데이터 조작CRUD를 상세히 다루고 있습니다.
특히 DB를 다룰 때 mysqli 확장보다 PDO를 사용하여 설명한 것이 큰 장점이라 생각합니다. 그리고 SQL injection 공격에대비한 Prepared 구문에 대해서도 다루고 있습니다.
09장. 파일 다루기
파일 조작이 데이터베이스보다 중요도가 떨어진다고 생각하겠지만 요즘 개발에서 다양한 형식의 파일을 다룰 일이 많습니다. 예들 들어 서로 다른 시스템에서 데이터를 주고 받을 때 Json 형식을사용한다든지, 다국어를 위한 랭귀지 파일을 읽고 수정하기 쉬운 csv형식으로 제작한다든지, 설정 내역을 키-값 형식의 ini 파일에 저장하는 경우가 이에 해당됩니다.
그래서 이 장에서는 파일 조작형태에 따라 유용한 내장 함수에 대해서 설명하고 있습니다. 즉, 전체 파일을 읽고 쓰는 함수(file_get_contents(),file_put_contents() 함수), 파일 일부분을 읽고 쓰는 함수(file(), fopen(), fget(), fput(), feof(), fclose()), csv 파일 관련함수(fgetsvc(), fputcsv()), 파일 권한 체크 함수(is_readable(),is_writable()) 그리고 외부에서 입력 받은 파일명에서 불필요한 문자를 제거하여 안전하게 사용하는 보안 처리에 대해서 다루고있습니다.
10장. 사용자 추적: 쿠키와 세션
정보 보안 차원에서 쿠키 사용을 권장하지 않지만, 개인정보가 아닌사용자 경험을 임시 저장하는 방법으로 쿠키가 널리 사용되고 있습니다. 이러한 간편한 쿠키 조작을 위한쿠키 저장, 쿠키 읽기, 쿠키 삭제 등에 대해서 다룹니다. 마찬가지로 서버에 저장되는 세션 조작을 위해 세션 저장, 세션 읽기, 세션 유지 및 삭제 등에 대해서 상세히 배우게 됩니다.
12장. 디버깅
오류의 종류에 대해 학습하고 실제 오류의 예제를 살펴 볼 수 있습니다. 간단한디버깅 출력을 위한 print, var_dump(), error_log() 함수에 대해서 살펴보고, PHP에서 제공하는 phpdbg디버거를 이용한 프로그램 디버깅에대해서 알아봅니다. 실무에서는 phpdbg보다 Xdebug 디버거를 많이 사용하지만 이에 대해서는 별도로 설명하지 않습니다.
그리고 try~ catch 예외 처리에서도 잡지 못하는 예외를 처리하기위한 전역 예외 처리 함수인 set_exception_handler()에 대해서도 배웁니다.
15장. 날짜와 시간 처리
PHP 실무를 하다 보면 반복적으로 사용하는 함수가 날짜, 시간 관련 함수입니다. 이 장에서는 전통적인 date()와 같은 날짜 함수보다 새로운 DateTime 클래스를이용한 진보된 날짜 처리 테크닉을 알려 줍니다.
기본적인 날짜 출력 객체인 DateTime 클래스, 날짜 출력형식을 지정하는 format() 메서드, 부분 문자열로 날짜/시간을 지정하는 setDate(), setTime() 메서드, 두 날짜 사이의 간격을돌려주는 diff() 메서드 등에 대해서 설명합니다.
16장. 패키지 관리
현대적인 PHP로 개발하고 있느냐 아니냐의 잣대가 되는 것이 바로이름공간(Namespace)과 이 장에서 설명하는 패키지 의존성 관리 도구인 Compose의 사용유무일 것입니다.
composer는 사용법이 매우 간단합니다. 특히 많은 콤포넌트를 사용하더라도 자동 로딩을 보장하고 패키지 사이의 버전 의존성을 쉽게 관리할 수 있습니다. 그리고 이미 만들어진 안정된 콤포넌트를 설치하여 활용하면 개발 기간을 획기적으로 단축 시킬 수 있으므로 composer 사용은 필수라고 해도 과언이 아닙니다.
이 장에서는 composer의 설치 방법, 패키지 저장소인 패키지스트에서의 패키지 검색, 다운로드 방법 그리고내 시스템에 composer를 이용하여 다운로드 받은 패키지를 실제 설치하는 방법 등에 대해서 배우게됩니다.
17장. 메일 보내기
앞 장에서 composer 사용법을 익혔다면 이번 장은 정말 쉽습니다.
PHP에서 제공하는 mail() 함수는너무 단순해서 복잡한 메일 형식을 보낼 때 개발자가 추가의 코딩을 해야 하는 노력이 필요합니다.
하지만 composer를 통해 스위프트(swiftmailer) 라는 메일러를 설치하면 몇 개의 객체 메서드를 통해 다양한 기능의 메일 발송을 쉽게 구현할수 있습니다. 이러한 메서드의 자세한 사용 방법은 이 책에서 제공하지는 않지만 제작사의 온라인 매뉴얼을참조하면 쉽게 여러 가지 기능을 구현할 수 있습니다.
18장. 프레임워크
이 장에서 설명하는 주제인 프레임워크는 별도의 책 한 권에 담기에도 방대한 분량이므로 해당 프레임워크에 대한서적을 별도로 구매해서 학습해야 합니다. 다만 이 책에서 소개하는 프레임워크는 현재 PHP 개발자들 사이에서 가장 주목 받고 있는 프레임워크 3총사(라라벨, 심포니, 젠드)에 대해서 간략하게 설명합니다. 참고로 국내에서는 라라벨과 CodeIgniter 프레임워크 사용자가 많습니다.
19장. 명령행 PHP
명령 행 PHP는 PHP CLI라고합니다. 주로 콘솔에서 사용하는 대화형 셸을 PHP 언어로구현할 때 필요한 기술입니다. 일반 PHP 웹 프로그램과별 차이는 없고 콘솔에서 입력 받은 인수를 저장하고 있는 $_SERVER[‘argv] 배열만 익혀 놓으면됩니다.
그리고 잘 사용하지는 않지만 PHP가 내장하고 있는 소형 내장 웹서버와 PHP REPL에 대해서 배우게 됩니다. (실무에서는 흔하게 사용되지는않습니다.) 다만 예제에 사용된 smplexml_load_file()함수가 XML 파일 사용 시 자주 사용되는 유용한 함수이므로 예제를 주의 깊게 보면 명령행에서 원격의 XML파일을 조작하는 팁을 익히게 됩니다.
20장. 국제화 지역화
다국어 홈페이지를 개발할 때 접하게 되는 문제는 이 장에서 설명하는 국제화와 지역화에 대한 경험과 개념이 부족해서발생하게 됩니다.
8 페이지 분량에 다국어 개발에 필요한 핵심 개념이 모두 담겨 있으니꼭 읽어 보고 실전에 활용했으면 좋겠습니다.
우선 텍스트 처리를 위해 mb_strlen(), ms_substr()와같은 mbstring 확장 함수에 대해 배우게 됩니다. 문자열정렬을 위해 로케일에 따른 Collator 클래스와 sort(),asort(), strcmp() 등의 정렬 메서드의 사용법을 배우게 됩니다.