🔥 프론트엔드 개발 면접 정리: JavaScript, React, TypeScript, Next.js, 성능 최적화 총정리
2025. 2. 28. 16:26ㆍ프론트엔드/Next JS
728x90
📌 1. JavaScript 면접 질문 & 답변
✅ Q1. JavaScript의 실행 컨텍스트(Execution Context)란?
- **실행 컨텍스트(Execution Context)**는 JavaScript 코드가 실행될 때 생성되는 환경이다.
- Call Stack을 사용해 실행 컨텍스트를 관리하며, 함수 실행이 끝나면 스택에서 제거된다.
📌 실행 컨텍스트의 구성 요소
- 전역 실행 컨텍스트 (Global Execution Context) → 코드 실행 시 가장 먼저 생성됨
- 함수 실행 컨텍스트 (Function Execution Context) → 함수가 실행될 때마다 새로운 실행 컨텍스트 생성
- 콜 스택(Call Stack) → 실행 컨텍스트를 관리하는 데이터 구조 (LIFO, 후입선출)
✅ Q2. JavaScript는 싱글 스레드인가요?
- JavaScript는 싱글 스레드 기반으로 동작한다.
- 하지만, 비동기 처리(setTimeout, Promise, async/await)를 통해 이벤트 루프(Event Loop)를 활용하여 효율적으로 동작한다.
📌 비동기 예제
console.log("Start");
setTimeout(() => console.log("Async Task"), 1000);
console.log("End");
📌 출력 결과
Start
End
(1초 후) Async Task
👉 싱글 스레드이지만 비동기 처리를 통해 여러 작업을 효과적으로 수행할 수 있다.
📌 2. React 면접 질문 & 답변
✅ Q3. React의 Virtual DOM이란?
- **Virtual DOM(가상 DOM)**은 실제 DOM을 조작하기 전에 변경 사항을 메모리에 저장하고, 최소한의 업데이트만 실제 DOM에 반영하는 방식이다.
- React는 Virtual DOM을 사용하여 불필요한 렌더링을 줄이고 성능을 최적화한다.
📌 Virtual DOM 동작 과정
- 상태(State)가 변경되면 새로운 Virtual DOM이 생성된다.
- 이전 Virtual DOM과 새로운 Virtual DOM을 비교(diffing)한다.
- 변경된 부분만 실제 DOM에 적용한다 (Reconciliation).
✅ Q4. React에서 key 속성이 중요한 이유는?
- React에서 리스트를 렌더링할 때 key를 사용하면 성능이 최적화된다.
- key는 리스트가 변경될 때 React가 빠르게 비교(diffing)하는 기준이 된다.
- 배열의 index를 key로 사용하면, 중간 요소가 추가될 때 성능 저하 발생 가능.
📌 올바른 key 사용 예제
const items = [
{ id: "a1", name: "Item A" },
{ id: "b2", name: "Item B" },
{ id: "c3", name: "Item C" },
];
return (
<ul>
{items.map((item) => (
<li key={item.id}>{item.name}</li> // ✅ 고유한 ID 사용
))}
</ul>
);
📌 3. TypeScript 면접 질문 & 답변
✅ Q5. interface와 type의 차이는?
특징 interface type
| 확장 가능 여부 | ✅ extends 사용 가능 | ❌ & 사용 필요 |
| 선언 병합 | ✅ 가능 | ❌ 불가능 |
| 유니온 타입 | ❌ 불가능 | ✅ 가능 |
📌 예제
interface Person {
name: string;
age: number;
}
type Status = "success" | "error" | "loading";
📌 4. Next.js 면접 질문 & 답변
✅ Q6. getServerSideProps와 getStaticProps의 차이는?
비교 항목 getServerSideProps (SSR) getStaticProps (SSG)
| 실행 시점 | 매 요청 시 실행 | 빌드 시 한 번 실행 |
| 속도 | 느림 (실시간 서버 요청) | 빠름 (정적 HTML 제공) |
| 데이터 갱신 | 실시간 반영 가능 | 빌드 후 변경 어려움 (ISR 사용 가능) |
📌 ISR (Incremental Static Regeneration) 적용 예제
export async function getStaticProps() {
const res = await fetch("https://api.example.com/posts");
const data = await res.json();
return {
props: { posts: data },
revalidate: 60, // 60초마다 갱신
};
}
✅ ISR을 사용하면 정적 페이지도 일정 주기로 업데이트 가능!
📌 5. 웹 성능 최적화 면접 질문 & 답변
✅ Q7. 웹 성능을 향상시키기 위한 방법은?
- 네트워크 최적화 → 이미지 최적화(WebP), CDN 사용, Gzip 압축
- 렌더링 최적화 → React.memo, useMemo, useCallback 사용
- 데이터 최적화 → React Query, GraphQL 활용
- UX 최적화 → Lazy Loading, Preload 적용
📌 React Query로 API 캐싱 적용
import { useQuery } from "@tanstack/react-query";
const fetchData = () => fetch("https://api.example.com/data").then(res => res.json());
const Component = () => {
const { data, isLoading } = useQuery(["data"], fetchData);
if (isLoading) return
Loading...
;
return
{data.title}
;
};
🔥 결론
✅ JavaScript 실행 컨텍스트, 싱글 스레드 개념 정리
✅ React의 Virtual DOM, key 속성의 중요성 이해
✅ TypeScript의 interface vs type 차이 구분
✅ Next.js의 SSR(getServerSideProps) vs SSG(getStaticProps) 차이 이해
✅ 웹 성능 최적화 및 React 렌더링 최적화 기법 숙지
728x90
'프론트엔드 > Next JS' 카테고리의 다른 글
| Next.js 서버 사이드 렌더링(SSR) 예제 분석 (3) | 2025.02.28 |
|---|---|
| 프로그래머스 코드챌린지: 서버 증설 횟수 최적화 분석 (1) | 2025.02.28 |
| cacheTime VS staleTime (2) | 2025.02.27 |
| 🚀 React Query를 활용한 API 요청 최적화 (2) | 2025.02.27 |
| useLocation 상세 설명 (1) | 2025.02.26 |