요즘IT
위시켓
AIDP - AX
Rise ERP
콘텐츠프로덕트 밸리
요즘 작가들컬렉션물어봐
놀이터
콘텐츠
프로덕트 밸리
요즘 작가들
컬렉션
물어봐
놀이터
새로 나온
인기
개발
AI
IT서비스
기획
디자인
비즈니스
프로덕트
커리어
트렌드
스타트업
서비스 전체보기
위시켓요즘ITAIDP - AXRise ERP
고객 문의
02-6925-4867
10:00-18:00주말·공휴일 제외
yozm_help@wishket.com
요즘IT
요즘IT 소개작가 지원
기타 문의
콘텐츠 제안하기광고 상품 보기
요즘IT 슬랙봇크롬 확장 프로그램
이용약관
개인정보 처리방침
청소년보호정책
㈜위시켓
대표이사 : 박우범
서울특별시 강남구 테헤란로 211 3층 ㈜위시켓
사업자등록번호 : 209-81-57303
통신판매업신고 : 제2018-서울강남-02337 호
직업정보제공사업 신고번호 : J1200020180019
제호 : 요즘IT
발행인 : 박우범
편집인 : 노희선
청소년보호책임자 : 박우범
인터넷신문등록번호 : 서울,아54129
등록일 : 2022년 01월 23일
발행일 : 2021년 01월 10일
© 2013 Wishket Corp.
로그인
요즘IT 소개
콘텐츠 제안하기
광고 상품 보기
비즈니스

LLM을 위한 자바스크립트 디버깅 ①: 크롬 개발자 도구로 AI 가시성 점검하기

SearchSEOul
9분
2시간 전
131
에디터가 직접 고른 실무 인사이트 매주 목요일에 만나요.
newsletter_profile0명 뉴스레터 구독 중

AI 검색이 새로운 유입 경로로 자리 잡으면서, 검색 최적화 실무자의 질문도 달라지고 있습니다. “구글이 우리 페이지를 잘 읽는가”를 넘어 “챗GPT나 클로드 같은 AI는 우리 페이지에서 무엇을 가져가는가”를 따져야 하는 때가 된 것이죠. 지난 9월 3일과 4일 서울 마포에서 열린 ‘Search SEOul(서치 서울) 2026’은 이런 고민을 국내외 SEO·GEO 실무자가 함께 나눈 자리였습니다. 올해 2회째를 맞은 서치 서울은 해외에서 주로 열리던 글로벌 SEO 컨퍼런스를 한국에서 열고, 한국 검색 환경과 해외 SEO·GEO 흐름을 잇겠다는 취지로 시작된 행사입니다.

 

요즘IT는 서치 서울 2026의 공식 미디어 파트너로서, 행사 발표 가운데 요즘IT 독자에게 도움이 될 만한 내용을 골라 전문을 소개하고 있습니다. 이번 글은 행사 첫날 오후, 테크니컬 SEO·애널리틱스 컨설턴트 조너선 무어(Jonathan Moore)가 ‘Seoul Searching: Debugging JavaScript for LLMs’라는 제목으로 발표한 내용입니다. 사용자가 보는 페이지와 LLM이 받아 가는 페이지 사이의 간극을 크롬 개발자 도구로 직접 찾아내는 방법을 다룹니다. 발표 분량이 많아 두 편으로 나눠 싣습니다. 이번 1회에는 문제의 배경과 디버깅 원칙, 크롬 개발자 도구 세팅과 텍스트 검색까지 담았습니다. 영어로 진행된 발표를 한국어로 옮겼고, 발표에 쓰인 코드 예시는 발표자가 공개한 저장소(글 말미 링크)에서 받아 볼 수 있습니다.

 

참고로 발표는 9월 초에 진행됐고, 이 글은 10월에 공개합니다. AI 서비스는 업데이트가 잦은 만큼, 글에 나오는 각 AI 시스템의 자바스크립트 렌더링 여부는 지금 시점과 다를 수 있습니다.

 
Search SEOul 2026 발표자 소개 카드: Jonathan Moore, Technical SEO & Analytics Consultant, 링크드인 프로필 주소 표기

 

 

