면접 질문
소프트웨어 엔지니어 면접 질문
코딩, 자료구조, 알고리즘, 시스템 설계, 디버깅, 테스트, 프로덕션 운영, 협업에 관한 질문을 연습하세요. 이 질문 목록을 전체 가이드와 함께 활용하세요: 소프트웨어 엔지니어 면접 가이드.
질문 19개
카테고리 6개
소프트웨어 엔지니어
업데이트: 2026년 5월
배열, 문자열, 해시 테이블
이 기초 문제들은 인덱스, 빈도, 투 포인터, 슬라이딩 윈도, 구현 정확성을 평가합니다.
답변 구조 — 보완값을 해시 테이블에 저장
배열을 한 번 순회합니다. 각 값 x에 대해 target - x가 테이블에 있으면 그 인덱스와 현재 인덱스를 반환합니다. 없다면 x와 인덱스를 저장합니다. 각 원소를 한 번 처리하므로 시간 O(n), 공간 O(n)입니다. 해가 하나뿐인지, 같은 인덱스를 재사용할 수 있는지 먼저 확인합니다.
예상 추가 질문
중복 값은 어떻게 처리하겠습니까?
추가 공간 없이 어떻게 해결하겠습니까?
배열이 정렬되어 있다면 무엇이 달라집니까?
답변 구조 — 각 문자의 마지막 위치를 이용한 슬라이딩 윈도
중복이 없는 구간 [left, right]와 각 문자를 마지막으로 본 위치를 유지합니다. 현재 구간 안의 문자가 다시 나오면 left를 lastSeen + 1로 옮깁니다. 위치와 최대 길이를 갱신하되 left는 뒤로 이동하지 않습니다. 시간 O(n), 공간 O(k)이며 k는 문자 집합의 크기입니다.
예상 추가 질문
left를 앞으로만 옮기는 이유는 무엇입니까?
Unicode는 어떻게 처리하겠습니까?
부분 문자열 자체도 반환하려면 어떻게 하겠습니까?
답변 구조 — 각 단어에서 정규화된 키 생성
각 단어에서 정규화된 키를 만들고 같은 키를 해시 테이블에 묶습니다. 키는 정렬한 문자열이거나 문자 집합이 고정되어 있다면 문자 빈도 배열일 수 있습니다. 정렬 방식은 O(n·m log m), 빈도 방식은 O(n·m)이며 m은 단어 길이입니다.
예상 추가 질문
매우 긴 문자열에는 어떤 방식이 적합합니까?
대문자는 어떻게 처리하겠습니까?
출력 순서를 항상 같게 하려면 어떻게 하겠습니까?
연결 리스트, 트리, 그래프
이 영역에서는 포인터 조작, 재귀 불변 조건, 탐색 순서, 방문 노드의 안전한 관리가 중요합니다.
답변 구조 — previous, current, next 세 포인터
prev를 null, current를 head로 둡니다. 매 반복에서 current.next를 저장하고 current.next가 prev를 가리키게 한 뒤 두 포인터를 전진시킵니다. 종료 시 prev가 새 head입니다. 불변 조건은 prev가 항상 이미 뒤집힌 부분을 가리킨다는 것입니다. 시간 O(n), 공간 O(1)입니다.
예상 추가 질문
재귀로는 어떻게 해결하겠습니까?
빈 리스트에서는 어떻게 됩니까?
일부 구간만 뒤집으려면 어떻게 하겠습니까?
답변 구조 — 허용되는 하한과 상한을 재귀적으로 전달
직접 자식과 비교하는 것만으로는 부족합니다. 각 노드에 허용 범위를 전달하며 재귀하고 왼쪽에서는 현재 값을 상한, 오른쪽에서는 하한으로 사용합니다. 범위를 벗어난 노드가 있으면 유효하지 않습니다. 중복 값 규칙도 확인합니다. 시간 O(n), 재귀 공간 O(h)입니다.
예상 추가 질문
직접 자식과의 비교만으로 부족한 이유는 무엇입니까?
중위 순회로는 어떻게 판별하겠습니까?
경계값 오버플로를 어떻게 피하겠습니까?
답변 구조 — 거리별 너비 우선 탐색
통과 가능한 각 셀을 노드로 보고 시작점에서 너비 우선 탐색합니다. 중복을 막기 위해 큐에 넣는 순간 방문 처리합니다. 계층별로 탐색하므로 목적지에 처음 도달한 경로가 최단입니다. 경로 자체를 반환하려면 부모를 저장합니다. 시간과 공간 모두 O(행·열)입니다.
예상 추가 질문
경로 자체는 어떻게 반환하겠습니까?
셀에 가중치가 있다면 무엇이 달라집니까?
시작점이 여러 개라면 어떻게 하겠습니까?
답변 구조 — 원본 노드에서 복제 노드로의 매핑 생성
깊이 우선 또는 너비 우선 탐색을 사용하고 원본 노드와 복제 노드의 매핑을 유지합니다. 처음 방문할 때 복제본을 만들고 먼저 저장한 뒤 이웃을 복제합니다. 먼저 저장하면 순환을 막고 공유된 이웃도 보존할 수 있습니다. 시간과 공간 모두 O(V + E)입니다.
예상 추가 질문
이웃을 탐색하기 전에 복제본을 저장하는 이유는 무엇입니까?
연결되지 않은 그래프 전체는 어떻게 복제하겠습니까?
순환과 자기 루프를 확인할 테스트는 무엇입니까?
동적 계획법 및 백트래킹
상태를 정확히 정의하고 전이를 완전하게 표현하며 유효하지 않은 분기를 올바르게 가지치기하는 것이 핵심입니다.
답변 구조 — 각 금액에 대한 상향식 동적 계획법
dp[a]를 금액 a를 만드는 데 필요한 최소 동전 수로 정의합니다. dp[0] = 0, 나머지는 무한대로 초기화하고 각 금액과 c ≤ a인 동전에 대해 dp[a] = min(dp[a], dp[a - c] + 1)로 갱신합니다. 목표값이 무한대라면 만들 수 없습니다. 시간 O(금액·동전 수), 공간 O(금액)입니다.
예상 추가 질문
사용한 동전 조합을 어떻게 복원하겠습니까?
각 동전 수에 제한이 있다면 무엇이 달라집니까?
탐욕법을 항상 사용할 수 없는 이유는 무엇입니까?
답변 구조 — 끝 위치별 동적 계획법과 이진 탐색 최적화
기본 해법은 dp[i]를 위치 i에서 끝나는 최장 길이로 두고 nums[j] < nums[i]인 각 j < i에서 갱신하므로 O(n²)입니다. 최적화 방식은 각 길이에 대한 가장 작은 끝값을 유지하고 이진 탐색으로 교체해 O(n log n)을 달성합니다.
예상 추가 질문
부분 수열 자체는 어떻게 반환하겠습니까?
tails가 실제 부분 수열이 아닐 수 있는 이유는 무엇입니까?
같은 값은 어떻게 처리하겠습니까?
답변 구조 — 유효한 접두사만 생성
문자열을 한 글자씩 만듭니다. open < n이면 여는 괄호를 추가하고 close < open일 때만 닫는 괄호를 추가합니다. 길이가 2n이면 유효한 조합입니다. 유효하지 않은 접두사를 만들지 않으므로 탐색 공간을 조기에 가지치기할 수 있습니다.
예상 추가 질문
출력 개수의 점근적 크기는 어느 정도입니까?
반복 방식으로는 어떻게 작성하겠습니까?
중요한 기저 조건은 무엇입니까?
시스템 설계 면접
시스템 설계 면접은 기술적 성숙도를 평가합니다. 상위 직급에서는 트레이드오프, 병목, 신뢰성, 관측 가능성, 운영 책임이 특히 중요합니다.
답변 구조 — 요구사항 → API → ID 생성 → 저장 → 리디렉션 → 확장
긴 URL을 제출하면 짧은 코드를 반환하고 리디렉션은 빨라야 한다고 정의합니다. 주요 API는 단축 URL 생성과 리디렉션이며 레코드에는 코드, 목적지, 사용자, 생성 시각, 만료일, 상태를 저장합니다. 코드는 순차 ID를 Base62로 인코딩하거나 충돌 검사와 함께 무작위 생성합니다. 읽기 경로에서는 DB 앞에 캐시를 두고 상태와 만료를 확인한 뒤 301 또는 302를 반환합니다. 분석은 큐에서 비동기로 처리합니다. 규모가 커지면 엣지 캐시, 코드별 샤딩, 속도 제한, 악용 방지를 추가합니다.
예상 추가 질문
고유 코드를 어떻게 생성하겠습니까?
301과 302는 어떻게 선택하겠습니까?
리디렉션을 늦추지 않고 분석 데이터를 어떻게 기록하겠습니까?
답변 구조 — 사용자 → 게시물 → 배포 → 순위화 → 읽기 → 일관성
팔로우한 계정의 피드를 가정합니다. 핵심 엔터티는 사용자, 팔로우, 게시물, 미디어, 피드 항목, 반응입니다. 게시물, 소셜 그래프, 피드, 순위화 서비스를 캐시, 객체 저장소, 큐와 결합합니다. 쓰기 시 팬아웃은 읽기가 빠르지만 대형 계정에는 비용이 큽니다. 읽기 시 팬아웃은 쓰기 비용을 줄이지만 지연이 늘어납니다. 일반 계정은 쓰기 시, 유명 계정은 읽기 시 처리하는 혼합 방식이 합리적입니다. 최신성, 개인정보 보호, 큐 장애, 캐시 무효화, 스팸도 다룹니다.
예상 추가 질문
팔로워가 수백만 명인 계정은 어떻게 처리하겠습니까?
게시물 순위를 어떻게 정하겠습니까?
팬아웃 큐가 지연되면 어떻게 됩니까?
답변 구조 — 연결 → 메시지 경로 → 저장 → 전달 → 신뢰성
클라이언트는 게이트웨이와 WebSocket 연결을 유지합니다. 전송 시 게이트웨이는 인증하고 멱등성 키를 확인한 뒤 메시지를 저장하고 이벤트를 발행해 연결된 수신자에게 전달합니다. 오프라인 사용자에게는 푸시 알림을 보내고 마지막 확인 위치부터 동기화합니다. 모델에는 대화, 참여자, 메시지, 전달, 읽음 상태, 기기를 포함합니다. 멱등성 키로 중복을 막고 대화별 시퀀스로 순서를 유지하며 확인 응답과 재시도로 전달을 보장합니다. 첨부 파일은 객체 저장소에 두고 지연 시간, 전달률, 연결, 재연결, 큐, 쓰기 실패를 모니터링합니다.
예상 추가 질문
순서를 어떻게 보장하겠습니까?
여러 기기를 어떻게 지원하겠습니까?
읽음 상태를 위해 무엇을 저장하겠습니까?
디버깅, 테스트, 프로덕션 운영
이 상황들은 단순히 코드를 작성하는 사람과 소프트웨어를 책임 있게 운영할 수 있는 사람을 구분합니다.
답변 구조 — 신호 검증 → 범위 파악 → 변경 확인 → 의존성 분해 → 완화
여러 모니터링 시스템에서 이상을 확인하고 p50, p95, p99와 엔드포인트별 지연을 봅니다. 지역, 영역, 버전, 호스트, 클라이언트, 요청 유형, 의존성별로 나눠 범위를 좁힙니다. 최근 배포, 설정, 마이그레이션, 트래픽, 기능 플래그, 캐시, 하위 서비스 장애를 확인합니다. 트레이스로 지연을 분해하고 DB, 캐시 적중률, 큐, CPU, 메모리, GC, 연결 풀도 봅니다. 사용자 영향이 있다면 원인을 완전히 증명할 때까지 기다리지 않고 롤백, 플래그 비활성화, 증설, 느린 의존성 격리로 먼저 완화합니다.
예상 추가 질문
p99만 증가했다면 어떻게 하겠습니까?
롤백 여부를 어떻게 결정하겠습니까?
어떤 대시보드가 필요합니까?
답변 구조 — 일반 사례 → 경계 → 잘못된 입력 → 불변 조건
할인 유형, 조합, 만료, 최소 금액, 적용 조건, 반올림, 세금, 배송비를 확인합니다. 단위 테스트는 할인 없음, 비율, 고정 금액, 최소 금액과 정확히 같거나 작은 경우, 만료, 적용 제외, 중첩을 다룹니다. 가격이 음수가 되지 않고, 할인이 대상 금액을 넘지 않으며, 만료된 할인은 적용되지 않고, 같은 입력은 같은 결과를 낸다는 불변 조건을 확인합니다. 결제에 영향을 준다면 통합 테스트를 추가하고 각 결정 이유를 기록합니다.
예상 추가 질문
통화 반올림을 어떻게 테스트하겠습니까?
프로모션 서비스가 중단되면 어떻게 됩니까?
무엇을 단위 테스트하고 무엇을 통합 테스트하겠습니까?
답변 구조 — 정확성 → 유지보수성 → 위험 → 명확성
문제를 올바르게 해결하는지, 경계가 명확하고 유지보수 가능한지, 마이그레이션·동시성·보안·성능·호환성·관측 가능성에 어떤 위험이 있는지, 테스트가 변경 사항을 다루는지 순서로 검토합니다. 필수 수정과 제안을 구분합니다. 정확성, 보안, 마이그레이션 문제는 병합을 막을 수 있지만 개인 취향은 그렇지 않습니다. 리뷰는 우위를 보이는 자리가 아니라 코드와 팀의 속도를 함께 개선하는 과정입니다.
예상 추가 질문
의견 충돌을 어떻게 해결하겠습니까?
어떤 피드백을 필수 수정으로 분류하겠습니까?
불필요한 지연을 어떻게 막겠습니까?
행동 및 협업 질문
행동 면접은 주인의식, 협업, 기술 판단, 모호함, 학습을 다룹니다. 좋은 답변에는 실제 기술적 영향이 담겨 있습니다.
답변 구조 — 배경 → 선택지 → 트레이드오프 → 결정 → 결과
직접 구축과 구매, SQL과 NoSQL, 임시 수정과 재설계, 일관성과 가용성처럼 실제로 여러 선택지가 있었던 결정을 고릅니다. 배경, 제약, 선택지를 설명합니다. 트래픽, 고객 기한, 과거 장애, 팀 역량, 로드맵처럼 결정에 핵심이 된 근거와 트레이드오프를 보여 줍니다. 결과와 배운 점으로 마무리하고 지금이라면 바꿀 부분도 솔직히 설명합니다.
예상 추가 질문
누가 반대했습니까?
어떤 정보가 있었다면 결정을 바꿨겠습니까?
성공을 어떻게 측정했습니까?
답변 구조 — 장애 → 영향 → 대응 → 원인 → 재발 방지
무엇이 고장 났고 누구에게 어느 정도 영향을 줬는지부터 설명합니다. 탐지, 격리, 롤백, 완화, 소통, 원인 분석에서 맡은 역할을 밝힙니다. 장애 중에는 이론적 증명보다 복구를 우선합니다. 로그, 지표, 트레이스, 기능 플래그, 롤백, 의존성을 어떻게 활용했는지 보여 줍니다. 복구 후에는 비난 대신 테스트, 단계적 출시, 모니터링, 운영 절차 같은 재발 방지책을 설명합니다.
예상 추가 질문
장애 중 상황을 어떻게 공유했습니까?
어떤 알림이 있었다면 더 일찍 감지했겠습니까?
팀은 이후 무엇을 바꿨습니까?
답변 구조 — 공통 목표 → 제약 → 선택지 → 트레이드오프 → 결정
먼저 사용자와 사업 목표를 맞춥니다. 많은 갈등은 전제가 다르기 때문에 생깁니다. 복잡성, 신뢰성, 일정, 유지보수성, 보안, 성능 같은 기술 제약을 구체적으로 설명합니다. 단순히 거절하지 않고 범위를 줄인 MVP, 임시 수동 처리, 기능 플래그, 단계적 개발, 더 단순한 설계를 제안합니다. 위험이 크다면 선택지, 영향, 권고안을 기록합니다. 목적은 개발팀이 이기는 것이 아니라 팀이 충분한 정보를 바탕으로 결정하게 하는 것입니다.
예상 추가 질문
제품팀이 위험한 방안을 고집하면 어떻게 하겠습니까?
기술 부채를 어떻게 설명하겠습니까?
언제 상위 책임자에게 결정을 요청하겠습니까?
실전처럼 답변을 연습하세요
Interview Pilot은 실제 면접 중 실시간으로 답변을 제안해 질문에 명확하게 답하도록 돕습니다.