배가 튀어나온 홍학님의 면접 결과

0

총점

3

질문 수

0

좋아요

24

조회수

종합 평가

React의 라이프사이클에 대해서는 mount, update, unmount의 전체 흐름과 각 단계의 특징, 그리고 함수형 컴포넌트에서의 useEffect 활용까지 체계적으로 잘 설명해주셨고, 특히 cleanup의 필요성과 메모리 누수 방지의 중요성을 정확히 이해하고 계신 점이 인상적이었습니다. 다만 JavaScript의 가비지 컬렉터 동작 원리나 참조 카운팅, Mark-and-Sweep 같은 저수준 메모리 관리 알고리즘에 대한 이해가 부족한 것으로 보이며, 이는 프론트엔드 개발에서도 성능 최적화를 위해 중요한 기초 지식입니다. 앞으로 JavaScript 엔진의 내부 동작 방식, 특히 V8 엔진의 가비지 컬렉션 메커니즘과 메모리 힙 구조에 대해 학습하시고, 실제 브라우저 개발자 도구를 통해 메모리 프로파일링을 해보시면서 이론과 실무를 연결해보시길 권합니다.

질문별 상세 분석

커뮤니티 공개
Q1B

리액트의 라이프사이클에 대해 설명해주세요.

응답 내용

컴포넌트의 생명 주기를 나타내며 생성 (mount), 업데이트 (update), 제거(unmount)의 단계를 거칩니다. 생성 단계는 컴포넌트가 최초로 DOM에 추가가 되는 단계를 말하며 초기 state를 설정하거나 API 호출을 통해 데이터를 불러옵니다. 업데이트 단계는 컴포넌트를 리렌더링하는 단계입니다, 이 때에는 변경된 데이터에 따라 업데이트된 컴포넌트를 화면에 다시 그립니다. state, props가 변경되거나 부모 컴포넌트가 리렌더링 될 때 발생할 수 있습니다. 마지막으로 제거 단계에서는 컴포넌트가 화면에서 더 이상 보이지 않아 DOM에서 제거되는 단계입니다. 페이지가 전환되거나 조건부 렌더링을 통해 컴포넌트가 보이지 않을 때 실행이 됩니다. 이 때에는 cleanup 과정을 거쳐야 합니다. 메모리 누수가 발생할 수 있어 setTimeout같은 타이머나 이벤트 리스너 제거 등을 수행합니다. 클래스형 컴포넌트에서는 단계마다 componentdidmount, componentdidupdate, componentwillunmount등의 메서드가 호출되었고, 함수형 컴포넌트에서는 useEffect를 이용하여 모든 단계에 할 일을 작성할 수 있습니다.

AI 피드백

리액트 라이프사이클의 핵심 개념인 mount, update, unmount 단계를 명확하게 설명해주셨고, 각 단계에서 일어나는 작업들과 클래스형/함수형 컴포넌트에서의 구현 방법까지 포괄적으로 답변해주신 점이 매우 좋았습니다. 특히 cleanup 과정의 중요성과 메모리 누수 방지를 위한 구체적인 예시(setTimeout, 이벤트 리스너)를 언급해주신 것도 실무적 관점에서 훌륭했습니다. 다만 함수형 컴포넌트에서 useEffect의 의존성 배열 활용이나 cleanup 함수 반환 방식과 같은 구체적인 구현 방법을 추가로 설명해주시면 더욱 완성도 높은 답변이 될 것 같습니다. 앞으로는 Hook의 의존성 배열과 cleanup 패턴에 대해 더 깊이 학습해보시기를 추천드립니다.

Q2B

useEffect에서 cleanup 함수는 어떤 원리로 메모리 누수를 방지하나요?

응답 내용

참조를 끊어 JS의 가비지컬렉터 대상이 되게 한다 정도로만 알고 있습니다

AI 피드백

cleanup 함수가 참조를 끊어서 가비지 컬렉터의 대상이 되도록 한다는 기본적인 이해는 좋습니다. 하지만 더 구체적으로 설명하면, cleanup 함수는 컴포넌트가 언마운트되거나 의존성이 변경될 때 실행되어 이전에 등록한 이벤트 리스너, 타이머, 구독 등을 명시적으로 제거하는 역할을 합니다. 예를 들어 `addEventListener`로 등록한 리스너를 `removeEventListener`로 제거하거나, `setInterval`로 생성한 타이머를 `clearInterval`로 정리하는 것이 대표적입니다. 이러한 리소스들이 정리되지 않으면 컴포넌트가 사라진 후에도 메모리에 남아있게 되어 메모리 누수가 발생하므로, cleanup 함수의 구체적인 동작 방식과 실제 사용 예시를 더 학습해보시기 바랍니다.

Q3F

JavaScript의 가비지 컬렉터는 어떤 알고리즘을 사용해서 참조가 끊어진 객체를 메모리에서 제거하나요?

응답 내용

모르겠네용

AI 피드백

솔직하게 모른다고 답변해주신 점은 정직한 태도로 좋았습니다. JavaScript의 가비지 컬렉터는 주로 Mark-and-Sweep 알고리즘을 사용하는데, 이는 루트 객체부터 시작하여 참조 가능한 모든 객체를 마킹(mark)하고, 마킹되지 않은 객체들을 메모리에서 제거(sweep)하는 방식입니다. 최신 JavaScript 엔진들은 성능 최적화를 위해 Generational GC, Incremental GC 등의 고급 기법들도 함께 사용합니다. 앞으로 메모리 관리와 가비지 컬렉션 알고리즘에 대해 학습하시면 JavaScript의 메모리 관리 원리를 더 깊이 이해하실 수 있을 것입니다.

커뮤니티 공유 안내

• 이 결과는 AI가 분석한 내용이며, 학습 목적으로 커뮤니티에 공유됩니다.

• 좋아요를 눌러 유용한 답변에 반응을 남겨보세요.

• 개인정보는 포함되지 않으며, 면접 연습 개선을 위한 참고 자료로 활용됩니다.