안녕하세요. 저는 테크니컬 SEO·애널리틱스 컨설턴트 조너선 무어입니다. 오늘은 디버깅 이야기를 하려고 합니다. 시작하기 전에 먼저 사과부터 드려야겠네요. 제가 영국인이라서요. 썰렁한 농담이 나오더라도 통역을 거치면서 조금이나마 살아나길 바랍니다. 커피 브레이크 직전 마지막 발표이기도 하니, 최대한 요점 위주로 가 보겠습니다.

 

 

구글은 괜찮다던 자바스크립트, AI는 다릅니다

이야기의 틀부터 잡아 볼게요. 저는 유럽에서 일하고 있어서 주로 구글을 상대로 일합니다. 그런데 꽤 오랫동안 구글에 “자바스크립트 신경 써야 하나요?” 하고 물으면, 구글 담당자들은 대체로 이렇게 답했습니다. “아니요, 괜찮습니다. 저희가 처리할 수 있어요. 크롤링도 잘하고, 색인도 잘하고, 렌더링도 잘하니까 크게 걱정하지 않으셔도 됩니다.” 그래서 우리는 이런 문제를 어느새 신경 쓰지 않게 됐죠.

 

문제는 여기서부터입니다. 구글은 자바스크립트를 정말 잘 처리합니다. 하지만 LLM은 그렇지 않을 수 있어요. 이게 지금 우리가 마주한 과제입니다.

 

구글이 몇 년 동안 소개해 온 렌더링 파이프라인은 다들 익숙하실 거예요. 구글 시스템이 어떻게 작동하는지 보여 주는 좋은 예시지만, 대규모 언어 모델(LLM)에 맞춰 최적화하는 지금의 상황에 그대로 들어맞는 건 아닙니다. 그래서 어떤 AI 시스템이 자바스크립트를 렌더링하고 어떤 시스템은 하지 않는지를 알아야 합니다. AI가 페이지에서 정보를 뽑아 답변을 합성하는 방식에 큰 문제가 될 수 있기 때문이에요.

 

다행히 누군가 이미 이 부분을 조사해 줘서 제가 직접 할 필요는 없었습니다. 안드레 알파(Andre Alpar)가 AI 어시스턴트가 답변 근거를 찾을 때 실제로 자바스크립트를 렌더링하는지 테스트한 결과입니다.

 

AI 어시스턴트 자바스크립트 렌더링 테스트 결과표: DeepSeek·ERNIE·Qwen·Kimi·Mistral 5개는 렌더링, Grok은 실행만, ChatGPT·Claude·Gemini·Perplexity·Meta AI·Copilot 6개는 원본 HTML만 인식
AI 어시스턴트별 자바스크립트 렌더링 여부를 테스트한 결과 (출처: Search Engine World, 안드레 알파)

 

 

결과를 보면 서구권 모델들은 대체로 지금 자바스크립트를 렌더링하지 않는 것으로 보입니다. 이런 모델을 쓰고 있다면 꽤 곤란한 일이죠. 위쪽에는 자바스크립트를 렌더링하는 모델이 있습니다. 딥시크(DeepSeek), 큐원(Qwen), 키미(Kimi), 미스트랄(Mistral)은 모두 자바스크립트를 렌더링해요. 아래쪽의 챗GPT, 클로드, 제미나이 등은 렌더링하지 않습니다. 문제가 될 수 있으니 좀 더 자세히 들여다봐야 합니다.

 

 

문제는 자바스크립트가 아니라 ‘실패 지점’입니다

제 생각에 문제가 꼭 자바스크립트 자체에 있는 건 아닙니다. 자바스크립트는 인터넷의 큰 부분을 차지하고 있고, 앞으로도 그랬으면 좋겠어요. 웹사이트에 상호작용을 더해 주는 훌륭한 도구니까요. 다만 자바스크립트가 실패 지점(point of failure)이 된다는 게 문제입니다. 젠가 탑을 떠올려 보세요. 블록 하나를 잘못 빼면 탑 전체가 무너집니다.

 

