노드로 프로그램을 만들기 위해서는 몇 가지 기본적인 내용을 알아두는 게 좋다.
이벤트가 무엇인지, 파일은 어떻게 다루는지 등을 알아야 노드로 프로그래밍을 할 때 두려움이 사라진다.
1. 이벤트
노드는 대부분 이벤트를 기반으로 하는 비동기 방식으로 처리한다. 예를 들어, 어떤 함수를 실행한 결과물도 이벤트로 전달하는데 이벤트는 한쪽에서 다른 쪽으로 알림 메시지를 보내는 것과 비슷하다. 즉 '지금 이쪽의 상태는 이렇다'를 다른 쪽으로 보내는 것이다.
이벤트를 보내고 받기 위해서 노드의 객체는 EventEmitter를 상속받을수 있으며, 이 객체의 on() 과 emit() 메소드를 사용할 수 있다.
on() 메소드는 이벤트가 전달된 객체에 이벤트 리스너를 설정하는 역할을 하는데 이 리스너 함수는 객체로 전달된 이벤트를 받아 처리할 수 있다.
보통은 노드 내부에서 미리 만들어 제공하는 이벤트를 받아 처리하지만, 필요할 때는 직접 이벤트를 만들어 전달할 수 있다.
once()메소드는 이벤트 리스너 함수가 한 번이라도 실행하고 나면 자동으로 제거되므로 한 번만 받아서 처리할 수 있는 메소드이다.
emit()메소드를 사용하면 이벤트를 다른 쪽으로 전달 즉, 실행할 수 있다.
process라는 EventEmitter 객체가 있다고 가정하고 밑의 코드를 설명하자면, tick이벤트를 직접 만들고 2초 후에 setTimeout() 메소드를 사용해 process.emit()메소드를 호출하면서 tick이벤트를 process객체로 전달하는 것이다. process.on() 메소드를 호출하여 이벤트를 등록하면 이 메소드를 호출하면서 파라미터로 전달한 tick이벤트가 발생했을 때 그 다음에 나오는 콜백 함수가 실행된다.
process.on('tick', function(count){
console.log('tick event: %s', count);
});
setTimeout(function() {
console.log('2초 후 tick이벤트 전달 시도.');
process.emit('tick', '2');
},2000);
그런데, 계속해서 process 객체로 이벤트를 전달하게 된다면, 같은 이름의 이벤트를 사용하는 경우에 충돌이 생길 수가 있다. 이 때문에 별도의 모듈 파일을 만들고 그 안에서 이벤트를 처리하도록 하는 것이 좋다.
Calc객체는 계산기 객체로써 function 키워드를 사용해 프로토타입 객체로 만든다. 프로토타입 객체 안에서는 this 키워드를 이용해 자기 자신을 가리킬 수 있으며, 그 객체 안에 정의된 속성에 접근할 수 있다. 그런 다음 Calc 객체가 이벤트 처리를 할 수 있도록 EventEmitter를 상속하도록 만든다. 상속은 util모듈에 있는 inherits() 메소드를 사용하면 쉽게 정의할 수 있다. 코드의 가장 위쪽에서 require() 메소드를 호출하여 util모듈을 불러왔기 때문에 util.,inherits() 메소드를 호출하는 코드 사용이 가능하다.
Calc객체 안에 들어있는 prototype객체의 속성으로 add함수를 추가하면 new 연산자를 이용해 Calc 객체의 인스턴스 객체를 만들었을 때 add()함수를 사용할 수 있다. 타이틀 속성 값으로는 calculator을 사용하였다.
2. 파일읽기
메소드 이름 |
설명 |
readFile(filename, [encoding],[callback]) |
비동기식 IO로 파일을 읽어 들인다. |
writeFile(filename, data, encoding='utf8', [callback]) |
비동기식 IO로 파일을 씁니다. |
readFileSync(filename, [encoding]) | 동기식 IO로 파일을 읽어들인다. |
writeFileSync(filename, data, encoding='utf8') | 동기식 IO로 파일을 쓴다. |
위의 메소드들은 한꺼번에 데이터를 읽을 때 주로 사용하는것인데, 만약 일부분만 읽고 쓰고싶다면 다른 메소드를 활용해야 한다.
메소드 이름 |
설명 |
open(path, flags [, model] [, callback]) |
파일을 연다 |
read(fd, buffer, offset, length, position [, callback]) |
지정한 부분의 파일 내용을 읽어 들인다. |
write(fd, buffer, offset, length, position [, callback]) |
파일의 지정한 부분에 데이터를 쓴다. |
close(fd [, callback]) |
파일을 닫아 준다. |
파일의 일부분만 읽어 들이려면 먼저 open() 메소드로 파일을 열어야 합니다.
함수를 호출하는 순서는 'open - write - close' 순서여야 합니다.
'Node.js공부 > Node.js 원활한 사용을 위한 세부 공부' 카테고리의 다른 글
MongoDB 사용하기 (0) | 2019.02.13 |
---|---|
미들웨어 사용하기 (0) | 2019.02.12 |
클라이언트 요청시 서버 개념들 (0) | 2019.02.12 |
express 관련 정리(Application, Request, Response, Routing) (0) | 2019.02.09 |
추가적인 자바스크립트공부 (0) | 2019.02.09 |