데이터 엔지니어 면접은 세 가지를 봅니다. SQL, 데이터 파이프라인을 어떻게 설계하고 운영하는지, 그리고 규모와 장애를 어떻게 추론하는지입니다. 아래에는 지원자가 보통 마주치는 순서대로 정리한 20개의 질문과 응용할 수 있는 답변이 있습니다. SQL 예제는 발행 전에 작은 샘플 데이터베이스에서 실행해 검증했고, 표시된 결과는 실제 출력입니다.
SQL 질문
1. 회사별 또는 전체에서 두 번째로 높은 연봉 찾기
DENSE_RANK를 사용하세요. 동점은 같은 순위를 공유하므로 "두 번째로 높은"은 두 번째로 큰 서로 다른 값을 의미합니다.
SELECT name, salary
FROM (
SELECT name, salary, DENSE_RANK() OVER (ORDER BY salary DESC) AS r
FROM employees
) t
WHERE r = 2;
연봉이 150, 130, 130, 110, 90, 70인 테이블에서 이 쿼리는 130을 받는 두 사람을 반환합니다. 왜 RANK(동점 뒤 순위를 건너뜀)나 ROW_NUMBER(동점을 임의로 처리함) 대신 DENSE_RANK를 선택했는지 설명하세요.
2. 부서별 상위 두 명의 소득자
SELECT dept, name, salary
FROM (
SELECT dept, name, salary,
RANK() OVER (PARTITION BY dept ORDER BY salary DESC) AS r
FROM employees
) t
WHERE r <= 2;
PARTITION BY는 부서마다 순위를 다시 시작합니다. RANK를 쓰면 연봉이 동점일 때 두 행보다 많이 반환될 수 있다는 점을 언급하세요.
3. 고객별 누적 합계
SELECT customer, order_date, amount,
SUM(amount) OVER (PARTITION BY customer ORDER BY order_date) AS running_total
FROM orders;
날짜가 증가하는 순서로 주문이 10, 20, 30인 고객의 경우 누적 합계는 10, 30, 60입니다.
4. 중복 행 제거하고 첫 번째만 남기기
SELECT id, user_id
FROM (
SELECT id, user_id,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY id) AS rn
FROM events
) t
WHERE rn = 1;
여기서는 그룹당 정확히 한 행을 원하므로 ROW_NUMBER가 맞습니다. 실제 테이블에서 어떤 중복을 남길지 어떻게 결정할지 말할 준비를 하세요(최신 타임스탬프, 가장 완전한 레코드).
5. 이전 행과의 차이
SELECT order_date, amount,
amount - LAG(amount) OVER (ORDER BY order_date) AS change
FROM orders
WHERE customer = 'A';
첫 번째 행의 차이는 NULL입니다. 이전 행이 없기 때문입니다. 이 부분은 흔한 후속 질문이므로 소리 내어 언급하세요.
6. WHERE와 HAVING의 차이는 무엇인가요?
WHERE는 그룹화 전에 행을 필터링하고, HAVING은 집계 후 그룹을 필터링합니다. WHERE에서는 COUNT(*) 같은 집계 함수를 사용할 수 없습니다.
7. 느린 쿼리를 어떻게 빠르게 하나요?
- 무엇이든 바꾸기 전에 쿼리 실행 계획을 확인합니다.
- 필터가 인덱스를 사용할 수 있는지, 컬럼에 적용된 함수가 인덱스 사용을 막고 있지 않은지 확인합니다.
- 스캔하는 데이터를 줄입니다. 필요한 컬럼만 선택하고, 필터를 일찍 적용하며, 큰 테이블은 날짜로 파티션합니다.
- 반복되는 서브쿼리를 조인이나 공통 테이블 식으로 바꾸고, 조인에서 의도치 않은 행 증폭이 있는지 확인합니다.
- 웨어하우스라면 클러스터링 또는 정렬 키와 각 쿼리가 읽는 데이터 양을 확인합니다.
파이프라인 설계 질문
8. ETL인가요, ELT인가요?
ETL은 데이터를 로드하기 전에 변환합니다. ELT는 원시 데이터를 먼저 로드하고 웨어하우스 안에서 변환합니다. 클라우드 웨어하우스에서는 스토리지가 저렴하고, 원시 데이터를 재처리용으로 남겨둘 수 있으며, 변환을 SQL로 버전 관리할 수 있어서 ELT가 일반적입니다. 개인정보 제거처럼 데이터가 적재되기 전에 정제하거나 마스킹해야 할 때는 여전히 ETL이 적합합니다.
9. 배치인가요, 스트리밍인가요?
데이터가 얼마나 최신이어야 하는지에 따라 선택하세요. 배치는 더 단순하고 저렴하며 일일 리포트에 적합합니다. 스트리밍은 사기 탐지나 실시간 대시보드처럼 분이나 초 단위가 중요한 경우에 적합합니다. 많은 시스템이 둘 다 사용합니다. 기술만이 아니라 어떤 비즈니스 의사결정을 지원하는지 말하세요.
10. 멱등성 있는 파이프라인이란 무엇이고 왜 중요한가요?
두 번 실행해도 한 번 실행한 것과 같은 결과를 냅니다. 작업은 실패하고 재시도되기 때문에 중요합니다. 로드를 멱등성 있게 만들려면 파티션 단위로 쓰고 해당 파티션을 덮어쓰거나, 안정적인 키를 사용한 upsert를 사용해 재시도가 중복을 만들지 않게 하세요.
11. 늦게 도착하거나 순서가 뒤바뀐 데이터는 어떻게 처리하나요?
도착 시간이 아니라 이벤트 시간을 사용하고, 데이터가 얼마나 늦게 도착할 수 있는지 정의하세요. 스트리밍 시스템에서는 워터마크가 윈도우를 닫기 전에 얼마나 기다릴지 작업에 알려줍니다. 배치 테이블에서는 최근 파티션을 일정에 따라 재처리하거나, 영향을 받은 날짜를 다시 쓰는 보정 프로세스를 유지하세요.
12. 장애와 재시도를 고려해 어떻게 설계하나요?
단계를 작고 멱등성 있게, 독립적으로 다시 실행할 수 있게 만드세요. 상태는 작업 외부에 저장하세요. 오류뿐 아니라 데이터 누락이나 지연도 알림을 보내세요. 재시도 횟수에 제한을 두고, 반복 실패는 사람이 확인하는 곳으로 보내세요.
13. 데이터 품질은 어떻게 확인하나요?
| 검사 | 예시 |
|---|---|
| 완전성 | 행 수가 허용 범위 내에서 소스와 일치 |
| 유일성 | 기본 키에 중복이 없음 |
| 유효성 | 값이 예상 범위나 집합에 속함 |
| 최신성 | 가장 최근 타임스탬프가 충분히 최근임 |
| 일관성 | 관련 테이블 간 합계가 일치 |
파이프라인 안에서 검사를 실행하고 조기에 실패하게 하여, 나쁜 데이터가 리포트에 도달하지 않게 하세요.
모델링 및 저장소 관련 질문
14. 스타 스키마란 무엇인가요?
중앙의 팩트 테이블에는 주문과 같은 측정 가능한 이벤트가 저장되고, 고객, 제품, 날짜처럼 이를 설명하는 디멘션 테이블과 연결됩니다. 쿼리가 쉽고 집계가 빠릅니다. 스노우플레이크 스키마는 디멘션을 더 정규화하여 공간을 절약하지만 조인이 늘어납니다.
15. 느리게 변하는 디멘션이란 무엇인가요?
시간이 지나면서 변하는 디멘션 속성입니다. 예를 들어 고객의 주소가 있습니다. Type 1은 기존 값을 덮어쓰고 이력을 잃습니다. Type 2는 시작일과 종료일이 있는 새 행을 추가하여 이력을 유지합니다. 어떤 속성에 어떤 방식을 선택할지, 그리고 그 이유를 말하세요.
16. 대용량 테이블은 어떻게 파티셔닝하나요?
대부분의 쿼리가 필터링하는 컬럼, 보통 날짜를 기준으로 파티셔닝합니다. 해당 컬럼으로 필터링하는 쿼리는 일치하는 파티션만 읽습니다. 고유값이 너무 많은 컬럼은 피하세요. 작은 파티션이 엄청나게 많이 생깁니다.
17. 분석용으로 어떤 파일 형식을 사용하며, 그 이유는 무엇인가요?
Parquet 같은 컬럼 기반 형식은 각 컬럼을 함께 저장하므로, 몇 개 컬럼만 읽는 쿼리는 나머지를 건너뛰고 압축도 잘 됩니다. CSV나 JSON 같은 행 기반 형식은 생성하고 읽기 쉽지만 대규모에서는 느리고 용량이 큽니다.
분산 처리 관련 질문
18. Spark에서 셔플이란 무엇이며, 왜 비용이 많이 드나요?
셔플은 조인이나 그룹바이처럼 같은 키를 가진 행들이 함께 모이도록 머신 간에 데이터를 이동시키는 것입니다. 네트워크 전송, 디스크 쓰기, 정렬 비용이 발생합니다. 줄이려면 일찍 필터링하고, 적절한 파티션 수를 선택하고, 조인에서 작은 테이블을 브로드캐스트하여 큰 테이블이 이동하지 않도록 하세요.
19. 데이터 스큐는 어떻게 처리하나요?
스큐는 소수의 키가 대부분의 데이터를 차지하여 하나의 태스크가 나머지보다 훨씬 오래 실행되는 현상입니다. 핫 키에 랜덤 접미사를 붙여 솔팅하고 두 번 집계하기, 조인의 작은 쪽을 브로드캐스트하기, 핫 키를 별도로 필터링하거나 처리하기 등의 방법이 있습니다.
20. Airflow 같은 오케스트레이터는 무엇을 하나요?
각 태스크가 다른 태스크에 의존하는 방향성 그래프로 정의된 태스크를 순서대로 스케줄링하고 실행합니다. 재시도, 백필, 알림을 처리하고 무엇이 실행되었고 무엇이 실패했는지 보여줍니다. 작업을 조율하는 역할입니다. 그 자체로 무거운 처리를 하도록 만들어진 것이 아니며, 무거운 처리는 웨어하우스나 처리 엔진에서 실행해야 합니다.
준비 방법
- 위의 윈도우 함수 패턴을 보지 않고도 작성할 수 있을 때까지 연습하세요.
- 직접 구축한 파이프라인 하나를 준비하세요. 데이터 규모, 겪은 장애, 무엇을 바꿨는지 포함해서요.
- 화이트보드에 간단한 아키텍처를 그리고, 특정 단계가 실패하면 무슨 일이 일어나는지 설명할 준비를 하세요.
- 이력서를 검토하세요. 이력서에 있는 모든 도구가 질문 대상이 될 수 있습니다.
관련 연습 자료로는 Kafka interview questions, Databricks interview questions, Snowflake interview questions, system design interview questions 가이드를 참고하세요.
소리 내어 자신의 말로 연습하세요. 이후에 녹취록을 보면 어디서 횡설수설했는지, 핵심을 놓쳤는지 알 수 있습니다. 실시간 면접이나 평가에서 AI 도구 사용에 관한 고용주의 규칙을 따르세요.
YesToTheOffer와 함께 답변을 연습하세요
소리 내어 리허설하고, 자신의 이력서를 바탕으로 답변을 만들고, 이후에 녹취록을 검토하세요. 30분 무료, 구독 없음.



