Jackal, the Boilerplate library for Django REST Framework
개발자는 자신만의 프레임을 자신도 모르는 사이에 구축한다. 이는 실물적인 코드에 국한되는 것이 아니다. 개발자의 개발 패턴, 문제를 해결 패턴, 리팩토링 패턴 등의 다양한 패턴들이 모이고, 쌓이고, 누적되면서 하나의 틀로써 굳어지게 는 것이다. 프레임의 장점은 일관적인 생산성을 유지시켜준다. 개발자는 다양한 자신만의 프레임을 계속해서 만들어야 한다.
내게도 몇 가지 프레임이 있다. 효율성과 편의성, 합리성을 추구하는 것 역시 나의 프레임이다. 그렇기에 같은 작업을 반복하거나, 비효율적으로 처리한다는 느낌이 들면 잠시 멈춰서 생각을 한다. 더 나은 방법이 없을까 하고. 그러다 보니 생산성 향상을 위한 코드들이 쌓여가기 시작했다. Jackal 은 그런 코드들의 일부분을 정리한 결과물이다. Django, DRF, Celery 등에 비하면 크게 보잘것없는 코드 더미에 불과하지만, 나의 생산성 향상에 큰 도움을 주었다.
참고: 위 사진은 자칼이 아니라 늑대다. 근데 멋있으니 상관 없다.
Jackal 간단 설명
Jackal은 Django와 DRF를 기반으로 개발을 하던 중 생긴 몇 가지 번거로우면서도 코드의 품질을 더럽히는 작업들을 단순화하고 효율화 시키다 보니 자연스럽게 만들어졌다.
다양한 프로젝트에서 Jackal을 사용하고 있지만, pypi로 관리되지 않아서 프로젝트마다 조금씩 변형되고 난잡해지기 시작했다. 그래서 흩어진 코드를 모아 Jackal 프로젝트를 구성하고, 범용성을 키워 패키징 하였다. 내가 직접 사용하면서 다양한 상황에 추가적으로 적용하기 위해서 커스터마이징이 용의 해야 했으며, Django의 settings 파일과 연동하기 위해서 DRF의 코드를 참조했다.
Jackal의 핵심은 JackalAPIView 에 있다. JackalAPIView 는 DRF의 APIView 를 상속받아 그 기능을 확장한다.
http request가 url resolver를 거쳐 view로 도달했을 때 APIView의 dispatch 함수가 실행된다. dispatch에서는 django의 원시 request 객체를 DRF에 맞춰 다듬고, 인증 체크, 권한 체크 등 view 가 실행되기 전에 처리해야 할 모든 작업을 실행한 뒤에, view 를 실행한다.
JackalAPIView에선 dispatch, permission check, view 실행 등의 분기점마다 post, pre 메서드를 삽입하여 각 기능이 실행하기 전, 혹은 실행된 직후의 로직을 자유롭게 정의할 수 있다.
또한 get_object, get_filtered_queryset은 자칼의 QueryFilter와 연계되어 GET parameter를 기반으로 손쉬우면서도 직관적인 필터링을 제공한다. 필터링을 위해 난잡하게 코드를 칠 필요 없이 dictionary 형태로 filter_map 을 정의하기만 하면, 필터링이 알아서 진행된다.
위의 기능들 외에 다양한 Mixin View 가 존재하는데, 이 Mixin 은 상속 후 몇 가지 필드에 값만 할당하면 List, create, detail, update, delete, pagination list 등의 api 를 손쉽게 구현할 수 있다.
여담으로 Jackal 이란 이름은 라이브러리 자체가 이렇다 할 목적이 없고 두서가 없어서, django-filter 같은 이름을 지을 수가 없었다. 그래서 Django의 ja를 보고 자칼이 떠올라서 자칼이라 지었다.
Jackal은 오픈소스로 Github에 공개되어있으며, pip를 이용하여 누구나 다운로드 가능하다. 코드에 문제가 있다면 Github에 issue 를 남기거나, pull request 를 날리면 된다. 문제점이 있다면, 문서화가 빈약하고, 테스트가 부족하다. 둘다 계속해서 진행 중이며, 아직은 0.0.x 대 버전으로 베타 배포 상태다.
Github Repo: https://github.com/joyongjin/Jackal
스팀잇에 오신것 을 환영합니다.^^
저는 krwhale이라는 아기고래와 코인시세 챗봇을 운영하고 있어요 :)
- 아기고래에게 Voting 받는 법
- 코인시세 챗봇
1주일 뒤 부터 유용하게 쓰실 수 있을 거에요~^^
그리고 암호화폐 관련 데일리 리포트도 작성하고 있으니 관심 있으시면 많은 구독 부탁드릴게요~
- Pliton의 암호화폐 데일리 리포트
Congratulations @kylejo! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Vote for @Steemitboard as a witness to get one more award and increased upvotes!