제 디버깅의 핵심 개념은 두 가지입니다. 먼저 소스 보기(View Source)입니다. 다들 아실 텐데, 서버가 처음 브라우저로 보내는 코드, 즉 원본 HTML(raw HTML)을 말합니다.

 

크롬 view-source 화면에 떠 있는 doctype과 meta 태그 등 서버가 보낸 원본 HTML 코드, ‘View Source is the code that the server initially sends to your browser’ 문구
소스 보기: 서버가 처음 브라우저로 보내는 코드

 

 

다음은 DOM입니다. 브라우저에서 자바스크립트가 실행된 뒤의 HTML, 그러니까 브라우저가 지금 이 페이지를 어떻게 표현하고 있는지를 나타냅니다. 우리가 이해하려는 기본 개념이 바로 이 둘이에요.

 

크롬 개발자 도구 Elements 패널에 표시된 DOM 트리, ‘The DOM is the browser's current representation of the page, including changes made by JavaScript’ 문구
DOM: 자바스크립트가 바꾼 내용까지 반영한, 브라우저가 지금 표현하고 있는 페이지

 

 

렌더링 방식에는 여러 가지가 있고, 정답도 오답도 없습니다. 페이지가 얼마나 자주 바뀌는지, 어떤 콘텐츠를 담는지 등에 따라 렌더링 전략은 달라져야 해요. 어느 쪽도 틀리지 않지만, 각 방식이 어떻게 작동하는지 알아야 맞는 방식을 고를 수 있습니다.

 

가장 기본은 서버 사이드 렌더링(SSR)입니다. 모든 것이 서버에서 완전히 렌더링된 채로 넘어오고, 소스 코드에 들어 있습니다. 페이지 제목, 메타 디스크립션, H1 같은 요소가 서버에서 바로 받아집니다.

 

문제가 생기기 쉬운 쪽은 클라이언트 사이드 렌더링(CSR)입니다. 서버는 HTML 뼈대(shell)만 보내고, 브라우저가 자바스크립트를 실행해야 합니다. 자바스크립트가 실행되면서 페이지를 하이드레이션(hydration)하고 콘텐츠를 채워 넣는 방식이죠.

 

클라이언트 사이드 렌더링 3단계 다이어그램: HTML shell → 브라우저가 JS 실행 → JS 적용 후 콘텐츠 표시
클라이언트 사이드 렌더링: 콘텐츠가 브라우저에서 자바스크립트로 렌더링된다 (출처: web.dev)

 

 

기초 수준에서 정리하면, 이 두 방식의 차이가 우리가 주의해야 할 부분입니다. 우리가 길러야 할 기술은 어디까지가 서버에서 렌더링되고 어디부터 그렇지 않은지, 즉 실패 지점을 찾아내는 능력입니다.

 

 

원인부터 찾는다: 제 디버깅 원칙과 흐름

제가 일하는 방식, 일종의 철학부터 말씀드릴게요. 첫째, 근본 원인을 찾습니다. 어떤 이슈든 근본 원인을 파악하는 게 가장 중요하다고 생각해요. 문제에서 거꾸로 거슬러 올라가 해결책을 찾는 겁니다. 둘째, 이슈를 쏟아 내듯 나열하지 않습니다. 발견한 문제를 잔뜩 늘어놓는 대신 뿌리를 찾는 것, 저는 이게 핵심이라고 봅니다.

 

제가 주로 쓰는 방법은 직접 눈으로 보는 겁니다. 브라우저에 들어가서 하나하나 확인하죠. 제 디버깅 흐름은 이렇습니다.

 

  • 서버가 무엇을 보내는지 확인한다
  • 브라우저가 무엇을 만드는지 비교한다
  • 의존 관계를 분리한다
  • 콘텐츠가 어디서 오는지 추적한다
  • 여러 사용자 에이전트로 테스트한다

 

