Vue.js 주니어 CS 기초 기술면접
새 면접Q. 스택(Stack)과 큐(Queue)의 차이점을 설명하고, Vue.js 애플리케이션에서 각각을 활용할 수 있는 실무 사례를 하나씩 제시해주세요.
스택은 LIFO(Last In First Out) 방식으로 가장 나중에 들어간 데이터가 먼저 나오는 자료구조이며, 큐는 FIFO(First In First Out) 방식으로 먼저 들어간 데이터가 먼저 나오는 자료구조입니다. Vue.js에서 스택은 브라우저의 히스토리 관리나 Undo/Redo 기능 구현에 활용할 수 있으며, 큐는 비동기 작업 대기열이나 알림 메시지를 순차적으로 표시하는 기능에 활용할 수 있습니다. 두 자료구조 모두 JavaScript의 배열을 사용하여 구현 가능하며, 스택은 push/pop, 큐는 push/shift 메서드를 주로 사용합니다.
- • 스택은 LIFO, 큐는 FIFO 방식
- • 스택은 히스토리나 Undo 기능에 활용
- • 큐는 비동기 작업 대기열이나 순차 처리에 활용
Vue Router에서 브라우저 히스토리를 관리할 때 스택 자료구조가 어떻게 활용되는지 구체적으로 설명해주세요.
Q. HTTP와 HTTPS의 차이점을 설명하고, Vue.js로 개발한 SPA에서 API 통신 시 HTTPS를 사용해야 하는 이유를 보안 관점에서 설명해주세요.
HTTP는 암호화되지 않은 평문으로 데이터를 전송하는 프로토콜이며, HTTPS는 SSL/TLS 프로토콜을 사용하여 데이터를 암호화하여 전송하는 보안 프로토콜입니다. Vue.js SPA에서 HTTPS를 사용해야 하는 이유는 로그인 정보, 개인정보 등 민감한 데이터가 중간에서 탈취되는 것을 방지하고, 중간자 공격(Man-in-the-Middle Attack)을 차단할 수 있기 때문입니다. 또한 최신 브라우저에서는 HTTPS가 아닌 경우 쿠키나 로컬스토리지 사용에 제한이 있으며, PWA 기능도 HTTPS 환경에서만 동작합니다.
- • HTTP는 평문, HTTPS는 암호화 통신
- • 중간자 공격 방지 및 데이터 탈취 차단
- • 최신 브라우저 기능은 HTTPS 필수
Vue.js 애플리케이션에서 Mixed Content 오류가 발생하는 상황과 이를 해결하는 방법을 설명해주세요.
Q. 시간 복잡도 O(1), O(n), O(n²)의 의미를 설명하고, Vue.js에서 배열 데이터를 처리할 때 각각에 해당하는 연산 예시를 제시해주세요.
O(1)은 입력 크기와 관계없이 항상 일정한 시간이 걸리는 상수 시간 복잡도이며, O(n)은 입력 크기에 비례하여 시간이 증가하는 선형 복잡도, O(n²)은 입력 크기의 제곱에 비례하여 시간이 증가하는 이차 복잡도입니다. Vue.js에서 O(1)은 배열의 특정 인덱스 접근(arr[0]), O(n)은 배열 전체를 순회하는 filter나 map 메서드, O(n²)은 중첩된 v-for로 2차원 배열을 렌더링하거나 이중 반복문을 사용하는 경우에 해당합니다. 성능을 위해서는 가능한 낮은 시간 복잡도의 알고리즘을 선택해야 합니다.
- • O(1)은 상수 시간, O(n)은 선형, O(n²)은 이차 시간
- • 배열 인덱스 접근은 O(1), filter/map은 O(n)
- • 중첩 반복문은 O(n²)로 성능 저하 주의
Vue.js에서 배열의 특정 요소를 찾을 때 find 메서드 대신 객체를 활용하여 O(n)을 O(1)로 개선하는 방법을 설명해주세요.
Q. 관계형 데이터베이스(RDBMS)에서 인덱스(Index)가 무엇인지 설명하고, Vue.js로 개발한 게시판 애플리케이션에서 검색 성능을 개선하기 위해 백엔드 DB에 인덱스를 적용할 때 고려해야 할 사항을 설명해주세요.
인덱스는 데이터베이스 테이블의 검색 속도를 향상시키기 위해 특정 컬럼의 값을 정렬하여 별도로 저장하는 자료구조입니다. 게시판 애플리케이션에서 제목이나 작성자로 자주 검색하는 경우 해당 컬럼에 인덱스를 생성하면 조회 성능이 크게 향상됩니다. 하지만 인덱스는 추가 저장 공간이 필요하고, 데이터 삽입/수정/삭제 시 인덱스도 함께 업데이트되어 쓰기 성능이 저하될 수 있으므로, 읽기가 많고 쓰기가 적은 컬럼에 선택적으로 적용해야 합니다. Vue.js 프론트엔드에서는 API 응답 속도 개선으로 체감할 수 있습니다.
- • 인덱스는 검색 속도 향상을 위한 자료구조
- • 자주 조회하는 컬럼에 적용하여 성능 개선
- • 쓰기 성능 저하와 저장공간 증가 트레이드오프 존재
Vue.js에서 페이지네이션을 구현할 때 백엔드 DB의 OFFSET과 LIMIT 쿼리가 데이터가 많아질수록 느려지는 이유와 이를 개선하는 방법을 설명해주세요.
Q. 프로세스(Process)와 스레드(Thread)의 차이점을 설명하고, JavaScript와 Vue.js가 실행되는 브라우저 환경에서 싱글 스레드로 동작하는데도 비동기 처리가 가능한 이유를 설명해주세요.
프로세스는 운영체제로부터 독립적인 메모리 공간을 할당받아 실행되는 프로그램의 인스턴스이며, 스레드는 프로세스 내에서 실행되는 작업 단위로 같은 프로세스의 메모리를 공유합니다. JavaScript는 싱글 스레드로 동작하지만 브라우저의 Web API(setTimeout, fetch 등)와 이벤트 루프, 콜백 큐를 활용하여 비동기 처리가 가능합니다. Vue.js에서 API 호출이나 타이머 같은 비동기 작업은 Web API에 위임되고, 메인 스레드는 다른 작업을 계속 처리할 수 있어 UI가 블로킹되지 않습니다. 이벤트 루프가 콜 스택이 비었을 때 콜백 큐의 작업을 실행하여 비동기 처리를 완료합니다.
- • 프로세스는 독립 메모리, 스레드는 메모리 공유
- • JavaScript는 싱글 스레드지만 Web API로 비동기 처리
- • 이벤트 루프와 콜백 큐로 논블로킹 동작 구현
Vue.js에서 async/await를 사용한 비동기 처리와 Promise의 then 체이닝을 사용한 방식의 차이점과 각각의 장단점을 설명해주세요.
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!