주니어 Python 백엔드 개발자 면접 질문

Milad Bonakdar
작성자
Python 기본, Django/Flask, REST API, 데이터베이스, 테스트, Git, Docker, API 보안을 다루는 30개 질문으로 주니어 백엔드 면접을 준비하세요.
주니어 Python 백엔드 면접에서 준비할 핵심
주니어 Python 백엔드 개발자 면접에서는 Python의 기본 동작을 설명하고, 간단한 HTTP 라우트를 만들고, REST API와 SQL 데이터, 테스트, Git, 기본 API 보안을 이해한다는 것을 보여줘야 합니다. 이 가이드는 소리 내어 연습하기 좋은 30개의 일반적인 질문과 답변을 제공합니다.
다음 세 단계로 활용하세요.
- 먼저 예시 답변을 보지 않고 각 질문에 답해 봅니다.
- 그런 다음 인증과 데이터베이스 모델이 포함된 CRUD API처럼 직접 만든 작은 프로젝트와 답변을 연결합니다.
- 마지막으로 Django와 Flask를 언제 선택할지, 인덱스가 읽기를 빠르게 하지만 쓰기 비용을 늘리는 이유, 엔드포인트를 어떻게 보호할지 같은 판단 기준을 연습합니다.
채용 공고에 FastAPI가 있다면 라우팅, 검증, async, 의존성 개념도 준비하세요. 아래 기본기는 그래도 대부분의 주니어 Python 백엔드 면접에서 확인하는 내용을 다룹니다.
Python 기본 사항 (10개 질문)
1. Python에서 list와 tuple의 차이점은 무엇입니까?
답변:
list: 가변적(변경 가능), 대괄호[]로 정의, 튜플보다 느림.tuple: 불변적(변경 불가능), 괄호()로 정의, 리스트보다 빠름, 딕셔너리 키로 사용 가능.
예시:
희소성: 흔함 난이도: 쉬움
2. is와 ==의 차이점을 설명하세요.
답변:
==: 값의 동등성을 확인합니다 (객체가 동일한 값을 가지고 있는지?).is: 참조의 동등성을 확인합니다 (변수가 메모리에서 정확히 동일한 객체를 가리키고 있는지?).
예시:
희소성: 흔함 난이도: 쉬움
3. Python 데코레이터는 무엇이며 어떻게 작동합니까?
답변: 데코레이터는 Python에서 기존 객체의 구조를 수정하지 않고도 새로운 기능을 추가할 수 있도록 하는 디자인 패턴입니다. 데코레이터는 일반적으로 데코레이트하려는 함수 정의 전에 호출됩니다.
예시:
희소성: 흔함 난이도: 중간
4. *args와 **kwargs의 차이점은 무엇입니까?
답변:
*args: 함수에 가변적인 수의 비 키워드 인수를 전달할 수 있습니다. 이를 튜플로 수집합니다.**kwargs: 함수에 가변적인 수의 키워드 인수를 전달할 수 있습니다. 이를 딕셔너리로 수집합니다.
예시:
희소성: 흔함 난이도: 쉬움
5. 리스트 컴프리헨션을 설명하세요.
답변: 리스트 컴프리헨션은 리스트를 생성하는 간결한 방법을 제공합니다. 일반적인 응용 프로그램은 각 요소가 다른 시퀀스 또는 반복 가능 객체의 각 멤버에 적용된 일부 연산의 결과인 새 리스트를 만들거나 특정 조건을 만족하는 해당 요소의 하위 시퀀스를 만드는 것입니다.
예시:
희소성: 흔함 난이도: 쉬움
6. 제너레이터와 yield 키워드는 무엇입니까?
답변: 제너레이터는 반복자를 만드는 간단한 방법입니다. 반복 가능한 객체(반복자)를 반환하는 함수입니다(한 번에 하나의 값). yield 키워드는 return과 유사하게 사용되지만, 함수는 제너레이터를 반환합니다.
예시:
장점: 메모리 효율적 (지연 평가).
희소성: 중간 난이도: 중간
7. Python에서 메모리 관리는 어떻게 작동합니까?
답변: Python은 개인 힙 공간을 사용하여 메모리를 관리합니다. 모든 Python 객체와 데이터 구조는 개인 힙에 위치합니다. 프로그래머는 이 개인 힙에 접근할 수 없습니다. 인터프리터가 이 Python 개인 힙을 관리합니다. Python에는 또한 내장 가비지 수집기가 있어 사용하지 않는 모든 메모리를 재활용하여 힙 공간에서 사용할 수 있도록 합니다.
희소성: 중간 난이도: 중간
8. GIL(Global Interpreter Lock)은 무엇입니까?
답변: 표준 CPython에서 GIL(Global Interpreter Lock)은 Python 객체의 메모리 관리를 보호하면서 한 번에 하나의 스레드만 Python 바이트코드를 실행하도록 하는 뮤텍스입니다. 그래서 CPU 바운드 멀티스레드 Python 코드는 여러 CPU 코어로 잘 확장되지 않는 경우가 많습니다. 네트워크나 파일 I/O처럼 블로킹 작업 중에는 GIL이 해제되므로 I/O 바운드 스레드는 여전히 도움이 될 수 있습니다.
현재 참고: Python 3.13+에는 GIL을 비활성화할 수 있는 선택적 free-threaded 빌드도 있습니다. 다만 이는 특별한 빌드 선택이며, 대부분의 주니어 면접에서 가정하는 기본 동작은 아닙니다.
영향: CPU 바운드 작업에는 multiprocessing, 네이티브 확장, 백그라운드 워커를 고려합니다. I/O 바운드 웹 작업에는 스레드나 async 패턴이 여전히 유용할 수 있습니다.
희소성: 중간 난이도: 어려움
9. 얕은 복사와 깊은 복사의 차이점을 설명하세요.
답변:
- 얕은 복사: 원본 요소의 참조를 저장하는 새 객체를 만듭니다. 따라서 얕은 복사는 중첩된 객체의 복사본을 만들지 않고 중첩된 객체의 참조만 복사합니다.
- 깊은 복사: 새 객체를 만들고 원본 요소에 있는 중첩된 객체의 복사본을 재귀적으로 추가합니다.
예시:
희소성: 중간 난이도: 중간
10. Python의 내장 데이터 유형은 무엇입니까?
답변:
- 숫자: int, float, complex
- 시퀀스: list, tuple, range
- 텍스트: str
- 매핑: dict
- 세트: set, frozenset
- 부울: bool
- 이진: bytes, bytearray, memoryview
희소성: 흔함 난이도: 쉬움
웹 프레임워크 (Django/Flask) (10개 질문)
11. Django와 Flask를 비교하세요.
답변:
- Django: "배터리 포함" 프레임워크. ORM, 인증, 관리자 패널 등이 포함되어 있습니다. 크고 복잡한 애플리케이션에 적합합니다. MVT(Model-View-Template) 패턴을 따릅니다.
- Flask: 마이크로 프레임워크. 최소한의 기능만 제공하며 유연합니다. 원하는 도구(ORM, 인증 등)를 선택할 수 있습니다. 더 작은 앱, 마이크로서비스 또는 세분화된 제어가 필요한 경우에 적합합니다.
희소성: 흔함 난이도: 쉬움
12. MVC 패턴(및 Django의 MVT)은 무엇입니까?
답변:
- MVC(Model-View-Controller): 애플리케이션을 세 가지 주요 논리적 구성 요소(모델(데이터), 뷰(사용자 인터페이스) 및 컨트롤러(입력 처리))로 분리하는 아키텍처 패턴입니다.
- MVT(Model-View-Template): Django의 변형.
- 모델: 데이터 구조(데이터베이스).
- 뷰: 비즈니스 로직(MVC의 컨트롤러와 유사).
- 템플릿: 프레젠테이션 레이어(MVC의 뷰와 유사).
희소성: 흔함 난이도: 중간
13. Django ORM을 설명하세요.
답변: Django ORM(Object-Relational Mapping)을 사용하면 SQL 대신 Python 코드를 사용하여 SQLite, PostgreSQL 및 MySQL과 같은 데이터베이스와 상호 작용할 수 있습니다. 데이터 모델을 Python 클래스로 정의하면 Django가 데이터베이스 테이블 생성 및 쿼리를 처리합니다.
예시:
희소성: 흔함 난이도: 중간
14. Django에서 마이그레이션이란 무엇입니까?
답변: 마이그레이션은 모델에 대한 변경 사항(필드 추가, 모델 삭제 등)을 데이터베이스 스키마에 전파하는 Django의 방법입니다. 마이그레이션은 거의 자동으로 수행되도록 설계되었지만 마이그레이션을 수행해야 하는 시기, 실행해야 하는 시기 및 발생할 수 있는 일반적인 문제를 알아야 합니다.
명령어:
makemigrations: 모델 변경 사항을 기반으로 새 마이그레이션을 만듭니다.migrate: 마이그레이션을 데이터베이스에 적용합니다.
희소성: 흔함 난이도: 쉬움
15. Flask는 라우팅을 어떻게 처리합니까?
답변: Flask는 @app.route() 데코레이터를 사용하여 함수를 URL에 바인딩합니다.
예시:
희소성: 흔함 난이도: 쉬움
16. Flask Blueprint는 무엇입니까?
답변: Blueprint는 Flask 애플리케이션을 모듈로 구성하는 방법입니다. 관련 경로, 템플릿 및 정적 파일을 함께 그룹화할 수 있습니다. 이는 Flask 애플리케이션을 확장하는 데 필수적입니다.
희소성: 중간 난이도: 중간
17. Django에서 미들웨어의 개념을 설명하세요.
답변: 미들웨어는 Django의 요청/응답 처리 후크 프레임워크입니다. Django의 입력 또는 출력을 전역적으로 변경하기 위한 가볍고 낮은 수준의 "플러그인" 시스템입니다. 각 미들웨어 구성 요소는 특정 기능을 수행합니다.
예시: AuthenticationMiddleware, SessionMiddleware, CsrfViewMiddleware.
희소성: 중간 난이도: 중간
18. Flask에서 세션을 어떻게 처리합니까?
답변: Flask는 서명된 쿠키를 사용하여 세션 콘텐츠를 저장합니다. 사용자는 쿠키의 내용을 볼 수 있지만 서명에 사용된 비밀 키를 모르는 한 수정할 수 없습니다.
예시:
희소성: 중간 난이도: 중간
19. Django에서 settings.py의 목적은 무엇입니까?
답변: settings.py는 Django 프로젝트의 주요 구성 파일입니다. 여기에는 데이터베이스 설정, 설치된 앱, 미들웨어, 템플릿 설정, 정적 파일 경로 및 보안 키를 포함한 프로젝트의 모든 구성이 포함되어 있습니다.
희소성: 흔함 난이도: 쉬움
20. Django에서 CSRF 공격을 어떻게 방지합니까?
답변: Django에는 교차 사이트 요청 위조(CSRF)에 대한 기본 제공 보호 기능이 있습니다. 각 사용자 세션에 대해 생성되는 CSRF 토큰을 사용합니다. 이 토큰은 모든 POST 요청에 포함되어야 합니다(일반적으로 숨겨진 양식 필드로). 서버는 요청을 처리하기 전에 토큰을 확인합니다.
희소성: 중간 난이도: 중간
데이터베이스 및 일반적인 백엔드 (10개 질문)
21. SQL vs NoSQL
답변:
- SQL (관계형): 구조화된 데이터, 미리 정의된 스키마, 테이블, 행, 열. 복잡한 쿼리 및 트랜잭션(ACID)에 적합합니다. 예: PostgreSQL, MySQL.
- NoSQL (비 관계형): 비정형 또는 반정형 데이터, 동적 스키마, 문서, 키-값 쌍. 확장성, 빠른 프로토타입 제작 및 대규모 데이터 세트에 적합합니다. 예: MongoDB, Redis.
희소성: 흔함 난이도: 쉬움
22. API란 무엇입니까?
답변: API는 Application Programming Interface의 약자입니다. 서로 다른 소프트웨어 애플리케이션이 서로 통신할 수 있도록 하는 규칙 및 프로토콜 집합입니다. 백엔드 개발에서는 일반적으로 프런트엔드(웹, 모바일)가 백엔드 데이터 및 로직과 상호 작용할 수 있도록 RESTful API 또는 GraphQL API를 구축합니다.
희소성: 흔함 난이도: 쉬움
23. RESTful API 원칙을 설명하세요.
답변:
- 클라이언트-서버: 관심사 분리.
- 상태 비저장: 요청 간에 서버에 클라이언트 컨텍스트가 저장되지 않습니다.
- 캐시 가능: 응답은 캐시 가능한지 여부를 스스로 정의해야 합니다.
- 균일한 인터페이스: 통신하는 표준화된 방법(HTTP 메서드: GET, POST, PUT, DELETE).
- 계층화된 시스템: 클라이언트는 일반적으로 최종 서버에 직접 연결되어 있는지 아니면 중간에 있는 중개자에 연결되어 있는지 알 수 없습니다.
희소성: 흔함 난이도: 중간
24. HTTP 상태 코드는 무엇입니까? 예를 들어보세요.
답변: HTTP 상태 코드는 요청이 성공했는지, 실패했는지, 리디렉션되었는지, 또는 추가 조치가 필요한지 클라이언트에 알려주는 표준 응답 코드입니다.
- 2xx 성공: 200 OK, 201 Created.
- 3xx 리디렉션: 301 Moved Permanently, 304 Not Modified.
- 4xx 클라이언트 오류: 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found.
- 5xx 서버 오류: 500 Internal Server Error, 502 Bad Gateway.
희소성: 흔함 난이도: 쉬움
25. 데이터베이스 인덱싱이란 무엇입니까?
답변: 인덱싱은 데이터베이스에서 데이터를 빠르게 찾고 접근하는 데 사용되는 데이터 구조 기술입니다. 인덱스는 몇 개의 데이터베이스 열을 사용하여 생성됩니다. 인덱스 데이터 구조를 유지 관리하기 위해 추가적인 쓰기 및 저장 공간이 필요하지만 데이터베이스 테이블에서 데이터 검색 작업의 속도를 향상시킵니다.
희소성: 중간 난이도: 중간
26. 데이터베이스에서 ACID 속성의 개념을 설명하세요.
답변:
- 원자성: 트랜잭션의 모든 작업이 성공하거나 모든 작업이 롤백됩니다.
- 일관성: 성공적으로 커밋된 트랜잭션 시 데이터베이스가 적절하게 상태를 변경합니다.
- 격리성: 트랜잭션이 서로 독립적이고 투명하게 작동할 수 있도록 합니다.
- 내구성: 시스템 오류 발생 시 커밋된 트랜잭션의 결과 또는 효과가 지속되도록 합니다.
희소성: 중간 난이도: 중간
27. Docker는 무엇이며 왜 사용됩니까?
답변: Docker는 컨테이너에서 애플리케이션을 개발, 배송 및 실행하기 위한 플랫폼입니다. 컨테이너는 애플리케이션을 실행하는 데 필요한 모든 것(코드, 런타임, 시스템 도구, 라이브러리)을 포함하는 가볍고 휴대 가능하며 자급 자족적인 단위입니다. "내 컴퓨터에서는 작동합니다" 문제를 해결하고 다양한 환경(개발, 스테이징, 프로덕션)에서 일관성을 보장합니다.
희소성: 흔함 난이도: 중간
28. 단위 테스트란 무엇입니까?
답변: 단위 테스트는 소프트웨어의 개별 단위 또는 구성 요소를 테스트하는 소프트웨어 테스트 방법입니다. 목적은 소프트웨어 코드의 각 단위가 예상대로 작동하는지 확인하는 것입니다. Python에서는 unittest 프레임워크 또는 pytest가 일반적으로 사용됩니다.
희소성: 흔함 난이도: 쉬움
29. Git은 무엇이며 왜 중요합니까?
답변: Git은 분산 버전 관리 시스템입니다. 소프트웨어 개발 중에 소스 코드의 변경 사항을 추적합니다. 여러 개발자가 동시에 동일한 프로젝트에서 작업하고, 코드의 여러 버전(분기)을 관리하고, 필요한 경우 이전 상태로 되돌릴 수 있습니다.
희소성: 흔함 난이도: 쉬움
30. 백엔드 API를 어떻게 보호합니까?
답변:
- 인증: 세션, JWT, OAuth 등으로 사용자가 누구인지 확인합니다.
- 권한 부여: 로그인 시점뿐 아니라 보호된 각 리소스에서 사용자가 접근할 수 있는지 확인합니다.
- HTTPS: 전송 중인 데이터를 암호화합니다.
- 입력 유효성 검사: 처리 전에 타입, 길이, 형식, 필수 필드를 검증합니다.
- 안전한 데이터베이스 접근: 문자열로 SQL을 조립하지 말고 파라미터화된 쿼리나 ORM을 사용합니다.
- 속도 제한: 무차별 대입, 스크래핑, 과도한 트래픽을 줄입니다.
- CORS: 필요한 경우 브라우저 출처를 제한하되, CORS를 인증처럼 취급하지 않습니다.
- 오류 처리와 로깅: 안전한 오류 메시지를 반환하고 디버깅에 필요한 충분한 맥락을 기록합니다.
희소성: 중간 난이도: 중간


