Svelte 신입 트러블슈팅 면접

Svelte 신입 · 취준 (0~1년) 트러블슈팅 5문항 조회수 31 · 2026-08-04 (화) 12:36:08
1 반응성 시스템
Easy

Q. Svelte 컴포넌트에서 배열에 새로운 항목을 push()로 추가했는데 화면이 업데이트되지 않는 문제가 발생했습니다. 원인이 무엇이며 어떻게 해결하시겠습니까?

Svelte의 반응성은 할당(assignment)을 기반으로 동작한다는 점을 생각해보세요.

A. 모범답안

Svelte는 할당 연산자(=)를 통한 변경만 반응성으로 감지합니다. push(), pop(), splice() 같은 배열 메서드는 배열 내부를 변경하지만 재할당이 아니기 때문에 반응성이 트리거되지 않습니다. 해결 방법은 배열을 재할당하는 것으로, items = [...items, newItem] 또는 items.push(newItem); items = items 처럼 작성해야 합니다. 이렇게 하면 Svelte 컴파일러가 변경을 감지하고 DOM을 업데이트합니다. 실무에서는 이를 모르고 작성하면 데이터는 변경되었는데 화면만 안 바뀌는 문제가 자주 발생합니다.

핵심 포인트
  • • Svelte는 할당(=) 기반 반응성 시스템을 사용함
  • • 배열 메서드(push, pop 등)는 반응성을 트리거하지 않음
  • • 스프레드 연산자나 재할당으로 해결 가능
답변에 넣으면 좋은 키워드
반응성 할당 재할당 스프레드 연산자 push 배열 메서드
실무에서는

할일 목록이나 장바구니 같은 동적 리스트를 구현할 때 항목 추가/삭제 시 화면이 업데이트되지 않는 문제를 디버깅할 때 필요합니다.

Follow-up 질문

객체의 속성을 변경할 때도 비슷한 문제가 발생할 수 있나요? 그렇다면 어떻게 해결하시겠습니까?

2 컴포넌트 생명주기
Medium

Q. Svelte 컴포넌트에서 외부 API를 호출하여 데이터를 가져오는 코드를 작성했는데, 컴포넌트가 마운트되기 전에 API 호출이 실행되어 에러가 발생했습니다. 어떤 생명주기 함수를 사용해야 하며, 디버깅 과정은 어떻게 진행하시겠습니까?

컴포넌트가 DOM에 마운트된 후 실행되는 생명주기 훅을 찾아보세요.

A. 모범답안

onMount 생명주기 함수를 사용해야 합니다. onMount는 컴포넌트가 DOM에 처음 렌더링된 후에 실행되므로 API 호출이나 DOM 조작에 적합합니다. 디버깅 과정은 먼저 콘솔에서 에러 메시지를 확인하고, API 호출 코드가 어디에 위치했는지 점검합니다. 만약 스크립트 최상위 레벨에 작성되어 있다면 onMount 안으로 옮깁니다. 또한 async/await를 사용할 경우 try-catch로 에러 핸들링을 추가하여 네트워크 오류에도 대응할 수 있도록 합니다. 개발자 도구의 네트워크 탭에서 API 요청이 언제 발생하는지 확인하는 것도 유용합니다.

핵심 포인트
  • • onMount는 컴포넌트가 DOM에 마운트된 후 실행됨
  • • API 호출은 onMount 안에서 수행해야 안전함
  • • 에러 핸들링과 네트워크 탭 확인이 디버깅에 중요함
답변에 넣으면 좋은 키워드
onMount 생명주기 API 호출 async/await try-catch DOM 마운트
실무에서는

사용자 데이터를 서버에서 가져와 프로필 페이지를 렌더링하거나, 실시간 데이터를 구독할 때 적절한 타이밍에 API를 호출하는 것이 중요합니다.

Follow-up 질문

컴포넌트가 파괴될 때 정리(cleanup) 작업이 필요한 경우는 언제이며, 어떻게 처리하나요?

3 이벤트 핸들링
Easy

Q. 입력 폼에서 사용자가 엔터키를 눌렀을 때 제출되도록 on:keydown 이벤트를 추가했는데, 폼이 두 번 제출되는 문제가 발생했습니다. 원인을 찾고 해결하는 방법을 설명해주세요.

폼의 기본 동작과 이벤트 수식어(modifier)를 생각해보세요.

A. 모범답안

폼에서 엔터키를 누르면 기본적으로 submit 이벤트가 발생하는데, on:keydown으로도 제출 함수를 호출하면 중복 실행됩니다. 먼저 개발자 도구 콘솔에서 함수가 몇 번 호출되는지 로그를 찍어 확인합니다. 해결 방법은 on:submit|preventDefault를 사용하여 폼의 기본 동작을 막고 submit 이벤트만 사용하거나, keydown 이벤트에서 event.key를 체크하면서 preventDefault()를 명시적으로 호출하는 것입니다. Svelte의 이벤트 수식어인 |preventDefault를 활용하면 코드가 간결해집니다. 재발 방지를 위해서는 폼 제출 로직을 하나의 핸들러로 통일하는 것이 좋습니다.

