개발자
fs.readFile(파일명,'utf8', function(err, data){}) 이런식의 비동기함수를 처리하는 callback함수가 있다고 할때 질문이 두가지가 있습니다. 1. 첫번째는 error고 두번째는 무조건 data가 오도록 한건 fs.readFile을 만든 개발자 마음인거죠? 이건 제가 변경할 수 없죠? 2. 위의 함수는 파일이 제대로 읽어질때까지(파일이 없다면 안읽어질때까지) 기다렸다가 callback 함수가 실행될텐데요. 대체 내부적으로 어떻게 구현이 되어있길래. 기다려주는건가요? 당연히 setTimeout을 쓰진 않겠지만, 내부적으로 setTimeout처럼 뭔가를 기다려주게 코드를 짜놓은건가요?
답변 1
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2023년 10월 02일
1. 예, `fs.readFile` 함수의 콜백 함수는 첫 번째 파라미터로 에러 객체를 받고 두 번째 파라미터로 데이터를 받게 되어 있습니다. 이 구조는 Node.js에서 정해진 규칙으로 변경할 수 없습니다. 이 패턴은 "Error-first Callback"이라고 불리며, Node.js에서 비동기 작업을 다룰 때 널리 사용됩니다. 2. 자바스크립트는 싱글 스레드 언어입니다. 따라서 기본적으로 하나의 작업이 완료될 때까지 대기하는 것은 불가능합니다(그렇게 되면 아무것도 못하게 됩니다). 따라서 자바스크립트는 이벤트 드리븐 모델을 갖고 있습니다. 파일 읽기 작업을 시작하면 Node.js는 그 작업을 OS에 위임한 후, 바로 다음 태스크를 실행합니다(Node.js는 Non-Blocking I/O 모델을 따릅니다). 그래서 프로그램은 계속 진행될 수 있습니다. OS가 파일 읽기 작업을 마치면 Node.js에 알려줍니다(이벤트를 발생시킵니다). 여기서 Node.js의 Event Loop가 동작하는데, 이벤트 큐에 있는 작업들(여기선 파일 읽기 완료 이벤트)을 하나씩 꺼내어 콜백 함수를 호출합니다. 따라서 `fs.readFile`이 내부적으로 '기다리는' 것은 아니라, OS가 작업을 완료하면 알려주는 방식입니다. 이런 처리 방식 덕분에 Node.js는 비동기 작업을 효율적으로 다룰 수 있습니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!