파일 시스템(fs 모듈)과 콜백에 대해 궁금한게 있습니다.
274
작성한 질문수 28
fs 모듈 강좌중에 궁금한 점이 있어서 질문 올립니다. 일단 강좌중에 나온 코드 먼져 보시죠.
이하는 코드 입니다.
const fs = require('fs');
fs.writeFile('./writeme.txt', '글을 써주세요', (err)=>
{
if(err){
throw err;
}
fs.readFile('./writeme.txt', (err, data)=>{<p> if (err) {</p><p> throw err;</p><p> }</p><p> console.log(data);</p><p> console.log(data.toString());</p>
})
})```
위와 같은 코드라면 처음에 콜백시에 execution stack이 쌓이고, 실행은 거꾸로 된다고 하셨는데, 그렇다면 위에서도
fs.readFile(~~ 어쩌고 저쩌고 ~~ 콜백)이 fs.writeFile 보다 먼저 실행 되어야 하는거 아닌가요?
그렇다면 결국, 없는 파일을 불러와서 에러가 나와야 하는데...
이 부분이 잘 이해가 안갑니다. ㅜ.ㅜ
마찬가지로, 그다음에 나오는(콜백들을 이용해서 동기 방식처럼 구현하는 부분)에서도, 나중에 호출된 콜백들이 먼저 실행 되어야 하는거 아닌가요? ㅇ,.ㅇ;
답변 3
0
글로 설명하기 너무 힘드네요. 콜백과 같은 비동기는 다음과 같이 생각하시는 게 편합니다. 비동기는 "순서"의 문제입니다.
fs.writeFile();
fs.readFile();
writeFile의 콜백();
readFile의 콜백();
0
호출스택과 이벤트루프 예시로 실행 순서를 알려드리겠습니다.
- fs.writeFile이 호출스택에 들어갔다가 실행돼서 나가고, 백그라운드에 쓰는 작업이 전달됩니다.
- fs.readFile이 호출스택에 들어갔다가 실행돼서 나가고, 백그라운드에 읽는 작업이 전달됩니다.
- 백그라운드에서는 쓰는 작업이 먼저 될 것입니다(쓰는 와중에 읽기가 시작될 수도 있습니다).
- 다 쓰고 나면 writeFile의 콜백이 태스크큐에 들어갔다가, 이벤트루프에 의해 호출스택으로 불려와 실행되고,
- 읽은 후 readFile의 콜백이 태스크큐에 들어갔다가, 이벤트루프에 의해 호출스택으로 불려와 실행됩니다.
콜백은 그냥 호출스택에 쌓이지 않습니다. 이벤트루프를 거쳐야 하고요. 콜백은 태스크 큐에 들어온 순서 실행됩니다.
잘못 알고 계신 부분은 writeFile과 readFile이 둘 다 동시에 호출스택에 들어가있다고 생각하시는 부분입니다. 아래 코드를 첨부합니다.
fs.writeFile(); // 호출 스택에 writeFile이 들어감
// 이 상황에서 이미 fs.writeFile은 호출스택에서 빠져나옵니다(할 일을 다 했기 때문).
fs.readFile(); // 빈 호출스택에 readFile이 들어감
콜백을 이용해서 동기식으로 처리하는 게 가능한 이유는
fs.writeFile(() => { // 호출 스택에 writeFile()이 들어감
// writeFile이 나가고 writeFile 콜백이 이벤트루프를 거쳐 호출스택에 들어옴
fs.readFile(); // 호출스택에 writeFile 콜백이 있고, 그 위에 readFile이 쌓임
})
실제 서비스에서도 cluster를 사용하나요?
1
314
2
캐싱에 관하여
0
279
3
salt를 실무에서 사용할때 항상 randomBytes로 만들어줘야 하나요?
0
347
1
게시물 올리기 오류
0
408
1
캐슁 이후 로그인창
0
266
1
kakao passport 질문있습니다.
0
493
3
global객체 공유 질문드립니다.
1
418
1
서버가 죽어버리네요
0
1047
8
포링키 문제..
0
235
2
커넥션 플래시 설치문제
0
216
2
익스프레스 제너레이터? 설치문제
0
2586
6
redis 질문입니다.
0
305
1
9장 세션을 DB에 저장시 리다이렉션 오류 발생
0
874
8
프레임워크 선택에 관하여 질문이 있습니다.
0
300
3
시퀄라이즈 질문입니다 ! !
0
588
1
리뉴얼 강의 12강 socket.io에서 req.session접근 관련 질문
0
922
6
oAuth 질문입니다.
0
356
3
GCP 질문입니다.
0
366
1
Passport 모듈 로그인 구현관련
0
720
6
카카오 로그인 관련 질문입니다!!
0
606
4
스스로 해보기 10-16 nunjuncks 질문있습니다
0
499
5
제로초님 HTTP 완벽가이드 추천해주신거 너무 잘 읽었습니다.
0
317
2
gif채팅방 nunjucks관련 질문입니다!
0
338
3
현영님 몽고db관련 질문입니다.
0
233
3





