readFile, readFileSync 함수

맛없는콩두유·2023년 2월 13일
0
post-thumbnail
  • readFile 함수(비동기 실행 함수)와
  • readFileSync 함수(동기 실행 함수)에 대한 설명을 Node.js 공식 홈페이지에서 직접 찾아보면서 그 개념을 다시 복습해봅시다.

1. readFile 함수

먼저 readFile 함수를 보겠습니다.

비동기 함수인 readFile 함수를 보면 다음과 같은 총 세 개의 인자가 필요한데요.

(1) path : 내용을 읽을 파일의 경로

(2) options : 파일의 내용을 읽을 때 적용할 옵션

(3) callback : 파일의 내용을 다 읽었을 때 실행될 콜백

이때 (1),(3)이 필수 인자이고, (2)는 넣어도 되고 안 넣어도 되는 선택적인 인자입니다. 선택적인 인자는 맨 위에 보이는 [,options]처럼 대괄호 안에 쓰여 있는데요. 저는 파일 내용을 utf-8이라는 인코딩으로 읽기 위해 이전 영상에서 options 인자로, 'utf8'이라고 썼던 것, 기억나시죠?(인코딩이라는 건 컴퓨터에서 1과 0의 조합을 봤을 때, 어떤 문자로 해석해야 할지에 관한 기준을 의미합니다, utf8은 여러 인코딩 중에서도 프로그래밍 세계에서 거의 표준에 가까운 인코딩입니다) 지금 설명을 보면, options 인자로 { 'encoding' : 'utf8', 'flag' : 'r' }' 이런 식의 객체(Object)를 넣어도 되는데요. 정말로 그런지 직접 실험해보세요. 참고로 flag는 파일을 열 때, 그 파일의 내용을 읽기 위한 목적으로 여는지, 파일에 내용을 새로 추가하거나 덧붙이기 위해서 여는지 등을 나타내는 일종의 모드를 지정하기 위해 씁니다. options 인자는 지금 당장 중요한 내용은 아니니까 이 정도만 설명하고 넘어갈게요.

자, 여기서 중요한 인자는 (3) callback인데요. callback의 구조를 보면 이렇게 생겼습니다.

(err, data) => {
  // 함수 내용
}

지금 콜백이 Arrow Function의 형태로 쓰여 있는데요. 파일 읽기가 완료되면, 이 콜백이 실행되면서 data 인자로 파일의 내용이 전달됩니다. 그리고 파일을 읽다가 만약 에러가 발생하면(파일이 존재하지 않는 경우나, 작업 도중 컴퓨터에 이상이 생긴 경우 등) err 인자로 해당 에러 정보를 담은 객체가 전달됩니다. 참고로, Node.js에서 많은 콜백은 일반적으로 err 인자를 첫 번째 인자로 두고, data와 같이 작업 결과를 나타내는 인자를 더 뒤에 둡니다. 알아두면 유용한 규칙이니까 잘 기억해주세요. 그리고 콜백의 err 인자는 error, problem 등의 이름으로 써도 되고, data는 result, output 등의 이름으로 써도 코드 실행에는 문제가 없습니다. 이런 식으로 말이죠.

(error, result) =>{
  // 함수 내용
}

중요한 것은 어차피 인자의 순서니까요. 하지만 이렇게 순서를 잘못 써버리면

(result, error) =>{
  // 함수 내용
}

result에 에러 정보가 들어오고, error에 작업 결과가 들어와서 코드를 작성할 때 혼동이 생길 수 있습니다. 따라서, 인자 순서에 알맞은 단어를 썼는지 항상 확인해줘야 합니다.

2. readFileSync 함수

이제 readFileSync 함수를 살펴보겠습니다.

readFileSync 함수는 readFile 함수와 반대로 동기 실행되는 함수입니다. 이전 영상에서 배웠죠? 지금 설명을 보면 인자에 콜백이 없고, (1) path, (2) options 인자만 있네요. 그리고 마지막 줄에 지금, '자세한 설명은 readFile 함수 설명 부분을 참고하라'고 쓰여 있구요. 이것 외에 딱히 특별한 내용은 없습니다.

앞으로 Node.js에서 프로그래밍을 할 때는 비동기 함수를 주로 사용하게 될 겁니다. 간혹 초기화 코드 등에서는 동기 함수를 써야만 하는 경우도 있지만 그런 경우에는 따로 언급해드릴게요. 방금 본 readFile 함수와 readFileSync 함수는 fs라는 코어 모듈의 함수인데요. fs 코어 모듈 안의 함수들은 이렇게 비동기 함수가 있으면, 비동기 함수의 이름 뒤에 Sync가 붙은 동기 함수도 쌍으로 존재하는 경우가 많습니다. 직접 공식 문서로 들어가서 한번 확인해보세요!

profile
하루하루 기록하기!

0개의 댓글