Django가 무엇인지 설명하시오
- 쉽고 빠르게 웹사이트를 개발할 수 있도록 python으로 만든 웹 애플리케이션 프레임워크
Django를 백엔드 스택으로 선정한 이유는 무엇입니까?
- django 특히 django rest frame work를 이용했을 때 보다 쉽고 python의 장점중 하나인 직관성을 극대화 할 수 있었고 이해도 빠르고 짧고 간단한 코드만으로도 웹사이트를 만들 수 있었습니다. 물론 처음 시작할 때에 여러 모듈에대해서 공부해야하는 것은 단점일 수 있겠으나 여러모듈을 익히면 익힐 수록 다른 프레임워크들보다 생산성이 뛰어나다는 점에서 배워볼만한 프레임워크라고 생각해서 선택했습니다.
Django에는 어떤 장점이 있습니까?
- Django 다른 프레임워크들보다 쉽고 빠르게 구현할 수 있는 라이브러리들이 많아 숙련되면 숙련될 수록 생산성이 높아지고 보다 효율적인 코드를 작성할 수 있는 장점이 있습니다.
Django가 다른 Python 웹 프레임워크와 비교되는 특징이 있다면 무엇입니까?
- 보다 많은 모듈과 기능이 있기때문에 익히고 익숙해지면 익숙해질수록 기능에 맞는 적절한 모듈을 사용해서 빠르고 편하게 개발을 할 수 있는 점
Django의 프로세스는 어떤 순서로 동작합니까?
- 1. client → request 2. 웹서버에서 request 수신, Django의 WSGI에 요청 전달 (nginx의 경우 static정보들 가지고 전달) 3. django 앱이 생성되며 settings.py 에 있는 설정들 및 middleware 호출 4. django에서 받은 URL 확인하여 urls.py 에 맞게 비즈니스 로직 views.py 수행 5. 로직 수행 후 response 반환
Django의 MTV 패턴 시스템은 무엇입니까?
- Model: DB에 저장되는 데이터들 django에서는 ORM을 이용하여 간편하게 연결할 수 있다. Template : 사용자에게 보여지는 부분 View : 전달받은 데이터를 가공하거나 저장하는 비즈니스로직을 작성하는 부분
ORM에 대해서 설명하시오
- Object Relational Mapping DB를 만드는 과정에서 SQL문을 직접 작성하는 대신 미리 매핑해둔방식(정해둔 규칙)을 이용하여 보다 쉽게 DB에 연결할 수 있는 방법
Django ORM의 장단점은 무엇입니까?
- 장점: 매우 직관적이고 IDE 에서 직접적으로 코드를 작성해서 DB를 생성 및 관리를 할 수 있는 점에서 편리하고 보수가 쉬움
단점: 보다 깊고 복잡한 쿼리문을 사용하려고할 때 그에 맞는 기능을 찾아야하며 자동으로 생성된 쿼리문의 성능이슈가 있을 수 있음
Django Admin은 무엇이고 어떤 기능을 제공합니까?
- 관리자페이지 기능으로 전체적인 model의 구성이나 DB의 구성을 한눈에 파악할 수 있고 관리할 수 있음
Django Template Engine은 무엇이고 어떤 기능을 제공합니까?
- django의 기본 지원 템플릿 엔진으로 JSP와 비슷한 느낌으로 html 문서 내부에서 {}를 이용하여 python 문법을 사용할 수 있으며 csrf_token 생성 등 여러기능을 가지고있다.
Django를 통해 CRUD를 구현하는 방법에 대해서 HTTP Method와 함께 설명하시오
- DRF 방식 Create Post방식Reqeust - 입력한 데이터 검증 및 가공 후 Serializer 전달 - validation, 후처리 및 create 작업 - response 반환 Read Get방식Request - 출력할 데이터 가공 - serializer 통해 가공된 값 response 반환 Update put방식 Reqeust - 입력받은 데이터 검증 및 가공 후 Serializer 전달 - validation, 후처리 및 update 작업 - response 반환 Delete delete방식 Request - 입력받은 데이터 검증 - delete 작업 또는 is_active 컬럼 false로 변경 - reponse 반환
Django에서 테이블을 설계하고 데이터베이스에 반영하는 방법에 대해서 설명하시오
- models.py에서 ORM 문법에 따라 그에 맞는 field 사용하여 DB를 설계하고 makemigration 및 migrate 커맨드를 통해 DB 생성 및 마이그레이션 작업 수행
회원가입을 할 때 비밀번호를 암호화하여 저장하는 이유는 무엇입니까?
- 개인정보이기 때문에 보다 보안성을 높이는 것이 매우 중요하며 암호화하지않는 경우 DB에 패스워드가 그대로 저장되기때문에 DB에 접근만 가능해도 진짜 패스워드를 알 수 있게 되버리기 때문에 개발자들도 알지 못하도록 꼭 암호화를 수행하여 보안을 강화 하며 신뢰할 수 있는 수준이 되어야한다.
JWT에 대해서 설명하시오
- Json Wep Token의 약자로 클라이언트와 서버간의 통신 시 신뢰가능한 통신임을 인증하기 위해 JSON의 형태로 발급하는 토큰
JWT의 Access Token과 Refresh Token은 왜 필요한가요?
- Access Token 은 클라이언트 입장에서 서버와 통신할 때 신뢰가능한 클라이언트인지 증명해주는 토큰(신분증) Refresh Token 은 기존의 Access Token이 기간이 만료되는 등 유효하지 않은 경우 Refresh Token을 통하여 Access Token을 재발급 받을 수 있도록 하는 토큰
Django의 기본 기능을 사용하는 것과 JWT를 사용하여 로그인 기능을 구현하는 것에는 어떤 차이점이 있습니까?
- django 기본 로그인의 경우 로그인 정보를 WAS의 Session에 저장하는 방식이며 JWT의 경우는 클라이언트의 로컬스토리지 혹은 쿠키에 로그인정보를 저장하는 방식이다.
데이터 테이블 간의 관계를 나타내는 FK, OneToOne, ManyToMany 필드에 대해서 설명하시오
- Foreign Key - 1 : N 관계 One To One - 1 : 1 관계 Many To Many - N : M 관계
Django에서 ManyToMany필드를 만드는 방법에 대해서 설명하시오
- hobbys = models.ManyToMany(Hobby, verbose_name=”취미”, related_name=’hobbys_set’, on_delete=models.CASCADE)
FBV와 CBV는 각각 무엇이며, 어떤 차이가 있습니까?
- FBV(Function Base View) 함수를 기준으로 views.py를 작성하는 방법으로 심플하고 가독성이 좋게 코드를 짤 수 있다. CBV(Class Base View) 클래스를 기준으로 views.py를 작성하는 방법으로 FBV에 비해 객체지향적인 특성들 추상화, 상속 등을 이용하여 코드를 보다 재사용성이 높고 확장을 체계적으로 할 수 있다.
테스트코드를 작성하는 이유는 무엇이며 어떤 장점이 있습니까?
- 완성된 코드에 대해서는 반드시 테스트가 필요한데 사람이 직접 일일이 해서 클릭해가며 테스트 하는 것도 전부 시간과 비용이 들기 때문에 테스트 코드를 이용하여 자동화를 해서 시간과 비용을 절약하고 추가로 사람이 실수 할 수 있는 부분들도 많기 때문에 사소한 것 하나하나 빠뜨지않고 테스트 할 수 있다.
테스트코드에서 setup 함수와 setupclass의 차이는 무엇입니까?
- setup 함수에서는 해당test.py에 있는 모든 테스트를 시행하기전에 실행하여 준비해두는 함수이며 setupClass의 경우는 특정 테스트에 한해서 필요한 것들을 추가로 준비해주는 함수.
Template Engine을 사용할 때, 발생하는 CSRF Error가 무엇이고 어떻게 해결합니까?
- CSRF 공격(Cross Site Request Forgery)으로부터 사용자가 보낸 request가 신뢰할 수있는지에 대한 여부를 파악하기 위해 CSRF_Token을 통해 인증을 하라는 요청인데 이는 Template Engine에서는 요청을 보낼 form 태그 안에 {%csrf_token%}을 추가로 작성해주면 완료.
Django ORM에서 queryset과 object의 차이점에 대해서 설명하시오
- object,get함수를 사용 시 object 객체하나만을 반환 받으며 반환할 값이 없을 경우 error를 발생시키기 떄문에 예외처리가 필수적이며 queryset의 경우 filter나 여러개의 객체를 반환하는 함수를 사용했을 경우 반환되며 queryset 안에 여러개의 object가 있으며 반환할 값이 없어도 빈 queryset이 반환이 되므로 예외처리대신에 안의 값들이 비어있는지 여부에 대해서 처리하는 부분은 필요하다
Django ORM에서 정참조와 역참조에 대해서 설명하시오
- 정참조 : model 중 foreignkey 혹은 OneToOne 필드로 참조한 객체를 직접 참조하는 경우 ex) 나의 취미, 나의 게시물 역참조: model 중 foreignkey 혹은 ManyToMany로 참조된 객체들이 참조중인 객체를 참조하는 경우 ex) 취미가 같은 사람들, 치즈가들어간 피자들
Response 결과와 함께 status code를 반환하는 이유는 무엇입니까?
- 프론트에서 status코드에 따라 분기점을 나눠서 그에 맞게 적절한 대응을 할 수 있도록 하기 위해
회원탈퇴, 게시글 삭제와 같은 기능을 구현할 때 실제 레코드를 삭제합니까? 그렇지 않다면 그 이유는 무엇입니까?
- is_active를 false하는 방식으로 사용을 하며 혹여나 해킹공격당하여 해당 로직이 실행되었을 경우 데이터가 전부 날아갈 수 도 있고 또 고객의 실수나 변심의 우려도 있기 떄문에 단순히 삭제하기보단 비활성화하여 데이터를 지킬 수 있도록 해야하기 때문이라고 생각합니다.
RESTful API는 무엇을 의미합니까?
- HTTP 통신할 떄의 약속으로 특정한 통신에 대해 method만 보고도 바로 이해 할 수 있으며 컴퓨터간의 서로 신뢰하고 이해할 수 있는 통신을 하기 위한 인터페이스
DRF를 사용해 API를 개발할 경우 어떤 장점이 있습니까?
- 특히 CBV 방식을 이용하여 HTTP method에 따라 RESTful 한 API를 작성할 수 있으며 Serializer를 이용하여 validation, create 작업등을 보다 직관적이고 빠르게 API를 개발할 수 있는 장점이 있습니다.
Django 와 DRF를 통한 개발의 차이점은 어떤 것이 있습니까?
- Serializer를 통해 모델들을 간단히 json 객체로 리턴받아 사용할 수 있는 것
Django User 모델과 DRF Custom User 모델의 차이는 무엇입니까?
- Django의 User 모델은 기본적인 구성이 전부 되어있어 간편하게 사용하기 좋지만 필드를 추가하거나 관리자 계정 생성등의 조건을 변경하기위해선 Custom 모델을 정의해줘야하는데 기존의 User모델을 베이스로한AbstractBaseUser 모델을 상속받아 커스텀할 수 있다.
DRF Serializer는 무엇이며, 어떤 기능을 수행합니까?
- Request 받은 데이터를 스스로 인식해서 검증하고 응답데이터를 json의 형태로 반환함으로써 직렬화하는 역할
JSON 형식으로 데이터를 받고, Serializer를 통해서 JSON형식으로 데이터를 반환하는 이유는 무엇인가요?
- json 형식이 거의 공용으로 사용되는데 다른 형식보다 가독성이 좋고 보다 용량도 절약가능하다. 클라이언트가 사용하는 언어에 관계없이 동일한 데이터를 주고 받을 수 있는 장점도 있다.
Serializer를 통해서 특정 모델에 존재하지 않지만, 관계 있는 테이블의 필드 레코드를 반환하는 방법에 대해서 설명하시오
- hobbby = serializers.SerializerMethodField() def get_hobby(self, obj): return obj.hobby.name SerializerMethodField()를 이용하여 변수를 선언해두고 get_변수명 의 형태로 함수를 정의하여 return 값에 원하는 역참조중인 테이블의 필드값을 return하면 반환가능
Serializer를 통해서 역참조 하는 방법에 대해서 설명하시오
- b 의 외래키 a a의 serializer에서 역참조 b = bSerializer(many=True, source=’b_set’) Meta 클래스에 fields에 ’b’ 추가
DRF Q기능을 통해서 쿼리하는 것은 어떤 장점이 있습니까?
- 조건이 복잡할 때 Q() 객체를 이용해서 원하는 값을 쿼리할 수 있는 장점
Serializer에서 어떻게 객체를 validate하게 됩니까?
- serializer 객체 생성 후 is_vaild()함수 실행 시 validate 함수로 넘어와서 유효성 검사하는데 오버라이딩하여 함수 작성시 기존 유효성 검사 후 추가적으로 원하는 유효성 검사를 할 수 있다.
Serializer에서 Custom Validation을 하는 이유는 무엇입니까?
- 기존의 유효성검사에서 보다 원하는 유효성검사를 진행하여 DB에 저장할 데이터들에 대해서 신뢰성을 확보 할 수 있다.
Serializer에서 create, update 함수는 어떤 기능을 수행합니까?
- 데이터를 생성 및 수정하는 역할
Serailizer Custom validate함수를 통해 오류 케이스를 어떻게 처리합니까?
- raise serializers.ValidationError serializers에 내장되어있는 ValidationError을 raise 시켜서 오류 발생시킴
DRF permission_classes를 사용하는 이유는 무엇입니까?
- 작업 별로 작업 권한을 부여하여 정보를 보호
Django는 어떤 종류의 데이터베이스를 사용합니까? Flask와의 차이는 무엇입니까?
- Django는 ORM으로 작성가능한 SQLite, PosgreSQL과 같은 데이터베이스와 최적화되어있으며 Flaks와 가장 큰 차이점은 역시 ORM을 사용할 수 있는가? 에 대한 여부
Django에서 제공하는 sqlite는 어떤 장단점이 있습니까?
- 내부에서 자체적으로 생성할 수 있어서 따로 DB를 설치 및 연결할 필요없이 기본 옵션으로 DB를 사용할 수 있어 간편하게 테스트하고 사용해볼 수 있는 장점이 있다. 단점으로는 DB를 외부로 뺄수 없기 때문에 호스트에서 모든 부하를 감당해야하고 직접 디스크를 읽고 쓰기 때문에 권한 부여도 불가능하며 서버 DB들에 비해 상대적으로 보안도 낮고 동시성 문제또한 발생합니다.
AWS를 통해 배포할 경우, sqlite를 사용하지 않는 이유는 무엇입니까?
- SQLite를 이용하게 될 경우 EC2에 직접적으로 생성이 될텐데 DB의 부하도 감당하기 어려울 뿐더러 보안도 약하기 때문에서버리스인 sqlite를 사용하기 보단 postgreSQL이나 , MySQL이용하여 AWS RDS를 통해 만들어서 EC2와 연결하는 것이 보다 효율적이기 때문이다.
Django settings에서 DB 스택을 변경하는 방법은 무엇입니까?
- DATABASE = [] 부분을 연결할 데이터베이스에 맞게 내용을 변경해준다
Django 프로젝트를 배포할 때, 노출되어서는 안되는 값은 어떤 것이 있습니까?
- SECRET_KEY DB 연결 설정 ID,PWD 등 AWS 연결 설정 PWD 등
Django 프로젝트를 배포할 때, 시크릿키를 노출하지 않는 방법에 대해서 설명하시오
- dotenv를 활용하여 작성, github secret를 이용
Django 프로젝트 진행 시 발생하는 CORS 오류를 처리하는 방법에 대해서 설명하시오
- settings.py INSTALLED_APP 에 'corsheaders', 추가 MIDDLEWARE 에 "corsheaders.middleware.CorsMiddleware", 추가 CORS_ALLOWED_ORIGINS 에 HOST IP 추가
Django 프로젝트를 배포할 때 Allow Host에 * 가 들어가면 안되는 이유는?
- * 은 모두 허용한다는 의미이기 때문에 보안에 매우 취약해질 수 있다!
Django 프로젝트를 배포할 때 사용되는 Gunicorn이 무엇이며, WSGI를 왜 사용해야 하는지 설명하시오
- Gunicorn은 WSGI의 한 종류이며 웹서버에서 온 HttpRequest를받아 middleware를 실행하고WSGIRequest로 Django App에 전달하여 로직을 수행하여 WSGIResponse받아 HttpResponse로 웹서버에 전달함 이러한 과정으로 다양한 언어로 오는 Request들을 파이썬 스크립트가 웹서버와 효율적으로 통신할 수 있다.
Django 프로젝트를 배포할 때 사용되는 NGINX가 무엇이며, 웹서버를 왜 사용해야 하는지 설명하시오
- Nginx는 웹서버의 한 종류 이며 정적파일 불러오기, 로드밸런싱, SSL지원, 인증 등의 역할을 수행하여 WAS의 부담을 줄여줌으로써 Django APP을 보다 효율적으로 구성할 수 있게 됩니다.
Django에서 PostgreSQL을 선호하는 이유는 무엇입니까?
- 다른 DB들 보다 호환성이 매우 뛰어나며 PostgreSQL에서만 쓸 수있는 데이터타입들이 있으며 django 내장으로 제공하는 postgresql 모듈도 있기때문에 사용성도 뛰어나기 때문
HTTP가 아닌 HTTPS로 배포했을 때의 장점에 대해 설명하시오
- 서버와 클라이언트 사이의 모든 통신이 암호화 됨으로써 보안취약점을 해결 할 수 있다.
'회고록(TIL&WIL)' 카테고리의 다른 글
TIL 2022.10.25 React 기본 (0) | 2022.10.25 |
---|---|
TIL 2022.09.07 도메인연결(Route 53, DNS), HTTPS(let's encrypt) (0) | 2022.09.07 |
TIL 2022.08.30 Gunicorn, nginx (0) | 2022.08.30 |
TIL 2022.08.22 github actions(CI) - dotenv - Django - postgreSQL - Docker (0) | 2022.08.23 |
TIL 2022.08.12 카카오톡 로그인 (0) | 2022.08.12 |