이 책의 목적 ... xvii 당신이 알고 있어야 할 것 ... xix 이 책에서 사용되는 표기법 ... xxi 코드 예제 사용법 ... xxi 사파리(Safari) 사용 가능 ... xxii 연락처 ... xxii 감사의 말 ... xxii 독자 서비스 ... xxii 01장 시작하며 ... 1 웹 애플리케이션의 정의 ... 1 웹 애플리케이션의 개발 ... 3 아키텍처의 정의 ... 4 어떻게 시작해야 할까? ... 5 02장 웹 애플리케이션 아키텍처 ... 9 계층적 소프트웨어 아키텍처 ... 9 계층 기반 기술들 ... 13 소프트웨어 인터페이스 디자인 ... 15 규모의 변화 ... 18 소프트웨어/하드웨어 분리 ... 20 하드웨어 플랫폼 ... 20 공유 서버 호스팅 ... 23 전용 서버 호스팅 ... 23 콜로케이션 ... 23 자체 호스팅 ... 24 하드웨어 플랫폼의 성장 ... 25 입수용이성 및 선행 시간 ... 25 수입, 운송, 그리고 설치 ... 26 공간 ... 26 전력 ... 27 네트워크 운영 센터 ... 27 연결성 ... 28 잉여 하드웨어 ... 28 네트워킹 ... 29 언어, 기술, 그리고 데이터베이스 ... 32 03장 개발 환경 ... 35 세 가지 규칙 ... 35 소스 컨트롤 사용 ... 36 소스 컨트롤이란? ... 36 유틸리티 - 가지고 있으면 좋은 것 ... 42 소스 컨트롤 제품들 ... 46 소스 컨트롤에 넣어야 할 것들 ... 55 소스 컨트롤에 넣지 말아야 할 것들 ... 57 한 방 빌드 ... 57 직접 수정하기 ... 58 개발 환경 만들기 ... 59 릴리스 절차 ... 61 릴리스 관리 ... 64 자동화하지 말아야 할 것들 ... 66 이슈 관리 ... 68 최소한의 기능들 ... 69 이슈 관리 소프트웨어 ... 69 관리할 것들 ... 73 이슈 관리 전략 ... 74 CADT ... 76 개발 모델의 확장 ... 77 코딩 규범 ... 78 테스트 ... 81 회귀 테스트 ... 81 수동 테스트 ... 82 04장 i18n, L10n 그리고 유니코드 ... 85 국제화와 지역화 ... 86 웹 애플리케이션의 국제화 ... 86 웹 애플리케이션의 지역화 ... 88 유니코드란? ... 90 유니코드 인코딩 ... 92 바이트 순서 표기 ... 96 UTF-8 인코딩 ... 97 UTF-8 웹 애플리케이션 ... 98 출력 관리 ... 98 입력 관리 ... 100 PHP에서의 UTF-8 사용 ... 100 다른 언어에서의 UTF-8 사용 ... 102 MySQL에서 UTF-8 사용 ... 102 이메일에서의 UTF-8 사용 ... 104 자바스크립트에서의 UTF-8 사용 ... 107 API에서의 UTF-8 사용 ... 108 05장 데이터 무결성과 보안 ... 111 데이터 무결성 정책 ... 112 적합, 유효, 그리고 무효 ... 113 UTF-8 필터링 ... 114 제어 문자 필터링 ... 120 HTML 필터링 ... 122 HTML을 사용하는 이유 ... 122 HTML 입력 필터링 ... 123 블랙리스트와 화이트리스트 ... 124 대조 ... 124 HTML 다루기 ... 125 크로스 사이트 스크립팅(XSS) ... 126 기본적인 결함 ... 126 사용자 입력 결함 ... 128 태그와 괄호 대조 ... 129 프로토콜 필터링 ... 132 SQL 주입 공격 ... 135 SQL 주입 공격 완화 ... 136 SQL 주입 공격 회피 ... 138 06장 이메일 ... 145 이메일 받기 ... 145 애플리케이션에서 이메일 수신하기 ... 148 대안적인 접근법 ... 149 MIME 형식 ... 150 간단한 MIME 이메일 분석 ... 152 UU 인코딩된 첨부 파일의 분석 ... 154 TNEF 첨부 파일 ... 155 무선통신사업자들은 당신을 싫어한다 ... 158 문자 집합과 인코딩 ... 161 사용자 인식 ... 163 단위 테스트 ... 165 07장 원격 서비스 ... 169 원격 서비스 클럽 ... 170 소켓 ... 170 HTTP 사용 ... 174 HTTP 요청/응답 주기 ... 174 HTTP 인증 ... 177 HTTP 요청 만들기 ... 178 원격 서비스 잉여성 ... 180 비동기 시스템 ... 184 XML 교환 ... 188 XML 파싱 ... 189 REST ... 191 XML-RPC ... 192 SOAP ... 193 경량 프로토콜 ... 194 메모리 사용 ... 194 네트워크 속도 ... 195 분석 속도 ... 195 쓰기 속도 ... 196 문제점 ... 196 만들기 ... 197 08장 병목 현상 ... 201 병목 지점 찾기 ... 202 소프트웨어 컴포넌트별 애플리케이션 영역 ... 204 하드웨어 컴포넌트별 애플리케이션 영역 ... 206 CPU 사용량 ... 208 코드 프로파일링 ... 210 Opcode 캐싱 ... 212 템플릿 속도 향상 ... 214 일반적인 해결책 ... 215 입출력(I/O) ... 216 디스크 입출력 ... 216 네트워크 입출력 ... 221 메모리 입출력 ... 226 메모리와 스왑 ... 227 외부 서비스와 블랙 박스 ... 231 데이터베이스 ... 231 쿼리 현장 검사 ... 232 쿼리 프로파일 ... 235 쿼리 및 인덱스 최적화 ... 236 캐시 ... 241 비정규화 ... 244 09장 웹 애플리케이션의 범위 가변성 ... 249 범위 가변성에 대한 미신 ... 250 범위 가변성이란? ... 250 하드웨어 범위 가변성 ... 251 수직적 범위 가변성 ... 252 수평적 범위 가변성 ... 253 지속적인 작업 ... 256 잉여성 ... 256 네트워크 범위 가변성 ... 261 PHP 범위 가변성 ... 262 부하 분산 ... 264 하드웨어를 통한 부하 분산 ... 266 소프트웨어를 통한 부하 분산 ... 267 4계층(L4) ... 269 7계층(L7) ... 270 대규모 분산 ... 273 비 HTTP 트래픽의 분산 ... 277 MySQL 범위 가변성 ... 280 저장소 뒷단 ... 280 MyISAM ... 282 InnoDB ... 283 BDB ... 284 Heap ... 285 MySQL 복제 ... 285 마스터-슬레이브 복제 ... 286 트리 복제 ... 288 마스터-마스터 복제 ... 290 복제 장애 ... 292 복제 지연 ... 293 데이터베이스 파티셔닝 ... 295 클러스터링 ... 295 연합 ... 297 대규모 데이터베이스 범위 가변성 ... 299 저장소 범위 가변성 ... 301 파일시스템 ... 302 프로토콜 ... 302 RAID ... 304 연합 ... 307 캐시 ... 309 데이터 캐시 ... 310 HTTP 요청 캐시 ... 311 10장 통계, 감시, 경보 ... 315 웹 통계 추적 ... 316 서버 로그 파일 ... 317 분석 ... 318 비컨의 사용 ... 319 분산 ... 322 부하 분산기 ... 324 사용자 계측 추적 ... 325 애플리케이션 감시 ... 327 대역폭 감시 ... 328 장기적 시스템 통계 ... 329 사용자 정의 시각화 ... 345 경보 ... 347 업타임 검사 ... 348 자원 수위 감시 ... 348 한계값 검사 ... 348 저수위 검사 ... 349 11장 API ... 351 데이터 피드 ... 351 RSS ... 352 RDF ... 355 Atom ... 357 기타 피드 형식 ... 358 피드 자동 탐지 ... 359 피드 템플릿 ... 359 OPML ... 361 피드 인증 ... 362 모바일 ... 365 WAP ... 366 XHTML 모바일 프로필 ... 367 웹 서비스 ... 370 API 전송 ... 373 REST ... 373 XML-RPC ... 374 SOAP ... 377 전송 방식 추상화 ... 381 API 오용 ... 383 API 키를 통한 감시 ... 383 조절 ... 384 캐시 ... 385 인증 ... 386 무인증 ... 387 일반 텍스트 ... 387 MAC ... 388 토큰 기반 시스템 ... 388 전망 ... 390 찾아보기 ... 391