지금부터 브라우저 안에서 이 각각을 어떻게 확인하는지 보여 드리겠습니다. 그리고 두 번째 사과를 드립니다. 저는 윈도우를 씁니다. 맥을 쓰신다면 단축키는 알아서 바꿔 생각해 주세요.

 

 

크롬 개발자 도구부터 디버깅용으로 세팅하세요

디버깅이나 SEO 작업에 관심 있는 분께 제가 가장 먼저 권하는 건 디버깅 전용 크롬 프로필을 만드는 것입니다. 크롬에서는 이메일마다 프로필을 따로 둘 수 있고, 꼭 이메일이 없어도 프로필을 만들 수 있어요. 프로필마다 확장 프로그램과 설정을 다르게 둘 수 있으니, 프로필만 바꾸면 바로 디버깅할 준비가 됩니다. 제 최고의 조언이 바로 이겁니다.

 

크롬 프로필 메뉴에서 새 프로필을 만들고 테마와 이름(SEO Debugging)을 지정하는 3단계 화면
디버깅 전용 크롬 프로필 만들기

 

 

프로필에 들어가면 저는 네트워크 탭부터 설정합니다. 맞춤 설정할 수 있는 항목이 많거든요. 작은 톱니바퀴 아이콘을 누르면 요청 행을 크게 보는 옵션(Big request rows), 스크린샷 옵션 등을 켤 수 있습니다. 페이지를 오가며 볼 때는 로그 유지(Preserve log)도 켜고, 캐시 비활성화(Disable cache)도 기본으로 켜 두는 편인데, 이건 다른 종류의 디버깅에 더 쓰입니다. 옵션이 정말 많으니 한번 살펴보세요.

 

크롬 개발자 도구 네트워크 탭 설정에서 Big request rows와 Screenshots 체크박스를 켜는 화면
네트워크 탭 설정에서 Big request rows와 Screenshots 옵션 켜기

 

 

다음으로 네트워크 탭의 열(헤더)을 맞춤 설정합니다. 켜고 끄기도 쉬워서 아주 유용해요. 저는 기본으로 URL, 도메인, 메서드를 추가하고, 성능 최적화 작업을 할 때는 우선순위(Priority)도 추가합니다. 원치 않는 열을 켰다가 되돌리고 싶을 때는 마우스 오른쪽 버튼으로 열 설정을 다시 바꾸면 됩니다.

 

네트워크 탭 헤더 설정 메뉴에서 URL·Method·Domain 열을 추가하는 화면, 빨간 화살표로 표시
네트워크 탭에 원하는 열(헤더) 추가하기

 

 

세팅을 마쳤으면 요소(Elements) 패널을 엽니다. 단축키는 Ctrl + Shift + C입니다. DOM으로 바로 들어가는 길이죠.

 

Ctrl+Shift+C로 요소 패널을 열어 선택한 DOM 노드가 하이라이트된 화면
요소 패널 열기(Ctrl + Shift + C)

 

 

소스 보기는 Ctrl + U로 열 수 있는데, 저는 분석이나 디버깅에 소스 보기를 잘 쓰지 않습니다. 큰 페이지에서는 브라우저가 그냥 죽어 버리거든요. 적어도 제 컴퓨터에서는 그렇습니다. 오래된 컴퓨터인데 바꿀 형편이 안 돼서요.

 

Ctrl+U로 연 view-source 탭에 표시된 원본 HTML 소스 코드
소스 보기(Ctrl + U)

 

 

그래서 저는 소스(Sources) 패널에서 원본 HTML을 봅니다. 서버에서 받아 온 실제 HTML을 보려면 여기가 제 출발점이에요. 정리하면 DOM은 요소 패널에서, 원본 HTML은 소스 패널에서 봅니다.

 

소스 패널 파일 트리에서 hee-chan-hwang 페이지 파일을 열어 원본 HTML을 확인하는 화면
소스 패널에서 서버가 보낸 원본 HTML 확인하기

 

 

