본문 바로가기

Programing/NodeJs

Do it! NodeJs 프로그래밍 - Day 2

제목 가이드 : [일차] 도서 제목

ex) [1일차] Do it! 첫 파이썬 - 01. 컴퓨터야 반가워!

 

1. 공부한 책DB를 검색하여 넣어 주세요.

Do it! Node.js 프로그래밍

정재곤

이지스퍼블리싱 2017.03.06

 

 

 

 

 

 

 

 

2. 공부한 페이지 : p.81 ~ p.133

 

3. 공부한 내용 : 

 

03-1 자바스크립트의 객체와 함수 이해하기

 - 자바스크립트는 자료형을 명시하지 않음

 - 자바스크립트 변수에는 숫자, 문자열, 불린과 같은 값을 넣을 수 있음

 - 자바스크립트는 중괄호를 사용하여 객체를 만들 수 있고 묶은 객체 안에는 속성을 추가할 수 있음

 - 자바스크립트 함수는 타입을 표시하지 않음, 명시적으로 구분하기 위해 function 키워드를 함수 이름 앞에 붙여줌

 

03-2 배열 이해하기

 - 배열 : 여러개의 데이터를 하나의 변수에 담아 둘 수 있어서 자주 사용되며 배열의 요소들은 대괄호를 이용해서 접근 가능함

 - for문을 이용하여 배열의 모든 요소 하나씩 확인 가능함

 - 배열에 값 추가 및 삭제하는 메소드

  1) push(object) : 배열의 끝에 요소를 추가함

  2) pop() : 배열의 끝에 있는 요소를 삭제함

  3) unshift() : 배열의 앞에 요소를 추가함

  4) shift() : 배열의 앞에 있는 요소를 삭제함

  5) splice() : 여러개의 객체를 요소로 추가하거나 삭제함

  6) slice() : 여러 개의 요소를 잘라내어 새로운 배열 객체로 만듬

 

03-3 콜백함수 이해하기

함수를 파라미터로 전달하는 경우는 대부분 비동기프로그래밍방식으로 코드를 만들때이다. 

콜백함수는 함수가 실행되는 중간에 호출되어 상태정보를 전달하거나 결과값을 처리하는데 사용되는데 

파라미터로 전달되는 함수를 콜백함수라고 한다.

노드에서는 대부분의 코드를 비동기방식으로 만든다. 

ex) function add(a,b,callback){

   var result = a + b;

   callback(result);

}

 

add(10,10,function(result){

   console.log('파라미터로 전달된 콜백 함수 호출');

   console.log('더하기 (10,10)의 결과 : %d', result);

}

 

위 코드와 같이 값을 반환하지않도록 return 키워드 코드를 삭제하고 대신 결과값은 파라미터로 전달된

콜백함수를 호출하면서 그 콜백함수로 전달한다. 

콜백함수는 미리 변수에 할당했다가 add함수를 호출할때 파라미터로 전달할수도 있으나, 

add함수를 호출할때 익명함수로 만들어서 바로 전달할수도 있다. 

 

함수 안에서 값을 반환할때 새로운 함수를 만들어 반환하는방법에는 

위 add함수코드안에서 

var history = function(){

   return a+'+'+b+'='+result;

};

return history; 

코드를 추가로 작성하여 사용할 수 있다.

함수 안에서 새로운 함수를 만들어 반환하는 경우에는 예외적으로 변수 접근을 허용하는데 이를 클로저(Closure)라고 부른다. 

 

03-4 프로토타입 객체 만들기 

함수도 객체이기 때문에 자바스크립트 객체는 함수를 이용해서 만들수도 있다.

함수중에서 new 연산자로 호출되는 함수는 객체를 만들기 위한 함수로 분류되며 이러한 함수를 생성자라고 한다.

ex) 

function Person(name,age){

   this.name = name;

   this.age = age;

}

new Person('소녀시대', 20);

 

함수는 Person.prototype.walk = function(){...}과 같은 형태로 만드는데 

Person.walk = function(){...}의 방식보다 

