• 스케일러블 웹사이트 구축
  • 확장성 있는 웹사이트 만들기

  • 칼 헨더슨 지음
  • 김슬기 옮김

  • 오픈소스 & 웹 시리즈 _ 024
  • ISBN: 9788992939454
  • 25,000원 | 2010년 11월 18일 발행 | 424쪽



이 책은 웹 애플리케이션의 디자인, 즉 웹 애플리케이션의 소프트웨어와 하드웨어의 디자인에 초점을 맞추고 있다. 우리는 애플리케이션 아키텍처와 개발 기법 그리고 기술 동향과 유니코드 및 전반적인 기반 시설에 대해 살펴볼 것이다. 또한 중요한 점은 이 책은 웹 애플리케이션의 개발, 즉 하드웨어의 구축과 디자인한 소프트웨어 시스템의 구현에 관한 책이라는 것이다. 애플리케이션 디자인 이론도 중요하지만 (그리고 전체적인 작업에 있어서 필수적인 요소이지만) 대규모 애플리케이션 개발에 있어서 구현이 중요한 부분을 차지한다는 점을 인지하고 디자인 작업시 항상 명심해야 한다. 구현할 수 없는 것을 디자인한다면 우리가 올바른 것을 디자인하고 있는지 알 수 없을 것이다.

이 책은 프로그래밍에 대한 책이 아니다. 적어도 그렇게 표방하지는 않는다. 코드 조각이나 함수 이름들을 설명하기 보다 우리는 웹 애플리케이션 개발의 일반화된 기법과 방법을 살펴볼 것이다. 책 안에서 예제 코드 조각들을 만나게 되겠지만 이들은 말 그대로 예제일 뿐이다. 이 책의 대부분의 코드 예제는 대규모 애플리케이션이나 기반 환경의 상황에서만 사용이 가능할 것이다.

우리가 살펴볼 대부분의 내용은 애플리케이션 아키텍처를 디자인하고 애플리케이션 기반 시설을 구축하는 것과 관련이 있다. 웹 애플리케이션 분야에서는 기반 시설은 대개 하드웨어 플랫폼과 소프트웨어 플랫폼 그리고 관리 및 개발 기법의 조합을 의미한다. 우리는 이러한 요소를 조합하여 대규모 애플리케이션을 위한 매끈한 기반 시설을 구축하는 방법을 알아볼 것이다.

이 책에서 가장 많은 페이지를 차지하는 9장은 애플리케이션의 범위 가변성만을 다루고 있으며 범위 가변적인 디자인 방법과 기존 시스템의 확장을 도울 수 있는 기술과 기법을 설명할 것이다. 단 한 장만으로 이 분야의 모든 것을 담을 수는 없지만 (그리고 기본적인 것만을 다루기에도 이 책 전체로도 모자르지만) 일반적으로 애플리케이션들에게 가장 유용할만한 방법 두가지를 소개할 것이다. 하지만 이것이 범위 가변성의 모든 것을 망라하는 가이드가 아니라는 점과 그 외에도 배워야 할 것이 많이 있음을 알아두기 바란다. 범위 가변적인 기반 시설에 대한 입문을 위해서는 “Performance by Design: Computer Capacity Planning by Example”을 읽어보기 바란다.

이 책의 마지막에 가면 (10장 및 11장) 이벤트 감시과 수용성 계획을 위한 장기적인 통계 추적을 통해서 웹 애플리케이션을 지속적으로 운영하는 기법들을 살펴볼 것이다. 감시와 경보는 애플리케이션을 개발하고 이후 장시간 관리하길 원한다면 꼭 필요한 핵심 기술이다. 자체적인 컴포넌트를 가졌거나 아니면 그저 컴포넌트의 개수가 많은 애플리케이션을 감시하고 추적하는 도구를 디자인하고 만드는 작업은 대개 애플리케이션 디자이너에게 맡겨진다. 왜냐하면 애플리케이션의 디자이너가 감시해야 할 대상과 경보를 발송할만한 상태가 어떤 것인지를 가장 잘 아는 사람이기 때문이다. 우리는 시스템의 모든 컴포넌트가 동작하고 있고 또한 올바로 동작하고 있음을 확인하는 방법을 고안해야할 것이다.

가장 마지막 장에서 우리는 데이터를 공유하고 데이터 피드 및 읽고 쓰는 API를 통해 다른 애플리케이션이 우리의 애플리케이션과 통합할 수 있는 방법을 제공하는 것을 살펴볼 것이다. 이 책의 전반에 걸쳐서 컴포넌트 API를 디자인 하는 방법을 살펴볼 것이지만 마지막 장은 이러한 인터페이스를 외부로 안전하게 그리고 접근 가능한 방식으로 제공하는 방법을 다룰 것이다. 또한 우리는 데이터의 내보내기와 상호 작용과 관련하여 다양하게 발전해온 표준을 살펴보고 우리의 애플리케이션에서 이들을 제공하는 방법을 알아볼 것이다.

-- 서문 중에서

머리를 지끈거리게 하는 고비용 제품들 그리고 엔터프라이즈 애플리케이션 서버와 전용 프로그래밍 및 데이터베이스와 연관된 SLA이여 안녕! 이제 빠르게 범위를 확장할 수 있는 애플리케이션을 설계하고 개발하는 업계의 비법을 배워보자. Flickr.com의 선임 개발자의 경험에서 우러나온 『스케일러블 웹사이트 구축』은 당신의 사용자가 즐기게 될 고속 사이트를 만드는 기법을 알려줄 것이다.

