PHP/4단계 PHP 닌자비법서

PHP 닌자비법서. 목차 및 중간 리뷰

에혀 2020. 2. 9.

평점 : 10점 ㅠ

 

PHP 절차형 기법으로 대충 돌아가는 것은 알았으니까, 다음 언어로 파이썬을 할까. Node.js 를 할까 고민하던 차에... 평점이 괜찮아서 전자책 구입 후, 살펴보는데, 그냥 2~3일 쭉 읽어보고 팁만 취하자는 생각이였다. 다 똑같겠지 뭐.. 이런.

 

그란데말이죠..... ㅠㅠㅠㅠㅠㅠ

그냥 달라... 완전 달라....

 

 

 

이 책은

본격 PHP 7.x 버전의 문법과 함수 사용.

함수와 템플릿, 객체를 최대한 이용. ( 단순 include, require 정도로 충분하다며 만족했었는데.. )

처음 내가 배우고, 익숙해진 방식 ㅠㅠ

$conn = mysqli_connect('localhost','test','password','dbname') or die();
$sql = "select * from table";
$result = mysqli_query($conn, $sql);


while ($row = mysqli_fetch_array($result)){
 echo $row[0];
}

// pdo 방식 db 접근 / query

try {
  $pdo = new PDO('mysql:host=localhost;dbname=ninja;charset=utf8', 'test', 'password');
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  $sql = 'SELECT * FROM `table`';
  $result = $pdo->query($sql);
  
** 반복문
  }

}
catch (PDOException $e) {
  $title = '오류가 발생했습니다';

  $output = '데이터베이스 오류: ' . $e->getMessage() . ', 위치: ' .
  $e->getFile() . ':' . $e->getLine();
}

기존 PHP 와 비교하면, 새 언어를 배우는 것 같다. 

PHP OOP 방식이나 최신 문법 익히느니, 다른 언어 한다는 의견이 뼈때리게 와 닿았다.

잘 하는 짓인지 모르겠다는 생각도 반반 들면서....

서문에서 저자가 강조한 말 때문에 책을 계속 붙잡게 했다.

( 쉽게 접할 수 없는 훌륭한 지식이 너무나 많았다. )

 

우리가 배울 것은 PHP가 아니다


이 책은 전적으로 PHPMySQL에 중점을 두고 있지만 PHP를 배운다고 생각하는 함정에 빠
지지 말아야 한다. 물론
PHP를 배우긴 한다. 하지만 이 책은 코드를 작성하는 법을 가르치는
수단으로
PHP를 이용할 뿐이다. ( <-- 코딩 교육용으로 파이썬을 선택하는 비율이 늘고 있다는 말과 같지 않나? )
.

.
여러분이 배우게 될 프로그래밍 개념은 앞으로 여러분이 배울 거의 모든 프로그래밍 언어에 적
용할 수 있다. 물론 약간의 차이는 있겠지만 근간을 이루는 개념은 모두 같다.
일단 한 프로그래밍 언어에 능숙해지면 다른 언어도 쉽게 익힐 수 있다. 며칠만 공부하면 일
정한 수준에 이른다. 그러니 이 책을 볼 때
PHP를 배운다’가 아닌 ‘코딩을 배운다’고 생각하기
바란다. 문법보다 개념을 숙지하는 것이 중요하다. 

이 책에서 여러 종류의 하마에 대해 미리 경고하겠지만 적용과 확인은 스스로 해봐야 한다. 직
접 뛰어들어 경험하라. 아무 코드라도 작성하라. 처음에는 되는 일이 거의 없겠지만 그 과정에
서 뭔가 얻을 것이다. 시행착오를 겪고 다른 접근 방법을 시도하다 보면 어느 순간 제대로 된
결과를 얻을 수 있다. 자신이 쓸 수 있는 도구의 한계와, 자신이 마주칠 문제를 인지하고 나서
야 프로그램을 설계할 수 있는 법이다

 