Person 객체 안에 있는 prototype 속성에 데이터나 함수를 속성으로 추가하면 

실제 인스턴스 객체를 만들때 메모리를 효율적으로 관리 할수 있기 때문이다. 

이런 Person객체를 프로토타입 객체라고 부른다. 

 

 

04-1 주소 문자열과 요청 파라미터 다루기

사이트 주소 정보는 노드에서 url 모듈을 사용하여 URL 객체로 만들수 있다.

요청 파라미터를 구분 할 수 있고 요청 파라미터에서 쿼리값만 따로 추출 할수도 있다.

url 모듈은 Node에서 제공하는 기본 모듈로 주소 문자열에 들어있는 여러가지 정보를 쉽게 분리할 수 있다.

 

 

 

04-2 이벤트 이해하기

노드는 대부분 이벤트를 기반으로 하는 비동기 방식으로 처리한다. 그리고 비동기 방식으로 처리하기 위해 서로 이벤트를 전달한다. 

예를 들어, 어떤 함수를 실행한 결과물도 이벤트로 전달한다. 이벤트는 한쪽에서 다른 쪽으로 알림 메시지를 보내는 것과 비슷하다. 노드에는 이런 이벤트를 보내고 받을 수 있도록 EventEmitter라는 것이 만들어져 있다. 

노드의 객체는 EventEmitter를 상속받을 수 있으며, 상속받은 후에는 EventEmitter 객체의 on()과 emit()메소드를 사용할 수 있다. on()메소드는 이벤트가 전달될 객체에 이벤트 리스너를 설정하는 역할을 하는데 이 리스너 함수는 객체로 전달된 이벤트를 받아 처리할 수 있다. 보통은 노드 내부에서 미리 만들어 제공하는 이벤트를 받아 처리하지만, 필요할 때는 직접 이벤트를 만들어 전달할 수 있다.

on()메소드 이외에 once()메소드를 사용할 수 도 있다. once()메소드를 사용할 때는 이벤트 리스너 함수가 한 번이라도 실행하고 나면 자동으로 제거되므로 이벤트를 딱 한번만 받아서 처리할 수 있다.

 

 

 

04-3 파일 다루기

동기식 IO는 파일 작업 끝날 때까지 대기하며, 비동기식 IO는 파일 작업을 요청만 하고 그다음 작업을

바로 수행한다. 동기식 IO와 비동기식 IO를 구별하기 위해 동기식 IO메소드는 Sync라는 단어를 붙여서 쓴다.

 

readFile()메소드를 실행하면서 오류가 발생하면 err에 오류 데이터가 들어가고, 그렇지 않으면 err 변수의 값이 null이 된다.

readFile(filename,[encoding],[callback]): 비동기식 IO로 파일을 읽는다

readFileSync(filename,[encoding]):동기식 IO로 파일을 읽는다

writeFile(filename,data,encoding='utf8',[callback]): 비동기식 IO로 파일을 쓴다

writeFileSync(filename,data,encoding='utf8'):동기식 IO로 파일을 쓴다.

 

open(path,flags,[mode],[callback]): 파일을 연다

read(fd,buffer,offset,length,position,[callback]): 지정한 부분의 파일 내용을 읽는다

write(df,buffer, offset,length,position,[callback]): 지정한 부분에 데이터를 쓴다

close(fd, [callback]) :파일을 닫는다

 

'r': 읽기에 사용하는 플래그

'w':쓰기에 사용하는 플래그

'w+'읽기와 쓰기에 모두 사용, 없으면 만들어지고 있으면 이전 내용모두 삭제

'a+':읽기와 추가에 모두 사용, 없으면 만들어지고 이전 내용에 새로운 내용 추가

 

스트림 단위로 파일 읽고 쓰기

createReadStream(path,[option]):파일을 읽기 위한 스트림 객체 만들기

createWriteStream(path,[option]):파일을 쓰기 위한 스트림 객체 만들기

 

04-4 로그 파일 남기기

 

 

 

 

 

## 실습코드 : https://github.com/dlckdgjs89/NodeJS