인기 많은 사이트를 만들려면 많은 메모리와 하드디스크 용량을 갖춘 빠른 하드웨어 이상의 것이 필요하다. 뿐만 아니라 시간이 지남에 따라 성장하고 서로 기대치가 다른 사용자에게 동일한 자원에 접근하는 방식을 제시하며 사용자에게 불편을 주지 않고 또한 서로에게 방해되지 않도록 사이트를 개발하는 방법도 고민해야 할 것이다.

PHP 스크립트로 새로운 사이트를 만들고 있거나 기존의 사이트를 관리하고 있더라도 이 책을 통해 다음과 같은 유용한 아이디어를 얻을 수 있을 것이다.

  • 애플리케이션 기반의 소프트웨어 아키텍처를 디자인하는 방법
  • 프로그래머와 디자이너 그리고 사용자를 만족시키는 소프트웨어 개발 환경을 선택하고 운영하기
  • 애플리케이션 데이터를 손상 없이 안전하게 보관하기
  • 전 세계 사용자에게 정보를 제공하는 방법
  • 이메일과 웹 애플리케이션의 통합
  • 예산의 낭비 없이 필요한 만큼의 하드웨어를 구매하고 호스팅 방식을 기획하는 방법
  • 대규모의 데이터와 동시 트랜잭션을 지원하기 위한 데이터베이스의 파티션과 분산 방법
  • 애플리케이션을 감시하여 병목 지점을 찾고 제거하기
  • 공개 API를 제공하고 다른 제공자로부터 서비스를 사용하여 사이트의 범위와 역량을 증대시키는 방법

자그마한 웹사이트로 시작하여 크게 성장시킬 희망을 가지고 있거나 아니면 이미 대규모 시스템을 보유하고 있고 관리할 방법을 찾고 있더라도 『스케일러블 웹사이트 구축』은 성공을 위한 다양하고 방대한 아이디어를 제공할 것이다.

칼 헨더슨(Cal Henderson)

영국 출신인 칼 헨더슨은 캘리포니아 서니베일에 위치한 Yahoo!에서 근무하고 있으며 사진 공유 서비스인 Flickr의 엔지니어링 부장을 맡고 있다. Flickr 애플리케이션을 개발하기 전에는 영국의 미디어 회사인 'Emap’에서 각종 특수한 웹 프로젝트의 기술 부장으로 근무하였다.

김슬기

영국 버지스 힐에 위치한 아메리칸 익스프레스에서 프로그래머겸 분석가 로 일하고 있으며 영국에 정착하기 전에는 자바 프로그래머 및 PM으로서 국내의 반도체 및 내비게이션 소프트웨어 업계에서 근무하였다.

  • 01장 시작하며
    • 웹 애플리케이션의 정의
    • 웹 애플리케이션의 개발
    • 아키텍처의 정의
    • 어떻게 시작해야 할까?
    •  
  • 02장 웹 애플리케이션 아키텍처
    • 계층적 소프트웨어 아키텍처
    • 계층 기반 기술들
    • 소프트웨어 인터페이스 디자인
    • 규모의 변화
    • 소프트웨어/하드웨어 분리
    • 하드웨어 플랫폼
    • 하드웨어 플랫폼의 성장
    • 잉여 하드웨어
    • 네트워킹
    • 언어, 기술, 그리고 데이터베이스
    •  
  • 03장 개발 환경
    • 세 가지 규칙
    • 소스 컨트롤 사용
    • 한 방 빌드
    • 이슈 관리
    • 개발 모델의 확장
    • 코딩 규범
    • 테스트
    •  
  • 04장 i18n, L10n 그리고 유니코드
    • 국제화와 지역화
    • 유니코드란?
    • UTF-8 인코딩
    • UTF-8 웹 애플리케이션
    • PHP에서 UTF-8 사용
    • 다른 언어에서 UTF-8 사용
    • MySQL에서 UTF-8 사용
    • 이메일에서 UTF-8 사용
    • 자바스크립트에서 UTF-8 사용
    • API에서 UTF-8 사용
    •  
  • 05장 데이터 무결성과 보안
    • 데이터 무결성 정책
    • 적합, 유효, 그리고 무효
    • UTF-8 필터링
    • 제어 문자 필터링
    • HTML 필터링
    • 크로스 사이트 스크립팅 (XSS)
    • SQL 주입 공격
    •  
  • 06장 이메일
    • 이메일 받기
    • 애플리케이션에서 이메일 수신하기
    • MIME 형식
    • 간단한 MIME 이메일 분석
    • UU 인코딩된 첨부 파일의 분석
    • TNEF 첨부 파일
    • 무선 통신 사업자들은 당신을 싫어한다
    • 문자 집합과 인코딩
    • 사용자 인식
    • 유닛 테스트
    •  
  • 07장 원격 서비스
    • 원격 서비스 클럽
    • 소켓
    • HTTP 사용
    • 원격 서비스 잉여성
    • 비동기 시스템
    • XML 교환
    • 경량 프로토콜
    •  
  • 08장 병목 현상
    • 병목 지점 찾기
    • CPU 사용량
    • 입출력(I/O)
    • 메모리와 스왑
    • 외부 서비스와 블랙 박스
    •  
  • 09장 웹 애플리케이션의 범위 가변성
    • 범위 가변성에 대한 미신
    • 네트워크 범위 가변성
    • PHP 범위 가변성
    • 부하 분산
    • MySQL 범위 가변성
    • MySQL 복제
    • 데이터베이스 파티셔닝
    • 대규모 데이터베이스 범위 가변성
    • 저장소 범위 가변성
    • 캐시
    •  
  • 10장 통계, 감시, 경보
    • 웹 통계 추적
    • 애플리케이션 감시
    • 경보
    •  
  • 11장 API
    • 데이터 피드
    • 웹 서비스
    • API 트랜스포트
    • API 오용
    • 인증
    • 전망

예제코드 관련 GitHub 페이지

도서 소개자료