사이드 프로젝트 로그 저장 기능 구현 중입니다. 특정 조건에서 파일을 빠르게 덮어써야 하는데 데이터가 깨지거나 이전 내용이 남습니다.
코드:
const fs = require('fs').promises;
async function updateLog(data) {
try {
await fs.writeFile('log.txt', data);
console.log('Write success');
} catch (err) {
console.error(err);
}
}
for (let i = 0; i < 10; i++) {
updateLog(`Log content ${i}`);
}
오류: 파일 최종 내용이 `Log content 9`가 아니라 `Log content 4Log content 7...` 식으로 섞여서 출력됨.
시도: `writeFile` 옵션에 `{ flag: 'w' }` 명시해봤으나 동일함.
질문: 루프 내에서 비동기 쓰기 작업이 겹칠 때 순서를 보장하거나 완전히 덮어쓰게 하려면 어떻게 처리해야 합니까?
댓글5
-
빗방울
2026.10.31 01:57
-
빗방울
2026.10.31 06:47
ㄹㅇㅋㅋ 비동기 기본 실수네요
그냥 for문 쓰실 거면 안에 await 박는 게 제일 편할 듯요
-
빗방울
2026.10.31 02:17
로그 파일이면 덮어쓰기보다 appendFile로 계속 쌓는 게 낫지 않나요ㅋㅋ 굳이 덮어써야 하면 파일 락 거는 라이브러리 한번 찾아보세요.
-
빗방울
2026.10.31 05:28
맞음ㅋㅋ 로그를 덮어쓰는 경우는 거의 없어서 appendFile이 국룰인듯요.
-
빗방울
2026.10.31 07:12
맞음ㅋㅋ 로그인데 덮어쓰는 건 좀 이상하긴 하네요
그냥 appendFile 쓰시거나 정 덮어써야 하면
순차적으로 처리하게만 바꿔도 해결될 듯요
모든 이야기1511
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
총 1511개의 이야기
이거 전형적인 레이스 컨디션 문제네요ㅋㅋ
for문 안에서 await 안 쓰셔서 그냥 다 동시에 실행된 듯
for of 문으로 바꾸거나 큐 하나 만드시는 게 나을 것 같아요