'IT단행본'에 해당되는 글 31건
- 2010/11/05
- 2010/11/04
- 2010/10/12
- 2010/10/11
- 2009/12/24
- 2009/08/19
- 2009/05/04
- 2009/03/25
- 2009/03/19
- 2009/03/19


| HTML5 차세대 웹 표준, 기술 (1) | 2010/11/05 |
|---|---|
| HTML, CSS, JavaSript로 iPhone Apps 개발하기 (0) | 2010/11/04 |
| 기본 원리를 완전 분석한 자바스크립트 정규표현식 (0) | 2010/10/12 |
| 헬로, 안드로이드 2.1판: 구글의 모바일 개발 플랫폼 소개하기 (0) | 2010/10/11 |
| 한국어판 Network Warrior: 완벽한 네트워크 인프라를 위한 실용 지침서 (0) | 2009/12/24 |
| IT 개발자가 쓴 통쾌한 인간관리 이야기 (0) | 2009/08/19 |
| HTML5 차세대 웹 표준, 기술 (1) | 2010/11/05 |
|---|---|
| HTML, CSS, JavaSript로 iPhone Apps 개발하기 (0) | 2010/11/04 |
| 기본 원리를 완전 분석한 자바스크립트 정규표현식 (0) | 2010/10/12 |
| 헬로, 안드로이드 2.1판: 구글의 모바일 개발 플랫폼 소개하기 (0) | 2010/10/11 |
| 한국어판 Network Warrior: 완벽한 네트워크 인프라를 위한 실용 지침서 (0) | 2009/12/24 |
| IT 개발자가 쓴 통쾌한 인간관리 이야기 (0) | 2009/08/19 |
정규 표현식은 왜 어려운가?
어떤 언어도 마찬가지이지만 기초가 약하면 어렵게 느껴진다. 기초가 튼튼하면 자신감을 갖게 되며 도전 정신이 생기고 창의력이 발동한다. 이는 소프트웨어 개발을 30년 넘게 해온 노병의 경험에서 나온 결론이다. 모두 떠난 자리를 외롭게 지키고 있는 옹고집 개발자의 신념이다.
어떻게 하면 기초를 쌓을 수 있는가?
이에 대한 대답은 한마디로 기본을 완전하게 이해해야 한다는 것이다. 삽질은 결단코 기초가 쌓이지 않는다. 적어도 완벽을 추구하는 개발자라면 기본을 파고 들어야 한다. 물고 늘어져야 한다. 이런 가운데 자연스럽게 기초가 쌓이고 다져진다. 개발한 프로그램에 대해 확신을 갖게 된다. 뒤돌아 섰을 때 성취감과 자신감이 남는다.
이 책은 이런 점에 주안점을 두었다.
독자가 기본을 이해할 수 있도록 분해하고 또 분해했다. 이렇게 하고 싶어서 한 것이 아니라 소프트웨어 개발이 필자의 체질을 이렇게 만들었기 때문에 어쩔 수 없다. 더 이상도 더 이하도 아니다. 이 책의 마지막 페이지를 넘길 때 어렵게 느껴졌던 정규 표현식에 자신감을 갖게 될 것으로 확신한다.
대상 독자
/^[\w][ \w-_\.]+@[ \w]+( \.[A-Za-z0-9]+)*( \.[A-Za-z]{2,3})$/i;
위 코드는 E-Mail 주소를 체크하는 정규 표현식 패턴이다. 이를 분석할 수 있다면 이 책의 대상 독자가 아니다. 한편 이를 분석할 수 없다면 이 책의 대상 독자다.
이 책은 정규 표현식을 만들어 가는 기본을 다루며, 기본을 조합하면 위와 같은 정규 표현식이 나온다. 이를 통해 보다 적극적으로 개발에 임할 수 있으며 정규 표현식으로 구현할 수 있는 것을 창출해 낼 수 있다.
이 책의 중심
정규 표현식의 3대 요소는 매치 대상, 패턴, 메소드다. 매치 대상은 모든 언어가 같으며 패턴은 자바스크립트와 다른 언어가 거의 같다. 하지만 메소드는 자바스크립트와 다른 언어가 다르며, 자바스크립트 자체도 사용하는 메소드에 따라 결과가 다르다.
이 책은 자바스크립트의 정규 표현식을 중심으로 다룬다. 따라서 특화된 전문성을 갖고 있다. 정규 표현식 하나하나의 패턴 문자에 대한 설명과 예제를 제시하고 근거를 분석했다. 실제로 사용하는 정규 표현식과 자바스크립트가 통합한 코드를 제시하고 분석했다.
머리말
예전에는 정규 표현식을 만나면 피하거나 돌아서 갔다. 그런 날들이 이어지면서 가슴 어딘가에 응어리가 남는 것을 느끼며 이건 아니라고 혼잣말을 되뇌었지만 그런 모습은 계속되었다. 답답한 시간들이 흐른 후 정규 표현식에 대해 자신감을 갖게 된 날부터 보다 더 적극적으로 개발에 임할 수 있게 되었다. 이 책은 바로 이런 필자의 어려웠던 과거 경험을 바탕으로 썼다.
▶ 자바스크립트 정규 표현식의 중심
이 책은 자바스크립트의 정규 표현식을 중점적으로 다룬다. 정규 표현식은 자바스크립트 이외의 다른 언어에서도 지원하지만 언어마다 조금씩 차이가 있다. 물론 전체를 망라하여 포괄적으로 다루면 좋겠지만 이는 전문성이 떨어지므로 자칫 잘못하면 남는 것이 없게 된다.
필자의 오랜 경험에 의하면 하나라도 완전하게 접근해야 한다. 그래야 내 것이 되고 실전에 적용할 수 있다. 어설프게 접근하면 이도 저도 아닌 허사가 되고 만다. 점(.) 하나만 잘못 찍어도 다르게 구현되는 것이 프로그램(program)이다. 특히 문장이 아닌 기호 중심으로 구성된 정규 표현식은 더욱 세심한 전문성이 요구된다. 이런 이유로 이 책에서는 자바스크립트의 정규 표현식만 집중적으로 다루었다.
▶ 문자열 처리에 최적
자바스크립트 애플리케이션(application)에서 정규 표현식은 약방의 감초다. 그렇게 두드러지게 표시가 나지는 않지만 정규 표현식이 없으면 어딘가 부족함을 느낀다. 특히 문자열을 처리할 때 필요성을 절실하게 느낀다. 복잡하게 작성할 코드를 단 몇 줄로 끝낼 수 있으며 때로는 정규 표현식이 아니면 구현할 수 없는 문자열도 있기 때문이다. 값을 검색하고 일치된 값을 지정한 값으로 바꾸는 것은 정규 표현식의 백미이며 아름다움의 극치다.
▶ 선행 필요 지식
일단 이 책을 읽는 독자는 자바스크립트의 기본 문법을 이해하고 있어야 한다. 만약 독자가 자바스크립트를 전혀 모른다면 이 책을 보기 전에 자바스크립트 책을 먼저 볼 것을 권한다. 정규 표현식은 그 자체로도 실행되지만 자바스크립트와 같이 사용하면 더욱 완전한 형태가 된다.
이 책에서는 정규 표현식과 관련된 자바스크립트를 약간 다루고 있는데, 정규 표현식을 더 명확하게 설명하기 위해 자바스크립트 코드를 포함시켰다. 정규 표현식을 다루려면 어쩔 수 없이 자바스크립트가 동반되어야 한다. 정규 표현식은 독립된 클래스(Class)이지만 이를 실질적으로 사용하는 클래스는 String(문자열) 클래스이며 자바스크립트는 정규 표현식만 단독으로 다룰 수 없는 구조로 되어 있기 때문이다.
▶ 예제 분류
예제를 되도록 간단하게 하려고 노력했다. 필자의 경험에서 볼 때 코드를 길게 작성하면 그냥 넘어가고 싶은 충동이 일어날 수도 있기 때문이다. 따라서 기본 사항을 중심으로 간단하게 하면서 다양한 각도에서 예제를 다루었다.
기본 사항을 다룬 후에 몇 개의 정규 표현식이 포함된 실제 사용 가능한 코드를 제시하였으며 이를 설명하고 분석하였다. 각 장에서 다룬 내용이 기본 단계라고 한다면 이는 중간 단계에 속한다. 맨 끝의 10장은 마지막 단계로 정규 표현식과 자바스크립트를 통합한 실제로 사용할 수 있는 코드를 중점적으로 게재하고 이를 설명, 분석하였다. 즉 3단계로 나누어 접근하였다.
▶ 기본이 중요
정규 표현식은 디버깅이 어렵다. 자바스크립트로 작성한 코드는 단계마다 결과를 볼 수 있는 방법이 있지만 정규 표현식은 과정이 아닌 결과밖에 볼 수 없으므로 디버깅이 어렵다. 정규 표현식을 분리하는 것이 유일한 방법이지만 때로는 분리하지 못하는 형태도 있다.
이에 대처하기 위한 가장 근본적인 해결 방법은 기초, 기본을 튼튼하게 하는 것이다. 우선 간단한 것부터 접근해서 기본 사항을 이해하고, 점진적으로 어려운 것에 접근해야 스트레스를 받지 않으면서 실력을 향상시킬 수 있다.
책을 한 페이지씩 넘기면서 기본을 탄탄하게 잡아가면 조금씩 자신감이 생길 것이다. 예제가 간단하므로 직접 작성해 보면서 기본을 이해하고 내 것으로 만든다면, 마지막 페이지를 넘길 때 어렵기만 한 정규 표현식에 자신감을 갖게 될 것으로 확신한다.
이 책의 구성
이 책은 총 10장으로 구성되어 있으며 각 장의 주요 내용은 다음과 같다. 이처럼 상세하게 장을 나눈 것은 정규 표현식 패턴 문자 하나하나가 기능을 갖고 있으므로 이에 집중하기 위함이다. 슬슬 넘겨가면서 보는 형태가 아니라 세밀하게 분석하는 형태이기 때문이다.
정규 표현식의 가장 기본적인 형태를 통해 정규 표현식의 3대 요소와 자바스크립트에서 정규 표현식의 역할을 알아본다. 이 책의 예제를 실행하기 위한 환경과 본문의 기준 형태가 작성되어 있다.
모든 언어는 나름대로 작성 방법이 있으며 정규 표현식 또한 작성 방법이 있으므로 이를 작성하는 방법을 알아본다. 정규 표현식 메커니즘과 자바스크립트 메커니즘을 비교하여 차이점을 정리하였다. 객체지향 관점에서 보면 함수와 메소드는 차이가 있다. 무엇에 차이가 있는지, 정규 표현식에서 사용하는 메소드와 클래스를 알아본다.
정규 표현식에서 가장 단순한 형태는 문자열로 매치하는 형태다. 이를 통해 정규 표현식을 매치하는 기본 형태와 매치되었을 때 반환되는 형태를 알아본다. 정규 표현식에서 자주 사용하는 대체(|), 앞뒤 문자에 매치하는 점(.), 공백 문자, 줄 분리자를 살펴 본다.
자바스크립트의 정규 표현식과 다른 언어의 정규 표현식이 다른 점은 메소드다. 또한 자바스크립트 정규 표현식은 메소드에 따라 매치 결과가 달라진다. 따라서 자바스크립트로 정규 표현식을 구현하려면 반드시 메소드를 이해해야 한다. 자바스크립트에 익숙한 독자라면 익히 알고 있는 메소드이지만 정규 표현식 중심으로 살펴 볼 필요가 있다.
매치할 위치를 지정하여 매치할 수 있다. 이 장부터 본격적으로 정규 표현식 패턴 중심으로 접어든다. 문자열 처음부터 매치(^), 문자열 끝에 매치($), 단어 경계 매치(\b), 63개 문자 매치(\B)가 이에 속한다.
매치 수를 지정하여 매치할 수 있다. 매치 수에 관계없이 모두를 매치하는 패턴, 범위를 지정하여 매치하는 패턴, 욕심 없는 매치를 행하는 패턴을 알아본다. *, +, ?, {숫자} {숫자,}, {숫자,숫자}, *?, +?, ??와 같은 패턴 문자가 이에 해당된다.
범위 또는 집합을 지정하여 매치할 수 있다. 집합에 지정한 문자 단위로 매치하고 패턴 문자를 일반 문자로 인식하는 대괄호[ ], 63개 이외 문자에 매치하는 [\b], 매치 구간을 지정하는 하이픈(-), 지정한 문자를 제외하고 매치하는 [^]에 대해 알아본다. CSS 프로퍼티 이름을 변경하는 사례와 스크립트 형태에서 텍스트를 추출하는 사례를 분석한다.
역슬래시(\)에 연이어 문자를 작성한 형태를 이스케이프 문자 클래스라고 하며 이는 수한 기능을 갖는다. 일반 문자로 인식하는 \^, 숫자만 매치하는 \d, 숫자 이외에 매치하는 \D, 보이지 않는 문자에 매치하는 \s, 보이는 문자에 매치하는 \S, 63개 문자에 매치하는 \w, 63개 이외 문자에 매치하는 \W, 유니코드에 매치하는 \u, 16진수 값으로 매치하는 \x, 제어 문자를 매치하는 \c에 대해 알아본다. 공백을 체크하는 패턴 사례, 문자열 앞뒤의 공백을 삭제하는 사례, E-Mail 주소를 체크하는 사례를 분석한다.
정규 표현식에서 가장 돋보이는 패턴 문자를 꼽는다면 괄호( )라고 할 수 있다. 매치 결과를 캡처하는 ( ), 캡처하지 않는 (?:), 전방에 매치하는 (?=), 전방 부정에 매치하는 (?!)가 이에 속한다. 다수의 괄호를 사용하면서 괄호 안에 패턴을 작성했을 때 어려움이 가중되지만 그만큼 탁월하게 기능을 구사할 수 있다.
백래퍼런스인 \숫자 형태, 캡처된 값을 참조하는 RegExp.$숫자 형태를 사용해서 괄호( )로 캡처한 값을 참조할 수 있다. 괄호( )와 대체(|) 패턴 문자가 어울린 사례를 통해 최대로 매치하려는 정규 표현식의 메커니즘을 다룬다. 캡처된 값을 활용하여 숫자와 숫자 사이에 콤마를 삽입하는 사례를 분석한다.
자바스크립트는 RegExp 클래스를 통해 정규 표현식을 구현하며 이 클래스에는 두 개의 메소드가 있다. RegExp가 클래스이므로 이를 인스턴스로 생성할 수 있으며 이에 속한 메소드를 호출할 수 있다. 또한 인스턴스에서 제공하는 프로퍼티를 사용할 수 있다.
정규 표현식을 활용하는 사례 중심으로 자바스크립트와 정규 표현식을 설명하고 분석한다. 사례 코드는 필자가 개발한 자바스크립트 라이브러리인 MethodChain에서 발췌한 것으로 즉시 사용할 수 있다. 아울러 역동적으로 정규 표현식 패턴을 만들어 사용하는 개념을 다룬다.
실행 기준 브라우저
이 책의 예제는 다음과 같은 브라우저에 실행했다. 정규 표현식 몇몇 기능에 크로스 브라우저 문제가 있다.
- IE 7.0
- Firefox 3.0.5
- Chrome 3.0
- Safari 3.2.1
- Opera 10.10
소스 코드와 정오표
이 책에 포함된 소스 코드는 예제를 제시하여 설명하기 위함이다. 이를 독자의 소프트웨어에 적용하여 발생하는 문제에 대해서는 필자가 책임을 지지 않는다. 또한 소스 코드 자체를 판매하거나 다른 책에 포함시키는 것과 같은 상업적인 목적에 사용할 수 없다.
이 책을 출판한 후 발견된 정오표는 필자가 운영하는 카페(http://cafe.naver.com/ requirements.cafe)에 게재할 것이며 이 책의 내용에 대한 문의도 카페를 이용할 수 있다.
김 영 보
1979년 주)코오롱 전산실에 입사한 후 31년 동안 오직 소프트웨어만 개발해 온 옹고집 베테랑 개발자이며 분석가다. 수많은 프로젝트를 수행했으며 산전수전 다 겪은 역전 노장이다. 이런 노하우를 바탕으로 자바스크립트 라이브러리인 MethodChain을 개발, 발표하였으며 지속적으로 발전시켜 나가고 있다. MethodChain은 http://www.methodchain.com에서 만날 수 있으며 라이브러리 소스 파일을 다운받을 수도 있다.
그에게 있어 소프트웨어 개발은 삶 자체다. 한시도 노트북 앞을 떠나지 않는다. 그에게는 소프트웨어 개발의 매 순간순간이 행복인 것 같다. 그는 스포츠를 매우 좋아한다. 때로는 경기장을 찾아 목소리 높여 응원하기도 한다.
[저서]
- Ajax DOM 스크립팅, 2008.05, 도서출판 ITC
- Ajax prototype.js: 프로토타입 완전분석, 2007.03, 위키북스
- Ajax 활용, 2006.04, 가메 출판사
- 요구분석을 위한 Event Process 모델링, 2005.11, 가메 출판사
카페 http://cafe.naver.com/requirements.cafe
차례 보기 및 구매 사이트 가기
http://search.naver.com/search.naver?where=nexearch&query=%C1%A4%B1%D4%C7%A5%C7%F6%BD%C4&sm=top_hty&fbm=1
| HTML5 차세대 웹 표준, 기술 (1) | 2010/11/05 |
|---|---|
| HTML, CSS, JavaSript로 iPhone Apps 개발하기 (0) | 2010/11/04 |
| 기본 원리를 완전 분석한 자바스크립트 정규표현식 (0) | 2010/10/12 |
| 헬로, 안드로이드 2.1판: 구글의 모바일 개발 플랫폼 소개하기 (0) | 2010/10/11 |
| 한국어판 Network Warrior: 완벽한 네트워크 인프라를 위한 실용 지침서 (0) | 2009/12/24 |
| IT 개발자가 쓴 통쾌한 인간관리 이야기 (0) | 2009/08/19 |
이 책의 대상 독자
이 책의 유일한 요구사항은 자바 또는 다른 객체 지향 프로그래밍 언어(C# 정도면 충분하다)에 대한 기본적인 이해다. 모바일 기기 소프트웨어 개발에 관한 사전 경험은 필요하지 않다. 개발 경험이 있다면 그 경험을 잊는 게 나을 것이다.
저자 소개
에드 버넷(Ed Burnette)
프로그래머이자 저자로서, 그리고 연설자로서 25년 이상의 경험을 갖고 있는 소프트웨어 업계의 베테랑이다. 상업용 컴퓨터 게임에서 고성능 그리드 컴퓨팅 시스템에 이르기까지 다양한 개발을 두루 섭렵하였다. 에드는 SAS 고급 컴퓨팅 연구소(SAS Advanced Computing Lab)의 창립 멤버이자 수석 연구원이며, 『Google Web Toolkit: Taking the Pain out of Ajax』와『Eclipse IDE Pocket Guide』를 포함한 많은 기술 관련 기사 및 서적을 집필하였다. ZDNet의 개발 커넥션(Dev Connection) 블로그를 담당하고 플래닛 안드로이드(http://www.planetandroid.com)를 만들어 운영중에 있다.
역자 소개
한정민
미국 카네기 멜론 대학Carnegie Mellon University에서 정보 시스템Information Systems과 휴먼 컴퓨터 인터랙션HCI, Human-Computer Interaction을 전공으로, 그리고 커뮤니케이션 디자인Communication Design을 부전공으로 공부하였다. 웹2.0, UX, 사용성, 모바일, SNS 등에 관심이 많으며 최근 SK C&C의 mobile commerce 사업추진단에 합류하였다. SK C&C에 합류하기 전에는 삼성 전자 모바일 및 웹 서비스 전략과 기획을 위한 리서치 및 컨설팅을 하였다.
모바일과의 인연은 아이폰의 첫 출시에 맞춰 애플리케이션을 선보이기 위해 애플과 함께 일하던 샌프란시스코의 IT 회사에서 시작되었다. 여행을 좋아해 유럽, 하와이, 팔라우(태평양의 섬)의 정부와 비영리 단체에서 일한 경험이 있으며 미국 샌프란시스코에서 직장 생활을 하다 귀국했다. 번역 서적으로는 ‘헬로, 안드로이드’, ‘IT 개발자가 쓴 통쾌한 인간관리 이야기’, ‘고성능 MySQL(공역)’, ‘웹 접근성(공역)’, ‘웹 표준(진행 중)’ 등이 있다.
목차보기 및 구매
http://book.naver.com/bookdb/book_detail.nhn?bid=6264911
| HTML, CSS, JavaSript로 iPhone Apps 개발하기 (0) | 2010/11/04 |
|---|---|
| 기본 원리를 완전 분석한 자바스크립트 정규표현식 (0) | 2010/10/12 |
| 헬로, 안드로이드 2.1판: 구글의 모바일 개발 플랫폼 소개하기 (0) | 2010/10/11 |
| 한국어판 Network Warrior: 완벽한 네트워크 인프라를 위한 실용 지침서 (0) | 2009/12/24 |
| IT 개발자가 쓴 통쾌한 인간관리 이야기 (0) | 2009/08/19 |
| 한국어판 Programming .NET 3.5 (0) | 2009/05/04 |
| 기본 원리를 완전 분석한 자바스크립트 정규표현식 (0) | 2010/10/12 |
|---|---|
| 헬로, 안드로이드 2.1판: 구글의 모바일 개발 플랫폼 소개하기 (0) | 2010/10/11 |
| 한국어판 Network Warrior: 완벽한 네트워크 인프라를 위한 실용 지침서 (0) | 2009/12/24 |
| IT 개발자가 쓴 통쾌한 인간관리 이야기 (0) | 2009/08/19 |
| 한국어판 Programming .NET 3.5 (0) | 2009/05/04 |
| 한국어판 Programming Flex3 : RIA 개발을 위한 완벽 가이드 (3) | 2009/03/25 |
차례
part 1 관리의 화살집
1장 비열한 놈이 되지 말자 2
2장 관리자는 나쁜 놈이 아니다 8
3장 월요일의 광분 28
4장 의제 감지 34
5장 명령 해부학 43
6장 정보 기근 51
7장 세심함, 속임수 그리고 침묵 59
8장 관리자 풍의 화법 67
9장 전문성 73
10장 페즈가 되지 말자 82
11장 퇴사 행동강령 95
12장 No라고 말하기 103
part 2 프로세스가 제품이다
13장 버전 1.0 114
14장 생각할 시간 갖기 130
15장 몰입 141
16장 말콤 사건 149
17장 상황 포착하기 159
18장 상태 보고서 2.0 165
19장 파급 이론 173
part 3 여러 버전의 당신
20장 인상과 관심 186
21장 전화 면접 성공시키기 195
22장 90일 동안 202
23장 주도자 209
24장 NADD 217
25장 동굴 속의 컴퓨터광 225
26장 회의에 참석하는 성격들 232
27장 점진주의자와 완벽주의자 241
28장 유기농과 기계공 248
29장 내향적인, 외향적인 그리고 전체론적인 257
30장 자유 전자 264
31장 조직을 정비하는 규칙 270
32장 해외 하청 위험 요소 278
33장 안내원 죠 286
34장 비밀 직함 295
용어집 302
머리말
이 책은 반 가상의 이야기이다.
사람을 관리하는 것에 대한 통찰력, 방법, 의견 등으로 가득 차 있다. 이 모든 내용은 내가 아는 사람들과의 실제 경험을 바탕으로 한다. 나의 관리자로서의 경험이 모두 긍정적이었다고 말하고 싶지만 사실 그렇지는 못했다. 이성을 잃었던 적도 있고 목격자들도 있다. 그 목격자들은 내가 정신을 차리도록 도와줬고 이 책에 또 한 장 쓰는 것을 가능케 해줬다.
이 책에서 언급된 사람들의 이름은 모두 가명이다.
내가 아는 모든 사람들을 떠올려 큰 가상의 주머니에 넣고 섞은 후, 페즈(Fez)라는 이름을 뽑고, 필(Phil)을 뽑고, 프랭크(Frank)라는 이름을 뽑았다. 이렇게 설정된 인물에 내가 몸담았기에 익숙한 넷스케이프나 볼랜드 등의 회사를 설정으로 해 이야기를 만들어 내가 설명하고자 하는 관리의 요점을 풀어냈다. 인물들과 마찬가지로 이야기들도 모두 꾸며낸 것이다. 가상의 이야기이지만 실제 경험을 바탕으로 한 것이며 당신에게 현실적으로 다가왔으면 하는 바람이다.
이 반 가상의 이야기의 하이라이트는 바로 랜즈다. 내가 90년대 중반 경영과 관리에 대한 블로그를 시작하면서 가상의 나에게 붙인 이름이다. 랜즈를, 관련성 있는 대단한 경험을 한(그러나 가상인), 가상의 사람들의, 가상의 이야기를 들려주는 사람으로 생각해보라. 랜즈는 나와 마찬가지로 약간의 고약한 성미를 갖고 있다.
옮긴이의 글
‘IT 개발자가 쓴 통쾌한 인간관리 이야기’는 가상의 인물 랜즈가 들려주는 가상의 인물들에 대한 가상의, 그러나 그럴 법한 이야기다. 누군가의 관리를 받는 개발자로서, 그리고 누군가를 관리하는 관리자로서의 경험을 바탕으로 진술되는 그의 이야기들은 유쾌하기 그지없다. 너무나도 통쾌하고 신랄한 전 상사에 대한 비판(2장)에서부터 회의를 빠져나가는 방법(4장), 사내에서 헛소문이 번져나가는 과정(6장), 문젯거리 부하 직원(10장) 이야기 등을 읽다 보면 맞장구를 치지 않을 수 없다.
그러나 랜즈는 그 유쾌함 속에서 날카로운 시선으로 현실을 그려낸다.
한 때 IT 개발자였던 관리자들이라면 고민하는 프로그래밍 작업에 대한 그리움과 욕망, 그리고 그 작업을 맡는 데 따르는 주변의 시선과 부담감(9장). 개발 배경이 없는 IT 관리자들에 대한 의견(2장)과 다양한 성향의 동료와 상사를 파악하는 법(26, 27, 28, 29장) 등은 여러분이 주위를 다시 둘러보게 할 것이다.
1부는 관리에 대한 주제를 다루는데 관리자들의 목표, 일반적인 성향, 습관, 배경들을 언급하며 그들에 대한 이해를 돕는다. 2부는 팀 내에서 일어나는 여러 프로세스에 대한 내용으로 팀 내의 마찰이나 프로젝트 진행과정 중에 흔히 일어나는 사건을 다룬다. 마지막 3부는 문젯거리 팀원 등의 일화를 다루며 팀에 있을 수 있는 다양한 성격과 구성원을 소개한다.
저자의 많은 문화적인 비유와 은유법의 구사로 많은 주석을 달아야 했다. 독자의 이해를 돕고자 블로그에 문화적 배경 지식에 관련한 정보를 올린다(http://managing-humans.blogspot.com/). 추가적인 이해가 필요하거나 의견이 있으면 주저하지 말고 블로그에 글을 남겨주길 바란다. 냉소적이고 비판적이기까지 하지만 그의 인간다움에 왠지 모르게 정이 가는 랜즈의 인간 관리 이야기를 여러분도 나만큼 즐기길 바라는 마음이다.
옮긴이 한정민은...
미국 카네기멜론 대학(Carnegie Mellon University) 에서 경영 정보 시스템(Information Systems)과 인간-컴퓨터 상호작용(Human-Computer Interactions)을 전공했고 부전공으로 커뮤니케이션 디자인(Communication Design)을 공부했다. CMU 대학의 웹사이트 분석 및 재편 사용자 경험 컨설팅, HCI 대학원 ‘스마트 홈’ 리서치 등의 프로젝트에 프로젝트 관리자(PM)로 참여했다. 최근에는 미국 타임워너 AOL의 동영상 검색 엔진 Truveo에서 웹 테크놀로지스트로 활동했으며 사용자 경험, 사용성 분석, UI, 인터랙션, 디자인, 웹 2.0 등 웹의 전반적인 분야에 두루 관심을 갖고 있다.
| 헬로, 안드로이드 2.1판: 구글의 모바일 개발 플랫폼 소개하기 (0) | 2010/10/11 |
|---|---|
| 한국어판 Network Warrior: 완벽한 네트워크 인프라를 위한 실용 지침서 (0) | 2009/12/24 |
| IT 개발자가 쓴 통쾌한 인간관리 이야기 (0) | 2009/08/19 |
| 한국어판 Programming .NET 3.5 (0) | 2009/05/04 |
| 한국어판 Programming Flex3 : RIA 개발을 위한 완벽 가이드 (3) | 2009/03/25 |
| ARM Cortex-M3 완벽 가이드 (0) | 2009/03/19 |
| 한국어판 Network Warrior: 완벽한 네트워크 인프라를 위한 실용 지침서 (0) | 2009/12/24 |
|---|---|
| IT 개발자가 쓴 통쾌한 인간관리 이야기 (0) | 2009/08/19 |
| 한국어판 Programming .NET 3.5 (0) | 2009/05/04 |
| 한국어판 Programming Flex3 : RIA 개발을 위한 완벽 가이드 (3) | 2009/03/25 |
| ARM Cortex-M3 완벽 가이드 (0) | 2009/03/19 |
| QT 4를 이용한 C++ GUI 프로그래밍(제2판) (0) | 2009/03/19 |
저자명 : 체이픽 커준, 조이 로트
역자명 : 김지원
출판사 : 도서출판 ITC
정 가 : 35,000원
ISBN : 978-89-6351-005-7
원서명 : Programming Flex3 : The Comprehensive Guide to Creating Rich Internet Applications with Adobe Flex
출간년월 : 2009 년 3 월
페이지 : 772 쪽
크기 : 세로 : 254, 가로 : 188, 반양장
“체이픽과 조이는 진정한 플렉스 전문가로서 개발에 필요한 귀중한 신구 자료를 이 책에 담았다”
- 매트 코틴, 어도비 시스템즈 선임 Flex 마케팅 과장
어도비 플렉스 3로 리치 인터넷 애플리케이션(RIA)을 개발해 보려는 사람에게 이 책은 좋은 길잡이가 된다. 이 책을 정독하고 실습해 보면 플렉스 3의 핵심 개념을 확실히 이해할 수 있으며, 특정 플렉스 기능들의 사용 적기와 그 이유를 간파하게 된다. 무료 플렉스 SDK를 이용하여 완벽하고 기능적인 웹 애플리케이션을 제작하고 어도비 AIR를 이용한 데스크탑 RIA를 제작하는 방법들을 보이는 다수의 예제와 샘플 코드가 들어 있다. 이 책을 어도비 플렉스 3 공식 참고문서와 병용한다면 매우 이상적인 학습 효과를 거둘 수 있다. 이 책에서 다루는 내용은 다음과 같다.
• 플렉스 프레임워크에 대한 기본 개념
• MXML과 액션스크립트를 사용한 프로그래밍
• UI 컴포넌트의 구조와 레이아웃
• 미디어 활용의 다양한 정석
• 애플리케이션과 컴포넌트의 스테이트 관리
• 전이와 이펙트 사용 비법
• 플렉스 애플리케이션 디버깅
• 웹 브라우저에 플렉스 애플리케이션 삽입
• 데스크탑용 AIR 애플리케이션 제작
플렉스 3 하나로 개발자는 RIA 개발에 있어 웹과 데스크탑이라는 두 마리 토끼를 잡을 수 있다. 이 책의 내용을 체계적으로 이해하고 훈련하면 위에 나열한 복합적이고 강력한 기술을 완벽에 가깝게 섭렵할 수 있다.
***********************************************************
차례
Chapter 1 플렉스 기초
플렉스 애플리케이션 기술 1
플렉스 구성요소 이용하기 8
데이터 서비스 작업(런타임에 데이터 로딩) 10
기존 HTML과 플렉스 웹 애플리케이션의 차이 11
플렉스 애플리케이션의 원리 13
플렉스와 플래시 저작의 개념 14
플렉스 1.5와 플렉스 2에 대하여 15
핵심정리 17
Chapter 2 플렉스 프레임워크로 애플리케이션 제작
플렉스 도구 모음 이용 19
프로젝트 생성 22
애플리케이션 빌드 26
애플리케이션 디플로이 41
핵심정리 42
Chapter 3 MXML
MXML 문법과 구조 43
MXML을 양방향화하기 53
핵심정리 56
Chapter 4 액션스크립트
액션스크립트 사용법 59
MXML과 액션스크립트의 상호 관계 63
액션스크립트 문법 66
변수와 프로퍼티 69
상속 85
인터페이스 86
이벤트 처리 88
에러 처리 90
XML 사용하기 94
투영 98
핵심정리 102
Chapter 5 프레임워크 기초
플렉스 애플리케이션의 구조 104
플렉스 애플리케이션 로드와 초기화 107
컴포넌트 수명주기 110
플렉스 애플리케이션을 다른 플렉스 애플리케이션에서 로드하기 112
플래시 플레이어와 플렉스 프레임워크의 차이 114
프레임워크 캐싱 116
애플리케이션 도메인 117
지역화 120
핵심정리 132
Chapter 6 레이아웃 관리
플렉스 레이아웃 개요 133
유동 인터페이스 제작 158
전부 종합하기 159
핵심정리 163
Chapter 7 UI 컴포넌트를 이용한 작업
UI 컴포넌트 166
버튼 174
값 실렉터 175
텍스트 컴포넌트 178
리스트 기반 컨트롤 179
팝업 컨트롤 199
컨트롤 바 208
핵심정리 210
Chapter 8 애플리케이션 외형 사용자 정의하기
스타일 사용하기 212
컴포넌트에 스킨 입히기 234
프리로더 사용자 정의하기 247
테마 252
런타임 CSS 256
핵심정리 260
Chapter 9 애플리케이션 컴포넌트
애플리케이션 컴포넌트의 중요성 262
MXML 컴포넌트 기초 264
컴포넌트 스타일 276
핵심정리 280
Chapter 10 프레임워크 유틸리티와 고급 컴포넌트 개념
툴팁 281
팝업 289
커서 관리 298
드래그 앤 드롭 300
리스트 기반 컨트롤 사용자 정의 310
포커스 관리와 키보드 제어 323
핵심정리 330
Chapter 11 미디어 작업
미디어에 대한 이해 331
미디어 삽입 335
다양한 미디어로 작업하기 342
핵심정리 358
Chapter 12 스테이트 관리
스테이트 생성 360
스테이트 적용 361
기존 스테이트의 하위 스테이트 정의 363
컴포넌트 추가와 제거 365
프로퍼티 지정 369
스타일 지정 369
이벤트 핸들러 지정 371
액션스크립트로 스테이트 정의 372
객체 생성 방식 관리(객체 프리로딩) 385
스테이트 이벤트 처리 388
스테이트 수명주기 389
핵심정리 396
Chapter 13 이펙트와 전환
이펙트 사용하기 398
사용자 정의 이펙트 생성 419
전환 사용하기 427
사용자 정의 전환 생성 434
핵심정리 434
Chapter 14 데이터 작업
데이터 모델 이용 436
데이터 바인딩 451
사용자 정의 클래스에 데이터 바인딩 가용화 463
데이터 바인딩 사례 468
데이터 바인딩 프락시 클래스 제작하기 472
핵심정리 476
Chapter 15 데이터의 유효성 검사와 형식화
사용자 입력 내용 검사 477
유효검사기 사용 478
표준 프레임워크 유효검사기 사용하기 494
사용자 정의 유효검사기 작성하기 500
데이터 형식화 502
NumberFormatter 503
DateFormatter 505
CurrencyFormatter 506
PhoneFormatter 506
ZipCodeFormatter 507
사용자 정의 포매터 작성하기 507
핵심정리 509
Chapter 16 클라이언트 데이터 통신
로컬 연결 512
영구 데이터 518
호스트 애플리케이션과 통신하기 533
핵심정리 539
Chapter 17 원격 데이터 통신
다양한 데이터 송수신 기법 542
요청/응답 데이터 통신 기법 544
웹 서비스 560
실시간 연결과 소켓 연결 573
파일 업로드와 다운로드 574
핵심정리 576
Chapter 18 디버깅
플래시 디버그 플레이어 577
FDB 사용 582
플렉스 빌더로 디버깅 584
원격 디버깅 588
trace()를 이용한 로그 기록 590
로깅 프레임워크 592
원격 데이터 디버깅 597
핵심정리 599
Chapter 19 사용자 정의 컴포넌트 제작
컴포넌트 프레임워크 개요 601
컴포넌트 수명주기 603
컴포넌트 구현상속 607
사용자 정의 프로퍼티와 이벤트 넣기 617
스타일 지정 기능 넣기 620
핵심정리 624
Chapter 20 브라우저에 플렉스 애플리케이션 삽입
HTML에 플렉스 애플리케이션 삽입 625
브라우저 버튼 통합과 딥 링크 639
플래시 플레이어 보안 654
런타임 공유 라이브러리 이용하기 657
핵심정리 666
Chapter 21 AIR 애플리케이션 제작
AIR 기초 667
AIR 애플리케이션 제작 668
AIR의 각종 기능 이용하기 672
AIR 애플리케이션 배포 700
핵심정리 704
Chapter 22 플렉스 애플리케이션 제작
샘플 애플리케이션 소개 705
새 프로젝트 설정 709
청사진과 마이크로아키텍처 이용 716
공통적 패턴 뽑아내기 718
핵심정리 732
찾아보기 733
***********************************************************
추천사
2004년도가 떠오른다. 그 해는 그리스에서 올림픽이 개최됐던 때다. 유가는 배럴당 50달러 넘게 상승했으며, <왕의 귀환>이 오스카상을 휩쓸었다. 레드삭스가 월드 시리즈에서 우승했고, 세렌디브 소쩍새가 스리랑카에서 처음 발견됐다. 끝내주는 해였구만! 음, 뭐 나도 이건 최근에 위키피디아에서 베낀 거지만. 아무튼 2004년은 그 소쩍새들에겐 굉장한 한 해였지 싶고, 나 또한 인터넷 애플리케이션에 있어 굉장한 한 해였다. 2004년이 바로 플렉스가 탄생한 해니까.
그 엄청 짧은 몇 해 만에 수많은 것이 바뀌었다. 플렉스 1은 매우 배타적이며 플렉스 1로 작성한 애플리케이션은 서버에 구속됐다. 값비싼 라이선스가 필요했으며 유용한 자료가 매우 희귀했다. 플렉스 1.5는 애플리케이션과 서버 간의 굴레를 끊었다. 문득 주요 플렉스 애플리케이션을 작성하거나 디플로이할 수 있는 사람도 있었겠지만 그 당시 대부분의 사람은 아직 플렉스의 존재조차 들어 본 적이 없는 상태였다. 플렉스 2가 출시되자 업계가 기를 쓰고 RIA 개발자의 정의를 정립하려 했던 시점임에도 실제로 리치 인터넷 애플리케이션(RIA) 개발자들의 플렉스에 대한 인지도가 약간 향상됐다. 플렉스의 인지도는 갈수록 높아졌고 급기야는 SDK를 무료로 배포했다. 업데이트 버전 2.0.1이 출시될 무렵 플렉스는 디자이너, 개발자, 소위 디바이너(디자이너 겸 개발자), 그 희귀하다는 세렌디브 개발자들로부터 지지받기에 이르렀다.
이제 플렉스 3가 나와 있고 이는 지금껏 가장 완전하고 사용성이 높은 버전이다. 프로파일러, OLAP, CS3 통합, 리팩터링, 프레임워크 RSL, 딥 링크, 에이잭스 브리지, 서버용 코드 생성, 자동화, 그 외에도 여러분이 꿈꿔 온 모든 것이 가능해졌다. 그리고 혹시 그 선물상자 안에 없는 것이 있더라도 프레임워크, 3D 라이브러리, 맵, 매시업, 설정자, 대시보드, 모니터, 위젯 등 커뮤니티에 구하면 모든 것을 얻을 수 있다.
하지만 그 모든 새로운 특징과 기능들 중 플렉스 3에 들어서 가장 크게 변한 것은 무엇일까?
뭐 그게 비록 새로운 기능이라든지 리팩터링된 API랄 순 없지만, 휘황찬란하거나 싸구려인 것은 아니다. 멋진 새 ‘입문 경험 쌓기’도 역시 아니다. 플렉스 3의 가장 큰 변화를 진짜로 확인하려면, 자리에서 일어서서 거실을 지나 화장실로 간 후 벽에 붙은 거울을 바라봐야 한다(물론 화장실 들어가기 전엔 얌전히 노크도 해야 할 테고). 플렉스 3에서의 가장 큰 변화는 바로 여러분이다. 그게 정답인 걸. 플렉스 3에서는 여러분과 나 또는 오픈소스인 플렉스 SDK에 기여할 수 있는 모든 이들이 가장 큰 변화다. 짐승의 배를 찌를 수도 있고, 비장을 꼬아버릴 수도 있으며, 꿰매버리거나 전혀 다른 새 짐승으로 탈바꿈시킬 수도 있다. 이 모든 게 여러분 손에 달려 있다. 텍스트 편집기와 인터넷 접속만으로도 충분히 플렉스라는 선도적인 RIA 기술에 동참할 수 있는 것이다.
그렇다면 이 책의 적합한 용도는 무엇일까? 내가 기존 플렉스 3 제품의 문서를 보니 2,300페이지가 넘는 분량의 내용과 거의 1,200개 가까이 되는 예제 애플리케이션이 들어 있다. 그중 내가 작성해 본 코드는 몇 개밖에 안 되며, 혹시 여러분이 컴파일러 오류가 난다고 나를 들볶더라도 난 발뺌하겠다. 더군다나 이 책에는 개발자 문서에 추가로 들어 있는 실 페이지 수천 장 분량의 언어 참고서도 포함돼 있지 않다. 그렇다면 그 많은 참고 콘텐트가 이미 존재하는데 굳이 따로 이 플렉스 3 서적을 봐야 하는 이유는 무엇일까?
필자들이 이 책의 전서인 『Programming Flex 2』를 집필하던 당시, 체이픽과 조이는 플렉스 2 사용법을 완벽히 익혔다. 이때는 아직 소스코드가 공개되지도 않았던 시기였다. 두 필자는 원격 데이터를 이용한 작업, 복잡한 플렉스 레이아웃 스키마들의 탐색, 멋진 사용자 정의 컴포넌트 제작 등을 수행하는 방법을 힘겹게 알아냈다. 이들은 실질적 문제들을 해결하고 실무적인 코드를 작성하는 진정한 개발자들이었다. 그 책에서 나는 수많은 주제를 보고 ‘내가 저 책을 집필했더라면 좋았을 걸’이라고 속으로 되뇌었다. 이 필자들은 상당히 복잡한 주제들을 채집한 후 개발자에게 필요한 정보로 다듬었다.
그 플렉스 2 서적을 쓰기 위해 체이픽과 조이는 제품을 면밀히 조사했다. 차세대 웹 애플리케이션을 정의하게 될 동적 프레임워크의 피부를 들어내어 튼튼한 뼈대를 살폈다. 이 책에는 비디오 플레이어를 설계하고자 하는 사람을 위한 내용도 들어 있고, 엔화용 통화 포매터를 설계하고자 하는 사람을 위한 내용도 들어 있다. 애플리케이션 수명주기에 관해 처리하고자 하는 사람에게도 이 책은 제격이다.
아무튼 이 책은 여러분에게 플렉스 3가 무엇인지를 알려준다. 이 책을 끝까지 읽고 나면 플렉스 3라고 할 수 없는 문제점들이 발견될 수도 있지만, 그때는 그런 문제점에 대한 대책을 세울 수도 있게 된다. 만약 모두가 잠든 늦은 시각에 영감이 떠오른다면 여러분은 용기를 얻어 경험을 쌓고 http://opensource.adobe.com/flex에 가입해서 플렉스 분야에 발을 들여놓게 될지도 모른다.
매트 혼
어도비(Adobe)
머리말
말 그대로 이 책의 전서인 『Programming Flex 2』를 집필하는 데는 수년이 걸렸다. 필자들은 그 책에 심혈을 기울였고 탈고와 편집과 교정이 완료되어 마침내 프린터에서 벗어날 수 있었을 때 우린 긴 한숨을 내쉬며 이제 드디어 플렉스 집필에서 해방되는구나 하며 좋아했다. 하지만 플렉스 2가 나오고 얼마 되지도 않은 찰나에 플렉스 3가 순식간에 출시돼 버려서 피로한 심신에 휴식을 줄 수 없게 됐다. 그래서 우린 다시금 키보드 앞에 붙어 앉아 플렉스 3 버전에 맞게 기존 집필을 수정하기에 이르렀다. 그 결과로 이 책은 이렇게 여러분 손에 들려 있는 것이다. 이 책의 내용은 그저 간단한 수정에 불과한 것이 아니다.
우리는 『Programming Flex 2』가 플렉스 2에 관한 서적들 중 최고의 책이라고 생각했었다. 그러나 미흡한 점도 없지 않았다. 그 책의 내용 중에서 시간을 많이 할애하지 못한 주제도 있었다. 『Programming Flex 3』를 집필하면서 우리는 플렉스 3에 관한 책으로 내용을 업데이트했을 뿐만 아니라 전서에 수록되지 않았던 내용도 포함해서 다뤘다. 우린 소기의 목적을 달성해냈다는 생각이 든다.
이 책에 추가된 부분 중 일단 눈에 확 띄는 장이 20, 21, 22장이다. 20장에서는 플렉스 애플리케이션을 웹 페이지에 넣기 위해 알아야 하는 모든 내용을 상세히 설명했다. 이 내용이 플렉스의 최고 핵심은 아닐지라도 꽤 중요하다고 생각한다. 21장에는 플렉스를 이용한 AIR 데스크탑 애플리케이션 제작법에 관해 설명했으며, 22장에는 이 책의 전반에 걸쳐 설명했던 모든 주제를 융합해 하나의 완전체를 만드는 내용을 넣었다. 22장이 바로 우리가 생각하는 가장 중요한 장이라 할 수 있다. 왜냐하면 플렉스에 관해 앞 장들에서 설명했던 모든 것을 습득할 수 있는 방법이 설명돼 있고, 그 방법을 실무 애플리케이션 제작에 활용할 수 있기 때문이다.
하지만 이 책이 오로지 전서를 기반으로 그 3개의 장만 추가한 것일 뿐이냐고 묻는다면 대답은 ‘아니오’다. 이 책의 모든 장의 내용을 검토해서 수정했다. 몇 개의 장은 플렉스 2에서 3로의 변경사항이 미미해서 거의 수정이 불필요했지만, 나머지 장은 상당량의 수정과 추가가 이뤄졌다. 만일 여러분이 『Programming Flex 2』를 읽게 된다면 이 책에 새로 추가됐거나 수정된 내용을 굉장히 많이 발견할 수 있을 것이다.
플렉스 3는 플렉스 2에 비하면 말할 것도 없이 매우 광범위하다. 물론 깊이 들어갈수록 내용이 점점 어려워지기는 하지만(사실상 플렉스 3 애플리케이션 제작의 초반은 매우 쉽다), 이렇듯 길고 예리한 학습곡선을 갖는 이유는 단순히 프레임워크에 패키징된 기능의 양이 어마어마하기 때문이다. 공식 플렉스 문서는 이러한 기능들 중 뭔가를 찾기 쉽도록 잘 구성돼 있다. 그 덕분에 우리는 목표한 대로 여러분이 그 공식 문서에서 얻을 수 없던 지식의 갭을 메우고 곧장 시작할 수 있게끔 플렉스에 익숙해지게 해 주는 역할의 책을 집필해낼 수 있었다. 이 책을 쓰면서 필자들이 의도한 바는, 플렉스를 배움에 있어 플래시 플랫폼 기술을 사용해 우리가 리치 인터넷 애플리케이션을 제작해 온 장기간의 경험을 바탕으로 실무적 조언을 제공하는 것이다.
진심으로 우린 플렉스 3가 애플리케이션 제작에 이상적인 제품이라 생각한다. 이 책은 비록 기술서지만, 집필 내내 모든 열정을 쏟아 부었으며 이 책을 읽는 독자 여러분도 우리의 그러한 열정을 공유하게 되리라 믿는다. 플렉스 3는 리치 인터넷 애플리케이션을 제작하는 데 있어 시중의 다른 어느 것보다 훨씬 좋은 도구라고 생각하며 여러분도 아마 책을 읽으면서 이에 동의하리라 생각한다. 플렉스를 이용하면 브라우저 간 호환성 문제도 거의 없고, 네트워크 데이터 통신이 신속하며, 프레임워크가 견고한 객체 지향 원칙과 표준을 기반으로 제작돼 있어 좋다. 가장 세련되면서도 안정적인 애플리케이션 제작에는 플렉스 3만한 것도 없다는 생각이 든다.
/대상 독자
이 책은 플렉스 3에 관해 배우고자 하는 모든 이를 겨냥해서 집필됐다. 우리는 이 책의 독자가 다양한 배경을 가진 매우 다양한 그룹의 사람들이라는 점을 알고 있다. 수년간 플래시 플랫폼 기반의 기술을 이용해서 작업해 온 사람도 있겠고, 플래시 플레이어에서 돌아가는 콘텐트 제작이 아예 처음인 사람도 있을지 모른다. 컴퓨터과학 학위를 보유한 사람이 있을 수도 있겠고, 소프트웨어 업계에서 수년간 종사한 사람도 있을 수 있다. 물론 독학으로 공부한 사람도 있을 것이다. 우린 이러한 다양한 독자들의 요구에 부합하는 내용을 다루기 위해 최선을 다했다.
하지만 이 책을 최대한 활용하려면, 여러분은 객체 지향 원칙을 탄탄히 이해하고 런타임 환경, 바이트 코드, 컴파일러 등의 개념을 파악해야만 한다. 추가로, 혹시 여러분이 이미 액션스크립트, 자바, C, C#이나 그 밖의 비슷한 문법을 사용하는 언어를 알고 있다면 이 책을 좀 더 능률적으로 활용할 수 있을 것이다. 이 책에도 액션스크립트(플렉스 애플리케이션이 이용하는 프로그래밍 언어) 기초에 대해서 한 개의 장을 할애해 다루기는 했으나, 핵심 API에 대해서는 이 책에서 자세히 설명하지 않는다. 혹시 액션스크립트 언어를 체계적으로 공부하고 싶은 사람은 『Essential ActionScript 3』나 『ActionScript 3 Cookbook』 등의 액션스크립트 3.0 전문서를 읽으라고 권하고 싶다.
/책의 구성
이 책의 목차를 구성하고 또 재구성하는 데 많은 시간을 할애했다. 모든 독자에게 안성맞춤이 되도록 목차를 표현할 방법은 전혀 없는 것 같지만, 우리 나름대로 최선을 다해서 합리적이라 여기는 순서대로 표현했다.
1장, 플렉스 기초
플렉스란 무엇인가? RIA(리치 인터넷 애플리케이션)는 또 무엇인가? 이러한 의문들에 답을 주며 이 책의 나머지 부분을 이해하기 위한 기본 지식을 설명해 놓은 장이다.
2장, 플렉스 프레임워크로 애플리케이션 제작
다양한 엘리먼트와 플렉스 애플리케이션 제작 단계에 대해 설명한다. 컴파일러 사용법, 스크립트 제작, 플래시 플레이어 보안, 애플리케이션 디플로이법 등을 다룬다.
3장, MXML
MXML은 플렉스가 사용하는 선언형 언어다. 이 장에선 MXML의 기초 내용을 설명한다.
4장, 액션스크립트
액션스크립트는 플렉스가 사용하는 객체 지향 프로그래밍 언어다. 이 장에서는 액션스크립트 3.0의 기초적인 내용을 공부한다.
5장, 프레임워크 기초
플렉스는 애플리케이션 제작의 여러 측면을 대단히 간소화해 준다. 여러분이 내부적인 원리까지 자세히 알아야 할 경우는 별로 없지만, 프레임워크의 동작 원리에 대해 기초적인 사항을 이해하고 있으면 나중에 쓸모가 있다. 이 장에서는 플렉스 애플리케이션의 수명주기, 부트스트래핑 등에 관해서 설명한다.
6장, 레이아웃 관리
플렉스에는 여러분이 제작하게 될 애플리케이션 내에 모든 종류의 레이아웃을 쉽고 빠르게 작성할 수 있게 해 주는 다양한 레이아웃 컨테이너가 있다. 그러한 컨테이너들을 가지고 작업하는 방법을 설명한다.
7장, UI 컴포넌트를 이용한 작업
플렉스 프레임워크의 일부분인 사용자 인터페이스 컴포넌트(버튼, 목록, 메뉴 등)에 관해 살펴보겠다.
8장, 애플리케이션 외형 사용자 정의하기
공동 스타일 지침이라든지 창의적 시각에 충실한 애플리케이션을 제작할 수 있다는 점에서, 플렉스 애플리케이션의 외형을 개발자가 맞춤화하는 것은 중요한 일이다. 플렉스 애플리케이션의 외형을 바꾸는 방법에 대해 공부하겠다.
9장, 애플리케이션 컴포넌트
플렉스 애플리케이션 개발을 다루기 쉽게 하려면 애플리케이션을 각각의 부분들로 분해하는 방법을 알아야 한다. 이러한 개별 요소들로의 분해 방법을 설명한다.
10장, 프레임워크 유틸리티와 고급 컴포넌트 개념
먼저 컴포넌트를 이용한 작업의 기초에 대해 이해했다면, 그 지식을 확장하는 방법을 알아야 한다. 이 장에서는 툴팁, 목록 맞춤화, 팝업창 등을 살펴보겠다.
11장, 미디어 작업
플렉스에서는 개발자가 작성하는 애플리케이션에 각종 애셋이나 애니메이팅되는 이미지에서부터 비디오나 오디오에 이르기까지 다양한 미디어를 포함시킬 수 있다. 이러한 엘리먼트들을 가지고 작업하는 방법을 이 장에서 설명한다.
12장, 스테이트 관리
플렉스 애플리케이션과 그 애플리케이션에 들어 있는 컴포넌트들은 하나의 뷰에서 다른 뷰로 전환될 수 있다. 플렉스에서는 이러한 변화를 ‘스테이트’라고 한다. 스테이트는 폼에 새 컴포넌트를 추가하는 것만큼 간단할 때도 있지만, 어떨 땐 화면에 있는 전체 콘텐트가 변경돼야 하는 경우도 있다. 이 장의 주제는 스테이트 관리 방법이다.
13장, 이펙트와 전환
플렉스에는 ‘전환’과 ‘이펙트’라는 기능이 있어서, 스테이트들 간에 또는 사용자에 대한 응답과 시스템 이벤트 간에 활기찬 변화를 줄 수가 있다. 이 장에서는 그러한 전환과 이펙트에 대해서 다룬다.
14장, 데이터 작업
플렉스 애플리케이션 내의 데이터를 모델링하는 방법을 설명하며, 데이터 값이 변경되면 컴포넌트들이 자동으로 업데이트되도록 컴포넌트들을 연결하는 방법에 대해서도 설명한다.
15장, 데이터의 유효성 검사와 형식화
사용자 입력 내용을 검증하는 방법과 숫자, 전화번호 같은 데이터의 형식을 정의하는 방법을 다룬다.
16장, 클라이언트 데이터 통신
클라이언트 데이터 통신이란 데이터가 클라이언트 측 컴퓨터에 잔존하는 플래시 플레이어에 출입하는 모든 데이터 전송을 총칭한 것이다. 이에 대한 예로 동일한 한 대의 컴퓨터에서 실행되고 그 컴퓨터에 영구 데이터를 저장하는 둘 이상의 플렉스 애플리케이션들 간의 통신을 들 수 있다. 15장에서 다루는 주제는 이러한 것들이다.
17장, 원격 데이터 통신
클라이언트 컴퓨터에서 돌아가는 플렉스 애플리케이션에서 원격 데이터 서비스로 통신하는 방법에 대해 설명한다. 이 장에선 XML, SOAP, AMF 등의 사용법을 공부하게 된다.
18장, 디버깅
애플리케이션의 버그를 바로잡는 것은 애플리케이션을 작성하는 것만큼이나 중요하다. 에러 없는 애플리케이션을 작성한다는 것은 드문 일이며, 그렇기 때문에 그러한 에러를 효과적으로 추적해내는 것은 중요한 일이다. 이 장에서는 플렉스의 디버깅 도구 사용법을 알아보겠다.
19장, 사용자 정의 컴포넌트 제작
개발자가 사용, 맞춤화, 배포가 가능한 엘리먼트를 제작할 수 있다는 점에서 사용자 정의 컴포넌트는 플렉스 애플리케이션의 중요한 부분이다. 이 장에서는 플렉스 프레임워크를 이용해 사용자 정의 컴포넌트를 제작하는 데 필요한 단계를 설명한다.
20장, 브라우저에 플렉스 애플리케이션 삽입
대부분이라 할 순 없지만 많은 플렉스 애플리케이션이 웹상에 디플로이된다. 이를 위해선 플렉스 애플리케이션을 웹 브라우저에 삽입해야 한다. 이 장에서는 브라우저에 플렉스 애플리케이션을 삽입하는 방법에 대해 설명하고 뒤로/앞으로 버튼의 기능과 딥 링크 기능을 구현하기 위해 플렉스 애플리케이션을 브라우저에 통합하는 방법에 대해 설명하겠다.
21장, AIR 애플리케이션 제작
플렉스로 어도비 AIR 런타임 환경에서 돌아가는 데스크탑 애플리케이션을 제작하는 방법에 대해 다룬다. 이를 통해 개발자는 플렉스 기술을 사용해서 로컬 파일 시스템이나 시스템 수준의 드래그 앤 드롭 같은 데스크탑에서만 가능한 기능에 접근할 수 있는 애플리케이션을 제작할 수 있다.
22장, 플렉스 애플리케이션 제작
완전한 플렉스 애플리케이션을 제작하고 작업함에 있어 난점들을 살펴본다. 이 장에선 각종 아키텍처 과제 및 그에 대한 각종 해법을 배우게 된다.
/감사의 글
이 책에는 많은 이들의 노력과 기여가 담겨 있다. 다음에 나열한 사람들에게 감사를 표하고 싶다.
이 책이 나올 수 있게 해 준 오라일리 임직원들께 큰 감사를 드린다. 스티브 바이스(Steve Weiss)와 오드리 도일(Audrey Doyle)에게 이 책의 집필과 편집 내내 끊임없이 수고해 주고 인내해 준 데 대해 특별한 감사를 전한다. 둘은 지속적으로 각자의 임무를 초월해 수고해 줬다.
플렉스 2 같은 훌륭한 제품을 제작해 준 데 대해서만이 아니라 우리의 문의에 답해 주고 우리가 놓치고 있었을지도 모르는 사항에 대해 알려 준 많은 어도비 가족들에게도 감사를 전하고 싶다. 그 밖에도 우리의 질문에 답해 줬을 뿐만 아니라 시간을 할애해 집필한 장들을 검토해 주고 소중한 의견을 제시해 준 매트 초틴(Matt Chotin), 알렉스 하루이(Alex Harui), 앤드류 스폴딩(Andrew Spaulding), 매니시 제서니(Manish Jethani)에게 특히 감사하고 싶다. 또한 이 책의 추천사를 써달라는 우리의 제의를 수락해 준 어도비의 매트 혼(Matt Horn)에게도 감사를 전한다.
이 책의 기술적 퀄리티는 필자들만의 업적은 아니다. 환상적인 그룹의 기술 감수자 분들이 몇 시간씩 들여서 잘못된 점을 최종 수정하도록 지적해 줬기에 이러한 퀄리티가 나올 수 있었다. 이 책에 들어 있는 코드가 제대로 작동하는 것이 다 기술 감수자 로민 이라니(Romin Irani)와 데렉 위스추센(Derek Wischusen) 덕택이다.
체이픽의 인사
뛰어난 공동 저자가 되어준 데 대해 조이 로트에게 사의를 표하고 싶다. 기술 영역과 출판이라는 양 업계에서의 조이의 경험 덕분에 이 책을 집필하는 긴 과정을 타개해 나갈 수 있었다. 집필 경험 내내 뒷받침해 준 나의 가족, 친구들과 더불어 아텔리스(Atellis)의 팀에게도 고마움을 표하고 싶다. 드디어 해냈다! 끝으로 집필 경험이 처음인 나를 믿어준 오라일리 팀과 이 책에 고마움을 전달하고 싶다.
조이의 인사
이 책을 집필할 수 있게 나를 섭외해 준 체이픽에게 진심으로 고맙게 생각한다. 체이픽과의 작업은 영광이었으며, 최상의 완벽주의를 통해 그는 이 책에서 내가 보여주려 의도한 최대한의 것들을 이끌어낼 수 있게 했다. ‘더 몰픽 그룹(The Morphic Group)’에서 근무하는 동료들에게도 이 책에 도움되는 조언들을 해 준 데 대해 감사를 전한다. 더불어 관대한 마음으로 뒤치다꺼리를 해 준 나의 가족과 친구들에게도 감사와 사랑을 전한다.
저자 소개
체이픽 커준(Chafic Kazoun)
체이픽 커준은 이 책의 공동 저자이자 Atellis의 수석 소프트웨어 설계사다. 1998년부터 플래시 기술 관련 업무를 해 왔으며 처음부터 플렉스를 병행했다.
조이 로트(Joey Lott)
조이 로트는 The Morphic Group(www.themorphicgroup.com)의 공동 설립자며, 플렉스 애플리케이션 개발이 주력 업무다. 오라일리의 『ActionScript 3 Cookbook』을 비롯한 플렉스 및 플래시 기술에 관한 유수의 서적들을 집필했다.
***********************************************************
역자 머리말
약 7년 전 플래시를 처음 접해서 뭔가 만들어 보려고 했던 때가 생각난다. 그때는 액션스크립트라고 해봐야 거의 언어적인 측면이 미미해서 별도로 액션스크립트라는 존재나 개념을 정립하지 못한 채 프레임 간의 이동이나 버튼 제어 등에 간략한 스크립트를 사용했었다. 처음 액션스크립트 2가 등장해서 접했을 때는, 내가 기존에 플래시 파일을 제작할 때 사용했던 그 간략한 스크립트 명령들을 이런 식으로 다른 언어처럼 길게 작성해서 상당한 것들을 제어할 수 있다는 점에 조금 놀랐다. 당시에 플래시 툴을 이용해서 액션스크립트 2를 작성하고 각종 세련된 사용자 정의 컴포넌트를 만들어내는 전문가 분들의 소스코드를 살펴보면서 이런 식으로 컴포넌트들을 이용해 커다란 애플리케이션을 제작한다면 참 유용하겠다는 생각을 했었다. 하지만 당시 액션스크립트 2를 능숙하게 프로그래밍하는 분들을 많이 접하지 못해서 개인적으로는 과연 이러한 액션스크립트가 대중화되어 널리 활용될지에 대해서는 회의를 갖고 있었다. 내가 플래시나 액션스크립트 전문가라든지 심지어 툴에 익숙한 플래시 디자이너인 것도 아니지만, 그래도 액션스크립트 2가 아직 여타의 구조적 언어들에 비해서는 뭔가 약간의 체계성이 부족한 것 같다는 생각이 들었다. 그 후 액션스크립트에 대한 나의 관심이 식어갈 무렵 액션스크립트 3가 공식 발표됐고 많은 변화를 발견했다. 무엇보다 기존에 접한 다른 언어와 상당히 비슷해졌고 엄격해진 객체 지향 개념의 첨가로 훨씬 더 체계화된 느낌이었다.
사실 내가 플렉스를 접하게 된 것은 그리 오래되지 않았다. 액션스크립트 3 등장 직후, 플래시 툴에서 직접 그리고 프레임을 제어하는 디자인과 애니메이션 기반의 제작을 탈피해서 이제는 뭔가 액션스크립트 3를 적극 활용해서 간편한 방식으로 애플리케이션을 만들 수 있다면 좋지 않을까 생각하게 됐고 그 무렵 국내에서 플렉스 2의 인기도 때마침 높아지고 있는 시점이어서 나도 손쉽게 플렉스 2의 존재를 감지하게 됐다. 예전 학창 시절에 MFC 수업을 듣고 처음 실습했을 때의 그 편의적인 느낌이 다가왔다. 단순히 몇 줄 되지 않는 코드 작성만으로 간단하게 애플리케이션이 완성되고 실행해 볼 수 있다는 점에서 전율을 느꼈다.
이 책에도 이미 충분히 설명돼 있기에 플렉스 3에 관한 추가적인 언급을 할 필요성은 느끼지 못하지만 플렉스 3는 계속된 진화 과정을 거쳐서 이제 표준, 객체 지향, 호환성 등이 지원되는 간결하고 세련되면서도 강력한 기능의 각종 RIA를 제작하는 데 있어선 더할 나위 없는 도구로 자리 잡으리라 예견한다.
이 책에 수록된 무수한 부분 예제들을 직접 작성해서 플렉스 프레임워크나 명령줄 툴을 이용해서 컴파일하고 결과를 본다면 그 각각의 한 단계를 밟을 때마다 각자의 실력과 경험이 누적돼 갈 것이라 생각한다. 특히 맨 끝의 22장엔 그 앞의 장들에서 다룬 모든 내용을 총괄 적용해 완성 애플리케이션을 제작하는 과정까지 설명하고 있으니 종합적 응용 방법을 손쉽게 주워 담을 수 있다. 플렉스 2 서적 번역 중 그 짧은 시차에 플렉스 3가 발표되는 바람에 재번역을 해야 했지만 그를 통해 짤막한 코드를 반복 실행해 봄으로써 내 별 볼일 없는 플렉스 경험도 조금이나마 쌓였고 플렉스에 대한 애정도 커졌다. 이 툴을 활용한다면 아직까지 우리가 상상하지 못하는 무한한 잠재 가능성을 웹 또는 데스크탑에서 실현해낼 수도 있지 않을까 싶다. 플렉스 3라는 편리하고 발전적인 도구가 마련돼 있으니 이 도구의 사용법을 효과적으로 터득해서 이제 각자의 상상 속 아이디어를 실제로 적용한 호화로운 애플리케이션을 무한한 크기의 백지 위에 자유롭게 구현해 보자.
김지원(www.gtport.com)
프로그래밍과 새로운 웹 기술에 항상 관심을 갖고 공학 용어의 명확성에 대해 고민하고 있다. 기술 문서, 매뉴얼, IT 관련 논문을 주로 번역했으며 해외 기술 논문 한글화 작업에도 참여했다. 번역서로는 『CSS 비밀 매뉴얼』, 『Ajax 디자인 패턴』, 『시스템 관리자를 위한 시간관리 전략』, 『웹 2.0 프로그래밍』이 있다.
***********************************************************
| IT 개발자가 쓴 통쾌한 인간관리 이야기 (0) | 2009/08/19 |
|---|---|
| 한국어판 Programming .NET 3.5 (0) | 2009/05/04 |
| 한국어판 Programming Flex3 : RIA 개발을 위한 완벽 가이드 (3) | 2009/03/25 |
| ARM Cortex-M3 완벽 가이드 (0) | 2009/03/19 |
| QT 4를 이용한 C++ GUI 프로그래밍(제2판) (0) | 2009/03/19 |
| 헬로, 안드로이드: 구글의 모바일 개발 플랫폼 소개하기 (2) | 2009/03/19 |
저자명 : 조셉 위(Joseph Yiu)
역자명 : 임희연
출판사 : 도서출판 ITC
정 가 : 25,000원
ISBN : 978-89-90758-21-7
원서명 : The Definitive Guide to the ARM Cortex-M3
출간년월 : 2009 년 3 월
페이지 : 472 쪽
크기 : 세로 : 245, 가로 : 188, 반양장
새로운 ARM Cortex-M3 프로세서의 프로그래밍 및 구현을 위한 유일한 가이드!
Cortex-M3는 주목받고 있는 최신의 임베디드 32-비트 프로세서이다. 이 프로세서는 비용과 전력 소모는 낮고, 재구성은 비교적 자유롭게 할 수 있다는 장점을 갖고 있다. 이 책은 임베디드 하드웨어와 소프트웨어 엔지니어들에게 Cortex-M3에 대한 전반적인 개요를 제공할 뿐 아니라 이를 사용할 때 얻을 수 있는 모든 장점들에 대해 상세히 설명하고 있다. 새로운 아키텍처에 대한 소개, 명령어 세트 요약, 하드웨어 특징, 디버깅 시스템에 대한 전반적인 설명이 모두 포함되어 있다. 또한 ARM 툴 및 GNU 툴 체인을 사용하여 소프트웨어 개발을 할 때의 기본 단계들을 포함하는 어플리케이션 예제들도 충분히 제공하고 있다.
이 책에는 ARM Cortex-M3에 대한 모든 것이 담겨져 있다.
• ARM 아키텍처의 배경
• Cortex-M3 기본 사항들
• 동작 모드
• 익셉션과 인터럽트
• 어셈블리 기초
• 16-비트 및 32-비트 데이터 처리 명령어
• 메모리 시스템
• 구현에 대한 개요
• 어셈블리어와 C를 사용한 Cortex-M3 프로그래밍
• 개발 흐름
• 전력 관리
• 멀티프로세서 통신
• 개발 툴
• 디버깅
• KEIL RealView MDK를 이용한 시작 설명서
이 책의 대상 독자
ARM사의 Cotex-M3 프로세서에 관심이 있는 하드웨어 엔지니어와 소프트웨어 엔지니어 모두를 위한 책이다. 마이크로컨트롤러 또는 마이크로프로세서에 대한 경험을 가지고 Cortex-M3 프로세서에 대해 조사하고 있는 프로그래머, 임베디드 제품 설계자, SoC 엔지니어, 연구원 등의 사람들이 좀 더 가볍고 이해하기 쉽게 읽을 수 있도록 만들어졌다.
저자 소개
Joseph Yiu(조셉 위)
ARM사의 주임 엔지니어
역자 소개
임희연
대학원 인턴 시절 ARM을 처음 접하고 그 매력에 빠져서, 현재까지도 ARM 기반의 임베디드 시스템 개발을 전문으로 하는 전자 공학도로 일하고 있다. 대학원 졸업 후, 삼성전자에서 시스템 소프트웨어 엔지니어로 일하다가, 현재는 ㈜씨랩시스에서 삼성 ARM 기반의 범용 하드웨어 플랫폼 개발을 전담하고 있다. 역서로는 《ARM System Developer's Guide 한국어판》(사이텍미디어, 2005), 《임베디드 시스템 아키텍처》(ITC, 2007)가 있다.
감수자 소개
이종수
IT/BT 벤처 붐이 일고 ARM 프로세서가 생소하던 그 시절, 엔지니어로서 기술적인 매력을 느껴 이를 보급하고자 기술 강의를 시작한 것이 인연을 맺은 지 벌써 10여 년을 훌쩍 넘겨버린 베테랑 엔지니어이자 강사이다. 삼성전자와 LG전자를 필두로 대기업, 중소기업, 교육기관에서 다수의 ARM 교육과정을 만들고 강의를 진행해왔으며, ARM 관련서적의 번역 및 감수, 잡지 기고 등의 왕성한 활동을 하고 있다. 국내 ARM 대리점이자 공인교육기관으로서, 그리고 최적화된 ARM 솔루션 등을 공급하는 임베디드 ARM 전문업체인 ㈜씨랩시스의 대표이사를 거쳐 현재는 연구소장 직을 맡고 있다. 최근에는 국내보다 해외시장에서의 시장점유율을 높이기 위해 최신기술을 적용한 전문화된 솔루션 구축을 위해 힘쓰고 있다.
***********************************************************
차례
제1장 소개 1
ARM Cortex-M3 프로세서란 무엇인가? 2
ARM과 ARM 아키텍처의 배경지식 4
명령어 세트 개발 9
Thumb-2 명령어 세트 아키텍처(ISA) 11
Cortex-M3 프로세서 어플리케이션 12
이 책의 구조 13
심화학습 14
제2장 Cortex-M3의 개요 15
Cortex-M3 기초 16
레지스터 16
동작 모드 19
내장된 중첩 벡터 인터럽트 컨트롤러 21
메모리 맵 23
버스 인터페이스 24
메모리 보호 장치 24
명령어 세트 25
인터럽트와 익셉션 27
디버깅 지원 29
특징 요약 30
제3장 Cortex-M3 기본 33
레지스터 34
특별한 레지스터 38
동작 모드 43
익셉션과 인터럽트 45
벡터 테이블 47
스택 메모리 동작 48
리셋 시퀀스 53
제4장 명령어 세트 57
어셈블리 기초 58
명령어 리스트 62
명령어 설명 69
Cortex-M3에서의 몇 가지 유용한 명령어 93
제5장 메모리 시스템 105
메모리 시스템 특징 개요 106
메모리 맵 106
메모리 접근 속성 109
디폴트 메모리 접근 허용 111
비트-대역 동작 112
비정렬 전송 122
배타적 접근 124
엔디안 모드 126
제6장 Cortex-M3 구현 개요 129
파이프라인 130
상세한 블록 다이어그램 131
Cortex-M3에서의 버스 인터페이스 136
Cortex-M3에서의 다른 인터페이스 137
외부 전용 주변장치 버스 138
전형적인 연결 140
리셋 신호 141
제7장 익셉션 143
익셉션 유형 144
우선순위 정의 146
벡터 테이블 153
인터럽트 입력 및 펜딩 동작 155
결함 익셉션 159
SVC와 PendSV 166
제8장 NVIC와 인터럽트 제어 171
NVIC 개요 172
기본적인 인터럽트 설정 172
인터럽트 활성화 및 클리어 활성화 173
인터럽트 펜딩 및 클리어 펜딩 173
인터럽트를 셋업하는 과정의 예 181
소프트웨어 인터럽트 183
SYSTICK 타이머 184
제9장 인터럽트 동작 187
인터럽트/익셉션 시퀀스 188
익셉션 종료 190
중첩 인터럽트 191
테일-체인 인터럽트 192
늦은 도착 192
익셉션 리턴값에 대한 보다 상세한 사항 193
인터럽트 지연 194
인터럽트와 관련된 결함 196
제10장 Cortex-M3 프로그래밍 199
개요 200
어셈블리와 C 간의 인터페이스 202
전형적인 개발 흐름 203
첫 번째 단계 204
출력물 생성하기 205
데이터 메모리 사용하기 211
세마포어를 위한 배타적 접근 사용하기 212
세마포어를 위한 비트 대역 사용하기 215
비트 영역 추출 및 테이블 분기 사용하기 216
제11장 익셉션 프로그래밍 219
인터럽트 사용하기 220
익셉션/인터럽트 핸들러 225
소프트웨어 인터럽트 226
익셉션 핸들러를 가진 예제 227
SVC 사용하기 231
SVC 예제: 출력함수 사용 233
C에서 SVC 사용하기 236
제12장 진보한 프로그래밍 특징과 시스템 동작 241
두 개의 분리된 스택을 가지고 있는 시스템 동작시키기 242
더블워드 스택 정렬 245
Nonbase 쓰레드 활성화 246
성능 고려 248
락업 상황 251
제13장 메모리 보호 장치 255
개요 256
MPU 레지스터 257
MPU 셋업하기 263
전형적인 셋업 방법 269
제14장 다른 Cortex-M3 특징 275
SYSTICK 타이머 276
전력 관리 280
멀티프로세서 통신 283
셀프-리셋 제어 286
제15장 디버그 아키텍처 289
디버깅 특징 개요 290
CoreSight 개요 290
디버그 모드 296
디버깅 이벤트 300
Cortex-M3에서의 브레이크포인트 302
디버그 상태에서 레지스터 내용에 접근하기 303
다른 코어 디버깅 특징 305
제16장 디버깅 컴포넌트 307
소개 308
트레이스 컴포넌트: 데이터 와치포인트 및 트레이스 309
트레이스 컴포넌트: 인스트루먼트 트레이스 매크로셀 311
트레이스 컴포넌트: 임베디드 트레이스 매크로셀 313
트레이스 컴포넌트: 트레이스 포트 인터페이스 장치 314
플래시 패치 및 브레이크포인트 장치 315
AHB 접근 포트 318
ROM 테이블 319
제17장 Cortex-M3 개발 시작하기 323
Cortex-M3 제품 선택 324
Cortex-M3 버전 0과 버전 1의 차이점 324
개발 툴 327
제18장 ARM7에서 Cortex-M3로 어플리케이션 포팅하기 331
개요 332
시스템 특징 332
어셈블리어 파일 336
C 프로그램 파일 339
미리 컴파일된 오브젝트 파일들 339
최적화 339
제19장 GNU 툴 체인을 사용하여 Cortex-M3 시작하기 343
배경 344
GNU 툴 체인 구하기 344
개발 플로우 345
예제 346
특별한 레지스터로의 접근 360
지원하지 않는 명령어 사용하기 360
GNU C 컴파일러 내의 인라인 어셈블러 361
제20장 KEIL RealView MDK를 이용하여 개발 시작하기 363
개요 364
μision으로 시작하기 365
UART를 통해 “Hello World” 메시지 출력하기 371
소프트웨어 테스트하기 375
디버거 사용하기 378
명령어 세트 시뮬레이터 382
벡터 테이블 수정하기 384
인터럽트를 가진 스톱워치 예제 385
부록 A Cortex-M3 명령어 요약 395
지원되는 16비트 Thumb 명령어 396
지원되는 32비트 Thumb-2 명령어 400
부록 B 16비트 Thumb 명령어와 아키텍처 버전 409
부록 C Cortex-M3 익셉션 퀵 레퍼런스 411
익셉션 유형 및 활성화 412
익셉션 스태킹 후의 스택 내용 413
부록 D NVIC 레지스터 퀵 레퍼런스 415
부록 E Cortex-M3 문제해결 가이드 433
개요 434
결함 핸들러의 개발 435
결함의 원인 이해하기 438
다른 가능한 문제점들 442
찾아보기 443
***********************************************************
추천의 글
마이크로컨트롤러 프로그래머들은 선천적으로 정말 기질이 뛰어난 사람들이다. 그들은 고정된 설계를 가지고 매우 독창적인 방법으로 마이크로컨트롤러를 구현함으로써 아주 놀랍고도 새로운 제품들을 만든다. 그들은 보통 매우 빈약한 시스템으로부터 상당히 효율적인 컴퓨팅을 요구한다. 이러한 마법을 수행하기 위해 사용되는 기본적인 요소는 툴 체인 환경이다. ARM7TDMI 프로세서 설계를 이론적으로 설명하고 단순화하여 개선할 팀을 구성할 때, ARM사의 툴 체인 부서에 있는 엔지니어들이 CPU 설계자들과 힘을 합친 것도 바로 이런 이유이다. 이것의 통합 결과인 ARM Cortex-M3는 기존의 ARM 아키텍처에 가까운 개발 결과물을 보여주고 있다. 이 소자는 32비트 ARM 아키텍처로부터 가장 좋은 특징들을 상당히 성공적인 Thumb-2 명령어 세트 설계와 혼합하고, 여기에 몇 가지 새로운 기능들을 추가하였다. 이러한 변화에도 불구하고, Cortex-M3는 모든 기존 ARM 애호가들이 쉽게 인식할 수 있는 단순화된 프로그래머 모델을 유지하고 있다.
Wayne Lyons(웨인 라이온스) ARM사의 임베디드 솔루션팀 이사
머리말
이 책은 ARM사의 Cotex-M3 프로세서에 관심이 있는 하드웨어 엔지니어와 소프트웨어 엔지니어 모두를 위한 책이다. Cortex-M3 Technical Reference Manual (TRM)과 ARMv7-M Architecture Application Level Reference Manual은 이미 이 새로운 프로세서에 대한 많은 정보들을 제공하고 있다. 하지만, 그것들은 너무 상세하기 때문에 초보자들이 읽기에는 도전적인 작업이 될 수 있다. 이 책은 마이크로컨트롤러 또는 마이크로프로세서에 대한 경험을 가지고 Cortex-M3 프로세서에 대해 조사하고 있는 프로그래머, 임베디드 제품 설계자, SoC 엔지니어, 연구원 등의 전문가들이 좀 더 가볍고 이해하기 쉽게 읽을 수 있도록 만들어졌다. 여기에는 새로운 아키텍처에 대한 소개, 명령어 세트 요약, 몇 가지 명령어들의 예, 하드웨어 특징들에 대한 정보, 프로세서의 진보된 디버그 시스템의 개요가 포함되어 있다. 또한 GNU 툴 체인과 ARM 툴을 사용하여 Cortex-M3 프로세서를 위한 소프트웨어를 개발할 때의 기본적인 단계들을 포함하며, 어플리케이션 예들도 제공한다. 이 책은 ARM7TDMI 프로세서에 익숙하며, Cortex-M3 프로세서로 전환하고자 하는 엔지니어들을 타깃으로 하고 있다. 이것은 프로세서들 간의 차이점과 ARM7TDMI에서 Cortex-M3로 어플리케이션 소프트웨어를 포팅하는 내용에 대해 다루고 있기 때문이다. 이 책을 리뷰하고 조언과 피드백을 제공해 준 다음의 사람들에게 감사를 전하고 싶다. Alan Tringham, Dan Brook, David Brash, Haydn Povey, Gary Campbell, Kevin McDermott, Richard Earnshaw, Samin Ishtiaq, Shyam Sadasivan, Simon Axford, Simon Craske, Simon Smith, Stephen Theobald and Wayne Lyons. 기술적인 지원을 해준 CodeSourcery와 이 책의 표지 이미지를 제공해 준 루미너리 마이크로에도 감사하고 싶다. 그리고 이 책의 출판 전문 작업을 해준 Elsevier의 팀원들에게도 감사한다. 마지막으로 나에게 이 책을 쓰라고 용기를 준 Peter Cole과 Ivan Yardley에게 특히 감사를 드린다.
Joseph Yiu(조셉 위) ARM사의 주임 엔지니어
***********************************************************
감수자의 글
급속도로 발전하는 기술 성장 속도와 100년에 한 번 일어날까말까라고 하는 현재의 금융 위기 같은 경제 현실이, 예전에는 서로 전혀 다른 영역으로 보였지만 이제는 아주 긴밀히 연계되어 상호작용을 하고 있습니다. Apple과 같이 새로운 기술과 마케팅으로 짧은 시간 내에 급속하게 성장하는 기업이 있는가 하면, 변화에 보수적이고 느린 반응으로 경쟁력을 잃어버린 업체의 경우 불과 몇 개월 만에 문을 닫게 되는 사례를 국내외에서 흔히 찾아볼 수 있습니다. 그만큼 빠른 속도로 기술, 고객, 기업이 유기적인 반응을 한다고 할 수 있겠습니다.
개인 혹은 단체 모두 경기가 어려울 때에는 고가의 전자 제품보다는 저가의 실용적인 제품을 찾으며, 이를 반영하여 제조회사들은 평상시보다도 훨씬 강력한 단가 인하 방법을 모색하게 됩니다. 단가를 줄이기 위한 고전적인 방법으로 물량을 키우는 규모의 전쟁이 있습니다. 최근에는 이러한 규모 이외에도 신기술로 가격장벽을 뛰어넘는 제품을 쉽게 찾아볼 수 있습니다. 이 방법은 단지 단가 인하뿐만 아니라 제품의 차별화, 신기술의 마케팅 등의 장점을 얻을 수 있어서 더욱 효과적입니다.
이 책은 ARM사의 최신 코어인 Cortex-M3에 관련된 기술적인 내용을 다루고 있습니다. 그리 멀지 않은 지난 10년 전과 비교하면 임베디드 프로세서는 비약적인 발전을 하고 있습니다. 올해 출시되는 스마트 폰은 본인이 대학교 시절 개발용으로 사용하던 PC의 성능을 능가하고 있습니다. Full-HD 화질의 동영상을 감상하고, 인터넷과 같은 무선 네트워크가 가능하며, 가정에 있는 대형 LCD-TV와 연결되어 시청하거나 심지어 프로젝션 기능까지 가능한 제품들이 출시되는 상황입니다.
최근 인기 급상승중인 소형 노트북에서도 프로세서 주도권 싸움이 한창입니다. 가격이 낮은 만큼 파급력이 높은 넷북은 전통적인 x86계열 프로세서를 주력으로 하는 Intel, AMD, VIA 등의 회사뿐만 아니라, 고성능 RISC를 앞세워 가격/성능/전력 소모의 우수성을 강조하는 ARM까지 혼재된 양상을 보이고 있습니다. PC 시장과 임베디드 시장이 분리되어 있던 과거와는 사뭇 다른 상황입니다.
예를 들어, 고성능 스마트 폰, 넷북에 사용될 임베디드 프로세서로 ARM사의 Cortex 코어가 많이 채택되고 있습니다. 뿐만 아니라 간단한 기능으로 인해 주로 마이컴을 사용하던 백색가전, 생활가전 분야에서도 변화의 바람이 점차 거세어지고 있습니다. 보다 다양한 기능과 사용자 인터페이스를 고려한 신제품에서 ARM 프로세서의 채택이 증가하고 있습니다.
기술적인 측면에서 Cortex 코어를 세부적으로 살펴보면, 고성능 멀티미디어를 위한 Cortex-A8 코어, 실시간 제어용 코어, 그리고 마이컴을 대체하기 위한 Cortex-M3 코어와 같이 크게 세 가지 형태로 분류되며 각각 약간의 차이점들을 가지고 있습니다. 그러나 기본 Cortex 명령어는 동일하며, 각각의 목적에 맞도록 추가되는 형태를 지니고 있습니다. 따라서 이 책은 기존의 ARM7/9/11의 뒤를 이은 Cortex 코어에 대한 이해와 학습을 위해 좋은 지침이 되리라고 생각합니다. PDF 문서를 제외하고 전 세계적으로 Cortex에 대한 내용만 다루는 전문서적이 없는 상황에서 국내 개발자들에게 더욱 힘이 되리라고 생각합니다.
이 책을 통해 2009년 새해를 무섭게 변화하는 기술 변화 속에서 금융 위기가 아닌 기회의 한 해로 만들어가기를 소망합니다.
이종수
(주)씨랩시스 연구소장
감수자 소개
이종수(aron.lee앳clabsys.com)
IT/BT 벤처 붐이 일고 ARM 프로세서가 생소하던 그 시절, 엔지니어로서 기술적인 매력을 느껴 이를 보급하고자 기술 강의를 시작한 지 벌써 10여 년을 훌쩍 넘겨버린 베테랑 엔지니어이자 강사이다. 삼성전자와 LG전자를 필두로 대기업, 중소기업, 교육기관에서 다수의 ARM 교육과정을 만들고 강의를 진행해 왔으며, ARM 관련서적의 번역 및 감수, 잡지 기고 등의 왕성한 활동을 하고 있다. 국내 ARM 대리점이자 공인교육기관으로서, 그리고 최적화된 ARM 솔루션 등을 공급하는 임베디드 ARM 전문업체인 (주)씨랩시스의 대표이사를 거쳐 현재는 연구소장직을 맡고 있다. 최근에는 국내보다 해외시장에서의 시장점유율을 높이기 위해 최신 기술을 적용한 전문화된 솔루션 구축을 위해 힘쓰고 있다.
역자 머리말
ARM은 휴대폰, 스마트 폰, PDA 등 각종 휴대형 기기에 내장되어 우리 생활 전반에 걸쳐 알게 모르게 영향력을 미치고 있다. ARM7의 성공에 이어 ARM사의 고성능 설계 기술을 이용한 ARM9 프로세서들이 출시되자, 저전력을 요하는 기존의 휴대형 기기뿐만 아니라 TV, 냉장고, 디지털 카메라, 네비게이션 등 산업 전반에 걸쳐 앞다투어 ARM 프로세서로 제품을 개발하기 시작하였다. 프로세서의 성능이 점점 좋아지게 됨에 따라, 동영상 등의 고성능 멀티미디어 기능 구현이 가능해졌고, 이러한 멀티미디어 기능이 디폴트로 지원되면서 다양한 시장들이 하나로 통합되기 시작하였다.
ARM11 프로세서가 막 출시될 즈음에 필자는 ARM사에 대한 걱정이 들기 시작하였다. ARM9 기술만으로도 웬만한 제품 개발이 가능한 상황에서, 더 좋은 프로세서가 나온다고 해서 새로운 시장이 창출될 것 같지도 않고, 이러다가 기존의 고성능 프로세서를 요하는 시장이 포화상태가 되면 ARM사는 그 수명을 다하게 되는 게 아닐까 하는 생각이 들었기 때문이다.
처음 ‘Cortex’라는 이름의 새로운 제품군이 발표되었을 때, 필자는 ARM사가 ARM12라는 기존의 직관적이고도 쉬운 이름 체계를 버리고, Cortex라고 하는 새로운 이름을 사용하려고 하는지 정말 궁금했었다. 물론 Cortex라고 하니 뭔가 색다르고 멋있어 보이기는 했지만, 왠지 어려운 기술처럼 느껴져 접근이 꺼려졌기 때문이다. 하지만, 그 상세 내용을 확인하고 나서는 크게 놀라지 않을 수 없었다. 아시다시피, ARM Cortex 시리즈는 다음과 같은 세 가지 제품군으로 구분된다.
▶ ARM Cortex-A 시리즈: 고성능 어플리케이션 플랫폼
▶ ARM Cortex-R 시리즈: 실시간 어플리케이션 플랫폼
▶ ARM Cortex-M 시리즈: 저가 마이크로컨트롤러 플랫폼
Cortex-A 시리즈는 예상한 바와 같이 ARM12에 해당되는 고성능 어플리케이션을 위한 아키텍처이며, Cortex-R 시리즈는 RTOS가 많이 사용되는 실시간 어플리케이션을 위한 아키텍처이다. 그리고, Cortex-M 시리즈는 저가 마이크로컨트롤러가 주로 사용되는 산업 제어기기들을 위한 아키텍처이다. 위에서 알 수 있듯이, A/R/M의 각 분야는 임베디드 시장 전체를 의미한다.
이 중에서 독자들이 집중적으로 살펴보아야 할 분야가 바로 대부분 마이크로컨트롤러(마이컴)가 장악하고 있는 M 시장이다. 사실, ARM 프로세서는 A/R 영역에서는 큰 영향력을 미치고 있었으나, M 분야에서는 그다지 영향력이 없었다. 이는 8/16비트에 비해 32비트 프로세서의 가격이 비싸다는 이유도 있겠지만, 그보다는 개발 환경 셋업 비용이 상대적으로 많이 비쌌기 때문이다. 하지만, ARM은 Cortex-M 시리즈를 통해 이러한 개발 환경에 대해 개발자들이 쉽고 저렴하게 접근할 수 있도록 세심하게 배려하였다. 이런 이유로, 필자는 ARM이 마이컴 시장에서 영향력을 행사할 때가 멀지 않았다고 본다. Cortex 시리즈의 이름 또한 임베디드 시장 전반에서 A/R/M이라는 이름이 완성하고자 하는 ARM사의 의지를 담은 듯하다.
이 책은 ARM Cortex-M3에 기반한 시스템을 개발할 때 꼭 필요한 기본서로, ARM Cortex-M3 아키텍처에 대한 전반적인 이해를 추구하였으며, 시스템 설계시 고려해야 하는 개발 환경, 프로그래밍 방법 등에 대해 상세히 설명하고 있다. 아무쪼록 본 교재가 Cortex-M3 프로세서를 이용하여 개발을 검토하는 독자들에게 훌륭한 길잡이가 되기를 바란다.
임희연
역자 소개
임희연(kelly.lim앳clabsys.com)
대학원 인턴 시절 ARM을 처음 접하고 그 매력에 빠져서, 현재까지도 ARM 기반의 임베디드 시스템 개발을 전문으로 하는 전자 공학도로 일하고 있다. 대학원 졸업 후, 삼성전자에서 시스템 소프트웨어 엔지니어로 일하다가, 현재에는 (주)씨랩시스에서 삼성 ARM 기반의 범용 하드웨어 플랫폼 개발을 전담하고 있다. 역서로는 《ARM System Developer? Guide 한국어판(사이텍미디어, 2005)》, 《임베디드 시스템 아키텍처(ITC, 2007)》가 있다.
| 한국어판 Programming .NET 3.5 (0) | 2009/05/04 |
|---|---|
| 한국어판 Programming Flex3 : RIA 개발을 위한 완벽 가이드 (3) | 2009/03/25 |
| ARM Cortex-M3 완벽 가이드 (0) | 2009/03/19 |
| QT 4를 이용한 C++ GUI 프로그래밍(제2판) (0) | 2009/03/19 |
| 헬로, 안드로이드: 구글의 모바일 개발 플랫폼 소개하기 (2) | 2009/03/19 |
| 입문자를 위한 루비 (0) | 2009/02/17 |
저자명 : 자스민 블랑쉐(Jasmin Blanchette), 마크 서머필드(Mark Summerfield)
역자명 : 조성만
출판사 : 도서출판 ITC
정 가 : 42,000원
ISBN : 978-89-6351-000-2
원서명 : C++ GUI Programming with Qt 4(2/e)
출간년월 : 2009 년 3 월
페이지 : 960 쪽
크기 : 세로 : 245, 가로 : 188, 반양장
트롤테크의 Qt를 사용하면 윈도우, 리눅스/유닉스, 맥 OS X, 그리고 임베디드 리눅스상에서 동작하는 고성능 C++ 응용프로그램을 소스코드 변경 없이 만들어낼 수 있다. 트롤테크의 두 전문가가 내놓은 이 책은 Qt의 최신 버전인 Qt 4.3을 이용해 사용자가 최고의 결과를 낼 수 있도록 처음부터 끝까지 Qt의 모든 것을 다루고 있다.
현실적인 예제와 전문가의 깊은 조언이 담긴 이 책은 트롤테크의 신입사원 교육에 사용되고 있는 Qt 교재다. 이번에 선보이는 제2판은 그 내용이 크게 개정되고 확장되어, 모델/뷰 응용프로그램의 제작에서부터 새로운 그래픽스 뷰 클래스의 사용에 이르기까지, 모든 부분에 있어 최고의 Qt 프로그래밍 패턴들을 담아내고 있다. 사실상 모든 GUI 개발 업무에 대한 해결책과 더불어, 데이터베이스 접근, XML 통합, 커스텀 위젯 제작 등과 같은 수많은 고급 기법들을 만나볼 수 있는 이 책은, Qt를 처음 배우는 사용자나 경험 있는 사용자 모두에게 Qt 4.3의 모든 것을 알려줄 것이다.
• 데이터베이스, XML, 큐토피아 임베디드 프로그래밍 관련 내용 전면 개정
• QDialogButtonBox 사용법, 윈도우 비스타 지원, 위젯 스타일링을 위한 CSS 지원 등, Qt 4.2와 4.3의 모든 변경사항 총 망라
• 2D 및 3D 그래픽스 관련 내용 분리 수록, Qt의 새로운 그래픽스 뷰 클래스와 QPainter의 OpenGL 백엔드 기능 소개
• CSS 및 QStyle 서브클래싱을 통한 룩앤필 커스터마이징, ECMAScript를 사용한 응용프로그램 스크립팅 관련 내용 추가
• Qt 4의 모델/뷰 구조, 플러그인 지원, 레이아웃 관리, 이벤트 처리, 컨테이너 클래스 등에 대한 세부설명 수록
• 플러그인 제작에서부터 네이티브 API 연동에 이르기까지, 다른 책에서는 찾아볼 수 없는 고급 기법 수록
• 새롭게 선보이는 Qt 잠비를 다룬 부록 추가
지은이 소개
자스민 블랑쉐Jasmin Blanchette
자스민 블랑쉐는 2001년 캐나다 퀘벡Quebec의 셔브룩 대학교University of Sherbrooke에서 컴퓨터 과학 학사학위를 받았다. 2000년 여름, 트롤테크의 소프트웨어 엔지니어 인턴십work term을 밟았으며, 이것을 인연으로 2001년 초부터 지금까지 트롤테크에 몸담고 있다. Qt 4의 컨테이너 클래스 및 레이아웃 시스템을 담당한 핵심적인 인물로, 『C++ GUI Programming with Qt 3』(2003)와 『C++ GUI Programming with Qt 4』(2005)를 공동 집필했다. 현재 트롤테크의 선임 소프트웨어 엔지니어로 근무하고 있으며, 노르웨이의 오슬로 대학교University of Oslo에서 컴퓨터 과학 석사과정을 밟고 있다.
마크 서머필드Mark Summerfield
마크 서머필드는 1993년 영국 웨일즈 스완지 대학교University of Wales Swansea에서 컴퓨터 과학 학사학위를 받았다. 대학졸업 후 1년간 대학원 연구과정postgraduate research을 밟았으며, 트롤테크에 입사하기 전까지 다양한 회사에서 소프트웨어 엔지니어로 근무했다. 3년 가까이 트롤테크의 다큐멘테이션 매니저documentation manager로 근무하면서 Qt 쿼터리Qt Quarterly를 발행했으며, 『C++ GUI Programming with Qt 3』(2003)와 『C++ GUI Programming with Qt 4』(2005)를 공동 집필했고, 최근에는 『Rapid GUI Programming with Python and Qt』(2007)를 집필했다. 현재 교육 및 컨설팅 업체인 Qtrac (Quality Training Research and Consultancy, http://www.qtrac.eu/)을 운영하고 있으며, C++, Qt, Python, PyQt에 대한 전문 트레이너 및 컨설턴트로 활동하고 있다.
옮긴이 소개
옮긴이 조성만은 단국대학교에서 컴퓨터과학을 공부했다. 클라우드 컴퓨팅Cloud Computing 기술에 기반을 둔 소프트웨어 퍼블리싱Software Publishing과 서로 다른 컴퓨팅 환경을 넘나드는 크로스 플랫폼Cross Platform 영역 그리고 모바일 컴퓨팅 환경에서의 사용자 경험User Experience에 관심 있다. 현재 ㈜인프라웨어Infraware에서 근무하고 있으며, 오픈 모바일 환경인 안드로이드Android와 오픈모코Openmoko에 푹 빠져 지내고 있다. 운영하고 있는 홈페이지는 다음과 같다. http://www.chosungmann.org
***********************************************************
지은이의 글
Qt는 크로스 플랫폼 GUI 응용프로그램 제작을 위한 전방위적인 C++ 응용프로그램 개발 프레임워크이다. “Write Once, Compile Anywhere”를 모토로 갖는 Qt는, 프로그래머들이 한 벌의 소스 코드만을 가지고 윈도우 98 이상의 계열과, 맥 OS X, 리눅스, 솔라리스, HP-UX, 그리고 X11이 탑재된 수많은 유닉스 버전상에서 동작하는 응용프로그램을 만들 수 있도록 해준다. 이러한 Qt 라이브러리와 도구들은, 임베디드 리눅스상에서 독자적인 윈도우 시스템을 제공하는 제품인 Qt/임베디드 리눅스Qt/Embedded Linux에도 포함되어 있다.
이 책의 목적은 Qt 4를 이용한 GUI 프로그램의 제작방법을 가르쳐주는 것으로써, 그 내용은 “Hello Qt”로부터 시작하여, 커스텀 위젯의 제작 및 드래그 앤 드롭의 구현과 같은 고급 토픽으로 빠르게 나아간다. 본문에 수록된 예제들의 소스 코드는 이 책의 웹사이트인 http://www.informit.com/title/0132354160에서 다운로드받을 수 있으며, 본문의 내용을 실습하기 위한 소프트웨어의 다운로드 및 설치방법은 부록 1에 설명되어 있다.
이 책은 크게 세 부분으로 구성되어 있다. 1부에서는 Qt를 사용한 GUI 응용프로그램 프로그래밍에 필수적인 모든 기본 개념들과 예제들을 다루는데, 이 1부에서 다루는 내용만으로도 충분히 유용한 GUI 응용프로그램을 만들 수 있다. 2부에서는 Qt의 핵심 주제들을 심도 있게 다루며, 3부에서는 좀더 특화된 고급주제들을 다룬다. 2부와 3부의 내용은 여러분이 필요한 주제에 맞게 원하는 순서대로 읽을 수 있도록 구성되어 있지만, 각각의 장들은 독자들이 이미 1부의 내용을 잘 이해하고 있다고 가정한 채 기술되어 있다. 또한 이 책은 몇 가지 부록을 수록하고 있는데, 부록 2에서는 Qt 응용프로그램의 빌드 방법을, 부록 3에서는 Qt의 자바 버전인 Qt 잠비를 소개한다.
이 책의 제1판인 『C++ GUI Programming with Qt 4』는, Qt 4의 독특한 프로그래밍 테크닉이 반영되도록 그 내용이 전면 개정되었고, 또한 Qt 4의 모델/뷰 구조model/view architecture, 새로운 플러그인 프레임워크plugin framework, Qt/임베디드 리눅스를 사용한 임베디드 프로그래밍 등 몇 가지 새로운 내용과 부록을 포함하고 있었지만, 책 내용 대부분이 『C++ GUI Programming with Qt 3』를 기반으로 하고 있었다. 이번 제2판에서는 Qt 4.2와 4.3에서 소개된 특징들에 대한 장점을 취하도록 그 내용이 완전히 새롭게 업데이트 되었으며, 룩앤필 커스터마이징look and feel customization 및 응용프로그램 스크립팅application scripting에 대한 내용과 더불어 두 개의 부록이 새롭게 추가되었다. 한 개의 장을 통해 다루어졌었던 그래픽스 부분은 이제 2D와 3D 부분으로 각각 나뉘어졌으며, 이를 통해 새로운 그래픽 뷰 클래스graphics view classes와 QPainter의 OpenGL 백엔드OpenGL back-end 기능을 소개하고 있다. 뿐만 아니라, 데이터베이스, XML, 그리고 임베디드 프로그래밍에 대한 내용이 새롭게 보강되었다.
이번 제2판에서는 이전 판에서 지향했던 바와 마찬가지로, Qt 온라인 문서를 단순히 개작하여 재탕하거나 요약하는 것이 아닌, 현실적인 예제의 제공과 Qt 프로그래밍의 알기 쉬운 해설을 강조한다. 또한 Qt 4 프로그래밍의 견고한 원리와 경험을 가르쳐주고 있기 때문에, Qt 4.4나 Qt 4.5 등 앞으로 발표될 Qt 4.x 버전에 새롭게 추가되는 Qt 모듈들 역시 마찬가지로 쉽게 익힐 수 있을 것이다. 여러분이 앞으로 발표될 Qt 버전을 사용하게 된다면, 반드시 레퍼런스 문서의 “What’s New in Qt 4.x”를 숙지하여 새로운 기능에 대한 정보를 얻기 바란다.
우리는 C++이나 자바 또는 C#에 대한 기본 지식이 있는 독자들을 대상으로 이 책을 집필했다. 이 책의 예제들은 C++의 많은 기능들 중 Qt 프로그래밍에 거의 사용되지 않는 것들을 제외한 C++의 일부만을 사용해 작성되었다. 하지만 몇몇 예제들의 경우 고급 C++ 구조의 사용이 불가피했는데, 이러한 경우에는 그에 대해 충분히 설명해 놓았다. 자바나 C#에는 익숙하지만 C++에 대한 경험이 전혀 없거나 부족하다고 생각되는 독자들은 부록 4의 내용을 먼저 읽어볼 것을 권한다. 부록 4에서는 여러분이 이 책을 읽어나갈 수 있을 정도의 C++에 대한 내용을 다루고 있다. C++을 사용한 객체지향 프로그래밍에 대해 좀 더 살펴보길 원한다면, P. J. Deitel과 H. M. Deitel이 지은 『C++ How to Program』(Prentice Hall)과 Stanley B. Lippman, Josée Lajoie, Barbara E. Moo가 공동 집필한 『C++ Primer』(Addison-Wesley)를 추천한다.
Qt가 크로스 플랫폼 프레임워크이긴 하지만, 그의 직관적이고 강력한 API 덕분에 단일 플랫폼을 위한 소프트웨어 개발에도 많이 사용되고 있다. 어도비 포토샵 앨범Adobe Photoshop Album은 시장에 출시되어 있는 Qt로 작성된 윈도우 응용프로그램의 한 가지 예에 지나지 않는다. 3D 애니메이션 툴을 비롯해 디지털 영상처리, 반도체 칩 설계, 석유 및 가스 탐사, 금융 서비스, 의료 영상과 같은 분야의 시장에 출시되어 있는 복잡한 많은 소프트웨어 시스템들이 Qt로 구축되어 있다. 혹 여러분이 지금 Qt로 작성된 윈도우 응용 제품으로 수입을 벌어들이고 있다면, 이를 단순히 재컴파일함으로써 맥 OS X와 리눅스 진영에도 새로운 시장을 창출해낼 수 있게 되는 것이다.
Qt는 다양한 라이선스를 통해 사용될 수 있다. 상용 응용프로그램을 개발하고자 하는 경우에는 반드시 트롤테크로부터 상용 Qt 라이선스를 구입해야만 하며, 오픈 소스 프로그램을 개발하고자 하는 경우에는 Qt 오픈 소스 (GPL) 에디션을 사용하면 된다. KDEK Desktop Environment를 비롯하여, KDE상에서 동작하는 대부분의 오픈 소스 응용프로그램들이 바로 Qt를 사용해 제작되었다.
Qt가 가진 수 백여 가지의 클래스들과 더불어, Qt의 기능과 능력을 확장해주는 많은 애드온add-ons 제품들이 존재한다. 이러한 제품들 중에는 Qt 솔루션Qt Solutions 컴포넌트와 같이 트롤테크를 통해 제공되는 것이 있는가 하면, 다른 회사들이나 오픈 소스 커뮤니티에 의해 제공되기도 하는데, 사용 가능한 이들 애드온 제품의 목록은 http://www.trolltech.com/products/qt/3rdparty/를 통해 확인해볼 수 있다. 한편 트롤테크의 개발자들은 트롤테크 랩Trolltech Labs(http://labs.trolltech.com/)이라는 그들만의 웹사이트를 가지고 있는데, 이곳에는 그들이 작성한 비공식적인 코드가 올려지게 된다. 또한 Qt는 qt-interest 메일링 리스트를 사용하는 잘 구축된 사용자 커뮤니티를 가지고 있는데, 이에 대한 보다 자세한 내용은 http://lists.trolltech.com/을 참고하도록 하자.
제작과정에 대하여
저자들은 NEdit과 Vim을 사용해 원고를 작성했다. 저자들이 직접 본문을 조판typeset하고 색인을 붙였으며, 이들을 수정된 Lout 구문modified Lout syntax으로 표기한 뒤, 파이썬Python으로 작성한 전처리기를 사용해 본래의 순수한 Lout로 변환했다. 이 책에 사용된 모든 다이어그램은 Lout로 제작되었으며, 스크린 샷은 ImageMagick과 KView를 사용해 포스트스크립트PostScript로 변환되었다. 저자들은 모든 편집 및 처리과정을 KDE가 설치된 페도라Fedora와 쿠분투Kubuntu상에서 수행했으며, 예제 프로그램은 윈도우, 리눅스, 맥 OS X에서 테스트되었다.
이 책에서 발견된 오류나, 우리에게 제안하고자 하는 내용이 있다면 qt-book@trolltech.com을 통해 보내주길 바란다. 정오표는 이 책의 웹사이트(http://www.prenhallprofessional.com/title/0132354160)를 통해 공지될 것이다.
감사의 글
제일 먼저 트롤테크의 두 설립자 중 한 명이자 우리의 두목 트롤Chief Troll Eirik Chambe-Eng에게 감사의 말을 전합니다. Eirik은 이 책의 Qt 3 에디션이었던 『C++ GUI Programming with Qt 3』를 집필하도록 우리를 열정적으로 격려했을 뿐만 아니라, 실제로 책을 쓰는 데 필요로 했던 상당한량의 시간을 할애해 주었습니다. Eirik과 더불어 트롤테크의 CEO인 Haavard Nord는 이 책의 원고를 검토해주었으며, 귀중한 조언을 아끼지 않았습니다. 이 두 분의 관대함과 선견지명에 힘입어, Matthias Ettrich는 우리가 이 책을 쓰느라 소홀할 수 밖에 없었던 본연의 업무에 대해 흔쾌히 이해해 주었고, 또한 좋은 Qt 프로그래밍 스타일에 대한 충고를 아끼지 않았습니다.
이전에 출간되었던 이 책의 Qt 3 에디션의 경우에는 우리의 두 고객인 Paul Curtis와 Klaus Schmidinger가 검토를 맡아 주었었습니다. 이 두 분은 모두 기술적인 세부사항에 조예가 깊은 Qt 전문가로서, 우리의 원고에 있었던 매우 미묘한 몇 가지 오류들을 지적하고 그에 대한 다양한 개선점들을 제안해 주었습니다. 또한 트롤테크 내에서는 Matthias와 더불어 믿음직스럽고 듬직한 Reginald Stadlbauer가 검토에 참여해 주었습니다. 그의 기술적인 통찰력은 값을 매길 수 없을 만큼 훌륭했으며, 심지어 우리조차 가능하리라 생각지 못했던 일들을 Qt로 가능하게 하는 방법에 대해 가르쳐주었습니다.
Eirik, Haavard, Matthias의 무한한 도움과 지원은 이번 Qt 4 에디션에서도 계속되었습니다. Klaus Schmidinger는 계속해서 우리에게 값진 피드백을 주었으며, 또한 새롭게 추가된 부분들에 대해서는 우리의 고객인 Paul Floyd가 면밀하게 검토해주었습니다. 부록 2에서 다루고 있는 SCons에 대해 도움을 준 David García Garzón과, 트롤테크내의 핵심 리뷰어 Carlos Manuel Duclos Vergara, Andreas Aardal Hanssen, Henrik Hartz, Martin Jones, Vivi Glückstad Karlsen, Trond Kjernåsen, Trenton Schulz, Andy Shaw, Gunnar Sletta, Pål de Vibe에게도 감사의 말을 전합니다.
위에 언급한 분들 외에도 우리는 Eskil Abrahamsen Blomfeldt (Qt 잠비), Frans Englich (XML), Harald Fernengel (데이터베이스), Kent Hansen (애플리케이션 스크립팅), Volker Hilsheimer (ActiveX), Bradley Hughes (멀티스레딩), Lars Knoll (2D 그래픽스와 국제화), Anders Larsen (데이터베이스), Sam Magnuson (qmake), Marius Bugge Monsen (아이템 뷰 클래스), Dimitri Papadopoulos (Qt/X11), Girish Ramakrishnan (스타일시트), Samuel Rødal (3D 그래픽스), Rainer Schmid (네트워크킹과 XML), Amrit Pal Singh (C++의 소개), Paul Olav Tvete (커스텀 위젯과 임베디드 프로그래밍), Geir Vattekar (Qt 잠비), Thomas Zander (빌드 시스템)의 전문적인 도움을 받았습니다.
특별히 이 책을 쓰는 과정에서 상당한 시간을 차지했던 문서와 관련된 많은 이슈들을 다뤄준 트롤테크의 문서 팀과 지원 팀, 그리고 프로젝트기간 내내 우리의 컴퓨터와 네트워크가 잘 동작될 수 있도록 신경 써준 트롤테크의 시스템 관리자 여러분들께 이 자리를 빌어 감사하다는 말을 전합니다.
이 책의 제작과정에 있어서, 조판 도구typesetting tool인 Lout 의 제작자 Jeff Kingston은 우리의 건의사항을 수용해 Lout의 많은 기능들을 향상시켜 주었으며, James Cloos는 이 책에서 사용된 고정폭 글꼴인 DejaVu Mono의 좁은폭 버전을 제공해주었습니다. 또한 우리를 대신해 계약 및 법적 의무에 관한 업무를 처리해준 트롤테크의 Cathrine Bore와, 트롤 일러스트를 담당한 Nathan Clement, 교정을 위해 수고한 Audrey Doyle에게도 감사의 말을 전합니다. 마지막으로 이 책을 만드는 과정 가운데 아낌없는 지원과 배려로 함께해 준 편집자 Debra Williams-Cauley와 제작과정의 실무를 훌륭히 처리해준 Lara Wysong에게 감사드립니다.
자스민 블랑쉐, 마크 서머필드
***********************************************************
옮긴이의 글
윈도우와 리눅스 그리고 맥 OS, 이 세 가지 운영체제 모두에서 실행될 수 있는 프로그램 개발을 꿈꾸셨나요? 자바를 사용하기로 마음 먹었지만, 프로그램을 실행할 운영체제에 자바 런타임 환경JRE(Java Runtime Environment)을 반드시 설치해야 하는 번거로움과, 배보다 배꼽이 더 큰 격일 수 있는 자바 런타임 환경의 부담스러운 크기, 그리고 자바 가상 머신JVM(Java Virtual Machine)에서의 수행 속도가 걱정되신다고요? 네, 여러분의 마음 모두 충분히 이해합니다. 설마 그렇다고 개발팀 세 개를 운영하실 생각은 아니시죠?
Qt 는 소스 코드 한 벌만으로 이와 같이 다양한 운영체제 환경에서 실행 가능한 어플리케이션을 만들 수 있도록 해주는 크로스 플랫폼 응용프로그램 프레임워크cross-platform application framework입니다. 노르웨이에 있는 트롤테크Trolltech에서 처음 개발된 Qt는, 2008년 세계적인 휴대폰 제조사인 노키아Nokia가 트롤테크를 인수하면서, 현재 모바일 및 데스크톱 소프트웨어에 관한 노키아의 크로스 플랫폼 소프트웨어 전략에서 핵심적인 역할을 해내고 있습니다.
Qt의 특징을 한 문장으로 요약하자면, “Write Once, Compile Anywhere!” 라고 말할 수 있습니다. 즉, 소스 코드는 한 벌만 만들고 이를 원하는 운영체제 환경에서 컴파일하기만 하면 해당 환경에서 실행될 수 있는 실행이미지가 만들어진다는 말이죠. 어때요, 멋지죠? Qt는 현재 가장 널리 사용되고 있는 3대 운영체제인 윈도우, 리눅스, 맥 OS를 완벽히 지원합니다. 따라서, 여러분이 Qt를 사용해 만든 소스 코드를 윈도우에서 컴파일하면 윈도우 응용프로그램이, 리눅스에서 컴파일하면 리눅스 응용프로그램이, 맥 OS에서 컴파일하면 맥 OS 응용프로그램이 되는 것이죠. 이게 전부가 아니랍니다. 오지랖 넓게도 Qt는 임베디드 리눅스와 윈도우 CE를 지원합니다. 이게 무슨 의미인지 감이 오시나요? 그렇습니다. Qt를 사용해 만든 여러분의 응용프로그램은 윈도우, 리눅스, 맥 OS뿐만 아니라, 임베디드 리눅스나 윈도우 CE가 탑재된 휴대폰 및 모바일 장치에서도 실행될 수 있습니다. 내가 만든 응용프로그램이 내 휴대폰과 친구들의 휴대폰, 심지어 세계 방방곡곡에 살고 있는 수많은 이들의 휴대폰에서 실행될 수 있다니, 그것도 소스 코드 한 줄 바꾸지 않은 채 말이죠. 정말 짜릿하지 않나요?
구글 어스Google Earth, 어도비 포토샵 앨범Adobe Photoshop Album, 스카이프Skype, 메스메티카Mathematica, KDE, KOffice. 모두 익숙한 이름들이죠? 네, 이 것들이 바로 Qt를 사용해 만들어진 제품들입니다. 하지만 이는 여러분이 익히 들어 알고 계실법한 것들만을 나열했을 뿐이랍니다. 이외에도 소니Sony, 루카스 필름Lucas Film, 볼보Volvo 등 수많은 회사와 다양한 오픈 소스 프로젝트에서 이미 Qt가 사용되었고 지금도 많은 곳에서 사용되고 있지요. 앞서 말씀 드린 Qt의 갖가지 장점들을 대하면서, “음... 온갖 감언이설은 다 적어놨군. 소스 코드를 단 한 줄 아니 단 한 글자도 바꾸지 않고 저렇게나 다양한 운영체제 위에서 동작할 수 있다는 걸 믿을 사람이 대체 몇이나 된다고. 난 절대로 속아넘어가지 않겠어!”라며 굳은 결의를 다지셨거나, “정말 저 다양한 운영체제에서 아무런 문제 없이 매끄럽게 동작될 수 있을까? 남들이 쓰는 걸 좀 더 지켜보고 결정해야겠어!”라며 의심의 눈초리를 가지신 분들. 이 정도면 고민이 좀 해결되셨나요?
하지만 모든 병을 낫게 하는 만병통치약이 없는 것처럼, 팔방미인 원더걸스도 매력만점 소녀시대도 어느 누군가에게는 아무런 감흥이 되지 못할 수도 있는 것처럼(하지만 몇이나 될까요 ^^), Qt도 만능일 수만은 없으며 흠 없이 완벽할 수만도 없습니다. 이 점에 대해서는 다양한 의견이 있을 수 있는데요, 이러한 관점에서 볼 때 Qt가 오픈 소스로 배포되고 있다는 점은 정말 다행스러운 일이 아닐 수 없습니다. 더 기쁜 소식은 2009년 3월에 발표될 4.5 버전을 시작으로 Qt에 LGPL 라이선스가 추가되었다는 사실입니다. 이제 소스를 공개하기 어려운 상용 제품 개발에도 라이선스 비용 걱정 없이 Qt를 마음껏 활용할 수 있게 되었을 뿐만 아니라, Qt의 저변 확대에도 한몫 톡톡히 해낼 뜻있는 결정이 내려진 것이죠.
악기를 처음 배울 때는 먼저 악기를 쥐는 법과 소리 내는 법 그리고 음을 바꾸는 법 등을 배운 다음 곧바로 쉬운 연습곡을 통해 연주하는 법을 익힙니다. 시간이 지남에 따라 다양한 곡들을 연주할 줄 알게 되면서, 점차 악기에 대한 이해가 깊어지고 그 곡에 담긴 화성을 통해 보다 풍부한 감성과 표현력을 배우게 되지요. 프로그래밍을 배우는 것도 매한가지라고 생각합니다. 물론 하나에서부터 열까지 해당 분야의 프로그래밍에 관한 모든 것을 담은 방대한 책으로도 얼마든지 원하는 바를 이룰 수 있겠지만 대개 효율적이지 못하죠. 화성학이라든가 악식론 같은 책들은 어느 정도 악기를 연주할 줄 알고 음악에 대한 이해가 쌓인 뒤에야 읽을 수 있고 또 그래야만 완전한 내 것이 되듯, 프로그래밍 역시 처음부터 방대한 레퍼런스를 끼고 책상 앞에서 씨름하기보다는, 예제가 풍부한 책을 하나 골라 직접 따라 해보는 편이 훨씬 기억에도 오래 남고 더 효율적이지 않을까요?
이 책은 Qt라는 악기를 배우기 위해 필요한 ‘악보’와도 같은 책입니다. 누군가에게 악기를 이야기하기 보다는 실제로 그 악기를 연주해 보이는 것이 훨씬 더 많은 것을 말해줄 수 있듯이, 이 책에 담긴 수많은 예제를 통해 여러분은 Qt를 아는 것뿐만 아니라 실제로 여러분의 현장에서 ‘연주’할 수 있게 될 것입니다. 게다가 이 책은 Qt를 만든 트롤테크의 사내 교육 교재로 사용되고 있는 유일한 공식도서이기 때문에, 적어도 책을 잘못 만나 시간을 버리는 일 역시 없을 겁니다.
이제 약간의 변명을 늘어놓아야 할 타이밍이군요. 이 책을 옮기면서 마음만은 언제나 철저히 독자의 편에 서서 최선을 다했다고 감히 말씀드리고 싶지만 그 결과에 대해서는 한없이 겸손할 수 밖에 없습니다. 출간 직전 원고를 다시 한번 정독하면서 드는 아쉬움이 이만저만 아니네요. 이 책을 읽으면서 갸우뚱하거나 어색하게 느껴지는 부분이 있다면 모두 역자의 부족함 탓임을 미리 말씀드리고 싶습니다. 이 책에서 접하게 될 우리말로 된 전문 용어는 마이크로소프트 용어집 2007년 1월 30일자와, IT 분야에서 가장 탁월한 번역가로 손꼽히는 곽용재 님과 류광 님께서 정리하신 용어대역을 최대한 참고했습니다. 이 분야에서 선구적인 일을 하고 계시는 두 분께 지면을 빌어 감사와 고마움의 마음을 전해드립니다.
자, 이제 그럼 출발해 볼까요? 그 이름도 깜찍한 Qt와 함께 즐거운 프로그래밍을 하세요!
감사드리고 싶은 분들
이 책이 우리말로 옮겨지기까지 너무나도 많은 분들의 시간과 헌신적인 노력 그리고 격려가 필요했습니다. 이 책의 번역 제안을 흔쾌히 받아주시고, 번번히 예정된 시간을 넘기기 일쑤였던 못난 역자에게 밥 사주시며 용기주신 ITC 장성두 실장님(드디어 책이 나오는군요!!!), 원서보다 더 멋지게 편집해주신 성은경 님(와우, 책이 너무 예쁜데요?), 어색하기 짝없는 서툰 글을 깔끔하게 다듬어주신 김경희 님(덕분에 읽을 만한 글이 되었어요)께 진심으로 감사의 말씀을 드립니다.
눈코 뜰 새 없이 바쁜 일정 중에도 제자의 부족한 글을 기꺼이 검토해주신 ㈜아임구루의 강석민 선생님. C++를 너무나도 사랑한 나머지 이젠 외모까지도 비야네 스트롭스트룹을 닮아버린 그의 예술강의가 아니었다면 이 책은 세상 밖으로 나올 수 없었을 것입니다. 또한 우리네 IT 교육 현장 최전방에서 혼이 담긴 강의와 감동이 있는 코딩을 몸소 실천하고 계시면서 아낌없는 격려와 후원으로 용기주신 영혼의 프로그래머, ㈜아임구루의 김정인 선생님께도 감사 드립니다.
이 책의 기술적인 오류와 내용을 검토해준 멋진 친구들, 화끈한 정렬의 남자 종철이(보고픈 녀석!)와 팀 구루 팩토리Guru Factory의 잘생긴 꽃미남 삼인방 오태(이젠 장가만 가면 되겠구나), 찬식이(올해는 사랑하는 사람 꼭 만나기를), 도광이(마커스를 뛰어넘을 그날까지 파이팅)에게 다시 한번 고마움과 사랑의 마음을 전하며, 팀 멤버 전원 삼성소프트웨어 멤버십 합격을 축하하고 싶습니다. 또 조류독감 시즌마다 집중적으로 치킨을 함께 먹어준 닭사마 영선이, 지난 겨우내 프로젝트로 함께 고생했던 팀 ING의 정훈이, 영원이, 승표, 경민이, 번역 작업을 응원해준 쾌남 명진이, /잉/ 혁이, 만나면 늘 즐거운 다담패밀리 민찬 형님(보고 싶어요 행님), 종운이(건강해라! 꼭!), 귀염둥이 경택이, 말썽꾸러기 종하, 까칠한 하나에게도 감사와 고마움의 말을 전합니다.
번역 작업이 지루하지 않도록 음악을 무한 공급해준 DJ 엘리사Alyssa(은선이), 멀리 있어도 늘 가족 같은 미수누이와 은진이(이승호-조미수, 이대성-이은진 커플의 결혼을 축하하며), 이들의 응원은 늘 큰 힘이 됐습니다(다들 정말 고마워!). 그리고 2009년 한해 신나는 여행을 함께하게 된 사랑하는 예닮 BTB, 전상현 전도사님(목사님 되신 것 축하해요!), 깜찍한 인희, 듬직한 영현이, 박력 있는 민애, 물개를 꿈꾸는 현우, 간지남 윤수, 하늘을 날게 된 예신이, 잘생기고 멋진 지후, 이영애 뺨치는 선영이, 귀여운 예령이에게 사랑과 감사의 말을 전하며(모두 파이팅!), 마지막으로 늘 든든한 우리 가족, 그리고 사랑하는 나의 하나님께 감사 드립니다.
2009년 2월
조성만
| 한국어판 Programming Flex3 : RIA 개발을 위한 완벽 가이드 (3) | 2009/03/25 |
|---|---|
| ARM Cortex-M3 완벽 가이드 (0) | 2009/03/19 |
| QT 4를 이용한 C++ GUI 프로그래밍(제2판) (0) | 2009/03/19 |
| 헬로, 안드로이드: 구글의 모바일 개발 플랫폼 소개하기 (2) | 2009/03/19 |
| 입문자를 위한 루비 (0) | 2009/02/17 |
| 스프링 인 액션(제2판) (0) | 2009/02/17 |