관리 메뉴

SW

[Node.js] 노드의 기본 기능 본문

대학교/BE

[Node.js] 노드의 기본 기능

SWKo 2020. 2. 12. 19:11

0. 주소 문자열과 요청 파라미터

  • 웹 사이트에 접속하기 위한 사이트 주소 정보는 노드에서 URL 객체로 만들 수 있다.
  • 노드는 주소 문자열을 받으면 어디까지가 사이트 주소인지, 어떤 내용이 요청 파라미터인지 구별하도록 url 모듈이 있다.
  • https://www.google.co.kr/?abcd=abc 라는 주소 문자열이 있다고 가정해보자.
  • 노드는 URL객체로 만든다.
  • protocol: 'https'
  • host: 'www.google.co.kr'
  • query: 'abcd=abc'

1. 주소 문자열을 URL 객체로 변환하기

  • parse() : 주소 문자열을 파싱하여 URL 객체를 만들어 준다.
  • format() : URL 객체를 주소 문자열로 변환한다.

  • url 모듈을 사용하기 위해 require() 메소드를 호출
  • url 모듈을 로딩한 후 url 변수에 할당했으므로 이 변수의 parse()와 format() 메소드를 호출할 수 있다.
  • https://로 시작하는 주소 문자열은 parse() 메소드를 사용해 URL 객체로 만들어졌다가 formate() 메소드를 이용해 다시 원래의 주소 문자열로 변환 되었다.

2. 요청 파라미터 확인하기

  • URL 객체의 속성을 보면 주소 문자열의 여러 가지 정보가 있다. 그중 query 속성은 요청 파라미터 정보를 가지고는데 이 정보를 잘 살펴보면 여러 개의 요청 파라미터가 모두 들어 있다. 웹 서버에서는 클라이언트에서 요청한 요청 파라미터를 받아 처리할 때가 많으므로 이 query 속성에 들어 있는 문자열을 다시 각각의 요청 파라미터로 분리해야 한다.
  • 요청 파라미터는 & 기호로 구분되는데 querystring 모듈을 사용하면 요청 파라미터를 쉽게 분리할 수 있다.

  • querystring모듈을 사용하기 위해 require() 메소드를 호출한다. 불러온 모듈은 querystring변수에 할당하고 그 객체의 parse() 메소드를 호출한다.
  • parse() : 요청 파라미터 문자열을 파싱하여 요청 파라미터 객체로 만들어 준다.
  • stringify() : 요청 파라미터 객체를 문자열로 반환한다.

3. 이벤트

  • 노드는 대부분 이벤트를 기반으로 하는 비동기 방식으로 처리한다. 그리고 비동기 방식으로 처리하기 위해 서로 이벤트를 전달한다.
  • 예를 들어, 어떤 함수를 실행한 결과물도 이벤트로 전달한다.
  • 노드에는 이런 이벤트를 보내고 받을 수 있도록 EventEmitter라는 것이 만들어져 있다.
  • 노드의 객체는 EventEmitter를 상속받을 수 있으며, 상속받은 후에는 EventEmitter 객체의 on()과 emit() 메소드를 사용할 수 있다.
  • on() 메소드는 이벤트가 전달될 객체에 이벤트 리스너를 설정하는 역할을 하는데 이 리스너 함수는 객체로 전달된 이벤트를 받아 처리할 수 있다.
  • on(event, listener) : 지정한 이벤트의 리스너를 추가한다.
  • once(event, listener) : 지정한 이벤트의 리스너를 추가하지만 한 번 실행한 후에는 자동으로 리스너가 제거된다.
  • removeListener(event, listener) : 지정한 이벤트에 대한 리스너를 제거한다.

  • 계산기 객체를 모듈로 만들어 보겠다.

  • new연산자를 이용해 인스턴스 객체를 만든다. Calc 객체가 EventEmitter를 상속하므로 인스턴스 객체의 emit() 메소드를 호출하여 stop 이벤트를 전달한다.
  • 프로그램을 만들 때는 이벤트를 받아서 처리하는 경우가 많다. on()과 emit()을 잘 알아두자.

4. 파일 다루기

  • 노드의 파일 시스템은 파일을 다루는 기능과 디렉터리를 다루는 기능으로 구성되어 있으며, 동기식 IO와 비동기식 IO기능을 함께 제공한다.
  • 동기식 IO는 파일 작업이 끝날 때까지 대기하며, 비동기식 IO는 파일 작업을 요청만 하고 그다음 작업을 바로 수행한다.
  • 둘을 구별하기 위해 동기식 IO 메소드는 Sync라는 단어를 붙인다.
  • 다음은 파일을 동기식으로 읽는 코드이다.

  • 다음은 파일을 비동기식으로 읽는 코드이다.

  • 파일을 비동기식으로 읽어 들이는 방식이 노드에서 더 자주 사용된다. 
  • readFile() 메소드를 실행하면서 세 번째 파라미터로 전달된 함수(function)는 파일을 읽어 들이는 작업이 끝났을 때 호출된다. 이때 두 개의 파라미터 err와 data를 전달받아서 오류가 발생했는지 아니면 제대로 실행되었는지를 알 수 있다.
  • 오류가 발생하면 err에 오류 데이터가 들어가고 그렇지 않으면 err 변수의 값이 null이 된다.
  • 그러므로 일반적으로는 첫 번째 파라미터인 err가 null인지를 체크하는 코드를 사용한 후 문제가 없으면 파일 읽기에 성공한 것으로 처리한다.
  • 비동기식으로 읽는 코드의 결과는 다음과 같다.

  • 이번에는 파일에 데이터를 쓰는 기능을 작성해 만들어보겠다.

  • writeFile() 메소드는 첫번째 파라미터로서 파일 이름을 전달받고 두 번째 파라미터는 파일에 쓸 내용이고 세 번째는 작업이 끝나면 호출될 콜백 함수이다.
  • 작업 중 오류가 발생하면 콜백 함수로 오류 객체가 전달된다. 오류 객체가 null 값으로 전달되면 데이터 쓰기가 완료된 것이다.
Comments