1. Node.js
Node.js는 비동기 이벤트 기반 JavaScript 런타임(실행환경)이다.
Node.js의 많은 API들은 비동기로 작성되어있다. => 동시 다발적인 업무 처리가 쉽기 때문에
💡 모듈 : 어떤 기능을 조립할 수 있는 형태로 만든 부분
1) Node.js 모듈 사용법
위의 링크에서 사용하고싶은 메서드를 찾아 읽고 사용할 수 있다.
(1) require
const fs = require('fs'); // 파일 시스템 모듈 불러오기
cosnt dns = require('dns'); // DNS 모듈 불러오기
JavaScript 파일 코드 최상단에 require 구문을 이용해 모듈 파일을 불러와서 사용한다.
(2) 서드 파티 모듈(3rd-party module) 사용하기
$ npm install [모듈이름]
서드 파티 모듈(3rd-party module)
해당 프로그래밍 언어에서 공식적으로 제공하는 빌트인 모듈(built-in module)이 아닌 모든 외부 모듈
npm install 로 설치 이후 Node.js의 다른 내장 모듈들처럼 require 구문을 사용해 불러올 수 있다.
2) Node.js 공식 문서 읽기
fs.readFile() 메서드의 기본 형태
fs.readFile(path[, options], callback)
- path <string> | <Buffer> | <URL> | <integer> filename or file descriptor : 파일 이름
- options <Object> | <string>
- encoding <string> | <null> Default: null
- flag <string> See support of file system flags. Default: 'r'.
- signal <AbortSignal> allows aborting an in-progress readFile
- callback <Function>
- err <Error> | <AggregateError>
- data <string> | <Buffer>
path : 파일 이름
options : 옵션. 추가할수도 있고 그렇지 않을 수도 있다. 문자열로 전달할경우 인코딩을 받을 수 있음.
객체형태로 받을 수도 있다.
callback : 콜백 함수 전달. 파일을 읽은 뒤 비동기적으로 실행됨.
콜백에는 err과 data 두가지 매개변수가 있다.
에러가 발생하지 않을 경우 err는 null이 되고 data에는 문자열이나 Buffer이라는 객체가 전달된다. data는 파일의 내용을 말한다. 인코딩이 지정되지 않은 경우 Buffer 객체로 전달됨으로 인코딩을 지정해줘야 문자열로 판단한다.
공식문서를 토대로 작성한 코드
const fs = require('fs');
fs.readFile('test.txt', 'utf8', (err, data) => {
if (err) {
throw err; // 에러를 던짐
}
console.log(data);
});
2. 비동기 복습(Promise, async / await)
Promise가 가진 두개의 파라미터, resolve와 reject의 의미?
프로미스의 콜백함수가 성공하면 resolve 호출, 실패하면 reject 호출
resolve, reject 함수에는 전달인자를 넘길 수 있다. 이 전달인자는 어떻게 사용할수있나?
resolve 호출시에는 then 메서드를 사용해서 결과값에 접근, reject 호출시에는 catch 메서드를 이용해서 결과값에 접근
new Promise()를 통해 생성한 Promise 인스턴스에 존재하는 메서드들과 용도?
then - resolve 함수가 호출되었을때 result 값에 접근
catch - reject 함수가 호출되었을때 result 값에 접근
finally - Promise 인스턴스의 콜백함수의 정상작동여부와 관계없이 실행됨
Promise.prototype.then이 리턴하는 것?
프로미스 객체를 리턴한다. 또는 프로미스가 아닌 값을 리턴하기도 한다.
then에서 리턴하는 값이 프로미스 객체일 경우, 다음 then으로 해당 프로미스 객체의 resolve 값을 인자로 넣을 수 있다.
값의 경우에는 그 값이 다음 then의 인자가 될 수 있다.
Promise.prototype.catch가 리턴하는 것?
프로미스 객체를 리턴한다.
프로미스가 실패했을때 reject로 전달되는 값이나 리턴되는 프로미스 객체를 전달한다.
Promise의 3가지 상태?
기본상태 : 대기(pending) / 성공 : 이행(fulfilled) / 실패 : 거부(rejected)
await 키워드 다음에 등장하는 함수는 어떤 타입을 리턴하나?
프로미스 객체를 리턴. 만약 await 키워드 다음에 나오는 함수가 프로미스가 아닐경우 해당 함수를 resolved promise(주어진 값으로 이행하는 Promise.then 객체)로 변환한다.
await 키워드 사용할 경우, 어떤 값이 리턴되나?
프로미스 객체의 result의 값. 성공시에는 resolve, 실패시에는 reject.
***********************
일일 회고 겸 요약정리
Node.js는 비동기 이벤트 기반 JavaScript 런타임이다.
Node.js의 내장 모듈을 사용하기 위해서는 JavaScript 파일의 최상단에 require 구문을 통해 원하는 모듈 파일을 불러와야한다.
서드 파티 모듈의 경우에는 npm install로 설치 후 require 구문을 통해 불러올 수 있다.
Node.js는 공식문서가 존재함으로 문서를 잘 읽고 메서드들을 사용할 수 있다.
오늘은 node.js와 프로미스, async/await에 대해서 공부하고 복습했다.
비동기 부분은 많은 사람들이 어려워하는 부분이라고 하던데, 나도 너무너무 어렵다...ㅠㅠㅠㅠ
나름대로 debugger를 찍어가면서 하나하나 따라가보고는 있지만 어떻게 작동하는지를 정확하게 안다고 하지는 못하겠다.
지금 과제도 프로미스와 관련된 내용인데, 왜 이렇게 해야하는지 이해가 안된다... 그래도 자기 전까지 좀 더 해보고 자려고!
'study > TIL' 카테고리의 다른 글
23.01.20 - React 기초 (0) | 2023.01.20 |
---|---|
23.01.19 - fetch, axios (0) | 2023.01.19 |
23.01.17 - 비동기 (0) | 2023.01.17 |
23.01.16 - 프로토타입 체인 (0) | 2023.01.16 |
23.01.13 - 클래스와 인스턴스, 객체 지향 프로그래밍, 프로토타입과 클래스 (0) | 2023.01.13 |