본문 바로가기

프로그래밍/Node.js

[Do it! Node.js 프로그래밍] 3일차

1. 공부한 범위

 

[04] 노드의 기본 기능 알아보기 

 

2. 공부한 내용 요약

 

[04]  노드의 기본 기능 알아보기

  

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

- 웹 사이트에 접속하기 위한 사이트 주소 정보는 노드에서 URL객체로 만들 수 있다.

- 주소 문자열은 단순 문자열이기 때문에 어디까지 사이트 주소이며 요청 파라미터인지 구별해아 한다. 이 작업을 쉽게 할 수 있도록 노드에서 미리 만들어둔 모듈이 url 모듈이다.

- url 모듈의 주요 메소드

parse() : 주소 문자열을 파싱해 URL 객체를 만들어준다.

format() : URL 객체를 주소 문자열로 변환해준다.

 

- URL 객체의 여러 정보들 중 query 속성에는 요청 파라미터 정보가 있다. 원하는 정보를 얻기 위해서는 이 속성에 있는 여러 파라미터 정보들을 개별로 다시 분류할 필요가 있다.

- querystring 모듈을 &로 구별되어있는 요청 파라미터를 쉽게 분리할 수 있게 된다.

 

- stringify() 메소드는 객체 안에 들어있는 파라미터를 다시 문자열로 바꿀 때 사용된다.

 

04-2 이벤트 이해하기

- 노드는 대부분의 경우 이벤트를 기반으로 하는 비동기 방식으로 프로그램을 처리한다.

- 비동기 방식을 통해 이벤트를 전달할 때 노드에서는 EventEmitter를 이용한다.

- 이벤트를 다른 곳으로 전달하고자 한다면 emit() 메소드를 사용한다.

- EventEmitter의 주요 메소드

on(event, listener) : 지정 이벤트의 리스너를 추가한다.

once(event, listener) : 이벤트에 리스너를 추가하나 한 번 실행한 후에 해당 리스너를 제거한다.

removeListener(event, listener) : 이벤트에 대한 리스너를 제거한다.

 

- emit() 메소드를 이용하면 모듈로부터 이벤트를 전달받을 수 있다.

 

04-3 파일 다루기

- 노드의 파일 시스템은 파일을 다루는 기능과 폴더를 다루는 기능으로 구성되어 있으며 동기식 IO 비동기식 IO를 제공한다.

- 동기 IO는 파일 작업이 끝날 때까지 대기하며, 비동기식 IO는 파일 작업을 요청하기만 하고 바로 다음 작업을 이어서 수행한다. 비동기식의 파일 작업은 끝난 후 해당 상태를 이벤트로 받아서 마저 처리하게 된다.

- 동기와 비동기를 구별하기 위해 동기 IO에는 Sync라는 단어를 붙여준다.

 

- 동기식 파일 출력이며 readFileSync 메소드를 이용한다.

 

- 비동기식 파일 출력이며 함수를 이용해 요청이 완료된 후의 행동을 정의해둔다.

- 함수 내의 error변수는 파일이 존재하지 않거나 기타 오류가 발생하면 값이 null이 된다.

- 파일 IO의 대표적인 메소드

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

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

writeFile(filename, data, encoding="utf8", [callback]) : 비동기식으로 파일을 작성한다.

writeFileSync(filename, data, encoding="utf8") : 동기식으로 파일을 작성한다.

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

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

write(fd, buffer, offset, length, position, [callback]) : 지정한 부분에 데이터를 작성한다.

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

- 파일을 수정하기 위한 플래그

"r" : 읽기에 사용한다. 파일이 없을 경우 예외가 발생한다.

"w" : 쓰기에 사용한다. 파일이 없으면 새로 만들며, 이미 파일이 있다면 이전 내용을 모두 삭제한 후 새로 작성한다.

"w+" : 읽기와 쓰기에 모두 사용한다. 파일이 없으면 새로 만들며, 이미 파일이 있다면 이전 내용을 모두 삭제한 후 새로 작성한다.

"a+" : 읽기와 쓰기에 모두 사용한다. 파일이 없으면 새로 만들며, 이미 있다면 이전 내용 뒤에 이어서 데이터를 주가한다.

 

- 버퍼 단위로 파일 읽고 쓰기

 

- 버퍼를 이용 문자열 나누고 합치기 (atom에는 코드 힌트가 빈약해 bracket으로 다시 옮겼다.)

- 스트림 객체의 메소드

createReadStream(path, [options]) : 파일을 읽기 위한 스트림 객체를 만든다.

createWriteStream(path, [options]) : 파일을 쓰기 위한 스트림 객체를 만든다.

- pipe() 메소드는 스트림 두 개를 하나로 이어주는 역할을 한다.

 

04-4 로그 파일 남기기

- 일반적으로는 console 객체의 log()나 error() 메소드 등으로 로그를 출력할 수 있다. 하지만 프로그램의 크기가 커질수록 로그의 양도 커지고 로그를 보관했다가 나중에 확인해야 할 수도 있게 된다.

- 여러 로그 모듈이 존재하지만 winston 모듈로 로그를 남기는 법을 공부한다.

- winston 모듈로 만드는 로거는 transports라는 속성값으로 여러 개의 설정 정보를 전달할 수 있다.

* 로그 수준

어떤 정보까지 출력할 것인지를 결정하는 것

아래로 내려갈 수록 심각한 사안이며 하위 수준은 상위 수준을 모두 포함해 출력해준다.

debug: 0

info: 1

notice: 2

warning: 3

error: 4

crit: 5

alert: 6

emerg: 7