그알것 — 그럼에도 알아야 할 것들
홈질문커뮤니티
로그인
그알것 — 그럼에도 알아야 할 것들

Service

  • 홈
  • 소개
  • 질문
  • 커뮤니티

My

  • 내 워크스페이스
  • 저장한 질문
  • 작성한 답변

Policy

  • 이용약관
  • 개인정보처리방침
  • 문의

© 2026 그알것 · What Still Matters

질문 목록React
React

리액트에서 index를 key값으로 사용하면 안되는 이유에 대해서 설명해주세요

실무4/5
설계4/5
인간3/5
기초3/5

면접관의 질문 의도

key를 "리스트 렌더 경고 끄기 위한 prop"으로 아는지, 재조정(reconciliation)에서의 정체성 매핑까지 잡는 사람인지를 가른다.

큐레이션 답변

학습 자료

React의 key는 리스트 아이템의 _정체성_을 알려주는 식별자라, 재렌더 시 어떤 엘리먼트가 어떤 컴포넌트 인스턴스에 매핑되는지를 결정한다. index를 key로 쓰면 데이터는 같은데 위치가 바뀐 경우(삽입·삭제·정렬) 같은 데이터가 다른 key를 갖게 되어, React는 "새 항목이 들어왔다"가 아니라 "기존 컴포넌트 내용이 바뀌었다"로 잘못 본다. 그 결과 행의 useState 값, 포커스, 애니메이션이 다른 행으로 옮겨붙거나 사라진다. 정렬/필터링이 없는 _완전 고정 리스트_가 아니라면 서버 ID나 도메인 고유값을 key로 써야 안전하다.

좋은 답변 구조

  1. 01key는 리스트 아이템의 _정체성 식별자_라는 정의와 판단 축을 짚는다
  2. 02안정 ID 사용·index 사용 두 대안의 이점·한계를 reconciliation 동작과 함께 설명한다
  3. 03정렬·삽입·삭제가 일어나는지에 따라 결론이 바뀌는 조건을 정리한다
  4. 04정적 리스트·도메인 ID 없는 임시 데이터 같은 예외와 팀 기준으로 마무리한다

자주 실수하는 포인트

key를 "경고 끄려고 붙이는 prop" 정도로 이해하고 아무 값이나 넣는다
정렬/삽입이 있는 리스트에서도 index를 그대로 쓴다
Math.random()/UUID를 렌더마다 새로 만들어 매번 새 컴포넌트로 인식시킨다
key가 같으면 useState/포커스가 보존된다는 사실을 모른다

실무 맥락

  • 행마다 input/체크박스가 있는 편집 가능한 테이블에서 정렬을 토글하는 화면
  • 드래그앤드롭으로 순서를 바꾸는 리스트에서 컴포넌트 상태/애니메이션을 유지해야 하는 경우
  • 서버 응답에 안정 ID가 없어 key 후보를 도메인에서 합성해야 하는 데이터

본인 경험에 녹이는 힌트

정렬 토글 후 다른 행의 입력값이 옮겨붙는 버그를 잡아본 적이 있다면 key→정체성 이야기로 자연스럽게 풀 수 있다

ID가 없는 데이터에서 도메인 필드를 조합해 안정 key를 만든 적이 있다면 그 선택 기준을 답변 후크로 쓸 수 있다

DnD 라이브러리에서 key 전략을 바꿔 애니메이션을 살린 경험이 있다면 컴포넌트 보존과 연결할 수 있다

커뮤니티 인기 답변

전체 0개

아직 공개된 답변이 없어요. 첫 공개 답변을 남겨보세요.

관련 꼬리 질문

Q1index key를 써도 괜찮은 예외적인 상황은 언제인가요
Q2UUID를 렌더마다 생성하면 왜 문제가 되나요
Q3정렬 가능한 리스트에서 key 전략은 어떻게 가져가나요
아직 답을 쓰지 않았어요.
큐레이션 답변과 다른 사람 답변을 보고, 자기 언어로 답을 정리해보면 학습 효과가 가장 큽니다.
목차
  • 01면접관의 질문 의도
  • 02큐레이션 답변
  • 03좋은 답변 구조
  • 04자주 실수하는 포인트
  • 05실무 맥락
  • 06본인 경험에 녹이는 힌트
  • 07커뮤니티 인기 답변준비중
  • 08관련 꼬리 질문