Python/Django

[번역] Django REST Framework(장고 레스트 프레임워크): 장점과 단점 그리고 이의 대체제

Kani Kim 2024. 5. 11. 17:09

Django REST Framework: Pros and Cons

This article looks at the pros and cons of using Django REST Framework for building RESTful APIS with Django.

testdriven.io

 

Django REST Framework란 무엇인가?

Django REST Framework (DRF)는 RESTFul API를 설계하기 위한 강력한 오픈 소스 프레임워크입니다. DRF의 견고함, 사용하기 쉬움 그리고 보편적 기능들로 인해 Django로 API를 설계할 때의 de facto(드 팍토) 표준이 되었습니다. DRF의 주된 기능은 다음을 포함합니다.

  • 라우팅(Routing)
  • 요청/응답 처리
  • 인증과 인가
  • 직렬화와 데이터 검증
  • 필터링(Filtering), 순서(Ordering) 그외 등등!

추가적으로  web browseable API(웹 브라우저로 볼 수 있는 API), extensive documentation(추가적인 문서화), 그리고 더 많은 third-party packages(서드파티 라이브러리)가 프레임워크와 함께 딸려 옵니다.
 

더 많은 DRF의 기능을 보려면, Django REST Framework Basics(https://testdriven.io/blog/drf-basics/)를 참고하세요.

 

장점과 단점

장점

사용하기 쉬움
 
Django REST Framework의 가장 큰 이점은 즉시 사용가능하다는 점입니다. 당신은 단순하게 pip install커맨드를 실행하고, installed apps에다가 패키지를 추가하면 이걸로 당신의 API를 설계하기 좋은 시작입니다.

DRF는 API 설계 문제의 대부분에 해당하는 문제의 해결책을 제시해 줍니다. 새로운 것을 발명하기 보다, 세부 프로덕트 기능에 집중할 수 있도록 도와줍니다. 사실, 당신은 이미 탑재되어 있는 시리얼라이저(Serializer), 뷰 셋(View Set) 그리고 라우터(Router)를 사용하여 몇 줄 만으로 본격적인 API를 만들 수 있습니다.
 
성숙되고 테스트를 거침
 
Django REST Framework는 수 년 동안있어왔습니다. DRF는 성숙되고 테스트를 많이 거친 프레임워크입니다. 수 년 동안, Mozilla, Red Hat 그리고 Heroku같은 유명한 회사를 포함해 많은 회사들이 채택했습니다.

다른 DRF에 대한 장점으로는, 이것이 신중하게 계획되었다는 것입니다. 이는 모듈러 아키텍처를 기반으로 하고 있으며, 이를 통해 큰 혼란 없이 다른 컴포넌트들과 교환할 수 있게 한다는 겁니다. 예를 들면 허가 시스템, 인증 혹은 직렬화 레이어입니다. 이에 더해 이 프레임워크는 Django의 컨벤션과 동행합니다. 만약 당신이 Django에 익숙하다면 DRF의 소스코드를 따라가는 것도 쉬울 것입니다.

보안

Django REST Framework는 당신이 더 적은 에러를 만들고, 유지가능하며 그리고 더 안전한 API들을 설계할 수 있게 도와줍니다.

DRF 라이브러리는 코딩 표준에 부합하며, 이를 똑같이 하도록 강제합니다. 이는 당신이 일반적인 API 설계 실수를 하는 것을 피하게 해주며 다른 개발자가 온보딩하는 것을 쉽게 도와줍니다. 추가적으로 DRF는, CSRF 보호, 데이터 검증, 그리고 요청 쓰로틀링 같은 수많이 내재된 보안 기능과 같이 딸려옵니다.

큰 에코시스템

Django REST Framework는 Djnago의 유명한 대부분의 확장하고 잘 결합됩니다. 게다가, DRF는 써드파티 패키지로 된 거대한 에코시스템을 키워 왔습니다. 더 나아가, DRF는 거대한 개발자 커뮤니티를 뒤에 두고 있습니다. 지금 이 글을 쓰고 있는 순간에도 django-rest-framework는 1200명 이상의 기여자를 깃허브에서 가지고 있습니다. 만약 당신이 막혔다면, 도움을 구하기 쉬울 것입니다.

단점

마스터하기 어려움

앞에서 소개한 대로 Django REST Framework는 상대적으로 시작하기 쉽습니다. 당신은 기본적은 API 뷰 클래스를 활용하여 실질적으로 무엇이든 이룰 수 있습니다. 하지만, DRF 프레임워크의 힘은 CBV(Class Based View)와 미리 만들어 놓은 직렬화, 뷰 셋, 그리고 라우팅 등과 같은 클래스에 있습니다.

만약 당신이 DRF가 새로운 사람이면, 당신의 머리를 그것들로 채우는 데 시간이 걸릴 수 있습니다. 하지만 한번 그것을 파악하면, 당신의 코드베이스의 반을 그걸로 자를 수 있으며 그리고 마침내 더욱 “깨끗한” 웹 앱을 만들 수 있게 될 것입니다.

성능 이슈들

Django REST Framework는 추가된 오버헤드로 당신의 웹 앱의 성능을 늦출 수 있습니다. 이 패키지는 API를 쉽게 설계할 수 있게 디자인되어 있지 가능한 최대 성능을 이끌어 내도록 되어 있찌 않습니다. 이 직렬화 과정은 marshmallow하고 serpy(벤치마크를 보세요)와 같은 다른 직렬화 라이브러리와 비교하여 상대적으로 느립니다.

심지어 DRF의 개발자 Tom Christie가 언급한 것처럼, 당신은 성능이 중요한 뷰에서는 이 직렬화를 쓰는 것을 피해야 합니다.(소스)

다른 문제로는 관련된 필드를 직렬화할 때 생겨납니다. 기본적으로 DRF는 select_related하고 prefetch_related의 문법으로 쿼리셋을 자동적으로 최적화하여 시리얼라이저(serializer)에게 넘기지 않습니다. 이는 N+1문제로 쉽게 이어집니다.

나쁜 위험 분리

DRF에 있는 직렬화 레이어 너무 많은 작업을 수행합니다. 직렬화, 데이터 검증, 모델 생성과 같은 일을 맞고 있습니다. 제가 몇몇 발견한 코드베이스는 시리얼라이저에 비즈니스 로직을 포함하고 있습니다. 이는 개발자로 하여금 그들의 시리얼라이저와 모델에 대한 중복된 검증 코드를 작성하게하는 결과로 나타납니다. 게다가, 당신의 코드를 더욱 테스트하기 어렵게 하게 만듭니다.

부족한 신 기능

현재 단계에서 이 프레임워크는 새로운 기능을 넣는 것을 우선시하고 있지 않습니다. 대부분의 커밋이 리팩토링과 버그 수정입니다. 이는 DRF로 하여금 몇몇 어플리케이션에서 조금은 뒤쳐지고 한정적으로 보이게 할 수 있습니다.

제 의견에서 프레임워크에 부족한 기능은 다음과 같습니다.

  • 좋은 인증 솔루션
  • 비동기 지원 (이에대한 공개된 이슈가 있습니다.)
  • 웹 소켓 지원
  • 더 나은 중첩 직렬화


이러한 결함들은 서드 파티 패키지를 통해 다루어질 수 있습니다. 예를들면, 인증을 위한 dj-rest-auth, 비동기를 지원을 위한 adrf 그리고 웹 소켓을 위한 django-channels가 있습니다. 하지만 이러한 것들 대부분이 아직은 미흡합니다.

대체제


한번 당신이 다음 프로젝트를 시작할 때 고려하면 좋은 엄청난 대체제를 알아봅시다.

Django Ninja

Django Ninja는 상용에 사용하기 위해 준비되고 빠르게 API를 설계하기 위한 웹 프레임워크입니다. 이 프레임워크는 양식화된 API 구조를 넘어 스피드와 간결함을 우선순위로 둡니다. 이는, 훌륭한 비동기 능력을 주는 Starlette위에서 설계되었습니다. 이는 API를 위해 오픈 스탠다드를 준수하는 (전에는 Swagger로 잘 알려진) OpenAPIJSON Schema를 포함하고 있습니다. 이는 대화형 API 문서를 자동적으로 생성할 수 있게 합니다.

Django Ninjia는 Django와 FastAPI사이의 혼합체입니다. 이는 두 세상의 장점 : Django의 어드민 사이트와 ORM 그리고 FastAPI의 타입 힌트인 Pydantic 모델의 장점을 줍니다.

장점

  • 성능
  • 타입 힌트와 Pydantic 지원
  • 자동화된 문서 생성
  • 비동기 지원


단점

  • 기능이 풍부하지 않다
  • 제한된 확장성
  • 덜 유명

Django Ninja에 더 알아보기 위해 Django와 Pydnatic(https://testdriven.io/blog/django-and-pydantic/)아티클을 참조해 보세요.


Django Tastypie


Django Tastypie는 API 설계를 위한 미니멀하지만 유연한 프레임워크입니다. 이 프레임워크는 직렬화, 인증, 캐싱, 필터링, 정렬, 그리고 기본적인 보안 기능을 제공합니다.

이는 리소스의 밑바탕에서 이루어집니다. 당신이 당신만의 Django 모델을 만들고, Django Tastypie는 나머지를 처리합니다. 이는 자동으로 시리얼라이저를 생성하고 CRUD 작업을 관리합니다. 이는 JSON, XML 그리고 YAML 형식을 지원합니다.

Django Tastypie는 CRUD 작업을 요구하는 대부분의 작은 프로젝트에 적합합니다. 이를 활용하여 당신은 작으면서도 괜찮은 API-설계 인터페이스를 Django에게 제공해야하는 것을 갖추면서 얻을 수 있습니다.

장점

  • 유연함
  • 사용하기 쉬움
  • 가벼움


단점

  • 부족한 기능
  • “복잡한” 앱에서는 부적절
  • 아직 베타 상태 (완벽한 릴리즈는 아직)
  • 덜 유명함


FastAPI, Flask, 그리고 다른 프레임워크


만약 Django REST Framework를 사용하기를 고려할 때, 먼저 스스로에게 Django가 필요한지 질문을 던지는 것이 중요합니다. 당신의 프로젝트가 Django에서 특정된 기능이 필요한지 말입니다. 혹은 당신이 Django가 편하기에 Django를 혼자 사용하고 있는지 말입니다.

Django는 API를 설계하기 위한 최고의 프레임워크가 아닐수도 있습니다. Python기반의 몇몇 대체제가 더 적절할 수 있습니다. 그것들을 이용해서 더 좋은 성과를 얻고, 그것들은 당신으로 하여금 읽기 쉽고 덜 반복되는 코드 작성을 할 수 있게 할 수 있습니다.

저는 당신이 다음 세가지를 체크했으면 합니다.

  1. FastAPI
  2. Flask
  3. Pyramid


결론


Django REST Framework는 필수는 아니지만 확실히 개발자의 생활을 더 쉽게 해줍니다. 코드 덩어리를 재사용할 수 있어 무언가 다시 할 필요가 없습니다. 또한 더 나은, 깨끗한, 그리고 에러가 적은 코드를 작성하도록 이끌어 줍니다.

이 프레임워크의 가장 큰 단점은 성능 문제와 새로운 기능 부족입니다. Django REST Framework가 가장 빠른 프레임워크는 아니지만 광범위한 기능 때문에 사용하는 것이 합리적입니다. 대부분의 웹 개발 성능 향상은 적절한 캐싱과 데이터베이스 계층 최적화를 통해 달성할 수 있습니다.

API가 가능한 한 높은 성능을 내기를 원한다면 FastAPI를 실험해볼 수 있습니다. Django와 FastAPI 사이의 모범적인 중간지점은 Django Ninja입니다. 마지막으로 간단한 API의 경우 Django Tastypie나 Flask를 사용할 수 있습니다.

728x90
반응형