• 프로가 되기 위한 웹 기술 입문

  • 고모리 유스케 지음
  • 김정환 옮김

  • 오픈소스 & 웹 시리즈 _ 037
  • ISBN: 9788992939997
  • 25,000원 | 2012년 04월 18일 발행 | 308쪽



각종 웹 기술의 핵심을 관통하는 명쾌한 안내서!

오늘날 우리의 삶을 지탱하는 웹 기술은 날로 발전을 거듭하고 있지만, 정작 웹이 어떻게 탄생했고 어떤 궤적을 그려왔으며, 실제로 내부적으로 어떻게 동작하는지 잘 알지 못한다. 이러한 웹 기술의 면면을 이해하지 못한 채 웹 애플리케이션을 개발한다면 문제가 발생했을 때 대처하기도 쉽지 않을뿐더러 웹 기술을 응용할 여지도 줄어들 것이다.

이 책에서는 웹 애플리케이션을 개발하곤 있지만, 정작 웹의 동작 원리나 메커니즘을 명확하게 이해하지 못한 채 당장 필요한 프레임워크 사용법과 같은 표면적인 부분만을 익힌 독자에게 웹 기술의 역사와 배경부터 각종 웹 기술, 웹 개발 프레임워크, 보안에 이르기까지 전체적인 그림을 그릴 수 있게 도와준다. 이 책에서는 웹 개발에 갓 입문한 독자나 기존의 웹 개발자가 웹과 인터넷을 둘러싼 수많은 기술들의 핵심과 각 기술 간의 관계를 명쾌하게 이해하고, 이를 바탕으로 웹 애플리케이션 개발 과정에서 발생한 문제를 해결하는 데 크게 도움될 것이다.

고모리 유스케(小森裕介)