CHAPTER 1 환경 설정
1.1 웹 서버 설치 ............................................................................................................ 27
1.1.1 방법 1 : 개별 소프트웨어 수동 설치 ...................................................................... 28
1.1.2 방법 2 : 통합 설치 ........................................................................................... 29
1.1.3 방법 3 : 가상 서버 ........................................................................................... 29
1.2
OS별 가상 서버 설치 ................................................................................................. 31
1.2.1 윈도우 환경 ..................................................................................................... 31
1.2.2 OS 환경 ..................................................................................................... 31
1.2.3 리눅스 환경 ..................................................................................................... 32
1.3
베이그런트 실행 ....................................................................................................... 32
CHAPTER 2 PHP 기본
2.1 기초 문법과 구문 ....................................................................................................... 40
2.2
변수, 연산자, 주석 ...................................................................................................... 43
2.2.1 변수 ............................................................................................................... 43
2.2.2 주석 ............................................................................................................... 44
2.2.3 연산자 ............................................................................................................ 44
2.3
제어문 ..................................................................................................................... 45
2.3.1 if................................................................................................................ 46
2.4 반복문 ..................................................................................................................... 51
2.4.1 for.............................................................................................................. 51
2.4.2 while.......................................................................................................... 54
2.5
배열 ........................................................................................................................ 59
2.6
사용자 상호작용과 폼 ................................................................................................. 65
2.6.1 링크를 이용한 변수 전달 .................................................................................... 66
2.7
폼 변수 전달 ............................................................................................................. 73
2.7.1 GET vs POST ................................................................................................ 76
2.8
구조화 .................................................................................................................... 76
2.8.1 PHP 템플릿 .................................................................................................... 76
2.8.2 보안 고려 사항 ................................................................................................. 79
2.8.3 다중 템플릿, 단일 컨트롤러 ................................................................................. 82
2.9
마치며 ..................................................................................................................... 85
CHAPTER 3 MySQL
3.1 데이터베이스 ............................................................................................................ 88
3.2
MySQL 워크벤치를 이용한 SQL 쿼리 실행 ................................................................... 89
3.3
데이터베이스 생성 ..................................................................................................... 95
3.4
구조화된 쿼리 언어(SQL) ........................................................................................... 97
3.5
테이블 생성 ............................................................................................................. 99
3.6
데이터 추가 .................................................................................................... 104
3.7
예약어 ................................................................................................................... 109
3.8
데이터 조회 ............................................................................................................ 111
3.9
데이터 수정 ............................................................................................................ 115
3.10
데이터 삭제 .......................................................................................................... 116
3.11
PHP를 통한 쿼리 실행 ........................................................................................... 116
CHAPTER 4 MySQL 데이터와 웹 출력
4.1 개요 ...................................................................................................................... 120
4.2
MySQL 사용자 계정 생성 ......................................................................................... 121
4.3
PHP를 이용한 MySQL 접속 .................................................................................... 125
4.4
객체 지향 프로그래밍 훈련 ........................................................................................ 131
4.4.1 커넥션 설정 ................................................................................................... 133
4.5
PHP를 이용한 SQL 쿼리 전송 ................................................................................. 137
4.6
SELECT 결과 처리 ................................................................................................. 140
4.7
확장성 예측 ............................................................................................................ 148
4.8
데이터 추가 폼 ........................................................................................................ 159
4.9
데이터 삭제 ........................................................................................................... 169
4.10
완성 .................................................................................................................... 176
CHAPTER 5 관계형 데이터베이스 디자인
5.1 테이블 확장 ............................................................................................................ 178
5.2
디자인 원칙 : 엔티티 분리 .......................................................................................... 181
5.3
다중 테이블 SELECT .............................................................................................. 185
5.4
단순 관계 ............................................................................................................... 190
5.5
다대다 관계 ............................................................................................................ 193
5.6
마치며 ................................................................................................................... 196

