FBV, CBV에 대해 각각 장단점 위주로 설명해주세요.
FBV
함수에 기반을 둔 방법
장점: 편하게 구현이 가능, 가독성이 좋음, 데코레이터 사용이 명료함
단점: 확장, 재사용이 힘듬
CBV
클래스에 기반을 둔 방법
장점: 확장, 재사용이 용이, 다중 상속, Mixins 등 사용이 가능, http Method를 클래스 안에서 나누어 처리, 강력한 Generic Class View가 있음
단점: 가독성이 떨어짐(코드 흐름이 암시적), 상속, 믹스되면서 코드를 이해하려면 상속 코드를 찾아다녀야 함, 데코레이터를 사용하려면 별도로 import or method 생성
docker 이미지와 도커 컨테이너의 차이는 무엇인가요?
docker 이미지
컨테이너를 만드는 데 사용되는 읽기 전용 템플릿
컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 도커파일을 만든 후 dockerfile을 빌드하여 이미지를 생성
docker 컨테이너
도커 이미지를 실행한 상태
이미지의 목적에 맞는 파일이 들어있는 파일 시스템과 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간이 생성 -> 컨테이너
웹어플리케이션서버와 웹서버의 차이에 대해서 설명해주세요
웹 서버
웹 브라우저 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠(.html .jpeg .css 등)를 제공하는 컴퓨터 프로그램
WAS를 거치지 않고 바로 정적인 컨텐츠 자원을 제공
동적인 컨텐츠 제공을 위해 요청을 WAS에 보내고 그에 대한 응답을 전달
WAS
DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Application Server
HTTP를 통해 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어(소프트웨어 엔진)이다.
“웹 컨테이너(Web Container)” 혹은 “서블릿 컨테이너(Servlet Container)”라고도 불린다.
django rest framework를 사용하는 이유가 뭔가요?
빠른 API 개발: API 개발을 위한 기능과 유팉리티 제공, 반복적 작업의 최소화
유연한 시리얼라이저: 직렬화, 역직렬화를 지원, 데이터 모델과 JSON 등 다른 형식의 데이터 간 변환 작업을 간편하게 처리
인증, 권한 관리: 사용자 인증, 토큰 기반, OAuth, JWT 등 다양한 인증 방식 지원
API 문서화: API의 엔드포인트, 요청 및 응답 형식, 인증 방법 등에 대한 자동화된 문서를 생성
재사용 가능한 컴포넌트: 코드의 재사용성을 높임, 뷰, 시리얼라이저, 믹스인 등 컴포넌트를 사용하여 쉽게 구현하고 코드의 일관성을 유지
테스트 지원: API 테스르를 자동화하고 유닛 테스트 및 통합 테스트를 쉽게 작성하여 app의 품질과 안정성을 향상
ForeignKey, OneToOneField, ManyToManyField의 차이점을 설명해주세요.
ForeignKey: 1:N
OneToOne: 1:1
ManyToMany: M:N
Django에서 쿼리셋(QuerySet)의 eager loading, lazy loading에 대해 설명해주세요.
lazy loading(지연 로딩) - orm의 단점 중 하나
필요한 시점에서 쿼리를 날린다.
해당 데이터가 필요하지 않으면 가져오지 않는 것
- 비효율성: 불필요한 쿼리가 여러번 수행될 수 있다.
- N+1 problem: 외래키 관계에 있는 데이터를 호출할때 발생, 일단 참조 모델 데이터를 가져오는 것이 아닌 필드만 가져온다.
eager loading(즉시 로딩)
필요할 때 하나씩 가져오는게 아닌 로딩시 필요한 걸 다 가져오는 것
django에서는 이를 select_related, prepatch_related로 구현되어 있다.
select_related: JOIN을 통해 데이터를 즉시 로딩, 역참조 불가
prepatch_related: 추가 쿼리 셋을 이용해 데이터를 가져오고 애플리케이션 단에서 합쳐서 데이터를 반환, 역참조 가능