/survey-gorilla

AngularJS 기반 싱글 페이지 애플리케이션 개발 - 설문조사 서비스 (Developing a Single Page Application using AngularJS)

Primary LanguageJavaScript

Developing a SPA using AngularJS

Developing a SPA using AngularJS

출판의 여정

8개월의 원고작성, 3개월의 편집기간을 거쳐 드디어 책이 출간되었다. 책을 통해 개발자들과 공유하자는 의기투합은 2013년 겨울로 거슬러 올라간다. 이강훈님을 통해 알게된 이규원님, 김충섭님, 김대권님, 박유진님, 구교준님과 함께 MEAN 스택을 기획했었다. 그 당시 미국에 있었던 지라 구글 행아웃을 통해 주말마다 화상미팅을 하며 깃헙과 페이스북을 통해 서로의 의견과 결과물을 공유했다. 2014년 봄 귀국후 함께 오프라인에서 헤커톤도 하면서 책의 샘플을 만들며 진행했지만 각자의 일정으로 인해 MEAN 스택 집필을 흐지부지 되어갔다. 2014년 7월쯤 결단을 내리고 이렇게 진행하면 끝나지 않겠다 싶어서 다음 기회를 기약하였고, 홀로 책을 쓰기로 결심했다.

2014년 8월 이강훈님 회사인 스터디지피에서(https://bagle.io)의 서비스를 개발하면서 미국 플젝에서 얻은 AngularJS 경험과 개념정리가 덜 된 부분을 하나하나 집어가며 집필을 시작했다. 처음에는 한 페이지를 나가는데 하루의 시간이 걸리더니 조금씩 속도가 붙으면서 한달만에 100p 가량을 썼다. 하지만 다시 가을 미국 프로젝트로 2달간 집필 중단 후 한국에 돌아와 마음을 다잡고 12년전 내 책을 출판해 보자는 꿈을 다시한번 상기했다. 위키북스의 박찬규 대표님도 은근히 압력을 넣어주시며 언제쯤 나올까요 물어볼때마다 곧 나올겁니다 대답하곤 하루 1~2시간씩 짬을 내어 집필을 계속했다. 2015년 3월 집필을 완료하고 출판사에 전달했지만 피드백으로 날아온 것은 맞춤법과 문장 난해함에 대한 엄청난 지적질의 빨간줄이었다.

한달간 주말마다 빨간 선생님과 싸움하며 "그래 글쓰는 것도 배우는 거다"라고 생각하고 나의 국어실력을 한탄하며 글을 풀어서 이야기식으로 고쳐나갔다. 사실 블로그를 쓰다보니 블릿(점, 점으로 요약한 내용)으로 내용을 요약해 표현하다 보니 책도 그렇게 썼드랬다. 블릿 내용을 다 풀어쓰는 것만도 한달. 다시 피드백받아 또 고치고 피드백받아 또 고치고, "아 무한루프의 피드백". 점점 스트레스와 화가 살짝 났다. 인생 목표 10가지중 1가지가 1년에 책한권씩 내자였던 것이 여지없이 깨지는 순간이었다. 이렇게 하다가는 2년에 한권내는 것도 힘들겠다 싶었다. 하지만 일에는 끝이 있는 법. 5월초 거의 마무리 피드백을 보내고, 책 추천사를 받고 인덱스를 보내고, 몇가지 피드백을 마무리하며 3개월의 수정작업은 6월 5일 마무리되었고, 예약 판매가 모든 온라인 서점에서 시작되었다. 그렇게 나온 것이 "실전 프로젝트로 배우는 AngularJS" 이다.

본 서적은 AngularJS가 하도 유행이라 하여 한번쯤은 기초서적을 구매하거나 빌려서 본적이 있고, 온라인 튜토리얼을 통해 프로토타입핑을 해보았지만 당췌 AngularJS로 서비스를 어떻게 만들어야 할지 모르는 개발자를 위한 책이다. "나도 내가 원하는 서비스 뚝딱 만들어 보고 싶어 근데 어떻게 시작해야는 거야?"라고 생각하는 모든 개발자를 위한 책이다. AngularJS는 생태계를 가지고 있고 인식의 전환을 해야하는 새로운 용어들이 존재한다.

처음 1장에서는 간단한 ToDo 서비스를 만들면서 주변의 생태계 도구와 개념을 이해하고 2장에서는 AngularJS의 장점들과 그중에 지시자(Directive)에 대해 좀 더 심도있게 설명을 했다. 3장, 4장에서 서비스를 바로 만들 줄 알았다면 오산이다. 이제 서비스를 만들 준비운동단계이다. 먼저 요건정의를 하고 이에 맞는 코딩 컨벤션 부터 AngularJS를 이용한 SPA 개발시 준비할 것들을 프론트앤드 아키텍처로 접근해 보았다. 5장에서 이제 좀 개발들어가려 했더니 그래도 요즘 많이 사용하는 NodeJS, MongoDB는 알고가자는 취지에서 개념과 실습코드를 넣었다. 1장~5장이 준비운동과 스타트 단계였다면 6장, 7장은 엄청난 스피도로 골인점을 향해가는 단계이다. 올초 2개월간 TossLab의 JANDI(http://www.jandi.com)에서 AngularJS에 대한 컨설팅 경험을 적용한 장이다.

##목차

▣ 01장: 단일 페이지 애플리케이션 개발 준비 1-1. 개발 도구 설치

  • 깃 설치
  • 노드 설치
  • 요맨 설치
  • 서브라임 텍스트 편집기 설치 1-2. 단일 페이지 애플리케이션 생성
  • yo generator 선택과 설치
  • Yo를 이용한 ToDo 애플리케이션 생성 1-3. 애플리케이션 컴포넌트 생성
  • 앵귤러를 위한 index.html 설정 이해하기
  • yo를 이용한 앵귤러 컨트롤러 추가
  • bower를 이용한 앵귤러 지시자 추가 1-4. 애플리케이션 테스트 및 빌드
  • grunt를 이용한 테스트
  • grunt를 이용한 배포 정리

▣ 02장: AngularJS 프레임워크 이해 2-1. MV* 프레임워크 2-2. 양방향 데이터 바인딩

  • 스코프 내부와 상속 관계
  • MyToDo 애플리케이션에서 양방향 데이터 바인딩
  • 스코프 생명 주기(Life Cycle)
  • 그 외 $scope 객체 메서드 2-3. 의존성 주입(DI, Dependency Injection) 2-4. 클라이언트 템플릿 2-5. 지시자(Directive)
  • 지시자가 DOM에 적용되는 순서
  • 지시자 정의
  • 지시자의 스코프 객체의 범위 종류
  • Template, TemplateUrl, TemplateCache, replace와 ng-template 사용
  • compile, link의 $watch 등록을 이용한 양방향 데이터 바인딩
  • controller, require와 link 네 번째 파라미터와의 관계
  • transclude, ng-transclude 사용 2-6. 테스트 프레임워크(단위, E2E)
  • 카르마 기반 단위 테스트
  • 프로트랙터 기반 E2E 테스트 정리

▣ 03장: 싱글 페이지 애플리케이션 기획및 생성 3-1. 애플리케이션 기획

  • 메인 페이지
  • 그룹 정보 페이지
  • 그룹 활동 페이지
  • 설문 생성 페이지 3-2. 애플리케이션 제너레이터 설계
  • 애플리케이션의 폴더 구조 전략
  • 애플리케이션 제너레이터 선정
  • 앵귤러 코드 스타일 전략
  • 스타일 가이드에 따른 제너레이터 템플릿 수정 방법
  • IE8 지원을 위한 index.html 설정 3-3. SPA 생성
  • 애플리케이션의 모듈 구성
  • 라우팅 설정 방식 3-4. 단위 업무를 위한 앵귤러 컴포넌트 조합
  • $resource를 통한 REST 모델 사용
  • promise와 $q Async 호출에 대한 이해 정리

▣ 04장: 애플리케이션을 위한 공통 프레임워크 개발 4-1. 공통 프레임워크 모듈 개발

  • 다국어 처리
  • 메시지 처리
  • 팝업 메시지창 지시자
  • HTTP 에러 처리
  • 사용자 정의 Bower 컴포넌트 등록
  • 로컬 저장소 서비스
  • 유틸리티 지시자 4-2. 로그인 화면 개발
  • 트위터 부트스트랩 기반의 화면 디자인 및 폰트 사용
  • 폼 유효성(Form Validation) 검사
  • 인증을 위한 토큰과 쿠키 4-3. OAuth를 이용한 인증 처리
  • 백엔드에서 Passport 모듈을 이용한 인증 처리
  • 페이스북 인증 처리
  • 크롬 브라우저 개발자 도구를 이용한 클라이언트 디버깅
  • 노드 인스팩터를 이용한 서버 디버깅 정리

▣ 05장: 메인 페이지 개발 5-1. 백엔드 API 개발

  • REST API 별 서버 모듈 조합
  • 노드 모듈의 exports 이해
  • 몽고디비와 몽구스 이해
  • 서버 모델 개발
  • 그룹 REST API 개발
  • 포스트맨을 이용한 REST API 검증
  • 백엔드 단위 테스트 수행 5-2. 메인 화면 개발
  • 공통 컴포넌트 재구성
  • 메인 화면 레이아웃 개발
  • 그룹 생성 5-3. 그룹 목록 및 정보 표현 정리

▣ 06장: 그룹 페이지 개발 6-1. 그룹 정보 페이지

  • 그룹 상세 정보 조회
  • 그룹 프로필 이미지 변경
  • 그룹 가입, 탈퇴 6-2. 그룹 활동 페이지
  • 그룹 활동 화면 레이아웃 개발
  • 그룹 멤버 목록 표현 6-3. 설문 카드 생성
  • 설문 카드 생성
  • 카드 지시자 개발 6-4. 설문 종류별 카드 표현 6-5. 설문 응답 및 결과 표현 정리

▣ 07장: 실시간 반응 개발 7-1. Socket.IO 기반 실시간 연동

  • 노드 기반 백엔드 Socket.IO
  • AngularJS 기반 프런트엔드 Socket.IO
  • 상단 알림 메뉴 추가 7-2. 카드 목록 UX 개선
  • 카드에 동영상 추가
  • 무한 스크롤 적용
  • 애니메이션 효과 적용 7-3. AngularJS 성능 옵션
  • 일회 바인딩
  • ngModelOptions 지시자
  • 디버깅 정보 비활성화
  • $applyAsync 적용 정리

##구매

예스24 온라인 서점

알라딘 온라인 서점

인터파크 온라인 서점

교보문고 온라인 서점

G마켓 온라인 서점

현재는 예약 판매로 10% 싸게 구매 할 수 있다. 6월 17~19일간 배송을 시작한다. 당초 높은 가격이 책정되었지만 위키북스 대표님에게 가격이 높아 개발자에게 부담이 될 것 같다하였더니 파격적인(?) 가격에 판매를 시작해 주셨다. 지금까지 독자로 책을 사보면서 철자하나 틀리면 왠지 기분이 나쁘고 지적을 해주고 싶었는데 이제부터는 너그러이 용서해 줄것 같다. 정말 많은 공력과 시간이 투여되는 시간이었다. 하지만 새로운 경험을 하게 되었고 이렇게 해서 책 한권 한권이 출판된다는 생각을 하니 한권의 책을 사도 감사히 볼 마음가짐이 생긴다.

이번달 중으로 출판사의 양해를 얻어 1장과 2장은 블로그에 공개하려 한다. 2장은 AngularJS v1.* 이 계속 사용되는 한 유용한 레퍼런스가 되리라 생각한다. 이렇게 생애 첫 책 출판을 자축하며... 내년에는 "Data Visualization using D3.js" 이고, 여기에 ReactJS 또는 AngularJS v2.* 와 Meteor를 접목한 경험을 출판할 계획이다. 글쓰기도 가끔은 중독이다. 자전거 처럼 잘 타지는 못하지만 타고 있는 동안은 자유다. 나를 표현하고 느낄 수 있는 시간이랄까~~~