Questions | Answer |
Django가 무엇인지 설명하시오 | 파이썬 기반으로 만들어진 무료 오픈소스 웹 프레임워크로, 기본적이고 반복적인 기능들이 미리 구현되어 있어 웹 애플리케이션 개발을 쉽고 빠르게 만들어준다. |
Django를 백엔드 스택으로 선정한 이유는 무엇입니까? | 확장성과 유지보수에 용이하고, 내장된 기능들로 빠르게 개발할 수 있게 도와주며, 보안 기능 또한 내장되어 있다. |
Django에는 어떤 장점이 있습니까? | MTV(Model-Template-View) 패턴으로 코드를 구성해 가독성과 유지보수성이 좋다. 자동화된 관리 기능으로 개발 시간을 단축시킬 수 있다. |
Django가 다른 Python 웹 프레임워크와 비교되는 특징이 있다면 무엇입니까? | 미리 완성된 많은 기능들을 자동으로 제공해주며, 커뮤니티와 문서가 잘 구성되어 있어 정보를 빠르게 얻을 수 있다. |
Django의 프로세스는 어떤 순서로 동작합니까? | 사용자의 요청을 받아 urls.py에서 연결된 views.py의 함수를 통해 모델과 상호작용 후 데이터를 처리하여 사용자에게 다시 응답해준다. |
Django의 MTV 패턴 시스템은 무엇입니까? | MVC를 장고에서는 MTV로 바꾼 것. 각 패턴의 독립성이 지켜진다. Model : 데이터베이스의 구조를 정의 Template : 사용자에게 보여지는 부분 View : 모델 정보를 컨트롤하고 클라이언트로부터 들어온 요청을 처리해준다. |
ORM(object relational mapping)에 대해서 설명하시오 | 객체와 데이터베이스의 데이터를 자동으로 연결해주는 것. 마이그레이션 기능을 통해 SQL을 자동으로 생성해서 쿼리문 없이도 데이터베이스의 데이터를 다룰 수 있게 해준다. |
Django ORM의 장단점은 무엇입니까? | SQL문이 아닌 클래스의 메서드를 통해 데이터베이스를 조작할 수 있어 코드의 가독성이 좋고, 객체지향적 접근만 고려하면 되기 때문에 빠른 개발이 가능하고 생산성이 증가한다. 프로젝트의 복잡성이 커질수록 SQL문 사용이 효율적일 수 있다. |
Django Admin은 무엇이고 어떤 기능을 제공합니까? | Django에서 기본으로 제공하는 관리자 기능. 데이터베이스 모델에 대해 CRUD가 가능하고 커스터마이징이 가능하다. |
Django Template Engine은 무엇이고 어떤 기능을 제공합니까? | Django에서 기본으로 제공하는 템플릿 시스템으로 동적인 웹 페이지 생성이 가능하다. 프론트 내에서 마치 파이썬을 사용하는 것처럼 반복문, 조건문 등을 사용할 수 있다. |
Django를 통해 CRUD를 구현하는 방법에 대해서 HTTP Method와 함께 설명하시오 | Create(POST) : 담겨오는 데이터를 ORM을 통해 DB에 저장해준다. Read(GET) : 데이터를 조회하여 응답을 보내준다. Update(PUT/PATCH) : 데이터 수정(전체/일부) Delete(DELETE) : 데이터 삭제 함수형 뷰로 구현할 경우 일일이 request.GET처럼 해당 메소드를 정의해주고, 클래스형 뷰로 구현하는 경우에는 클래스명을 정의하고 하위 함수로 get, post, put, delete를 정의하여 해당 기능을 구현한다. |
Django에서 테이블을 설계하고 데이터베이스에 반영하는 방법에 대해서 설명하시오 | models.py에서 정의한 모델로 데이터베이스 테이블이 설계되는데 모델 클래스를 정의한 후 makemigrations, migrate 명령어를 통해 모델의 변경사항을 알리고 데이터베이스에 적용시킬 수 있다. |
회원가입을 할 때 비밀번호를 암호화하여 저장하는 이유는 무엇입니까? | 암호화를 하지 않으면 비밀번호가 데이터베이스에 그대로 저장되기 때문에 보안과 개인정보 보호를 위해 암호화는 필수이다. |
JWT(JSON Web Token)에 대해서 설명하시오 | 클라이언트가 JSON 형식으로 안전하게 자신의 인증 정보를 서버에 보낼 수 있다. Header : 토큰의 유형과 해시 알고리즘 정보를 포함한다. Payload : 토큰에 담을 정보를 포함한다. Signature : 비밀 키를 사용하여 헤더와 페이로드를 서명하여 생성된다. |
JWT의 Access Token과 Refresh Token은 왜 필요한가요? | Access Token : 일반적으로 짧은 기간동안만 유효하며, 클라이언트가 서버에 자원을 요청할 때마다 Access Token을 제출하여 인증을 거친다. 자주 갱신되어야 하며, 만료되면 재발급이 필요하다. 이를 통해 보안을 유지하고 인증 상태를 확인할 수 있다. Refresh Token : Access Token을 재발급하는 데 사용되는 토큰으로서, 긴 유효 기간을 가진다. 이를 통해 클라이언트가 매번 로그인을 다시 요청하지 않아도 되고, 편리하게 사용자를 인증할 수 있다. Access Token은 짧은 유효 기간으로 인증을 유지하고, Refresh Token은 장기적으로 사용자 인증을 보장한다. |
Django의 기본 기능을 사용하는 것과 JWT를 사용하여 로그인 기능을 구현하는 것에는 어떤 차이점이 있습니까? | Django의 기본 기능인 세션 기반 로그인 방식은 서버에 사용자 정보를 저장하고 브라우저의 쿠키를 사용한다. CSRF 토큰으로 CSRF 공격(사용자가 의도하지 않은 요청을 다른 웹사이트에 보내는 공격)에 방어할 수 있다. JWT를 사용하면 토큰 자체에 정보가 포함되어 있어 세션과 같은 서버의 저장 공간이 별도로 필요하지 않다. CORS 정책 설정으로 다른 도메인의 요청을 제어할 수 있다. |
데이터 테이블 간의 관계를 나타내는 FK, OneToOne, ManyToMany 필드에 대해서 설명하시오 | FK(외래키) : 1:다관계. 한 모델의 객체가 다른 모델의 여러 객체와 관련된다. 테이블과 테이블을 연결해준다. OneToOne : 1:1관계. 한 모델의 객체가 다른 모델의 한 개의 객체와만 연결된다. 외래키 + unique=true와 동일하다. ManyToMany : 다:다관계. 한 모델의 객체가 다른 모델의 여러 객체와 연결된다. |
Django에서 ManyToMany필드를 만드는 방법에 대해서 설명하시오 | 다대다 관계로 나타내고 싶은 모델을 ManyToManyField로 연결해주면, 자동으로 두 테이블 사이의 중간 테이블이 생성되어 각각의 id값을 필드로 가지게 된다. (예 : 게시글-태그) through 속성을 통해 직접 매핑테이블을 생성할 수도 있다. |
FBV와 CBV는 각각 무엇이며, 어떤 차이가 있습니까? | FBV (Function-Based Views) : If문으로 메소드를 구분하여 제어한다. CBV (Class-Based Views) : 각각의 HTTP 메서드에 대한 처리를 클래스의 메소드로 분리하여 사용한다. FBV보다 빠르고, 코드 재사용에 용이하다. |
테스트코드를 작성하는 이유는 무엇이며 어떤 장점이 있습니까? | 시간 낭비, 복잡도 증가, 허점을 보완하기 위해 작성한 코드들이 원하는 값을 내놓는지 확인하는 코드이다. 코드의 동작을 확인해 오류를 발견하고 수정할 수 있다. 새로운 기능 추가나 기존 코드 수정시에도 기존 기능들의 작동을 확인하기 좋다. |
테스트코드에서 setup 함수와 setupclass의 차이는 무엇입니까? | setup : 각 테스트 메소드를 호출하기 이전에 호출되는 메소드. setupclass : 해당 테스트 클래스가 시작될 때 한 번만 호출되는 메소드. @classmethod 데코레이더를 달아줘야 하고 cls 인자를 넘겨줘야 한다. |
Template Engine을 사용할 때, 발생하는 CSRF Error가 무엇이고 어떻게 해결합니까? | CSRF Error : 사용자가 의도하지 않은 요청을 다른 웹사이트를 통해 보내는 것. Template Engine에서는 {% csrf_token %} 템플릿 태그를 붙이거나 @csrf_exempt 데코레이터를 사용해 해결할 수 있다. |
Django ORM에서 queryset과 object의 차이점에 대해서 설명하시오 | queryset : 데이터베이스에서 전달받은 여러 객체의 집합 (예 : filter) object : 데이터베이스에서 전달받은 하나의 객체 (예 : get) |
Django ORM에서 정참조와 역참조에 대해서 설명하시오 | 정참조 : Foreign Key 속성이 있는 객체에서 없는 개체를 참조하거나 One to One 관계에서 참조할 때. 내가 선언한 필드명으로 조회 가능. 역참조 : Foreign Key 속성이 없는 객체에서 관계된 모델을 참조할 때. set manager를 사용하거나 related_name을 사용해 참조할 수 있다. |
Response 결과와 함께 status code를 반환하는 이유는 무엇입니까? | status code를 통해 클라이언트는 자신의 요청에 대한 처리 결과를 쉽게 판단할 수 있다. 개발자 역시 문제를 빠르게 파악하고 수정할 수 있다. |
회원탈퇴, 게시글 삭제와 같은 기능을 구현할 때 실제 레코드를 삭제합니까? 그렇지 않다면 그 이유는 무엇입니까? | 테이블간의 연결된 데이터로 인해 에러가 발생할 수 있으므로 삭제가 아닌 정지를 통해 데이터 보존을 하고, 복구를 가능하게 할 수도 있다. |
REST(Representational State Transfer)ful API는 무엇을 의미합니까? | REST API란 REST 아키텍처 규칙에 따라 만들어진 API(Application Programming Interface). HTTP 프로토콜을 이용해 HTTP URI로 리소스(자원)를 명시하고, HTTP 메소드를 사용해 CRUD를 표현하여 간결하고 직관적인 구조로 서버와 클라이언트 간의 통신을 하게 해준다. REST API의 설계 규칙(URI는 동사보다 명사, 대문자보다 소문자, 언더바 대신 하이픈, 슬래시 X, 확장자 X, 행위 X)을 올바르게 지킨 시스템을 RESTful하다 할 수 있다. |
DRF를 사용해 API를 개발할 경우 어떤 장점이 있습니까? | 기본적인 CRUD 작업을 간편하게 처리할 수 있도록 도와줘 빠르고 쉬운 개발이 가능하다. DB 데이터를 JSON으로 직렬화하여 API 응답과 요청을 관리하기에 용이하다. |
Django 와 DRF를 통한 개발의 차이점은 어떤 것이 있습니까? | DRF는 Django를 기반으로 API를 개발하기 위한 프레임워크이다. Django는 자체적인 웹 템플릿에 데이터를 전달해주고, DRF는 다양한 플랫폼의 클라이언트에게 데이터를 전달해준다. |
Django User 모델과 DRF Custom User 모델의 차이는 무엇입니까? | Django User 모델은 ‘django.contrib.auth.models’에 포함되어 있어 기본적인 유저 정보가 들어가있지만, 실제 필요한 항목을 얻기 위해 DRF에서는 Custom User 모델을 사용한다. BaseUserManager와 AbstractBaseUser 클래스를 상속받아 새롭게 구현할 수 있다. |
DRF Serializer는 무엇이며, 어떤 기능을 수행합니까? | Serializer는 복잡한 데이터를 JSON 또는 XML과 같은 직렬화된 형식으로 변환해준다. 그처럼 직렬화를 하면 API 요청과 응답을 다루기 쉬워지며 데이터 전송이 쉬워진다. 또한 전달받은 데이터의 validation 및 DB에 저장하는 역할도 수행한다. |
JSON 형식으로 데이터를 받고, Serializer를 통해서 JSON형식으로 데이터를 반환하는 이유는 무엇인가요? | JSON은 경량화 데이터교환 방식으로 다른 언어로부터 독립적이라 변환이 용이하며 가독성이 좋다. |
Serializer를 통해서 특정 모델에 존재하지 않지만, 관계 있는 테이블의 필드 레코드를 반환하는 방법에 대해서 설명하시오 | SerializerMethodField를 사용해 특정 모델에 존재하지 않지만 관계있는 필드의 레코드를 직접 처리하고 반환할 수 있다. |
Serializer를 통해서 역참조 하는 방법에 대해서 설명하시오 | serializer에서 source 인자를 사용해 역참조를 할 수 있다. |
DRF Q기능을 통해서 쿼리하는 것은 어떤 장점이 있습니까? | 복잡한 조건을 간결하게 표현할 수 있고, 다양한 조건을 조합해 필터링할 수 있다. |
Serializer에서 어떻게 객체를 validate하게 됩니까? | 입력된 데이터들의 유효성을 검증하는데 [validator_필드명] 메소드를 통해 직접 정의할 수 있다. ValidationError를 통해 오류를 처리한다. |
Serializer에서 Custom Validation을 하는 이유는 무엇입니까? | 기본 유효성 검사에 더 많은 검증 절차를 적용할 수 있고 에러메시지를 커스텀할 수도 있다. |
Serializer에서 create, update 함수는 어떤 기능을 수행합니까? | create : 새로운 객체 생성 update : 기존 객체 업데이트 serializer.save 호출시 instance가 존재한다면 update를, 없다면 create를 실행한다. |
Serailizer Custom validate함수를 통해 오류 케이스를 어떻게 처리합니까? | validate 함수를 통해 발생한 오류를 ValidationError를 통해 예외를 발생시키고, try-except 구문을 사용해 예외 처리를 할 수 있다. |
DRF permission_classes를 사용하는 이유는 무엇입니까? | view에 접근 할 수 있는 요청을 permission_classes를 통해 관리한다. 보안 강화에 좋다. 커스텀이 가능하다. |
Django는 어떤 종류의 데이터베이스를 사용합니까? Flask와의 차이는 무엇입니까? | 둘 다 Python을 기반으로 한 웹 프레임워크지만, Flask는 가벼워 소규모 애플리케이션에 적합하고 따로 ORM이 없다. 그러나 확장과 커스터마이징은 Django보다 좋다. |
Django에서 제공하는 sqlite는 어떤 장단점이 있습니까? | 장고에서 기본 제공해주는 데이터베이스를 편하게 사용하고, 쉽게 변경할 수 있다. 가볍고 빠르며 사용되지 않을 때 컴퓨터 메모리와 CPU를 소비하지 않는다. 동시성에 제한이 있다. 주어진 시간에 하나의 프로세스만이 데이터베이스를 변경할 수 있다. 사용자에게 권한 부여가 불가능하다. |
AWS를 통해 배포할 경우, sqlite를 사용하지 않는 이유는 무엇입니까? | SQLite는 경량의 데이터베이스라 확장성이 제한적이다. 동시성이 좋지 않고 로컬 파일 시스템이라 인스턴스의 종료와 재시작에 따라 데이터가 손실될 수 있다. |
Django settings에서 DB 스택을 변경하는 방법은 무엇입니까? | settings.py에서 databases 설정을 찾아 engine값을 변경해주면 된다. |
Django 프로젝트를 배포할 때, 노출되어서는 안되는 값은 어떤 것이 있습니까? | Django 시크릿키나 데이터베이스 접근을 위한 사용자 정보, 소셜 서비스 연동을 위해 발급받은 API토큰이나 비밀번호 등이 있다. |
Django 프로젝트를 배포할 때, 시크릿키를 노출하지 않는 방법에 대해서 설명하시오 | 시크릿키를 환경 변수에 저장하는 방법과 .env 파일에 변수로 저장하는 방법이 있다. 개발 환경과 배포 환경을 분리해 각각 다른 설정 파일을 사용하기도 한다. |
Django 프로젝트 진행 시 발생하는 CORS(Cross-Origin Resource Sharing) 오류를 처리하는 방법에 대해서 설명하시오 | django-cors-headers 라이브러리를 사용하고 Middleware 설정을 하여 처리할 수 있다. |
Django 프로젝트를 배포할 때 Allow Host에 * 가 들어가면 안되는 이유는? | 모든 호스트를 허용한다는 의미이기 때문에 보안상 위험하다. 신뢰할 수 있는 도메인 목록만 지정해야 한다. |
Django 프로젝트를 배포할 때 사용되는 Gunicorn이 무엇이며, WSGI(Web Server Gateway Interface)를 왜 사용해야 하는지 설명하시오 | nginx로부터 받은 사용자의 요청을 WSGI를 통해 Django로 전달해 코드를 실행시켜 주도록 하는 역할로서 배포용으로 사용되는 runserver라고 생각하면 된다. WSGI는 파이썬 애플리케이션이 웹 서버와 통신하기 위한 인터페이스로써, 멀티스레드로 작동해 많은 요청을 처리하는데 유용하다. |
Django 프로젝트를 배포할 때 사용되는 NGINX가 무엇이며, 웹서버를 왜 사용해야 하는지 설명하시오 | 웹 서버의 역할. 클라이언트의 요청을 처리해주고 정적 파일을 처리하며 SSL 인증서를 관리하여 HTTPS를 지원한다. 리버스 프록시, 로드밸런싱 등의 역할을 수행한다. |
Django에서 PostgreSQL을 선호하는 이유는 무엇입니까? | Django는 PostgreSQL에서만 작동하는 다양한 데이터 유형을 제공한다. 대용량 데이터에 적합하고, 다양한 운영체제에서 사용 가능하다. MySQL은 간편하고 가볍지만, 스키마 변경 작업과 관련된 트랜잭션(데이터베이스에서 수행하는 하나의 논리적인 작업단위)에 대한 지원이 부족하다. SQLite는 서버가 아닌 파일 기반의 데이터베이스로, 개발용에 적합하다. |
HTTP가 아닌 HTTPS로 배포했을 때의 장점에 대해 설명하시오 | HTTP의 보안 버전으로, 데이터가 암호화되어 전송되어 정보 유출의 위험이 줄어든다. 사용자에게 높은 신뢰성을 제공한다. |
'Django' 카테고리의 다른 글
django signal pre_save (2) | 2023.06.15 |
---|---|
drf filter __ 언더스코어 (4) | 2023.06.14 |
drf swagger 문서화 (1) | 2023.05.29 |
Django admin 페이지 커스텀하기 (1) | 2023.05.23 |
Django sqlite3 mysql로 변경하기 (11) | 2023.05.09 |