UL 시스템즈 주식회사(http://www.ulsystems.co.jp) 시니어 컨설턴트

2000년 도쿄 공업대학 공학부 정보공학과를 졸업했다. 진학이냐 취직이냐를 놓고 고심하다가 ‘연구보다는 실제 생활에 도움이 되는 소프트웨어를 만들고 싶다.’라는 생각에서 취직을 결심했다. 독립계 시스템 개발 회사의 SE, 기술 컨설턴트를 거쳐 현직에서 기술 지원과 PM 지원, 비즈니스 기획 지원 등 폭넓은 활약을 펼치고 있지만, ‘전 세계 사람들이 사용하는 제품을 개발한다.’라는 꿈을 실현하기 위해서는 아직 갈 길이 멀다.

2005년부터 오픈 소스 소프트웨어 개발 활동에 흥미를 느끼고 Seasar 프로젝트(http://www.seasar.org/)에서 커미터와 콘퍼런스 강연자로 활동 중이다. 동 프로젝트 아래서 리치 클라이언트 프레임워크인 Uruma(http://uruma.sandbox.seasar.org/ja/)의 개발을 진행하고 있지만, 시간을 내지 못해 생각만큼 개발이 진행되지 못하는 것이 최근의 고민거리다.

최근의 취미는 체력이 따르지 못하는 배드민턴과 형편없는 실력의 골프, 그리고 고속도로를 이용하지 않는 장거리 드라이브다. 쉬는 날에는 일본의 들판 풍경을 감상하면서 2,000킬로미터 이상을 달릴 때도 있다. 태양열 자동차 경주 참가를 그만둔 것을 아쉬워하면서도 태양열 자동차 경주가 열리는 제2의 고향 오가타무라를 이따금 찾아가곤 한다.

김정환

건국대학교 졸업. 일본외국어전문학교 일한통역과 수료.

현재 번역 에이전시 (주)엔터스코리아 출판기획 및 일본어 전문 번역가로 활동 중이다.

역서로는 『비즈니스 EVERNOTE』, 『스마트 워커』, 『클라우드』, 『애플 구글 마이크로소프트 삼국지』,『아이폰과 트위터로 최강회사 만들기』,『트위터 혁명』,『닌텐도, “놀라움”을 낳는 방정식』,『이과계 사람들1』, 『이과계 사람들2』외 다수가 있다.

 

옮긴이글

1990년대만 해도 인터넷은 일반인들에게 아직 생소한 존재였다. 온라인이라고 하면 먼저 PC통신을 떠올렸으며, 주로 전화선을 이용해 모뎀으로 통신을 했기에 속도는 턱없이 느렸다. 지금은 ‘겨우’ 몇 메가바이트이지만, 그때는 ‘무려’ 몇 메가바이트였다. 게다가 전화 요금 체계에 시분제가 적용됨에 따라 유선 통신 요금의 부담은 지금과는 비교도 되지 않았다. 밤새 PC 통신을 하다가 전화 요금이 십여 만 원씩 나와 고지서를 받고 깜짝 놀란 어머니(혹은 아버지)에게 빗자루로 맞았다는 이야기를 심심치 않게 들을 수 있었던 시절이었다(옮긴이도 빗자루로 맞지는 않았지만 비슷한 경험을 했다). 이렇듯 온라인을 통한 정보 교환에 제약이 많았던 시절이기에 소프트웨어는 패키지 형태로 판매되는 데스크톱 애플리케이션이 주류를 이뤘다. 그러나 ADSL과 VDSL 등 점차 초고속 통신망이 구축되고 인터넷이 일반화되면서 소프트웨어의 흐름은 데스크톱 애플리케이션에서 웹 애플리케이션으로 넘어오고 있다.

이제 웹 애플리케이션은 우리 생활에 없어서는 안 될 필수품이다. 우리는 Gmail이나 각종 포털 사이트의 이메일 서비스를 통해 이메일을 주고받으며, 사고 싶은 물건이 있으면 인터넷에서 최저가를 검색한 다음 인터넷 쇼핑몰에서 구입한다. 내가 타려는 버스가 어디쯤 와 있는지도 인터넷에서 확인할 수 있게 됐다. 모두 웹 애플리케이션의 발달로 가능해진 일들이다.

이 책은 그런 웹 애플리케이션의 개발에 뜻을 두고 있는 분들을 위한 입문서다. 입문서이기에 구체적인 기술을 자세히 다루지는 않지만, 그 대신 웹 애플리케이션을 개발하기 위한 기본적인 지식과 역사, 배경을 친절하게 설명해 준다. 글쓴이가 이 책에서 많은 중점을 둔 부분은 바로 웹 애플리케이션 개발 기술이 오늘에 이르기까지의 역사와 배경에 관한 설명이다. 어떤 기술이 개발된 이유는 그 기술이 필요했기 때문이다. 또한 처음부터 완벽한 기술은 있을 수 없으므로 문제점이 발생하기 마련이고, 그 문제점을 해결하기 위해 또 다른 기술이 탄생한다. 이러한 역사 속에서 현재의 웹 애플리케이션 개발 기술로 발전된 것이며, 앞으로도 새로운 필요성에 따라 신기술이 속속 탄생할 것이다. 그런 역사를 이해한다면 어떤 기술을 어떻게 이용해야 할지 아는 데 많은 도움이 될 것이며, 새로운 기술이 탄생해도 그 기술을 좀 더 빨리 이해할 수 있으리라는 것이 글쓴이의 생각이다. 그리고 옮긴이 역시 글쓴이의 생각에 동의한다.

뭔가를 배울 때 단순히 내용만을 암기하는 것은 큰 도움이 되지 못한다. 그 바탕에 깔려있는 배경을 알아야 응용력이 생기기 마련이다. 독자 여러분도 학교에서 수학 공식을 암기한 경험이 있을 것이다. 참고서에 나와 있는 공식을 무작정 외우기만 하면 똑같은 패턴의 문제가 나왔을 때는 간단하게 숫자만 바꿔서 빠르게 풀 수 있지만, 조금만 문제를 비틀어도 벽에 부딪치고 만다. 그러나 그 공식이 어떤 과정을 거쳐 나왔는지를 이해한다면 패턴에서 벗어난 문제를 만나더라도 당황하지 않고 이 문제를 어떻게 풀어야 할지 곰곰이 생각하며 풀 수 있게 된다. 어학에서 관용 표현이나 속담 등을 외울 때도 마찬가지다. 그 표현 또는 속담이 어떤 배경에서 나왔으며, 때로는 그 안에 어떤 역사가 담겨 있는지 알면 단순 암기할 때보다 훨씬 이해도 잘 되고 잘 잊어버리지도 않는다. 이와 같이 역사와 배경을 알면 이해도가 훨씬 높아지며, 무엇보다도 배우는 것이 즐거워진다.

다만 이 책은 아무런 지식도 없는 상태에서 웹 애플리케이션 개발 기술을 처음부터 배우려 하는 사람을 위한 책은 아니다. 전문적인 내용을 최대한 배제했다고는 하지만, HTML에 관한 기초 지식과 간단한 프로그래밍 지식 정도는 알고 있다는 가정에서 이야기가 진행된다. 그러나 지금부터 공부를 시작하는 사람도 가벼운 마음으로 읽어 본다면 앞으로 웹 애플리케이션 개발 기술을 공부하기 위해 필요한 개념을 잡는 데 많은 도움이 되리라고 생각한다.

  • LESSON 0 | 프롤로그
    • 웹 애플리케이션 개발 기술은 어디서 배우는가?
    • 왜 여러분은 웹 애플리케이션 개발 기술을 배우지 못하는 것일까?
    • 대상 독자
    • 이 책을 읽을 때 필요한 사전 지식
    • 가장 효율적으로 기술을 배우는 방법
    •  
  • LESSON 1 | 웹 애플리케이션이란 무엇인가?
    • 1.1 데스크톱 애플리케이션
    • 1.2 웹 애플리케이션
    • 1.3 정리
    •  
  • LESSON 2 | 웹은 어떻게 발전했는가?
    • 2.1 WWW의 탄생과 보급
      • 전 세계의 컴퓨터를 연결하는 인터넷
      • 인터넷 보급의 견인차 월드 와이드 웹과 모자이크
      • WWW의 탄생
      • 현대 웹 브라우저의 시조인 NCSA 모자이크
    • 2.2 웹을 뒷받침하는 기술의 발명
      • 웹 서버와 웹 클라이언트
      • 왜 클라이언트와 서버로 나누는가?
      • ‘그 리소스는 어디에 있지?’ - URL
      • HTTP
    • 2.3 CGI의 탄생
      • 동적인 콘텐츠에 대한 요구
      • CGI의 탄생
      • 웹의 폭발적인 보급
    • 2.4 서블릿의 등장
      • CGI를 둘러싼 문제점
      • 자바/서블릿의 탄생
      • 자바로 애플리케이션을 개발할 때의 이점
    • 2.5 JSP의 탄생
      • 서블릿의 문제점
      • 발상의 전환! JSP의 탄생
    • 2.6 웹 애플리케이션 프레임워크의 시대
      • 서블릿과 JSP의 문제점
      • 웹 애플리케이션 프레임워크의 탄생
    • 2.7 정리
    •  
  • LESSON 3 | HTTP를 이해하자
    • 3.1 왜 HTTP를 알아야 하는가?
    • 3.2 웹 브라우저와 웹 서버의 통신을 엿보자
      • 피들러 설치
      • HTTP 통신을 엿보자
      • HTTP 요청을 엿보자
      • HTTP 응답을 엿보자
      • HTTP에서는 한 번에 리소스 하나를 취득한다
      • 파일명을 생략했을 경우의 요청
    • 3.3 정보는 어떻게 인터넷의 대해를 건너는가?
      • 인터넷상의 주소-IP 주소
      • IP 주소에 의지해 정보를 보내는 TCP/IP
      • IP 주소는 누가 결정하는가?
      • 글로벌 IP 주소와 사설 IP 주소
      • 호스트명을 IP 주소로 변환하는 DNS
      • DNS는 어떻게 구현되는가?
      • 호스트 내의 수신처를 결정하는 포트 번호
    • 3.4 웹 서버에 요청을 어떻게 전달하는가?
      • GET 메서드를 이용한 매개변수 전달
      • 애플리케이션 측의 매개변수 받기
      • POST 메서드를 이용한 매개변수 전달
      • GET과 POST 중 어느 쪽을 사용해야 할까?
      • 한글은 어떻게 전달해야 하는가?
    • 3.5 정리
    •  
  • LESSON 4 | CGI에서 웹 애플리케이션으로
    • 4.1 배달 피자 주문 사이트를 만들자
    • 4.2 화면 구성
    • 4.3 화면 모형
    • 4.4 로그인 인증 기능
      • PHP로 인증 기능을 만들자
      • 인증 기능의 동작을 확인하자
      • 리다이렉트 동작의 HTTP 통신을 확인하자
    • 4.5 로그인 상태를 어떻게 기억할 것인가?
      • 상태 유지 프로토콜과 무상태 프로토콜
      • 무상태인 HTTP상에서 상태를 어떻게 표현할 것인가?
      • 쿠키를 이용해 상태를 보존한다
      • 실제 쿠키 이용을 확인한다
    • 4.6 안전하게 상태를 보존하기 위한 기술 -세션
      • 쿠키를 둘러싼 문제점
      • 은행의 창구 업무를 통해 세션을 이해하자
      • 계좌 개설 업무의 진행 상황을 어떻게 관리하는가?
      • 세션으로 처리 진행 상황을 관리한다
      • 세션의 상태를 어디에 보존할 것인가?
      • HTTP에서의 세션 ID 전달 방법
      • 실제 웹 애플리케이션에서의 세션 ID 활용
      • 세션 ID를 이용한 사용자 식별
    • 4.7 피자 펜토미노의 완성
    • 4.8 정리
    •  
  • LESSON 5 | 웹 애플리케이션의 구성 요소
    • 왜 웹 애플리케이션의 구성을 이해해야 하는가?
    • 5.1 웹 서버와 웹 클라이언트의 시대
      • WWW의 여명기
      • CGI의 시대
    • 5.2 데이터베이스 서버의 등장
      • 대량의 정보를 어떻게 관리할 것인가?
      • 데이터베이스 관리 시스템의 등장
      • 데이터베이스에 대한 조작
      • 데이터베이스를 이용한 정보의 관리
      • 데이터베이스에서 정보를 추출한다
      • 필요한 정보를 SQL로 데이터베이스에 전달한다
      • 데이터베이스와 클라이언트의 관계
      • 데이터베이스 서버의 분리
      • 웹 애플리케이션과 데이터베이스의 통신
    • 5.3 애플리케이션 서버의 등장
      • 서블릿이나 JSP는 어디에서 작동하는가?
      • 서블릿/JSP를 작동시키기 위한 애플리케이션 서버
      • 웹 서버와 애플리케이션 서버의 연동
      • 웹 서버와 애플리케이션 서버의 분담
      • 웹 서버와 애플리케이션 서버 연동의 이점
      • 여러 톰캣에 전송하기
      • 웹 서버의 기능을 가진 애플리케이션 서버
    • 5.4 웹 시스템의 삼층 구성
      • 최소 구성의 웹 시스템
      • 일반적인 구성
      • 웹 시스템의 삼층 구성
    • 5.5 정리
    •  
  • LESSON 6 | 웹 애플리케이션을 효율적으로 개발하는 방법
    • 6.1 서블릿/JSP만으로는 부족한가?
      • 웹 애플리케이션 개발의 표준 – 자바
      • 서블릿과 JSP의 연동
    • 6.2 서블릿/JSP를 이용한 피자 펜토미노의 로그인 처리 구현
      • JSP를 통한 로그인 화면 표시
      • 서블릿의 호출
      • 로그인 서블릿의 처리
      • 포워드와 리다이렉트의 차이
      • 요청 스코프에서의 정보 전달
      • JSP의 요청 스코프에서 정보를 꺼내기
      • 왜 요청 스코프가 필요한가?
      • 세션 스코프와 요청 스코프의 차이
    • 6.3 웹 애플리케이션의 아키텍처
      • 로직과 디자인의 분리
      • 소프트웨어의 건축 양식
      • 피자 펜토미노의 구조를 살펴보자
      • MVC 모델에 따른 웹 애플리케이션의 아키텍처
      • MVC 모델에서의 처리 흐름
    • 6.4 프레임워크를 통한 아키텍처의 구현
      • 프레임워크란 무엇인가?
      • 스트러츠를 이용한 MVC 모델의 구현
      • 스트러츠를 이용한 피자 펜토미노의 로그인 처리
      • JSP에서의 로그인 처리 액션 호출
      • 로그인 처리 액션에서의 로그인 확인 처리
      • 상품 목록 화면으로 이동
    • 6.5 레이어 패턴에 따른 데이터 액세스 계층의 분리
      • 모델을 어떻게 구현할 것인가?
      • JDBC를 이용해 데이터베이스에서 정보를 가져온다
      • 레이어 패턴에 따른 데이터 액세스 계층의 분리
      • DAO 패턴을 이용한 데이터 액세스 레이어의 구현
    • 6.6 O/R 매핑 프레임워크를 이용한 데이터 액세스 레이어 구현
      • O/R 매핑 프레임워크의 필요성
      • RDB와 객체의 임피던스 불일치
      • 아이바티스를 이용한 O/R 매핑의 실제
      • 데이터 매퍼와 SQL 맵 파일을 이용한 O/R 매핑 처리
      • Dao 프레임워크를 이용한 DAO의 작성
    • 6.7 프레임워크 이용의 장점과 단점
      • 프레임워크 이용의 장점
      • 프레임워크 이용의 단점
    • 6.8 정리
    •  
  • LESSON 7 | 보안을 확보하기 위한 방법
    • 7.1 왜 보안을 확보해야 하는가?
      • 웹 애플리케이션이 지켜야 할 보안
    • 7.2 웹 애플리케이션에 대한 대표적인 공격 수법과 그 대책
      • SQL 인젝션
      • 크로스 사이트 스크립팅(XSS)
      • 세션 하이재킹
      • 크로스 사이트 요청 위조
      • 강제 브라우징
      • 디렉터리 접근 공격
    • 7.3 설계ㆍ실행의 실수에 기인한 오작동이나 보안 문제를 막기 위한 대책
      • 뒤로 가기 버튼 대책
      • 이중 폼 제출 대책
      • hidden 매개변수를 이용할 때의 주의점
      • 디버그 정보를 출력하지 않는다
      • 전역 변수에 정보를 담지 않는다
    • 7.4 정리
    •  
  • LESSON 8 | 맺음말
    • 감사의 말
    • 제5쇄 증쇄에 즈음해
    •  
  • LESSON 9 | 부록
    • 9.1 참고 서적ㆍ사이트
  • 142쪽, 그림 5-11 주문 명세 테이블에서

    고객 ID ---> 상품 ID

  • 173쪽, 4번째 줄

    대표적인 준 카피레스프 라이선스로는 ---> 대표적인 준 카피레프트 라이선스로는

  • 189쪽, 그림 6-9 아래 말풍선의 텍스트,

    세션 개시 ---> 세션 종료

  • 189쪽, 그림 609, 맨우측 긴 위아래 방향 화살표의 텍스트

    요청 스코프 ---> 세션 스코프

  • 230쪽, 그림 5-11 주문 명세 테이블에서

    고객 ID ---> 상품 ID

  • 231쪽, 그림 5-11 주문 명세 테이블에서

    고객 ID ---> 상품 ID

    임피던트 불일치 ---> 임피던스 불일치

예제코드 관련 GitHub 페이지

관련 글


엮인 글

엮인 글 주소: http://wikibook.co.kr/web-text/trackback/