백엔드 개발 · 심화
Node.js 애플리케이션에서 메모리 누수가 발생하는 주요 원인들과 Heap Dump 분석을 통한 디버깅 방법을 설명해주세요.
힌트 · 클로저, 이벤트 리스너, 캐시 등이 주요 원인이며, --inspect 플래그와 Chrome DevTools로 분석 가능합니다.
가비지 컬렉션클로저이벤트 리스너Heap Dump메모리 프로파일링
모범답안
Node.js 애플리케이션에서 메모리 누수는 가비지 컬렉션이 더 이상 사용하지 않는 메모리를 회수하지 못할 때 발생합니다. 주요 원인으로는 첫째, 클로저를 잘못 사용하여 외부 스코프의 변수를 계속 참조하는 경우입니다. 둘째, 이벤트 리스너를 등록만 하고 해제하지 않아 메모리에 계속 남아있는 경우, 특히 서버나 데이터베이스 연결과 관련된 리스너가 그렇습니다. 셋째, 캐시를 사용할 때 만료 설정을 제대로 하지 않아 메모리가 계속 증가하는 경우도 있습니다.
Heap Dump 분석은 이러한 메모리 누수를 디버깅하는 효과적인 방법입니다. Node.js를 --inspect 플래그로 실행하고 Chrome DevTools를 사용하여 Heap Dump를 생성하고 분석할 수 있습니다. DevTools를 통해 객체의 크기, 참조 관계 등을 파악하여 메모리 누수의 원인을 찾아낼 수 있습니다. 예를 들어, 특정 객체가 예상보다 많이 생성되었거나, 해제되지 않고 계속 유지되는 것을 확인할 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 Node.js 면접 질문
- Node.js에서 Buffer 객체의 용도와 문자열과의 차이점을 설명해주세요.
- Node.js의 Event Loop가 멀티코어 시스템에서 CPU 집약적 작업을 처리할 때의 한계점과 이를 해결하기 위한 Worker Threads의 내부 동작 원리를 설명해주세요.
- Express.js에서 미들웨어 체인이 비동기 에러를 처리할 때 발생할 수 있는 문제점과 async/await 환경에서의 에러 핸들링 전략을 설명해주세요.
- Node.js의 Cluster 모듈과 PM2의 차이점, 그리고 로드 밸런싱 알고리즘별 특성을 비교하여 설명해주세요.
- Node.js에서 Stream의 backpressure 현상이 발생하는 원인과 Transform Stream에서 이를 해결하는 방법을 설명해주세요.
- Express.js에서 대용량 파일 업로드 시 발생할 수 있는 성능 이슈와 Multer의 메모리/디스크 저장 전략을 설명해주세요.