django
- 장고에서 app을 나누는 기준에 대해 본인 생각을 말씀해주세요.
- 앱을 나누는 기준은 주로 각 기능들의 독립성에 기반합니다. 예를 들어 사용자 관리, 게시글 관리, 상품 관리 등 각각의 기능을 별도의 앱으로 분리하여 개발하고 관리합니다. 이렇게 하면 각 기능의 독립성을 보장하고 앱 간의 의존성을 최소화할 수 있습니다.
- 장고에서 app 생성시 urls.py는 생성되나요? 생성이 안된다면 왜 안되는지 본인의 생각을 말해주세요.
- 기본적으로 app을 생성할 때 urls.py 파일은 자동으로 생성되지 않습니다. 이는 django에서는 기본적으로 프로젝트 폴더의 urls.py 파일에서 전체 URL 구조를 관리하고, 필요에 따라 각 app에서 별도의 urls.py를 만들어 포함시킬 수 있기 때문입니다.
- 장고에서 미들웨어가 무엇인지 설명해주세요.
- 미들웨어는 요청과 응답 사이에서 다양한 처리를 수행하는 일련의 함수나 클래스입니다. django의 모든 request는 미들웨어를 거치며, 이를 통해 request를 처리하고 response를 반환합니다.
- 미들웨어는 보안 기능, 요청 로깅, 사용자 인증, 세션 관리, 등 다양한 기능을 수행합니다.
- 장고에서 트랜잭션을 처리하기 위한 방법이 어떤것이 있는지, 본인 사용경험 근거하여 설명해주세요.
- django에서 트랜잭션 처리를 위해 django에 내장돼있는 transaction 모듈을 사용합니다. @transaction.atomic 데코레이터나 with transaction.atomic(): 문을 사용하여 코드 블록을 트랜잭션으로 묶을 수 있습니다. 이는 해당 블록 내의 작업이 도중에 실패할 경우 기존 작업들이 롤백되도록 보장합니다.
- FBV, CBV에 대해 각각 장단점 위주로 설명해주세요.
- FBV는 간단하고 직관적이며, 작은 애플리케이션에 적합하지만 중복되는 코드가 많아지고, 복잡한 뷰에서는 관리가 어려워질 수 있습니다.
- CBV는 재사용성과 확장성이 뛰어나며, 코드의 구조화가 잘 되어 있지만 CBV의 다양한 View들과 기능들로 인해 FBV에 비해 더 난이도가 높습니다.
- 장고로 어떤 프로젝트를 하셨고 어떤 에로사항이 었었는지 그리고 어떻게 해결 하셨나요?
- 프로젝트 개발 및 트러블슈팅 경험에 대해 설명합니다.
- AWS 서비스를 어떻게 사용하셨나요? (예: S3, EC2)
- 배포 시 어떤 서비스들을 어떻게 활용했는지 설명합니다.
- docker 이미지와 도커 컨테이너의 차이는 무엇인가요?
- docker 이미지는 서비스 구동에 필요한 패키지, 라이브러리, 소스 코드 등을 포함하는 파일입니다. 이는 컨테이너를 생성 할 때 사용됩니다.
- docker 컨테이너는 docker 이미지를 사용해 생성되며, 각 컨테이너는 독립된 공간에서 구동됩니다.
- 웹어플리케이션서버와 웹서버의 차이에 대해서 설명해주세요
- 웹 서버는 HTTP를 통해 웹 페이지를 사용자의 브라우저에 제공하는 서버입니다. 주로 정적 컨텐츠(HTML, CSS, JS, 이미지 파일 등)를 제공하는 데 사용되며, 대표적으로 apache, nginx 등이 있습니다.
- 웹 어플리케이션 서버는 는 동적 컨텐츠를 제공하는 역할을 합니다. 클라이언트의 요청에 따라 애플리케이션 코드를 실행하여 동적으로 컨텐츠를 생성하고, 이를 웹 서버를 통해 사용자에게 전달합니다. 대표적으로 tomcat, uwsgi, gunicorn 등이 있습니다.
- django rest framework를 사용하는 이유가 뭔가요?
- django rest framework(DRF)는 RESTful API를 쉽고 빠르게 구축할 수 있도록 해주는 강력한 툴킷입니다. DRF는 직관적인 API 뷰, 시리얼라이저, 인증 및 권한 관리 기능 등을 제공하며, JSON 등의 데이터 형식을 쉽게 처리할 수 있어 API 개발의 효율성을 높여줍니다.
- DRF의 시리얼라이저의 역할에 대해서 설명해주세요
- DRF의 대표적인 기능 중 하나인 serializer에서는 데이터 유효성 검사, 데이터 변환, 데이터 직렬화 등을 수행할 수 있습니다. 이는 API 개발에 있어 매우 중요한 기능이며, DRF를 사용하지 않는다면 직접 구현해야 하는 번거로움이 있습니다.
- wsgi가 뭔지 설명해주세요
- wsgi는 python에서 웹 서버와 웹 애플리케이션 간의 표준 인터페이스를 제공합니다. 이를 통해 다양한 웹 서버와 애플리케이션(또는 프레임워크) 간의 호환성이 보장됩니다. django도 wsgi를 지원하여, 다양한 웹 서버 환경에서 운영될 수 있습니다.
- ForeignKey, OneToOneField, ManyToManyField의 차이점을 설명해주세요.
- ForeignKey: 다른 모델에 대한 데이터베이스 레벨의 관계를 나타냅니다. 일대다 관계를 구현할 때 사용됩니다.
- OneToOneField: 다른 모델과 일대일 관계를 나타냅니다. 이는 ForeignKey와 유사하지만, 각 레코드가 상대 테이블에 하나의 레코드와만 연결됨을 보장합니다. ForeignKey에서 unique=True 옵션을 사용하는 것과 동일합니다.
- ManyToManyField: 다대다 관계를 나타냅니다. 두 모델 간에 많은 수의 관계를 가질 수 있으며, 중간 테이블을 통해 관리됩니다.
- django에서 쿼리셋(QuerySet)의 eager loading, lazy loading에 대해 설명해주세요.
- django의 쿼리셋은 기본적으로 lazy loading을 사용합니다. 이는 실제로 데이터에 접근하거나 조작하는 시점까지 데이터베이스 쿼리를 실행하지 않는 것을 의미합니다.
- 반면, select_related와 prefetch_related 같은 메소드를 사용하여 관련 객체를 미리 로드하는 ‘eager loading’을 수행할 수 있습니다. 이는 필요한 모든 데이터를 한 번에 가져와서 데이터베이스 히트를 줄일 수 있습니다.