CHAPTER 6 구조적 프로그래밍
6.1 인클루드 ................................................................................................................ 198
6.1.1 HTML ........................................................................................................ 199
6.1.2 PHP 코드 ..................................................................................................... 201
6.1.3 인클루드 형태 ................................................................................................ 204
6.2
사용자 정의 함수와 라이브러리 .................................................................................. 205
6.2.1 변수 스코프 ................................................................................................... 208
6.3
코드 분리와 함수 재사용 ........................................................................................... 214
6.3.1 쿼리 대체 함수 ............................................................................................... 221
6.3.2 데이터 수정 ................................................................................................... 223
6.3.3 유머 글 수정 페이지 ........................................................................................ 224
6.3.4 삭제 함수 ...................................................................................................... 227
6.3.5 목록 함수 ...................................................................................................... 228
6.4
마치며 ................................................................................................................... 230
CHAPTER 7 함수 고도화
7.1 update() 함수 개선 ................................................................................................. 232
7.1.1 쉼표 제거 ...................................................................................................... 235
7.1.2 insert() 함수 개선 ........................................................................................... 238
7.2
날짜 처리 ............................................................................................................... 242
7.2.1 날짜 출력 ...................................................................................................... 248
7.3
맞춤 연장 ............................................................................................................... 250
7.4
범용 함수 ............................................................................................................... 252
13
7.5
활용 ...................................................................................................................... 257
7.6
중복 코드 ............................................................................................................... 261
7.6.1 등록/수정 페이지 ............................................................................................ 262
7.7
폼 필드 처리 ........................................................................................................... 268
7.8
마치며 .................................................................................................................. 272
CHAPTER 8 객체와 클래스
8.1 클래스 ................................................................................................................... 275
8.2
publicprivate .................................................................................................... 279
8.3
객체 ...................................................................................................................... 280
8.4
클래스 변수 ............................................................................................................ 281
8.5
생성자 ................................................................................................................... 288
8.6
타입 힌트 ............................................................................................................... 291
8.7
Private 변수 .......................................................................................................... 293
8.8
DatabaseTable 클래스 사용하기 .............................................................................. 295
8.9
컨트롤러 ............................................................................................................... 300
8.10
Dont Repeat Yourself 원칙 ................................................................................. 303
8.11
컨트롤러 클래스 .................................................................................................... 304
8.12
단일 진입점 .......................................................................................................... 309
8.13
한 번 더, DRY 원칙 ............................................................................................... 315
8.14
템플릿 변수 .......................................................................................................... 320
8.15
extract 주의 사항 ................................................................................................. 323

CHAPTER 9 프레임워크 구축
9.1 검색 엔진 ............................................................................................................... 329
9.2
범용성 ................................................................................................................... 332
9.3
사용자 등록 ............................................................................................................ 333
9.4
의존성 ................................................................................................................... 338
9.5
URL 재작성 ........................................................................................................... 344
9.6
코드 정리 ............................................................................................................... 348
9.6.1 OOP 원칙 .................................................................................................... 349
9.7
웹사이트 호환 코드 .................................................................................................. 355
9.8
범용성과 특수성 ...................................................................................................... 356
9.8.1 범용 EntryPoint 클래스 .................................................................................. 358
9.9
오토로딩과 네임스페이스 .......................................................................................... 363
9.10
대소문자 .............................................................................................................. 365
9.11
오토로더 구현 ....................................................................................................... 366
9.12
디렉터리 구조 ....................................................................................................... 367
9.13
네임스페이스 ........................................................................................................ 369
9.14
PSR-4와 오토로딩 ............................................................................................... 372
9.15
컴포저 ................................................................................................................. 375
9.16
REST ................................................................................................................. 375
9.17
인터페이스와 의존성 .............................................................................................. 384
9.18
마치며 ................................................................................................................ 387
15
CHAPTER 10 사용자 계정
10.1 메일 주소 검증 ...................................................................................................... 398
10.2
중복 등록 방지 ...................................................................................................... 399
10.3
비밀번호 저장 ....................................................................................................... 403
10.4
마치며 ................................................................................................................. 406
CHAPTER 11 쿠키, 세션, 접근 제어
11.1 쿠키 .................................................................................................................... 410
11.2
PHP 세션 ............................................................................................................ 416
11.2.1 방문 카운터 ................................................................................................. 418
11.3
접근 제어 ............................................................................................................. 419
11.3.1 로그인 ........................................................................................................ 420
11.3.2 페이지 보호 ................................................................................................. 427
11.3.3 인터페이스와 반환 타입 ................................................................................. 431
11.3.4 Authentication 클래스 활용 .......................................................................... 433
11.3.5 로그인 오류 메시지 ....................................................................................... 434
11.4
로그인 폼 ............................................................................................................ 436
11.5
로그아웃 .............................................................................................................. 439
11.5.1 사용자 데이터 연동 ....................................................................................... 441
11.5.2 사용자 권한 ................................................................................................. 444
11.5.3 보안 ........................................................................................................... 446
11.6
마치며 ................................................................................................................. 449

