이 페이지에서 다루는 것
AI 프런트엔드 디버깅
한 번에 끝까지 읽으며 맥락을 쌓을 수 있도록 구성했습니다.
콘솔 오류, 네트워크 탭, hydration, 상태 스냅샷, 브라우저 스모크를 묶어 AI 프런트엔드 버그를 재현 가능하게 고치는 루프
학습 유형
주제 심층 학습
핵심 주제
AI 프런트엔드 디버깅
키워드
AI 브라우저 콘솔 디버깅 루프 · VIBE 코딩 프런트엔드 검증 · 콘솔 오류 회귀 테스트 · hydration 디버깅 · 브라우저 스모크 루프 · AI 프런트엔드 버그 수정
이 페이지에서 다루는 것
AI 프런트엔드 디버깅
한 번에 끝까지 읽으며 맥락을 쌓을 수 있도록 구성했습니다.
예상 학습 시간
13분
본문과 보조 자료(이미지·영상)를 포함한 대략적인 소요입니다.
학습 팁
섹션 순서대로 읽고, 필요한 부분만 다시 찾아보기
표·이미지·영상은 본문 흐름을 돕는 보조 설명입니다.
AI에게 프런트엔드 작업을 맡기면 화면은 빠르게 바뀝니다. 하지만 화면이 보인다는 사실만으로 기능이 안전하다고 말할 수는 없습니다. 버튼이 눌리는 것처럼 보여도 콘솔 오류가 쌓일 수 있고, 네트워크 탭에는 실패 응답이 남을 수 있으며, hydration 경고 때문에 첫 렌더와 클라이언트 라우팅이 서로 다른 UI를 만들 수 있습니다. VIBE 코딩에서 브라우저 검증은 "눈으로 한 번 보기"가 아니라 AI가 만든 변경을 실제 사용자 여정 안에서 재현하고, 콘솔 오류와 네트워크 실패를 근거로 수정 범위를 좁히는 디버깅 루프입니다.
초보자는 브라우저 콘솔을 "웹페이지가 속으로 말하는 에러 노트"라고 이해하면 됩니다. 실무자에게는 더 구체적입니다. 콘솔 오류, 네트워크 탭, 로딩 상태, 빈 상태, 권한 상태, 에러 경계, 상태 스냅샷, 시각적 단서, 회귀 테스트를 하나의 AI 작업 지시서로 묶어야 합니다. 그래야 에이전트가 "아마 고쳤다"가 아니라 "이 사용자 여정에서 어떤 오류가 사라졌고 어떤 상태가 남았다"까지 설명하게 됩니다.
AI 브라우저 콘솔 디버깅 루프의 핵심은 화면 확인, 콘솔 확인, 네트워크 확인, 재현 경로 고정, 수정 범위 제한, 회귀 테스트 추가를 한 번의 루프로 묶는 것입니다. 사용자가 보는 대표 경로를 브라우저에서 열고, 콘솔 오류와 경고를 먼저 캡처합니다. 이어서 네트워크 탭에서 실패 요청, 느린 요청, 잘못된 리다이렉트, 예상과 다른 상태 코드를 확인합니다. 그다음 AI에게 "보이는 현상"이 아니라 "재현 경로와 증거"를 줍니다.
좋은 루프는 세 가지 산출물을 남깁니다. 첫째, 사람이 다시 따라 할 수 있는 재현 경로입니다. 둘째, AI가 추측하지 않도록 만드는 상태 스냅샷입니다. 셋째, 같은 문제가 돌아오지 않게 막는 회귀 테스트입니다. 브라우저 콘솔에 있던 에러 메시지를 통째로 공개 문서에 붙이는 것이 목적이 아닙니다. 필요한 범위만 요약하고, 사용자 여정과 연결해 "어느 화면, 어느 동작, 어느 상태에서 깨졌는지"를 고정하는 것이 목적입니다.
AI에게 프런트엔드 버그를 맡길 때 가장 위험한 문장은 "콘솔에 에러가 나요. 고쳐줘"입니다. 이 문장은 증거가 부족하고 수정 범위가 너무 넓습니다. 더 안전한 지시는 "목록 페이지에서 중간 보기로 전환한 뒤 첫 번째 카드를 열면 콘솔 오류가 1건 발생한다. 네트워크 탭의 데이터 요청은 성공한다. 오류는 클라이언트 라우팅 후에만 발생한다. 해당 컴포넌트의 상태 초기화와 이벤트 핸들러 범위 안에서 수정하고, 기존 레이아웃은 바꾸지 말라"처럼 적는 것입니다.
AI가 만든 코드는 빌드와 타입 검사를 통과해도 브라우저에서 깨질 수 있습니다. 서버 렌더 단계에서는 값이 있고 클라이언트에서는 값이 늦게 도착하는 경우, hydration 경고가 생깁니다. 클릭 전에는 안전하지만 클릭 후 상태 전이가 일어나면서 정의되지 않은 값을 읽는 경우도 많습니다. 사용자는 이런 문제를 "가끔 멈춘다", "첫 화면은 보이는데 다시 들어오면 깨진다", "모바일에서만 이상하다"처럼 경험합니다. 콘솔 오류를 보지 않으면 이 차이를 놓칩니다.
브라우저 스모크는 실제 사용자가 만지는 흐름을 따라갑니다. 목록을 열고, 필터를 바꾸고, 상세로 들어가고, 뒤로 가고, 다시 새로고침합니다. 이 과정에서 콘솔 오류가 없어야 하고, 네트워크 탭의 실패가 설명 가능해야 하며, 로딩 상태와 빈 상태가 어색하지 않아야 합니다. 단순한 스크린샷 확인보다 시간이 조금 더 걸리지만, AI 변경의 품질을 훨씬 정확하게 판단할 수 있습니다.
콘솔 오류와 재현 경로가 없으면 AI는 파일 이름, 컴포넌트 이름, 최근 변경된 코드만 보고 원인을 추측합니다. 그 결과 실제 원인은 데이터 모양인데 스타일을 고치거나, 라우팅 문제인데 카드 컴포넌트를 크게 바꾸거나, 권한 상태 누락인데 전체 상태 관리를 갈아엎는 일이 생깁니다. 수정 범위가 커질수록 새 버그도 같이 들어옵니다.
반대로 콘솔 오류, 네트워크 탭 결과, 사용자 여정, 상태 스냅샷을 함께 주면 AI의 탐색 공간이 줄어듭니다. "요청은 성공했지만 렌더 단계에서 빈 배열을 객체처럼 읽는다", "권한 상태가 로딩 중일 때 버튼이 먼저 활성화된다", "클라이언트 라우팅 뒤 이전 페이지의 선택 상태가 남는다"처럼 원인 후보를 좁힐 수 있습니다. VIBE 코딩에서 좋은 프롬프트는 멋진 문장이 아니라 디버깅 증거를 정리한 작업 티켓에 가깝습니다.
백엔드 오류는 종종 재시도나 안내 문구로 완화할 수 있지만, 프런트엔드 런타임 오류는 사용자가 바로 봅니다. 버튼이 먹통이 되거나, 카드가 두 번 보이거나, 로딩 상태가 끝나지 않거나, 빈 상태 문구가 사라지면 서비스가 미완성처럼 보입니다. 특히 AI로 빠르게 만든 기능은 작은 UI 균열이 "전체가 자동 생성이라 불안하다"는 인상을 줍니다.
브라우저 콘솔 디버깅 루프는 이 인상을 줄이는 운영 습관입니다. 새 기능을 공개하기 전 대표 사용자 여정에서 콘솔 오류를 0으로 만들고, 네트워크 실패가 있다면 의도된 차단인지 실제 장애인지 분리합니다. 그리고 같은 경로를 회귀 테스트나 스모크 절차에 남겨 다음 AI 작업에서도 반복합니다. 이것이 전문가급 VIBE 코딩과 단순 자동 생성의 차이입니다.
처음부터 모든 화면을 보려고 하면 디버깅이 흐려집니다. 먼저 하나의 사용자 여정을 정합니다. 예를 들어 "홈에서 글 목록으로 이동한다", "검색어를 입력한다", "첫 번째 결과를 연다", "뒤로 가서 필터를 바꾼다"처럼 실제 사용자의 동작을 문장으로 적습니다. 이때 성공 조건도 같이 적습니다. 화면이 열리는 것만 성공이 아니라, 콘솔 오류가 없어야 하고, 주요 콘텐츠가 보여야 하며, 로딩 상태가 끝나야 하고, 빈 상태라면 설명 문구가 나와야 합니다.
AI 작업 지시서에는 범위를 더 명확히 적습니다. "이 루프에서는 결제 흐름을 보지 않는다", "관리자 화면은 건드리지 않는다", "스타일 리팩터링은 하지 않는다"처럼 제외 범위도 필요합니다. 수정 범위가 좁아야 AI가 증거와 관련 없는 코드를 만지지 않습니다. 사용자 여정을 좁히는 것은 속도를 늦추는 일이 아니라, 실제로는 디버깅 시간을 줄이는 일입니다.
브라우저를 열고 재현 경로를 그대로 따라갑니다. 콘솔 오류가 나오면 먼저 등급을 나눕니다. 사용자 동작을 막는 오류, 화면은 보이지만 반복되는 경고, 개발 환경에서만 의미 있는 경고, 외부 위젯의 일시적 실패를 구분합니다. 모든 메시지를 같은 무게로 다루면 중요한 오류를 놓칩니다.
분류할 때는 메시지보다 상황을 같이 기록합니다. "상세 페이지 첫 진입에서는 없음, 뒤로 가기 후 재진입에서 발생", "모바일 폭에서만 발생", "로그인 전 권한 상태에서만 발생"처럼 재현 조건을 붙입니다. AI에게는 전체 로그 덤프보다 이 요약이 더 가치 있습니다. 긴 로그를 주더라도 먼저 사람이 핵심을 정리해야 에이전트가 불필요한 경로로 빠지지 않습니다.
콘솔 오류만 보면 렌더링 문제처럼 보여도 실제 원인은 데이터 요청일 수 있습니다. 네트워크 탭에서 실패 요청, 느린 요청, 반복 요청, 캐시되지 않는 요청, 예상과 다른 응답 크기를 확인합니다. 요청이 실패했다면 화면이 에러 경계로 안전하게 떨어지는지 봅니다. 요청은 성공했는데 화면이 깨진다면 데이터 매핑, 로딩 상태, 빈 상태, 권한 상태를 의심합니다.
네트워크 확인은 AI에게 원인 후보를 나누어 주는 역할을 합니다. "데이터 요청이 실패했다"와 "데이터 요청은 성공했지만 렌더가 실패했다"는 완전히 다른 작업입니다. 전자는 재시도, 오류 안내, 권한 처리, 요청 경로 점검이 필요합니다. 후자는 컴포넌트의 null 처리, 배열 초기값, 클라이언트 라우팅 상태, 파생 상태 계산을 봐야 합니다.
프런트엔드 버그는 상태가 핵심입니다. 같은 URL이라도 로그인 전후, 데이터 있음과 없음, 권한 있음과 없음, 로딩 중과 완료 후가 다릅니다. 그래서 재현 경로와 함께 상태 스냅샷을 남깁니다. 스냅샷은 복잡할 필요가 없습니다. 현재 화면, 선택한 필터, 사용자 권한, 데이터 개수, 로딩 여부, 마지막 동작, 콘솔 오류 개수 정도면 충분합니다.
이 스냅샷은 AI가 수정 범위를 결정하는 기준이 됩니다. 예를 들어 데이터 개수가 0일 때만 깨진다면 빈 상태 컴포넌트를 봐야 합니다. 권한이 없을 때만 깨진다면 버튼 노출과 차단 로직을 봐야 합니다. 로딩 중일 때만 깨진다면 skeleton, 초기값, 조건부 렌더링을 봐야 합니다. 상태를 적지 않으면 AI는 전체 화면을 다시 설계하려고 할 수 있습니다.
AI에게는 증거와 함께 제한을 줘야 합니다. "해당 사용자 여정에서 발생하는 콘솔 오류 1건만 고친다", "데이터 모델은 바꾸지 않는다", "시각 디자인은 유지한다", "새 상태 관리 라이브러리를 도입하지 않는다"처럼 적습니다. 이런 제한은 AI의 창의성을 막는 것이 아니라 운영 리스크를 낮춥니다.
수정 후에는 같은 재현 경로를 다시 돌립니다. 콘솔 오류가 사라졌는지, 네트워크 탭의 실패가 늘지 않았는지, 화면의 시각적 단서가 유지되는지 확인합니다. 가능하면 회귀 테스트를 추가합니다. 단위 테스트가 적합하면 상태 계산 함수를 테스트하고, 통합 테스트가 적합하면 렌더 결과를 확인하고, 브라우저 스모크가 필요하면 대표 경로를 자동화합니다. 테스트가 어렵더라도 최소한 운영 체크리스트에는 경로와 기대 결과를 남깁니다.
증상은 단순합니다. 새로고침하면 콘솔에 hydration 경고가 뜨고, 클라이언트 라우팅으로 다시 들어오면 사라집니다. 이 경우 AI에게 "화면이 이상하다"고 말하면 스타일을 바꿀 가능성이 큽니다. 더 좋은 지시는 "서버 렌더와 클라이언트 첫 렌더의 텍스트 또는 날짜 표시가 다를 가능성을 확인하라. 현재 시간, 랜덤 값, 브라우저 전용 값이 렌더 경로에 직접 들어가 있는지 보라"입니다.
해결 방향은 보통 세 가지입니다. 서버와 클라이언트가 같은 초기값을 쓰게 하거나, 클라이언트 전용 값은 마운트 이후에 표시하거나, 사용자에게 보이는 시간·지역 값은 명시적 기준으로 포맷합니다. 검증은 새로고침, 뒤로 가기, 모바일 폭 새로고침을 포함합니다. 이 예시에서 핵심은 hydration이라는 단어 하나가 아니라 "첫 렌더와 후속 렌더의 차이"를 재현 경로로 고정하는 것입니다.
목록 화면에서 필터를 바꾸면 데이터가 있는데도 빈 상태가 보일 수 있습니다. 콘솔 오류가 없으면 더 어렵습니다. 이때는 네트워크 탭과 상태 스냅샷이 중요합니다. 요청이 성공했고 응답에도 항목이 있다면 렌더링 필터, 정렬, 선택 상태, 페이지 번호 초기화를 의심합니다. 이전 필터의 페이지 번호가 남아 새 필터의 마지막 페이지를 가리키는 식의 버그가 흔합니다.
AI에게는 "필터 변경 시 페이지 번호와 선택 상태를 초기화하라. 빈 상태는 실제 결과가 0개일 때만 표시하라. 로딩 상태가 끝나기 전에는 빈 상태를 먼저 보여 주지 말라"고 지시합니다. 검증은 필터 A에서 3페이지로 이동한 뒤 필터 B로 바꾸는 흐름, 검색어를 지우는 흐름, 뒤로 가기로 이전 필터를 복원하는 흐름을 포함합니다.
권한 상태가 늦게 도착하면 사용자가 누르면 안 되는 버튼이 잠깐 보일 수 있습니다. 콘솔 오류가 없더라도 보안과 신뢰 측면에서 위험합니다. 이 경우 브라우저 스모크는 단순 클릭보다 "로딩 중 권한 상태"를 봐야 합니다. 버튼이 먼저 렌더되고 나중에 사라지는지, 차단 안내가 충분한지, 권한 없는 사용자가 클라이언트 라우팅으로 우회할 수 없는지 확인합니다.
AI에게는 권한 상태를 세 값으로 다루라고 지시합니다. 확인 전, 허용, 차단입니다. 확인 전에는 위험한 액션을 보여 주지 않거나 비활성화하고, 차단이면 이유를 사용자 언어로 설명합니다. 허용일 때만 액션을 활성화합니다. 수정 후에는 콘솔 오류뿐 아니라 시각적 단서와 버튼 활성 상태를 함께 확인합니다.
일부 컴포넌트에서 예외가 나면 페이지 전체가 흰 화면이 될 수 있습니다. 이때 콘솔 오류는 명확하지만 사용자에게는 아무 설명도 없습니다. 에러 경계는 예외를 숨기는 장치가 아니라 사용자에게 안전한 안내를 보여 주고, 개발자에게 원인 범위를 좁히는 장치입니다.
AI에게는 "전체 앱을 감싸는 거대한 처리보다 문제 컴포넌트 주변에 작은 에러 경계를 두라"고 지시하는 편이 좋습니다. 그리고 실패 시 재시도 버튼, 이전 화면 이동, 문의 안내 같은 사용자 행동을 제공해야 합니다. 검증은 정상 데이터, 깨진 데이터, 느린 요청, 뒤로 가기 후 재시도까지 봅니다.
첫 번째 실수는 콘솔 로그를 모두 없애는 데만 집착하는 것입니다. 중요한 것은 사용자가 겪는 실패와 연결된 콘솔 오류입니다. 개발 도구용 정보성 로그를 지우느라 실제 문제를 놓치면 안 됩니다. 반대로 실제 오류를 "사용자에게는 안 보인다"고 방치하는 것도 위험합니다. 런타임 오류는 나중에 다른 상태에서 사용자 행동을 막을 수 있습니다.
두 번째 실수는 네트워크 실패를 프런트엔드 코드만으로 덮는 것입니다. 요청이 실패한다면 사용자 안내와 재시도는 필요하지만, 요청 경로나 서버 응답 자체가 잘못됐는지 확인해야 합니다. 프런트엔드에서 모든 실패를 빈 상태로 바꾸면 장애가 조용히 숨습니다. 빈 상태, 로딩 상태, 오류 상태는 서로 다른 사용자 메시지를 가져야 합니다.
세 번째 실수는 AI에게 너무 넓은 리팩터링을 허용하는 것입니다. 콘솔 오류 하나를 고치기 위해 전체 상태 구조를 바꾸거나 디자인 시스템을 수정하면 검증 범위가 폭발합니다. VIBE 코딩에서는 작은 증거, 작은 수정, 작은 회귀 테스트가 안전합니다. 큰 리팩터링이 필요하면 별도 작업으로 분리하고, 이번 루프에서는 사용자 여정의 오류를 먼저 안정화합니다.
네 번째 실수는 브라우저 하나에서만 확인하는 것입니다. 최소한 데스크톱 폭과 모바일 폭, 새로고침과 클라이언트 라우팅, 정상 데이터와 빈 데이터를 나누어 봐야 합니다. 모든 기기를 다 볼 수 없다면 가장 많이 쓰는 대표 폭과 가장 위험한 상태를 정합니다. 중요한 것은 무작정 많이 보는 것이 아니라, 왜 그 조합을 선택했는지 설명 가능하게 만드는 것입니다.
다섯 번째 실수는 콘솔 오류 텍스트를 그대로 공개 글이나 이슈 제목에 넣는 것입니다. 오류 메시지에는 내부 경로나 민감한 식별자가 섞일 수 있습니다. 공개 기록에는 필요한 원인과 재현 경로만 남기고, 내부 값은 제거합니다. AI에게 전달할 때도 값 자체보다 상태와 흐름을 중심으로 요약하는 습관이 안전합니다.
브라우저 콘솔 디버깅 루프를 마치기 전 다음 항목을 확인합니다. 대표 사용자 여정이 문장으로 적혀 있는가. 새로고침과 클라이언트 라우팅을 모두 확인했는가. 콘솔 오류와 경고를 사용자 영향 기준으로 분류했는가. 네트워크 탭에서 실패 요청과 반복 요청을 확인했는가. 로딩 상태, 빈 상태, 권한 상태, 오류 상태가 서로 다른 화면으로 표현되는가. 상태 스냅샷에 데이터 개수, 선택 필터, 마지막 동작, 권한 상태가 들어 있는가.
수정 검증도 별도로 봅니다. AI가 수정한 파일이 재현 경로와 직접 관련 있는가. 수정 범위가 처음 지시보다 넓어지지 않았는가. 기존 시각적 단서가 사라지지 않았는가. 회귀 테스트 또는 반복 가능한 브라우저 스모크가 추가되었는가. 같은 경로를 다시 실행했을 때 콘솔 오류가 0인지 확인했는가. 네트워크 실패가 새로 생기지 않았는가. 모바일 폭과 데스크톱 폭에서 주요 액션이 같은 의미로 동작하는가.
팀 작업에서는 증거를 더 짧게 정리합니다. "증상", "재현 경로", "콘솔 요약", "네트워크 요약", "상태 스냅샷", "수정 범위", "검증 결과"의 일곱 줄이면 충분합니다. 이 구조는 사람이 읽기도 쉽고 AI 에이전트가 다음 행동을 정하기도 쉽습니다. 긴 대화보다 일관된 증거 형식이 더 강합니다.
실무에서는 디버깅 결과를 너무 길게 남기면 다음 사람이 읽지 않습니다. 대신 한 화면 안에 들어오는 증거 패킷으로 정리합니다. 첫 줄에는 사용자 여정을 씁니다. 둘째 줄에는 발생 조건을 씁니다. 셋째 줄에는 콘솔 오류의 성격을 적습니다. 넷째 줄에는 네트워크 탭에서 본 요청 상태를 적습니다. 다섯째 줄에는 상태 스냅샷을 적습니다. 여섯째 줄에는 이번 수정 범위를 적습니다. 마지막 줄에는 통과해야 할 회귀 테스트나 브라우저 스모크 기준을 적습니다.
예를 들어 목록 필터 버그라면 이렇게 정리할 수 있습니다. 사용자 여정은 "목록에서 검색어 입력, 필터 변경, 첫 카드 열기, 뒤로 가기"입니다. 발생 조건은 "검색 결과가 0개였다가 다시 3개로 바뀌는 상태"입니다. 콘솔 오류는 없지만 빈 상태가 잘못 남습니다. 네트워크 요청은 성공했고 응답에는 3개 항목이 있습니다. 상태 스냅샷은 검색어, 선택 필터, 페이지 번호, 로딩 완료 여부입니다. 수정 범위는 필터 변경 시 페이지 번호와 선택 상태 초기화입니다. 검증 기준은 같은 경로를 두 번 반복해도 빈 상태가 실제 0개일 때만 보여야 한다는 것입니다.
이 정도 증거가 있으면 AI는 불필요하게 디자인을 바꾸거나 전체 목록 컴포넌트를 다시 만들 가능성이 줄어듭니다. 또한 리뷰어는 변경된 코드가 증거와 맞는지 빠르게 판단할 수 있습니다. 브라우저 콘솔 디버깅 루프의 최종 결과물은 "고쳤다"라는 말이 아니라, 다시 실행 가능한 증거 패킷과 통과 기준입니다.
처음에는 가장 많이 공유되는 상세 페이지나 가장 자주 쓰는 목록 페이지 하나만 선택해 이 루프를 적용합니다. 모든 화면을 한 번에 자동화하려 하지 말고, 실제 장애가 났을 때 영향이 큰 사용자 여정부터 시작합니다. 한 경로에서 콘솔 오류 0, 네트워크 실패 0 또는 설명 가능한 실패, 명확한 빈 상태, 안전한 권한 상태를 만들면 그 형식을 다음 화면으로 복제합니다.
그다음에는 AI 작업 지시서 템플릿을 만듭니다. 템플릿에는 목표, 제외 범위, 재현 경로, 상태 스냅샷, 콘솔 요약, 네트워크 요약, 수정 제한, 검증 명령, 회귀 테스트 기대치를 넣습니다. 이 템플릿을 쓰면 에이전트가 매번 "어디를 봐야 하느냐"부터 묻지 않고 바로 증거 기반 디버깅을 시작할 수 있습니다.
마지막으로 브라우저 스모크를 배포 루프와 연결합니다. 로컬에서 통과한 뒤에도 실제 공개 환경에서 대표 페이지를 열고, 콘솔 오류와 주요 콘텐츠 마커를 확인합니다. 프런트엔드 버그는 빌드 산출물, 캐시, 라우팅, 데이터 지연에 따라 배포 후에만 드러날 수 있습니다. VIBE 코딩의 목표는 AI가 코드를 빨리 쓰게 하는 데서 끝나지 않습니다. 사용자가 실제 브라우저에서 문제없이 목적을 달성하도록, 증거를 남기고 반복 가능한 루프로 품질을 끌어올리는 것입니다.
해야 합니다. 콘솔 오류가 없더라도 네트워크 실패, 빈 상태 오판, 권한 버튼 노출, 느린 로딩처럼 사용자 여정 문제는 남을 수 있습니다. 콘솔은 시작점이고 네트워크 탭과 상태 스냅샷까지 함께 봐야 합니다.
가능하면 핵심만 요약하는 편이 안전합니다. 화면, 동작, 오류 종류, 네트워크 결과, 상태 조건을 정리하고 내부 식별자처럼 공개하면 안 되는 값은 제거한 뒤 전달해야 AI가 추측 없이 수정 범위를 좁힐 수 있습니다.
서버가 만든 첫 화면과 브라우저가 이어받은 화면이 다르다는 신호이기 때문입니다. 지금은 작아 보여도 날짜, 랜덤 값, 권한 상태, 브라우저 전용 값 때문에 사용자별로 다른 UI가 보일 수 있어 초기에 잡는 것이 좋습니다.
반복되는 핵심 경로라면 자동화하는 것이 좋습니다. 다만 처음부터 모든 화면을 자동화하기보다 장애 영향이 큰 사용자 여정 하나를 정하고 콘솔 오류, 주요 콘텐츠, 상태 전환을 안정적으로 확인하는 것이 우선입니다.
재현 경로, 콘솔 요약, 네트워크 요약, 상태 스냅샷, 수정 범위, 검증 결과, 추가한 회귀 테스트를 남기면 됩니다. 이 기록이 다음 에이전트의 작업 지시서가 되어 같은 문제를 반복해서 설명하지 않아도 됩니다.
다음 학습
AI가 만든 화면은 데스크톱에서 그럴듯하게 보이다가 모바일에서 갑자기 무너지는 일이 많습니다. 카드가 한 줄 밖으로 밀리고, sticky header가 본문을 가리고, 버튼의 touch target이 너무 작고, safe area를 고려하지 않아 하단 CTA가 잘리는 식입니다. 더 위험한 점은 이런 문제들이 빌드, 타입 검사, 단순 스크린샷 하나만으로는 잘 드러나지 않는다는 것입니다. VIBE 코딩에서 반응형 레이아웃 검증은 예쁜 화면을 고르는 일이 아니라, 사용자가 실제로 보는 viewport matrix를 정하고 breakpoint마다 사용자 여정, content marker, 접근성, 레이아웃 오버플로를 검증하는 안전 루프입니다.
초보자는 반응형 레이아웃을 "화면 크기에 맞춰 옷을 갈아입는 UI"라고 생각하면 됩니다. 하지만 실무에서는…
AI가 만든 기능은 처음 배포될 때보다 “고쳤는데도 예전 화면이 계속 보이는 순간”에 더 크게 흔들립니다. 코드는 수정됐고 테스트도 통과했는데 사용자는 낡은 가격, 이전 문구, 오래된 권한 상태, 이미 삭제한 배너를 본다면 문제는 보통 로직이 아니라 캐시 경계에 있습니다. VIBE 코딩에서는 AI가 페이지, API, CDN, 이미지 최적화, service worker, ISR을 빠르게 붙여 주기 때문에 캐시 계층이 더 빨리 늘어납니다. 빠른 구현이 장점이지만, 어느 계층이 언제 갱신되는지 모르면 배포 후 원인 추적이 어려워집니다.
초보자는 캐시를 “다시 계산하지 않으려고 잠깐 저장해 두는 것”으로 이해하면 됩니다. 실무자는 한 단계 더 나아가야 합니다. 브라우저 cache, CDN edge, 서버 메모리, 데이터 패치 캐시, Next.js I…