AI 보이는 추론 실험실

카드를 추가했는데 두 목록의 길이는 왜 다를까요?

같은 요소를 찾았어도 검색 결과의 갱신 방식은 다릅니다. 실제 DOM에 카드를 붙이고 정적 목록과 실시간 목록을 비교합니다.

탐구게시 2026-10-25읽기·실험 약 11분확인 문제 2개규칙 기반 실행한국논리학협회 자체 제작제작·검수 LTCT 편집부

개발자가 카드 두 개 옆에 새 카드를 놓고, 작은 공식 올리가 빈 카드를 두 날개로 들고 한 발을 내딛는 장면
주제 이해를 돕는 AI 생성 연출 사진 · 주제 이해를 돕기 위한 AI 생성 이미지 · LTCT 자체 제작
오늘의 질문

처음에 찾은 카드 두 개에 새 카드를 붙였습니다. 화면은 세 개인데 querySelectorAll 결과는 왜 계속 두 개일까요?

카드 추가 후 기존 정적 목록 2개와 현재 실시간 목록 3개가 달라지는 과정
카드 추가 후 기존 정적 목록 2개와 현재 실시간 목록 3개가 달라지는 과정 · 한국논리학협회 자체 제작
그림 크게 보기 ↗
01

같은 카드를 찾았는데 어떤 차이가 있나요?

웹페이지의 카드 두 개에 같은 class를 붙였다고 합시다. querySelectorAll('.card')와 getElementsByClassName('card')를 실행하면 처음에는 둘 다 같은 두 요소를 찾습니다. 중요한 차이는 그다음에 문서가 바뀔 때 나타납니다.

querySelectorAll의 결과는 검색 당시 일치한 요소들을 담은 정적인 NodeList입니다. getElementsByClassName의 결과는 현재 조건을 계속 반영하는 실시간 HTMLCollection입니다. 검색 조건이 같아도 목록의 갱신 방식이 같지는 않습니다.

참고 · MDN Web Docs — 정적 검색 목록 ↗

02

카드를 붙인 직후에는 무엇이 보이나요?

‘목록 캡처’를 누르면 지금 있는 두 카드를 검색한 결과를 보관합니다. 이어서 ‘카드 추가’를 누르면 실제 createElement와 append로 DOM 요소를 하나 붙입니다. 화면의 카드 수와 실시간 목록 길이는 3이지만 기존 정적 목록 길이는 2입니다.

기존 정적 목록이 다시 계산되지는 않습니다. ‘새로 검색’을 누르면 현재의 세 카드를 담은 별도 정적 목록을 만들 수 있습니다. 처음 결과와 새 결과를 함께 남겨 두면 어느 시점의 검색인지 명확해집니다.

참고 · MDN Web Docs — 실시간 클래스 목록 ↗

03

정적인 목록의 요소도 바뀔 수 있나요?

정적인 목록은 요소 구성원이 고정된다는 뜻입니다. 처음 목록의 첫 카드에 적힌 글자를 바꾸면 그 목록으로 읽는 글자도 달라집니다. 목록이 보관한 것은 카드의 옛 사진이 아니라 같은 DOM 요소에 대한 참조이기 때문입니다.

활동에서 ‘첫 카드 글자 바꾸기’를 누르면 화면의 첫 카드와 처음 목록이 가리키는 첫 카드의 글자가 함께 달라집니다. ‘정적’이라는 말을 문서 전체가 얼어붙는다는 의미로 확대하면 안 됩니다.

참고 · WHATWG — DOM 목록의 표준 ↗

04

클래스를 지우면 목록은 어떻게 달라지나요?

‘마지막 카드의 class 제거’를 누르면 카드 요소 자체는 남아 있지만 검색 조건에서 빠집니다. 실시간 목록은 곧바로 줄어들고, 이미 캡처한 정적 목록의 길이는 유지됩니다. 화면에서는 검색 대상에서 제외된 카드도 구별해 보여 줍니다.

실시간 목록을 앞에서부터 돌면서 요소를 삭제하면 다음 요소가 앞으로 당겨집니다. 인덱스만 올리면 하나를 건너뛸 수 있으므로 순회 중 목록이 바뀌는지 주의해야 합니다. 고정할 필요가 있다면 Array.from으로 복사하는 등 의도에 맞는 방법을 정합니다.

참고 · MDN Web Docs — 실시간 클래스 목록 ↗

05

자동 점검에서는 어느 시점을 기록해야 하나요?

AI가 버튼이나 카드 수를 보고할 때는 검색 함수, 검색 시점, 이후 문서 변경을 함께 기록해야 합니다. 나중에 생긴 요소를 처음 목록으로 모두 확인했다고 말하면 누락이 생깁니다. 새로 검색했는지, 실시간 목록을 읽었는지를 구별하세요.

모든 NodeList가 정적인 것은 아닙니다. childNodes가 반환하는 NodeList는 실시간으로 바뀔 수 있습니다. 객체의 이름 하나만 보고 추측하지 말고 해당 API의 명세를 확인해야 합니다. 이 실습은 자신의 페이지 안에서만 요소를 조작하며 외부 문서나 저장 데이터를 바꾸지 않습니다.

직접 확인하기 · 규칙 기반 실행

처음 목록·현재 목록·새 검색을 비교해 볼까요?

아래 독립 실습 영역에 실제 DOM 요소를 추가·변경합니다. 문서 전체의 다른 카드는 검색하지 않습니다.

같은 .blue를 찾은 두 목록은 언제 바뀔까요?

아래 카드 영역에서 실제 DOM 검색을 실행합니다. 두 목록은 처음 한 번 저장합니다. 카드 추가와 이름 변경 뒤에 결과가 어떻게 달라지는지 살펴보세요.

브라우저에서 두 목록을 준비하고 있습니다.

관계를 읽고, 다른 상황에 적용하기

두 문제로 생각 확인

1처음 querySelectorAll 결과를 저장한 뒤 새 일치 요소를 붙였습니다. 처음 결과의 length는?
2정적 목록의 첫 요소 글자를 바꾸면 그 목록에서 읽는 글자는?

두 문제의 답을 모두 선택하면 해설을 볼 수 있습니다.

나의 설명으로 마무리

오늘 발견한 관계

저장 위치를 확인하고 있습니다…

출처와 제작 안내

원문을 참고해 설명·도표·문항·실험을 새로 작성했습니다. 별도 표시가 없는 사례와 수치는 학습을 위한 가상 예시입니다. 원문 번역이나 실제 모델의 성능 평가 자료가 아닙니다.

  1. 정적 검색 목록 ↗MDN Web DocsDocument: querySelectorAll()

    정적인 NodeList · 2026-10-25 확인. 예시·계산·활동은 자체 구성.

  2. 실시간 클래스 목록 ↗MDN Web DocsDocument: getElementsByClassName()

    실시간 HTMLCollection · 2026-10-25 확인. 예시·계산·활동은 자체 구성.

  3. DOM 목록의 표준 ↗WHATWGDOM Standard

    querySelectorAll의 정적 결과와 기존 노드 참조 · 2026-10-25 확인. 예시·계산·활동은 자체 구성.