diff --git a/README.md b/README.md index 39da688..89880cc 100644 --- a/README.md +++ b/README.md @@ -1,94 +1,63 @@ todomvc-angular =============== -## 0. 우리가 만들 Todo 앱 미리보기 +## 미리보기 - +이번 강의에서 만들 결과물을 미리 보자. + +* 투두(Todo) 목록을 조회 +* 추가, 편집, 삭제, 완료 처리 (CRUD) +* 투두의 상태에 따라 completed(완료), active(진행중)로 필터링 -* 투두(Todo) 목록을 웹페이지에 보여줌 -* 투두의 조회, 추가, 편비, 삭제, 완료 처리할 수 있음 (CRUD) -* 투두의 상태에 따라 completed, active로 필터링 할 수 있음 -* 투두 데이터는 서버에서 관리함 + +## 프로젝트 구조 -### 프로젝트 구조 +### 백엔드 * 서버는 [Node.js](https://nodejs.org/en/)기반의 [Express.js](http://expressjs.com) 웹프레임웍을 사용함 -* 서버는 1) html, css, javascript 등의 정적 파일을 제공하고 2) ajax 기능을 수행할 api를 제공함 +* 서버는 1) html, css, javascript 등의 정적 파일을 호스팅하고 2) ajax 기능을 수행할 api를 제공함 + +### 프론트엔드 + * 웹페이지는 [Angular.js](https://angularjs.org)를 사용한 하나의 페이지(index.html)로 구성됨 * 앵귤러 컨트롤러로 웹페이지를 조작하고 앵귤러 서비스를 통해 백엔드 api와 통신함  -출처: [https://scotch.io/tutorials/creating-a-single-page-todo-app-with-node-and-angular](https://scotch.io/tutorials/creating-a-single-page-todo-app-with-node-and-angular) - +## 개발 환경 -## 1. 노드 설치 +### Node.js * [https://nodejs.org/en/](https://nodejs.org/en/)에서 다운로드 후 설치 -* 설치 확인: - -``` -$ node --version -$ which node -``` - -* 간단한 노드 스크립트 확인: - -``` -> console.log('hello world!') -hello world! - -> var name = 'Chris' -> name -'Chris' -``` - -``` -> const name = 'Chris' -> name -'Chris' - -> name = 'Mars' -'Mars' - -> name -'Chris' -``` +* 웹서버 구동과 프로젝트 관리를 위해 사용 ### NPM * Node Package Manager -* 노드 패키지를 프로젝트에 추가, 삭제하거나 만든 패키지를 배포할 때 사용함. -* 본 프로젝트에서는 - * angularjs등 외부 라이브러리를 설치하고 - * 노드 서버를 구동하는데 사용함 +* 노드 패키지를 프로젝트에 추가, 삭제하거나 직접 작성한 패키지를 배포할 때 사용함. +* 본 프로젝트에서는 angularjs등 외부 라이브러리 설치시 사용 * 노드를 설치하면 자동으로 NPM도 설치됨 -* 설치확인: +* *이후 Bower, Gulp 등 개발 툴은 상황에 따라 추가 설명할 예정* -``` -$ npm --version -$ which npm -``` +## 프로젝트 초기화 -* NPM으로 프로젝트 생성: +* Npm으로 프로젝트 초기화 ``` +$ mkdir todomvc && cd todomvc $ npm init ``` +* package.json: 프로젝트 정보를 담고 있음. +* 특히 dependencies에는 프로젝트에서 사용하는 외부 라이브러리 정보가 기록됨 -## 2. 앵귤러 로딩 +## 앵귤러 시작 -* index.html 페이지 생성: - -``` -$ touch index.html -``` - -* index.html: +* index.html 작성 ```html +
@@ -102,54 +71,64 @@ $ touch index.html ``` -* NPM으로 앵귤러 설치: +* Npm 으로 앵귤러 설치: ``` $ npm install angular --save ``` - -* index.html에 앵귤러 로딩 +* save 옵션을 주는 것은 이 프로젝트가 앵귤러 라이브러리를 사용한다는 것을 알리는 것 +* 이 정보는 package.json의 dependencies에 추가됨 +* 앵귤러 라이브러리를 로딩하고 **모듈(module)**, **컨트롤러(controller)** 생성 +* `ng-app`: 브라우져에게 앵귤러 모듈을 사용한다고 알림 +* `ng-controller`: 브라우져에게 앵귤러 컨트롤러를 사용한다고 알림 ```html - - - - - - - - + + + + + + + + ``` -* 앵귤러 모듈 정의 (js/app.js): - -```javascript -angular.module('todoapp', []); -``` +## [TIP] brower-sync -* 브라우져로 로딩하면 앵귤러 라이브러리와 우리가 만든 파일 두 개 (index.html, app.js)가 다운로드 됨 +* [bower-sync](https://www.browsersync.io/)는 코드변호에 따라 브라우져를 리프레시 해주는 툴 +* 내부적으로 웹서버를 구동함 +* Npm을 이용해 글로벌로 설치 +``` +$ npm install -g browser-sync +$ browser-sync start --server --files "./**/*" +``` -## 3. 컨트롤러 +## Controller -* html로 작성된 템플릿과 연결되어 데이터를 출력하고 사용자 입력을 처리하는 것이 컨트롤러의 역할 +* Html로 작성된 템플릿과 연결되어 데이터를 출력하고 사용자 입력을 처리하는 것이 컨트롤러의 역할 * `angular.module().controller()` 함수로 컨트롤러 정의 -* js/controllers/TodomvcCtrl.js: ```javascript +// js/controllers/TodomvcCtrl.js: angular.module('todomvc') .controller('TodomvcCtrl', function ($scope) { - $scope.message = 'Hello world!'; - }); ``` -* 컨트롤러스 생성과 동시에 스코프변수(`$scope`)가 자동으로 생서됨 -* 스코프 변수의 역할: 템플릿과 컨트롤러간의 데이터 연결 -* index.html에 스코프 변수 출력하기 (인터폴레이션 문법) +* 컨트롤러스 생성과 동시에 스코프 변수(`$scope`)가 자동으로 생성됨 +* 이는 템플릿과 컨트롤러간의 연결을 위한 변수임 +* index.html에 스코프 변수 출력하기 (인터폴레이션) ```html +{{ message }} @@ -158,15 +137,14 @@ angular.module('todomvc') ``` -## 4. 투두 목록 출력하기 +## 투두 목록 출력하기 (ngRepeat) -* 컨트롤러에 배열 데이터 `todos` 만들기 -* js/controllers/TodomvcCtrl.js: +* 컨트롤러에 배열 데이터 `$scope.todos` 만들기 ```javascript +// js/controllers/TodomvcCtrl.js angular.module('todomvc') .controller('TodomvcCtrl', function ($scope) { - $scope.todos = [{ id: 1, title: '요가 수행하기', @@ -176,14 +154,13 @@ angular.module('todomvc') title: '어머니 용돈 드리기', completed: true }]; - }); ``` -* ngRepeat으로 배열 출력하기 -* index.html: +* `ngRepeat`으로 배열 출력하기 ```html +