지금까지 일반 퓨어 장고에서는 함수 기반 뷰(Function-Based Views, FBV)를 사용했지만 DRF에서는 Class 기반 뷰(Class-Based Views,CBV)를 사용할 것이기에 이 둘의 차이에 대해서 먼저 알아보려고 한다.
함수 기반 뷰(FBV)
- 간결하고 직관적인 코드
함수 기반 뷰는 함수로 구현되기 때문에 코드가 상대적으로 간결하고 직관적이다. 특히 간단한 뷰의 경우 함수를 작성하고 라우팅하기가 간편하다.
- 라우팅 : 네트워크에서 통신 데이터를 보낼 때 최적의 경로를 선택하는 과정
- 재사용성
함수는 쉽게 재사용이 가능하여 코드 중복을 최소화하고 여러 뷰에서 동일한 로직을 공유할 수 있다.- 직관적인 URL 패턴
urls.py에 URL 패턴을 정의할 때 함수 이름을 직접 참조해서 매핑할 수 있다.
- 매핑 : 하나의 값을 다른 값으로 대응시킴.
- 테스트 용이성
각각의 뷰 함수를 개별적으로 테스트하기 편리하다.- 요청 및 응답 객체를 직접 조작할 수 있다.
- 작고 간단한 프로젝트나 간단한 뷰의 경우 FBV가 빠른 개발에 적합하다.
- 레거시 코드와의 호환성
Django의 초기 버전부터 FBV가 사용되어왔기 때문에 레거시 코드와의 호환성을 유지하면서 기존 프로젝트를 업데이트하거나 유지 보수하는데 유용하다.
- 레거시 코드 : 유산이 된 코드, 누군가 떠나면서 남겨둔 코드
Class 기반 뷰(CBV)
- 코드 구조와 가독성
CBV는 관련된 로직을 하나의 클래스로 그룹화하여 가독성을 향상시킨다.
특히 API에서 CRUD 기능을 갖는 엔드포인트의 경우 CBV를 사용하면 각각의 HTTP 메서드에 대한 처리 코드를 한 클래스 내부에서 if문 대신 메서드별로 분리하여 구성이 가능하다.- 재사용성 및 확장성
CBV는 상속을 통해 뷰의 기능을 확장하고 재사용하기 더 쉽다.
메서드를 오버라이딩하거나 mixin클래스를 추가하여 뷰를 수정하고 확장할 수 있어서 코드 중복을 줄일 수 있다.
- mixin 클래스 : 뷰 클래스에서 특정 기능이나 메서드를 재사용할 수 있도록 도와주는 클래스로 mixin 클래스는 다른 CBV 클래스에서 상속받아서 여러 뷰에서 동일한 기능을 재사용하고 코드 중복을 방지할 수 있다. 커스텀도 가능하고, 다중 상속도 가능하여 코드를 mixin 클래스로 분리하면 뷰 클래스가 단순해지고 가독성도 향상된다.
- GenericView 내장
DRF가 제공하는 GenericView는 웹 페이지에서 데이터 처리 기능(표준 CRUD작업)을 구현하기 위해 이미 구현된 뷰 클래스의 집합으로 데이터 목록을 표시하는데 사용되는 ListView와 같이 따로 프론트 작업 없이 기능을 가져다 쓰기만 하면 된다.- 문서화
CBV를 사용하면 클래스와 메서드 이름을 통해 API 문서화가 용이하고, Swagger와 같은 도구에서도 더 나은 가독성을 제공한다.
프로젝트에 따라서 간결한 코드가 빠른 개발면에서 좋을 떄도 있지만, 세세한 기능이 추가 요구될 가능성이 있을 경우 간결한 코드는 수정하기에 있어서 어려움을 겪을 수도 있다.
일반 장고에서는 데이터 CRUD 함수를 각각 따로따로 정의해서 구현했지만 DRF에서는 CBV를 사용해서 더욱 간결하게 코드를 짤 수 있다.
오늘은 DRF를 공부하기 시작하면서 FBV보다 CBV를 자주 사용할 것 같기에 완벽히 이해하기에는 무리가 있겠지만 간단하게 알아봤고, 안 짚고 넘어간 것보다는 나중에 도움이 꼭 될 것이라고 생각한다.
🥚🐣🐤🐥🐓🐔