DRF의 주요 기능 (추가+ )
1) 직렬화
2) 인증과 권한
3) 뷰셋과 라우터
4) Browsable API
5) 페이지네이션
6) 필터링과 정렬
7) 콘텐츠 네고시에이션
8) 직렬화 유효성 검사(validate)
9) 버전관리
10) 테스트프레임워크
-> 개발자들의 API 개발 과정을 간소화하고 확장가능한 API를 제공하는데 도움이 된다!
[자세한 내용은] https://wikidocs.net/197558#api-drf
DRF를 사용해 API를 개발할 경우 어떤 장점이 있습니까?
- 웹 브라우저 API 지원
- 다양한 authentication, 토큰/세션 인증, 권한관리를 지원하여 기본 유저 기능개발이 쉽다
- class 기반의 HTTP method 구현
- 다양한 return 타입 제공으로 데이터를 다루기 좋음 json, xml
- python객체나 여러 데이터를 변환하기 위한 직렬화 프레임워크를 제공하여 쉽게 데이터를 직렬화serialize할 수 있도록 한다!
직렬화로 데이터가 표시되는 방식과 처리되는 방식을 제어할 수 있다.
= serialize deserialize가 편하다!
- python객체나 여러 데이터를 변환하기 위한 직렬화 프레임워크를 제공하여 쉽게 데이터를 직렬화serialize할 수 있도록 한다!
- custom을 통해 확장 가능
+ 공부가 더 필요한 부분( https://wikidocs.net/197558#api-drf )
- Throttling과 Versioning
Api 남용이나 과부하를 방지하는데 유용하며, 버전관리를 지원하여 기존 클라이언트를 망가뜨리지 않고 API변경이 가능하다
Django 와 DRF를 통한 개발의 차이점은 어떤 것이 있습니까?
DRF는 Django 안에서 restful API를 쉽게 구축할 수 있도록 도와주는 오픈소스 라이브러리!
Django는 views.py 파일에 모든 코드를 작성하며 양방향 통신을 담당하므로 코드의 가독성이 떨어질 수 있다.
DRF는 serializer로 그 기능을 나누어 부담하고 정보를 쉽게 serialize, deserialize할 수 있다
***
스마트폰과 어플리케이션의 등장으로 기존의 html과 정보를 함께 랜더링하는 웹 서버에서 JSON이나 XML같은 형식으로 데이터를 다루는 서버를 별도로 사용하게 되었다.
(기능과 요청응답 데이터가 동일한 상황, 데스트탑보다 라이트한 스마트폰 기기 특성상 html랜더링->DB에서 정보찾기->띄우기 의 비효율적인 시스템을 고치게 된 것임!)
HTTP method(get, post, put, delete)와 api아키텍처를 함께 사용해 웹과 앱 모두에서 사용할 수 있는 하나의 API를 선호하고 사용하게 된 것임 = 프론트엔드와 백엔드의 완전한 분리를 돕는다!
Serializer는 무엇이고 어떻게 사용하는가? (+추가)
serializer란
DB data를 JSON data로 변환함
파이썬 형식의 코드를 다른 네트워크 환경과의 통신을 위해 직렬화 할 때, DRF에서 직렬화를 담당하는 클래스
queryset이나 instance등 복잡한 데이터를 python 데이터타입으로 변환시켜 json, xml등의 컨텐츠 타입으로의 변환을 쉽게 만들어준다
API 디버깅을 쉽게 만들어주고 코드정리로 보안 이슈를 해결하거나 validation 검증도 가능하다.
직렬화 과정
요청 JSON 등의 데이터 -> Deserialize -> Django 객체(DB 저장)-> Serialize -> 응답 JSON 등의 데이터
serializer사용
모델을 정의하고 migration으로 DB테이블을 업데이트, serializer에 모델필드를 정의하고 views.py에 필요한 http method를 정의. 해당 method를 사용한 url을 정의하고 요청에 따라 api엔드포인트로 해당 정보를 보내어준다.
***RESTful API
RESTful API는 웹 서비스를 통해 통신하는 두 시스템 간의 변환기 역할
Serializer에서 create, update 함수는 어떤 기능을 수행합니까?
save()의 인자로 instance가 전달되면 update, data만 전달된다면 create 메서드가 실행된다
- create()
create 함수는 view단에서 save()함수를 부를때 실행된다.
검증을 마친 데이터를 ORM과 연동해 DB에 저장하는데, 이 과정에서 개발자가 커스텀을 거쳐
관계있는 field나 새로운 필드를 create함수 내부에 넣어줄 수도 있고 save함수 자체에 인스턴스로 넣어줄 수도 있다. - update()
update 함수는 view단에서 save()함수와 함께 파라미터가 주어지면 실행된다.
update소스코드 -> json 데이터의 key value 값을 for문을 통해 추출, 설정된 모델에 하나씩 집어넣고 저장하는 구조
create함수와 마찬가지로 개발자 커스텀으로 설정값을 데이터에 추가하거나 데이터 변경 시에 데이터자체의 커스텀도 가능하다
Django는 어떤 종류의 데이터베이스를 사용합니까? Flask와의 차이는 무엇입니까?
Django와 Flask는 Python을 기반으로 하는 Web Framework!
- Django - Full-stack Framework = 거의 모든 기능이 들어있어 개발이 편함 / 무거운 프레임워크
- Flask - Micro Framework = 개발자가 설정, 세팅해야하는 부분이 많음 / 약 27000줄의 가벼운 프레임워크
Django와 Flask의 차이점 :
- 프로젝트 레이아웃이 다름
Flask는 프로젝트마다 1개의 어플리케이션을 개발
Django 는 한 프로젝트에 여러개의 어플리케이션이 존재할 수 있다
= 재사용 가능한 코드를 작성하기 쉽고 개별 프로젝트 관리도 편함 - DB접근
Flask는 orm이 따로 없어 SQLAlchemy(혹은 pymysql, pymongo)를 사용함
Django는 자체 orm이 존재하며 개발과정에서 사용할 수 있는 가벼운 DB, sqlite를 지원함
[더 공부하기] : Django, Flask, FastAPI
https://yscho03.tistory.com/109
Django에서 제공하는 sqlite는 어떤 장단점이 있습니까?
Django는 기본적으로는 SQLite을 사용하도록 구성, Python에서 기본으로 제공되어 따로 설치할 필요가 없다
단순하게 만든 DB로 미사용시 cpu를 소모하지 않으며, 간결하고 아주 빠르고 쉽게 사용이 가능하다
sqlite의 장점 :
- 연산이 아주 빠름
- 설치나 데이터베이스 관리를 수행할 필요가 없음
- sqlite는 서버 프로세스로 실행되지 않기 때문에 즉시 사용할 수 있는 데이터 베이스
- 트랜잭션을 지원하고 플랫폼의 제약이 없음
단점 :
- 분리된 DB환경이 아니어서 서버가 db에 대한 부담을 함께 가짐
= 개발과정에서는 로컬 배포과정에서는 배포서버.. 따라서 배포환경에는 적합하지 않음 - 사용자에게 권한 부여가 불가능하다 = 운영체제의 기본적인 액세스 권한만 가능(grant/revoke)
- 동시성(Concurrency)에 제한이 있음 = 병행 접근이 불가능
동시에 여러 프로세스가 SQLite 데이터베이스에 액세스하고 쿼리가 가능하지만 주어진 시간에 하나의 프로세스만이 데이터베이스를 변경. 임베디드 데이터베이스 관리 시스템보다는 더 큰 동시성을 지원하긴 하지만 MySQL, PostgreSQL과 같은 클라이언트-서버의 구조를 같은 RDBMS만큼은 아님!
+ 추가로 공부하기
동시성(Concurrency)
grant/revoke를 더 알아보자!
'취대넓얕' 카테고리의 다른 글
[기술면접] 5일차 문답 | 테스트코드 Fixture CSRF (0) | 2023.07.25 |
---|---|
[기술면접] 4일차 문답 | FBV CBV 테스트코드 TDD (2) | 2023.07.24 |
[기술면접] 3일차 문답 | FK O2O M2M (0) | 2023.07.21 |
[기술면접] 2일차 문답 | Django Template, CRUD (0) | 2023.07.21 |
[기술면접] 1일차 문답 | Django 장점 특징 (0) | 2023.07.20 |