개요: db의 데이터를 순차적으로 변경하는 작업을 진행하는 중, 똑같은 로직이지만 forEach문은 안되고 for of 문은 되는 경우가 발생했다.
forEach와 for of 의 차이점
1. 호출 스택과 콜백 함수 오버헤드
- forEach: 콜백 함수를 인자로 받아 각 요소에 대해 실행시긴다. 각 요소마다 함수를 호출하므로, 함수 호출의 오버헤드가 발생할 수 있다. (대량의 db 데이터를 변경하는 작업을 진행하면, 오버헤드 때문에 메모리 에러가 날 우려가 있음.)
- for of: 반복하는 동안 함수 호출이 발생하지 않는다. 따라서 함수 호출 오버헤드가 발생하지 않는다.
- 오버헤드란?: 오버헤드는 어떤 프로세스를 실행하는 데 필요한 추가적인 비용이나 부담을 얘기한다. 주로 시스템 리소스(시간, 메모리, 프로세서등)를 소비하는 부가적인 작업을 말한다.
2. 반복 가능한 객체의 종류
- forEach: 배열(array)에 대해서만 사용할 수 있다.
- for of: 반복 가능한(iterable) 객체에 모두 사용할 수 있다.
3. 중단 가능 여부
- forEach: forEach는 루프를 중단할 수 없다. 중단을 원한다면 내부 함수에 return문을 사용해야 함
- for of: for or는 루프를 중단할 수 있다. 'break'문을 이용
여기서 강조하고 싶은 부분은 1번 (호출 스택과 콜백 함수 오버헤드)인데, 큰 데이터를 가진 db를 순차적으로 변경하는 작업은 그만큼 리소스에 추가적인 비용과 부담이 많이 들고, 그로 인해 리소스 에러가 나타났다. 이를 해결하 기 위한 작업으로 forEach문을 for of 로 변경하여, 에러를 없애고 작업을 진행 할 수 있었다.
'Node js' 카테고리의 다른 글
[node.js] fcm을 이용해서 기기에 푸쉬 알림 만들기 (0) | 2024.11.14 |
---|---|
[Node.js] 크론 표현식 (0) | 2024.03.04 |
[Node.js] api 요청하기 위해 local서버 열기 (0) | 2024.02.20 |
[Node.js] fs에 대하여 (File System) (1) | 2023.05.26 |
댓글