핵심 포인트
  • • 폼의 기본 submit 동작과 커스텀 이벤트가 중복 실행됨
  • • preventDefault 이벤트 수식어로 기본 동작 방지
  • • 하나의 이벤트 핸들러로 통일하여 재발 방지
답변에 넣으면 좋은 키워드
이벤트 수식어 preventDefault submit keydown 기본 동작 중복 실행
실무에서는

로그인 폼이나 검색창에서 엔터키 제출 기능을 구현할 때 중복 제출을 방지하고 사용자 경험을 개선하는 데 필요합니다.

Follow-up 질문

Svelte에서 제공하는 다른 유용한 이벤트 수식어에는 어떤 것들이 있나요?

4 바인딩
Medium

Q. 부모 컴포넌트에서 자식 컴포넌트로 전달한 props 값을 자식에서 수정했는데, 콘솔에 경고가 나타나고 예상대로 동작하지 않습니다. 이 문제의 원인과 올바른 데이터 흐름 패턴을 설명해주세요.

Svelte의 단방향 데이터 흐름과 양방향 바인딩의 차이를 생각해보세요.

A. 모범답안

Svelte는 기본적으로 단방향 데이터 흐름을 따르므로 자식 컴포넌트에서 props를 직접 수정하면 안 됩니다. props는 읽기 전용으로 취급해야 하며, 수정하려고 하면 경고가 발생합니다. 해결 방법은 자식에서 이벤트를 dispatch하여 부모에게 변경을 알리고, 부모가 데이터를 업데이트하도록 하는 것입니다. 또는 부모에서 bind:value 같은 양방향 바인딩을 명시적으로 사용할 수도 있습니다. 디버깅 시에는 콘솔 경고 메시지를 확인하고, 데이터가 어디서 변경되는지 추적합니다. 재발 방지를 위해 props는 읽기 전용, 내부 상태는 let으로 선언하는 규칙을 팀에서 공유합니다.

핵심 포인트
  • • props는 읽기 전용이며 자식에서 직접 수정 불가
  • • 이벤트 dispatch 또는 양방향 바인딩으로 해결
  • • 단방향 데이터 흐름 원칙을 준수해야 함
답변에 넣으면 좋은 키워드
props 단방향 데이터 흐름 dispatch 양방향 바인딩 createEventDispatcher bind
실무에서는

폼 입력 컴포넌트를 재사용 가능하게 만들 때 부모-자식 간 데이터 동기화를 올바르게 구현하는 것이 중요합니다.

Follow-up 질문

양방향 바인딩(bind:)을 사용하는 것과 이벤트를 dispatch하는 것 중 어떤 상황에서 어떤 방법을 선택하시겠습니까?

5 조건부 렌더링
Easy

Q. 조건부 렌더링으로 로딩 상태를 표시하는 컴포넌트를 만들었는데, 데이터를 불러온 후에도 로딩 스피너가 계속 표시됩니다. 이 문제를 어떻게 디버깅하고 해결하시겠습니까?

로딩 상태를 관리하는 변수가 제대로 업데이트되고 있는지 확인해보세요.

A. 모범답안

먼저 로딩 상태를 관리하는 변수(예: isLoading)가 API 호출 후 제대로 false로 변경되는지 콘솔 로그로 확인합니다. 만약 변수는 변경되는데 화면이 안 바뀐다면 Svelte 반응성 문제일 수 있으므로 재할당을 확인합니다. API 호출의 then 또는 finally 블록에서 isLoading = false가 누락되었는지 점검합니다. 또한 에러가 발생했을 때도 로딩 상태를 해제하도록 try-catch-finally 구조를 사용하는 것이 좋습니다. 조건문 {#if isLoading}의 문법이 올바른지도 확인합니다. 재발 방지를 위해 API 호출 패턴을 표준화하고 항상 finally에서 로딩 상태를 정리하도록 합니다.

핵심 포인트
  • • 로딩 상태 변수가 적절히 업데이트되는지 확인
  • • 에러 상황에서도 로딩 상태 해제 필요
  • • finally 블록을 활용한 안전한 상태 관리
답변에 넣으면 좋은 키워드
조건부 렌더링 로딩 상태 isLoading finally try-catch 상태 관리
실무에서는

데이터 페칭이 있는 모든 페이지에서 로딩 인디케이터를 올바르게 표시하고 숨기는 것은 사용자 경험의 기본입니다.

Follow-up 질문

로딩, 성공, 에러 세 가지 상태를 모두 관리해야 한다면 어떤 구조로 설계하시겠습니까?

댓글 0

로그인 후 댓글을 작성할 수 있습니다.

아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!