CHAPTER 12 MySQL 관리
12.1 MySQL 데이터베이스 백업 .................................................................................... 453
12.1.1 MySQL 워크벤치 백업 .................................................................................. 453
12.1.2 mysqlpump 백업 ........................................................................................ 455
12.1.3 바이너리 로그 증분 백업 ................................................................................ 457
12.2
MySQL 권한 제어 ............................................................................................... 460
12.2.1 호스트명 ..................................................................................................... 461
12.2.2 비밀번호 분실 .............................................................................................. 463
12.3
인덱스 ................................................................................................................. 465
12.3.1 다중 칼럼 인덱스 .......................................................................................... 469
12.4
외래 키 ................................................................................................................ 471
12.5
마치며 ................................................................................................................. 474


CHAPTER 13 관계
13.1 객체 관계 매퍼 ...................................................................................................... 480
13.1.1 Public 속성 ................................................................................................. 481
13.1.2 엔티티 클래스 메서드 .................................................................................... 482
13.1.3 DatabaseTable 클래스와 엔티티 클래스 ......................................................... 485
13.1.4 Joke 엔티티 객체 ......................................................................................... 492
13.1.5 Joke 엔티티 클래스 ...................................................................................... 495
13.1.6 참조 변수 .................................................................................................... 496
13.1.7 List 컨트롤러 정리 ........................................................................................ 497
13.1.8 정리 ........................................................................................................... 499
13.2
캐싱 .................................................................................................................... 500
13.3 카테고리 .............................................................................................................. 502
13.3.1 목록 페이지 ................................................................................................. 506
13.4
카테고리 관계 구조 ................................................................................................ 508
13.4.1 카테고리 할당 .............................................................................................. 520
13.5
카테고리별 목록 .................................................................................................... 522
13.6
카테고리 해제 ....................................................................................................... 527
13.7
사용자 권한 .......................................................................................................... 531
13.8
권한 관리 폼 ......................................................................................................... 537
13.8.1 사용자 목록 ................................................................................................. 537
13.8.2 권한 설정 페이지 .......................................................................................... 539
13.8.3 권한 데이터 구조 .......................................................................................... 541
13.8.4 대안 ........................................................................................................... 542
13.8.5 이진 데이터 ................................................................................................. 543
13.8.6 비트 연산자 ................................................................................................. 545
13.8.7 권한 검사 .................................................................................................... 546
13.8.8 권한 데이터 저장 .......................................................................................... 548
13.8.9 조인 테이블과 비트 연산자 ............................................................................. 549
13.8.10 마무리 ...................................................................................................... 550
13.8.11 수정/삭제 권한 ........................................................................................... 551
13.9
마치며 ................................................................................................................. 554
CHAPTER 14 콘텐츠 서식과 정규표현식
14.1 정규표현식 ........................................................................................................... 559
14.2
정규표현식 일치 문자열 교체 ................................................................................... 562
14.2.1 텍스트 강조 ................................................................................................. 563
14.2.2 문단 ........................................................................................................... 568
14.2.3 하이퍼링크 .................................................................................................. 570
14.3
서식 변환 클래스 ................................................................................................... 572
14.4
정렬, 제한, 오프셋 ................................................................................................. 576
14.4.1 정렬 ........................................................................................................... 576
14.4.2 LIMITOFFSET ....................................................................................... 582
14.4.3 카테고리별 목록 ........................................................................................... 588
14.5
마치며 ................................................................................................................. 592
14.5.1 다음 단계 .................................................................................................... 593
APPENDIX 부록
A 예제 코드 저장소 ........................................................................................................ 596
B
리눅스 트러블슈팅 ...................................................................................................... 597
찾아보기 ....................................................................................................................... 599

댓글