크롬 개발자 도구에는 명령어 메뉴도 있습니다. 개발자 도구를 연 상태에서 Ctrl + Shift + P를 누르면 명령어 서랍이 열립니다. 쓸 수 있는 명령이 아주 많은데, 자주 쓰는 것 중 하나가 스크린샷이에요. 크롬 안에서 뷰포트 크기를 정해 전체 페이지 스크린샷을 찍을 수 있습니다. 디버깅에 특화된 기능도 여럿 있으니 전체 명령어 목록을 한번 확인해 보세요.

 

Ctrl+Shift+P로 연 명령어 메뉴에서 screen을 검색해 Capture screenshot 등 명령 목록이 뜬 화면
개발자 도구의 명령어 메뉴(Ctrl + Shift + P)

 

 

오늘 주제가 자바스크립트이니, 먼저 자바스크립트를 끄고 켜는 방법부터 보겠습니다. 명령어 메뉴에 ‘Disable JavaScript’를 입력하고 새로고침하면 브라우저에서 자바스크립트가 꺼집니다. 자바스크립트 없이도 페이지가 돌아가는지 확인하는 가장 단순한 방법이에요. 단점은 다시 켜는 걸 기억해야 한다는 겁니다. ‘Enable’을 입력해 다시 켜야 해서 조금 번거롭지만, 확장 프로그램을 따로 쓸 필요 없이 명령어로 바로 처리할 수 있어 시간을 아낄 수 있습니다.

 

명령어 메뉴에서 Disable JavaScript와 Enable JavaScript를 각각 입력해 선택하는 두 화면
명령어 메뉴에서 Disable…·Enable…을 입력해 자바스크립트 끄고 켜기

 

 

텍스트 검색으로 서버 응답과 DOM 비교하기

이제 텍스트를 검색해 보겠습니다. 텍스트 문자열 검색은 우리가 하는 가장 기본적인 작업일 거예요. 요소 패널에서 Ctrl + F를 누르면 원하는 텍스트를 찾을 수 있습니다. DOM에서 보이는 텍스트가 소스 패널에도 있는지 확인하는 것, 이게 변화를 찾아내는 가장 기본적인 방법입니다.

 

소스 패널 검색창에 ‘has spent the past three campaigns at Molineux’ 문구를 입력해 원본 HTML에서 찾아낸 화면
소스 패널에서 텍스트 찾기

 

 

요소 패널의 좋은 점은 페이지에서 텍스트를 드래그한 뒤 마우스 오른쪽 버튼을 눌러 ‘검사’를 선택하면 해당 DOM 노드로 바로 이동한다는 겁니다. 하이라이트까지 해 줘서 편리하죠.

 

선수 소개 페이지에서 문장을 드래그해 선택한 뒤 Elements 패널의 해당 DOM 노드가 하이라이트된 화면
페이지에서 텍스트를 선택하고 마우스 오른쪽 버튼 → 검사로 요소 패널에서 찾기

 

 

요소 패널에서 정말 강력한 기능은 XPath 표현식을 쓸 수 있다는 점입니다. AND, OR 조건을 걸 수 있고, 부정(negation) 조건도 쓸 수 있어요. 예를 들어 페이지를 하이드레이션하는 데 쓰이는 JSON 텍스트 덩어리를 XPath로 찾을 수 있습니다. LLM이 관심을 가질 만한 정보를 바로 찾아낸 뒤, 그게 소스 보기에도 있는지 확인하는 거죠. XPath로 할 수 있는 영리한 작업은 정말 많습니다.

 

Elements 패널 검색창에 /h1 같은 XPath 표현식을 입력해 일치하는 요소를 찾는 화면
요소 패널에서 Ctrl + F로 검색하기. XPath로 패턴을 찾을 수 있다

 

 

선택한 노드는 $0으로 참조할 수 있습니다. Esc를 눌러 콘솔 서랍을 열고 아래 코드를 넣으면, 선택한 JSON 덩어리를 보기 좋게 정리해 줍니다.

 

