Amazon 면접 질문
Amazon 면접은 엄격함과 리더십 원칙(LP)에 대한 집중으로 유명합니다. 일반적으로 온라인 평가, 전화 면접, 하루 종일 진행되는 4-5회의 면접으로 구성됩니다. 문제 해결, 자료 구조 및 알고리즘(DSA), 시스템 디자인, 16개의 LP에 맞춘 행동 답변을 중요하게 평가합니다. 기술 및 LP 기반 질문이 혼합되어 있으며, 바-레이저가 품질을 보장합니다.
Amazon 면접의 초점
자료 구조 및 알고리즘
Amazon은 DSA에 강력한 기본기를 강조하며, 중간에서 어려운 수준의 LeetCode 스타일 문제가 출제됩니다. 배열, 문자열, 트리, 그래프, 동적 프로그래밍, 복잡성 분석에 능숙해야 합니다.
시스템 디자인
시니어 역할(SDE2 이상)의 경우 시스템 디자인 면접에서 확장 가능하고 내결함성이 있는 분산 시스템을 설계하는 능력을 테스트합니다. URL 단축기, 채팅 시스템, Amazon과 같은 전자상거래 설계가 일반적입니다.
행동/리더십 원칙
행동 질문은 Amazon의 16가지 리더십 원칙(예: 고객 집착, 주인 의식, 깊이 파고들기)을 기반으로 합니다. STAR 방법을 사용하여 과거 업무 경험에 대한 구체적인 예를 제공하세요.
도메인 및 코딩 능숙도
역할에 따라 도메인별 지식(예: AWS, 머신러닝, iOS)이 테스트될 수 있습니다. 모든 기술 면접에서 화이트보드나 공유 편집기에서 코딩이 표준입니다.
일반적인 Amazon 면접 질문
- 매니저와 의견 충돌이 있었던 경험에 대해 말씀해 주세요. 어떻게 대처하셨나요? (리더십 원칙: 소신을 가지고 의견을 제시하고 헌신하라)좋은 답변이 다루는 것
- 소신을 가지고 의견 제시 (Have Backbone)
- 데이터와 논리에 기반한 설득
- 타협점 도출 및 공동 목표에 헌신 (Commit)
- 관계 유지와 신뢰 형성
샘플 답변 보기
과거 프로젝트에서 매니저가 제안한 아키텍처가 확장성에 문제가 있다고 생각했습니다. 저는 데이터를 수집하여 예상 트래픽 증가 시 성능 병목이 발생할 수 있음을 구체적인 수치로 제시했습니다. 매니저와 1:1 미팅을 통해 제 우려를 전달하고, 두 가지 대안을 비교 분석한 문서를 공유했습니다. 매니저는 제 분석을 인정했지만, 일정 압박 때문에 단기적으로는 기존 방안을 유지하되 장기적으로 제안한 구조로 전환하기로 합의했습니다. 이후 저는 해당 전환 작업을 주도하여 성공적으로 완료했습니다. 이 경험을 통해 상호 존중과 데이터 기반 소통이 갈등 해결에 효과적임을 배웠습니다. 또한, 의견 충돌 후에도 팀 목표에 헌신하며 신뢰를 쌓는 것이 중요하다는 것을 깨달았습니다.
- TinyURL과 같은 URL 단축 서비스를 설계하세요. (시스템 디자인)좋은 답변이 다루는 것
- 요구사항: URL 단축, 리디렉션, 통계, TTL
- 개략적 설계: 로드밸런서, 웹 서버, 캐시, DB
- 데이터 모델: {short_key, long_url, created_at, expiry}
- 단축키 생성: Base62 인코딩, 사전 생성 또는 카운터
- 스케일링: DB 샤딩, 캐싱 (Redis), CDN
샘플 답변 보기
TinyURL 설계는 크게 세 가지 기능으로 나뉩니다: URL 단축, 리디렉션, 그리고 통계 수집입니다. 요구사항으로는 쓰기 (단축) 1000 QPS, 읽기 (리디렉션) 10만 QPS를 가정합니다. 단축키는 7자 이내로, Base62 인코딩을 사용하여 62^7 ≈ 3.5조 개의 고유 키를 생성합니다. 데이터베이스로는 관계형 DB를 사용하고, 키 생성에는 분산 ID 생성기 (예: Snowflake) 또는 Redis INCR을 사용합니다. 읽기 성능을 위해 Redis 캐시를 도입하고, 리디렉션 요청은 캐시 히트 시 바로 301 응답을 반환합니다. 샤딩은 long_url 해시 기반으로 분산합니다. 병목은 DB 쓰기와 캐시 미스 시 DB 읽기이므로, 읽기 복제본과 캐시 확장으로 대응합니다. 또한, 만료된 URL은 TTL을 설정하여 주기적으로 삭제합니다. 통계는 별도 로그 시스템에 비동기로 기록합니다.
- 정수 배열이 주어졌을 때, 합이 특정 타겟이 되는 두 수를 찾으세요. (코딩, 일반적으로 출제됨)좋은 답변이 다루는 것
- 해시 맵 사용 (O(n) 시간, O(n) 공간)
- 한 번의 순회로 해결
- 엣지 케이스: 중복 값, 음수, 조기 종료
샘플 답변 보기
두 수의 합 문제는 해시 맵을 사용하여 O(n) 시간에 해결할 수 있습니다. 배열을 순회하면서 각 원소에 대해 필요한 짝 (target - num)이 이미 맵에 존재하는지 확인합니다. 존재한다면 즉시 인덱스를 반환하고, 아니라면 현재 원소를 맵에 저장합니다. 이 방법은 배열을 한 번만 순회하므로 효율적입니다. 공간 복잡도는 최대 n개의 키-값 쌍을 저장하므로 O(n)입니다. 주의할 점은 동일한 원소를 두 번 사용하지 않아야 하며, 문제가 하나의 정답만 존재함을 보장할 경우 조기 종료가 가능합니다. 아래는 Python 구현입니다.
참고 코드python def twoSum(nums, target): seen = {} # 값 -> 인덱스 매핑 for i, num in enumerate(nums): complement = target - num if complement in seen: return [seen[complement], i] seen[num] = i return [] # 조건상 도달하지 않음 - 속도와 품질 사이에서 트레이드오프를 해야 했던 프로젝트에 대해 설명해 주세요. 어떻게 결정하고 이유는 무엇인가요? (LP: 행동 편향 vs. 최고 기준 고수)좋은 답변이 다루는 것
- 행동 편향 vs 최고 기준 고수
- 데이터 및 고객 영향 기반 의사 결정
- 절충안: 점진적 출시 또는 기술 부채 관리
- 결과 책임 및 학습
샘플 답변 보기
한 번의 스프린트에서 신규 기능을 2주 안에 출시해야 했지만, 테스트 자동화가 미흡하여 품질 위험이 있었습니다. 저는 팀과 논의하여 핵심 기능만 우선 출시하고, 부가 기능은 다음 스프린트로 연기하는 방안을 제안했습니다. 제품 관리자와 협의하여 사용자 피드백을 빠르게 수집하고, 출시 후에도 모니터링을 강화하기로 결정했습니다. 결과적으로 기한을 맞추었고, 버그는 적었으며, 고객 만족도도 유지되었습니다. 이후 부가 기능을 추가하면서 자동화 테스트를 보강했습니다. 이 경험을 통해 속도와 품질 사이에서 단순히 타협하는 것이 아니라, 데이터와 고객 영향을 기준으로 우선순위를 정하는 것이 중요함을 배웠습니다. 또한, 기술 부채를 인지하고 관리하는 것이 장기적인 품질 유지에 필수적입니다.
- 이진 트리를 직렬화 및 역직렬화하는 함수를 구현하세요. (코딩, 이진 트리)좋은 답변이 다루는 것
- 직렬화: 트리를 문자열로 변환 (BFS/DFS)
- 역직렬화: 문자열에서 트리 재구성
- Null 마커 사용으로 완전한 복원
- 시간 복잡도 O(n), 공간 복잡도 O(n)
샘플 답변 보기
이진 트리의 직렬화는 트리를 문자열로 변환하고, 역직렬화는 다시 트리로 복원하는 과정입니다. BFS (레벨 순회)를 사용하여 노드 값을 콤마로 구분하고, null은 'null'로 표시합니다. 역직렬화는 큐를 사용하여 문자열을 파싱하며, 순서대로 노드를 생성합니다. 이 방법은 어떤 모양의 이진 트리라도 복원 가능합니다. 시간 복잡도는 트리의 모든 노드를 방문하므로 O(n)이고, 공간 복잡도는 큐와 리스트에 O(n)이 필요합니다. 아래는 Python 구현입니다.
참고 코드python from collections import deque class Codec: def serialize(self, root): if not root: return "null" result = [] queue = deque([root]) while queue: node = queue.popleft() if node: result.append(str(node.val)) queue.append(node.left) queue.append(node.right) else: result.append("null") return ",".join(result) def deserialize(self, data): if data == "null": return None values = data.split(",") root = TreeNode(int(values[0])) queue = deque([root]) i = 1 while queue: node = queue.popleft() if i < len(values) and values[i] != "null": node.left = TreeNode(int(values[i])) queue.append(node.left) i += 1 if i < len(values) and values[i] != "null": node.right = TreeNode(int(values[i])) queue.append(node.right) i += 1 return root - 프로세스나 제품을 크게 개선했던 경험에 대해 설명해 주세요. 어떤 단계를 거쳤나요? (LP: 주인 의식, 결과 전달)좋은 답변이 다루는 것
- 주인 의식 (Ownership): 문제 인식 및 해결 주도
- 체계적인 단계: 분석, 계획, 실행, 측정
- 결과 전달 (Deliver Results): 구체적 지표 개선
- 이해관계자 협업 및 영향력 확대
샘플 답변 보기
이전 회사에서 배치 처리 시스템의 처리 시간이 점점 증가하여 SLA 위험이 있었습니다. 저는 주인 의식을 가지고 병목 지점을 분석한 결과, 데이터 파티셔닝 전략이 비효율적임을 발견했습니다. 개선 방안으로 파티션 키를 재설계하고, 비동기 처리 큐를 도입하는 계획을 수립했습니다. 팀과 논의하여 단계별로 적용했고, 처리 시간을 70% 단축했습니다. 또한, 모니터링 대시보드를 구축하여 지속적으로 성능을 추적했습니다. 이 개선으로 비용 절감뿐만 아니라 고객 만족도 향상에도 기여했습니다. 결과를 전달할 때는 구체적인 수치(처리 시간 120분 → 35분)와 비용 절감액을 강조하여 경영진의 인정을 받았습니다.
- WhatsApp이나 Messenger와 같은 실시간 채팅 시스템을 설계하세요. (시스템 디자인, 일반적으로 출제됨)좋은 답변이 다루는 것
- 요구사항: 1:1 채팅, 그룹 채팅, 메시지 전달 보장, 오프라인 지원
- 개략적 설계: WebSocket 서버, 채팅 서비스, 메시지 큐, DB
- 데이터 모델: 메시지 테이블 (sender, receiver, group_id, timestamp, content)
- 메시지 흐름: 송신 → 큐 → 저장 → WebSocket 전송
- 스케일링: 수평 확장, Redis pub/sub, CDN (이미지)
샘플 답변 보기
실시간 채팅 시스템은 WebSocket을 사용하여 양방향 통신을 유지합니다. 주요 컴포넌트로는 로드밸런서, WebSocket 서버 클러스터, 메시지 큐 (Kafka), 데이터베이스 (Cassandra), 캐시 (Redis) 등이 있습니다. 메시지 흐름은 사용자 A가 WebSocket 서버로 메시지를 보내면, 서버는 메시지를 Kafka에 발행하고, Kafka 컨슈머가 이를 저장한 후 수신자의 WebSocket 서버로 푸시합니다. 그룹 채팅의 경우, Redis pub/sub을 사용하여 그룹 채널을 구독한 모든 서버에 메시지를 브로드캐스트합니다. 오프라인 메시지는 DB에 저장했다가 사용자가 접속 시 동기화합니다. 수평 확장이 용이하도록 WebSocket 서버는 상태를 덜 가지도록 설계하고, Redis를 세션 스토어로 사용합니다. 주요 병목은 DB 쓰기와 WebSocket 커넥션 수이므로, 샤딩과 서버 풀 관리를 통해 해결합니다.
- 중복 문자가 없는 가장 긴 부분 문자열을 찾으세요. (코딩, 슬라이딩 윈도우)좋은 답변이 다루는 것
- 슬라이딩 윈도우 (투 포인터)
- 해시 셋 또는 맵으로 중복 검사
- 시간 복잡도 O(n), 공간 복잡도 O(min(m, n))
- 엣지 케이스: 빈 문자열, 모든 문자가 고유
샘플 답변 보기
중복 문자가 없는 가장 긴 부분 문자열을 찾는 문제는 슬라이딩 윈도우 기법으로 O(n) 시간에 해결할 수 있습니다. 왼쪽 포인터와 오른쪽 포인터를 사용하여 윈도우를 확장하고, 중복이 발생하면 왼쪽 포인터를 중복 문자의 다음 위치로 이동시킵니다. 문자와 인덱스를 맵에 저장하여 빠르게 위치를 찾습니다. 최대 윈도우 길이를 계속 갱신합니다. 공간 복잡도는 사용된 문자 집합의 크기에 비례하며, 최대 O(min(n, 문자 종류 수))입니다. 아래는 Python 구현입니다.
참고 코드python def lengthOfLongestSubstring(s): char_map = {} # 문자 -> 최근 인덱스 left = 0 max_len = 0 for right, ch in enumerate(s): if ch in char_map and char_map[ch] >= left: left = char_map[ch] + 1 char_map[ch] = right max_len = max(max_len, right - left + 1) return max_len
준비 팁
- 16가지 리더십 원칙을 내면화하고 각 원칙에 대해 2-3개의 STAR 스토리를 준비하여 실제로 보여주세요.
- 면접 환경을 시뮬레이션하기 위해 화이트보드나 IDE 없이 코딩 연습을 하세요. 사고 과정을 명확하게 전달하는 데 집중하세요.
- 시스템 디자인을 위해 확장성, 로드 밸런싱, 캐싱, 데이터베이스(SQL vs NoSQL)의 기본을 공부하고 인기 있는 시스템 설계를 연습하세요.
- 해결책에 뛰어들기 전에 항상 명확한 질문을 하세요. Amazon은 고객 집착과 요구 사항을 깊이 이해하는 것을 중요시합니다.
- 트레이드오프와 대체 접근 방식에 대해 논의할 준비를 하세요. 면접관은 옵션을 평가하고 정보에 기반한 결정을 내리는 능력을 보고 싶어합니다.
자주 묻는 질문
Amazon 면접의 일반적인 라운드는 어떻게 되나요?
프로세스는 코딩 및 업무 스타일 질문이 포함된 온라인 평가(OA), 전화 면접, 그리고 4-5회의 면접(코딩 2회, 시스템 디자인 1회(시니어 역할), 행동/LP 중심 2회)으로 구성된 현장(또는 가상) 루프가 포함됩니다.
Amazon 면접의 난이도는 어떤가요?
Amazon 면접은 문제 해결과 LP 정렬에 높은 기준을 요구하기 때문에 도전적입니다. 성공하려면 견고한 DSA, 시스템 디자인 지식, 진정성 있는 행동 예시가 필요합니다.
Amazon 면접 프로세스는 얼마나 걸리나요?
지원서 제출부터 OA 및 전화 면접까지 보통 2-4주, 역할과 위치에 따라 현장 루프 일정에 1-2주가 더 소요됩니다.
Amazon은 지원자에게서 가장 중요하게 여기는 것은 무엇인가요?
Amazon은 문제 해결 능력, 리더십 원칙(특히 고객 집착과 주인 의식)과의 정렬, 기술적 결정을 깊이 파고드는 능력을 중요시합니다.
Amazon 면접에서 어떻게 두각을 나타낼 수 있나요?
스토리를 원칙에 맞게 조정하여 Amazon의 원칙에 대한 깊은 지식을 보여주고, 행동 편향을 보여주며, 기술 문제에서 사고 과정을 명확하게 설명하세요. 데이터 중심적이고 고객 중심적인 접근도 지원자를 돋보이게 합니다.
즉각적인 AI 피드백으로 Amazon 스타일 질문 연습하기
이력서를 업로드하면 Offersly가 맞춤형 모의 면접을 진행하고, 관련성, 깊이, 명확성, 정확성에 걸쳐 답변을 평가한 후 수정할 점을 정확히 알려줍니다.