Python 프레임워크 주니어 기술면접
새 면접Q. Django에서 QuerySet의 지연 평가(Lazy Evaluation)란 무엇이며, 이것이 성능에 어떤 영향을 미치나요? 실제로 데이터베이스 쿼리가 실행되는 시점은 언제인가요?
지연 평가는 QuerySet을 생성할 때 즉시 데이터베이스 쿼리를 실행하지 않고, 실제로 데이터가 필요한 시점까지 쿼리 실행을 미루는 것입니다. 이를 통해 불필요한 데이터베이스 접근을 줄이고 여러 필터를 체이닝해도 한 번의 쿼리로 최적화할 수 있습니다. 실제 쿼리는 반복문(for), 리스트 변환(list()), 슬라이싱, len(), bool() 등으로 QuerySet을 평가할 때 실행됩니다. 이 특성을 이해하면 N+1 쿼리 문제를 예방하고 효율적인 데이터베이스 접근 패턴을 구현할 수 있습니다.
- • QuerySet 생성 시점과 실행 시점이 분리되어 있음
- • 여러 필터를 체이닝해도 한 번의 쿼리로 최적화
- • 반복, 슬라이싱, 형변환 등에서 실제 쿼리 실행
- • 불필요한 DB 접근을 줄여 성능 향상
QuerySet을 재사용할 때 캐싱은 어떻게 동작하며, 언제 캐시가 무효화되나요?
Q. Flask의 애플리케이션 컨텍스트(Application Context)와 요청 컨텍스트(Request Context)의 차이점은 무엇이며, 각각 언제 생성되고 소멸되나요?
애플리케이션 컨텍스트는 Flask 앱 전체의 설정과 상태를 관리하며, current_app과 g 객체를 포함합니다. 요청 컨텍스트는 개별 HTTP 요청에 대한 정보를 담고 있으며, request와 session 객체를 포함합니다. 애플리케이션 컨텍스트는 앱이 시작될 때 또는 명시적으로 push될 때 생성되고, 요청 컨텍스트는 각 HTTP 요청마다 자동으로 생성되어 응답 후 소멸됩니다. 요청 컨텍스트가 생성될 때 애플리케이션 컨텍스트도 자동으로 함께 생성되지만, 애플리케이션 컨텍스트는 요청 없이도 독립적으로 존재할 수 있습니다.
- • 애플리케이션 컨텍스트는 앱 전체 상태 관리(current_app, g)
- • 요청 컨텍스트는 개별 요청 정보 관리(request, session)
- • 요청 컨텍스트는 각 요청마다 자동 생성/소멸
- • 요청 컨텍스트 생성 시 애플리케이션 컨텍스트도 자동 생성
Flask의 g 객체는 어떤 용도로 사용되며, 요청 간에 데이터가 공유되지 않는 이유는 무엇인가요?
Q. FastAPI의 의존성 주입(Dependency Injection) 시스템은 어떻게 동작하며, Depends를 사용하는 이유와 장점은 무엇인가요?
FastAPI의 의존성 주입은 Depends를 통해 함수나 클래스를 선언하면, 라우트 핸들러 실행 전에 자동으로 해당 의존성을 실행하고 결과를 주입합니다. 이를 통해 데이터베이스 연결, 인증 확인, 공통 파라미터 검증 등의 반복적인 로직을 재사용할 수 있습니다. 의존성은 중첩될 수 있어 복잡한 의존 관계도 표현 가능하며, 자동으로 문서화되고 타입 체킹이 적용됩니다. 또한 테스트 시 의존성을 쉽게 모킹할 수 있어 유닛 테스트 작성이 용이합니다.
- • Depends를 통한 자동 의존성 해결 및 주입
- • 코드 재사용성과 관심사 분리 향상
- • 중첩 의존성 지원으로 복잡한 로직 구성 가능
- • 자동 문서화 및 타입 안정성 제공
FastAPI에서 의존성의 스코프를 관리하는 방법과 yield를 사용한 의존성 정리(cleanup) 패턴은 어떻게 작동하나요?
Q. Django Form에서 clean 메서드와 clean_<fieldname> 메서드의 차이점은 무엇이며, 각각 언제 사용해야 하나요?
clean_<fieldname> 메서드는 특정 필드 하나에 대한 유효성 검증과 정제를 담당하며, 해당 필드의 기본 검증이 통과한 후 실행됩니다. clean 메서드는 모든 필드의 개별 검증이 끝난 후 실행되며, 여러 필드 간의 상호 의존적인 검증이나 전체 폼 수준의 검증을 수행합니다. 예를 들어, 이메일 형식 검증은 clean_email에서, 비밀번호와 비밀번호 확인이 일치하는지는 clean에서 검증합니다. 각 메서드는 정제된 값을 반환해야 하며, 검증 실패 시 ValidationError를 발생시킵니다.
- • clean_<fieldname>은 개별 필드 검증에 사용
- • clean은 여러 필드 간 교차 검증에 사용
- • 실행 순서: 기본 검증 → clean_<fieldname> → clean
- • 검증 실패 시 ValidationError 발생
Django Form의 is_valid() 메서드가 호출될 때 내부적으로 어떤 순서로 검증이 진행되나요?
Q. Flask의 Blueprint는 무엇이며, 대규모 애플리케이션에서 Blueprint를 사용하는 이유와 장점은 무엇인가요?
Blueprint는 Flask 애플리케이션을 모듈화하기 위한 구조로, 라우트, 템플릿, 정적 파일, 에러 핸들러 등을 그룹화할 수 있습니다. 대규모 애플리케이션에서 기능별로 코드를 분리하여 유지보수성을 높이고, 각 모듈을 독립적으로 개발하고 테스트할 수 있습니다. 여러 Blueprint를 조합하여 애플리케이션을 구성할 수 있으며, URL 접두사를 지정하여 라우팅을 체계적으로 관리할 수 있습니다. 또한 Blueprint는 재사용 가능하여 여러 프로젝트에서 동일한 기능을 쉽게 공유할 수 있습니다.
- • 애플리케이션의 모듈화 및 코드 조직화
- • 기능별 독립적인 개발과 테스트 가능
- • URL 접두사를 통한 체계적인 라우팅 관리
- • 재사용 가능한 컴포넌트로 활용
Blueprint를 등록할 때 url_prefix 외에 사용할 수 있는 다른 옵션들은 무엇이 있나요?
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!