console.log(JSON.stringify(JSON.parse($0.textContent), null, 2))

 

콘솔에 console.log(JSON.stringify(JSON.parse($0.textContent), null, 2)) 명령을 실행해 선택한 JSON 노드를 정리해 출력한 결과
$0으로 선택한 노드를 참조해 JSON을 정리해 출력하기

 

 

이걸 복사해서 원하는 LLM에 넣고 추가로 분석할 수 있습니다. 필요한 부분만 떼어 내 클립보드나 텍스트 파일로 저장하기에도 좋은 방법이에요.

 

제가 즐겨 쓰는 또 하나는 로드된 모든 텍스트를 검색하는 Ctrl + Shift + F입니다. XPath 검색과 달리 여기서는 정규표현식 검색을 쓸 수 있어요. 특정 자바스크립트 라이브러리를 불러오는 데 쓰일 법한 자바스크립트 구문을 정규표현식으로 검색하면, 페이지를 빠르게 훑으면서 차단 요인이나 근본 원인 후보를 찾아낼 수 있습니다.

 

Ctrl+Shift+F로 연 전체 검색 패널에서 정규표현식으로 fetch·axios·XMLHttpRequest 패턴을 검색해 248건을 찾은 결과
로드된 모든 텍스트 검색(Ctrl + Shift + F). 정규표현식 검색을 쓸 수 있다

 

 

마지막으로 개별 네트워크 요청 안을 검색할 수 있습니다. 서버에서 바로 받아 온 것을 골라내는 데 유용해요. 네트워크 탭에서 Ctrl + F를 누르면 네트워크 요청 안에서 텍스트를 바로 찾을 수 있고, DOM에 있는 것과 소스에 있는 것, 그리고 그 텍스트가 어느 파일에서 왔는지를 비교할 수 있습니다.

 

네트워크 탭 검색창에 seoInformation을 입력해 응답(Response) 본문에서 메타 제목 등 JSON 값을 찾아낸 화면
네트워크 탭에서 Ctrl + F로 응답 내용 검색하기

 

 

정리하면, 용도에 따라 검색 위치가 다르고 매칭 방식도 다릅니다. 일반 텍스트 검색, XPath, 정규표현식이 그것이죠. 이 검색들을 이것저것 써 보다 보면 건초 더미에서 바늘을 찾는 데 꽤 가까워질 겁니다.

 

소스·요소·전체 검색·네트워크 4가지 검색 방법을 단축키·범위·용도별로 정리한 표
개발자 도구의 검색 기능 정리 (출처: Chrome for Developers)

 

 

지금까지 LLM이 자바스크립트를 렌더링하지 않을 때 무엇이 문제가 되는지, 그리고 크롬 개발자 도구를 디버깅용으로 세팅해 서버가 보낸 원본 HTML과 브라우저가 만든 DOM을 텍스트 검색으로 비교하는 방법을 살펴봤습니다. 조너선 무어가 소개한 디버깅 흐름 다섯 단계 가운데 앞의 두 단계, ‘서버가 무엇을 보내는지 확인하고 브라우저가 무엇을 만드는지 비교하기’에 해당합니다.

 

이어지는 2회에서는 나머지 세 단계를 다룹니다. 네트워크 요청을 걸러내고 차단해 페이지를 무너뜨리는 ‘범인 파일’을 찾는 법, 사용자 에이전트를 바꿔 AI처럼 접속해 보는 법, 반복 확인을 스니펫과 AI 어시스턴스 기능에 맡기는 법을 소개합니다. 이어서 이 도구들을 엮어 사이트를 감사하는 순서와 크롤러로 점검 규모를 키우는 방법까지 정리합니다.

 

▶ 발표 코드 예시 저장소(깃허브) 보기

 

ⓒ요즘IT의 모든 콘텐츠는 저작권법의 보호를 받는 바, 무단 전재와 복사, 배포 등을 금합니다.