시작하기 앞서 나는 로그인과 회원가입에 대한 api를 짜면서 이해가 안되는 부분을 찾게 되었다.
우리가 CRUD를 만들 때 왜 Serializer.py에서도 CRUD함수를 만들고 views.py에서도 CRUD 함수를 만들어서 이것이 굉장히 헷갈렸다. 왜 같은 일을 중복되게 2번씩 하지? 어디에도 이러한 답변을 찾을 수 없어서 GPT한테 물어보았고 GPT가 준 답변은 밑에와 같다.
CRUD(Create, Read, Update, Delete) 기능을 만들 때, 뷰(View)와 시리얼라이저(Serializer)의 역할은 다음과 같습니다:
뷰(View):
- Create: 새로운 객체를 생성하고 저장하는 역할을 합니다. POST 요청에 대한 처리를 담당합니다.
- Read: 객체를 조회하는 역할을 합니다. GET 요청에 대한 처리를 담당하며, 리스트 조회나 단일 객체 조회를 수행합니다.
- Update: 기존의 객체를 수정하는 역할을 합니다. PUT 또는 PATCH 요청에 대한 처리를 담당합니다.
- Delete: 객체를 삭제하는 역할을 합니다. DELETE 요청에 대한 처리를 담당합니다.
시리얼라이저(Serializer):
- Create: 새로운 객체를 생성하는 역할을 합니다. 클라이언트로부터 전달받은 데이터를 유효성 검사하고, 모델 인스턴스를 생성하여 저장합니다.
- Read: 모델 인스턴스를 직렬화하여 클라이언트에 반환하는 역할을 합니다. 데이터를 JSON 또는 다른 형식으로 변환하여 응답합니다.
- Update: 기존의 객체를 수정하는 역할을 합니다. 클라이언트로부터 전달받은 데이터를 유효성 검사하고, 모델 인스턴스를 업데이트합니다.
- Delete: 객체를 삭제하는 역할을 합니다. 삭제할 객체를 식별하고 삭제합니다.
요약하면, 뷰는 클라이언트의 요청을 받고, 해당 요청에 대한 처리를 수행하며, 시리얼라이저는 데이터의 유효성을 검사하고, 모델과 데이터를 변환하여 처리합니다. 이러한 역할 분담을 통해 각각의 역할에 집중하여 코드를 구현하고 유지보수하기 쉽게 만듭니다.
Q. 그럼 시리얼라이저에 CRUD는 get이나 post의 요청과는 무관한거야?
네, 시리얼라이저의 CRUD 메서드는 HTTP 요청 방식(get, post, put, delete 등)과는 직접적으로 연관되는 것은 아닙니다. 시리얼라이저의 CRUD 메서드는 모델의 데이터를 생성, 읽기, 업데이트, 삭제하는데 사용됩니다.
시리얼라이저의 CRUD 메서드는 다음과 같은 역할을 합니다:
- Create: 새로운 객체를 생성하고 저장합니다. 이는 HTTP POST 요청과 관련이 있을 수 있지만, 직접적으로는 HTTP 요청과는 무관합니다. 시리얼라이저의 create 메서드는 클라이언트로부터 받은 데이터를 기반으로 모델의 객체를 생성하고 저장합니다.
- Read: 모델의 데이터를 조회하고 직렬화하여 반환합니다. 이는 HTTP GET 요청과 관련이 있을 수 있지만, 직접적으로는 HTTP 요청과는 무관합니다. 시리얼라이저의 to_representation 메서드 등을 통해 데이터를 직렬화하여 반환합니다.
- Update: 기존의 객체를 수정합니다. 이는 HTTP PUT 또는 PATCH 요청과 관련이 있을 수 있지만, 직접적으로는 HTTP 요청과는 무관합니다. 시리얼라이저의 update 메서드는 클라이언트로부터 받은 데이터를 기반으로 모델의 객체를 업데이트합니다.
- Delete: 객체를 삭제합니다. 이는 HTTP DELETE 요청과 관련이 있을 수 있지만, 직접적으로는 HTTP 요청과는 무관합니다. 시리얼라이저의 delete 메서드는 모델의 객체를 삭제합니다.
시리얼라이저의 CRUD 메서드는 모델의 데이터 처리에 집중하며, HTTP 요청과의 연관성은 해당 시리얼라이저를 사용하는 뷰에서 결정됩니다.
요약을 하자면
Serializer에서는 모델의 유효성 검증이나 데이터 처리,변환을 담당하는데 그때 모델의 객체를 생성, 추가, 삭제, 읽기를 할 때 CRUD기능이 쓰이기에 적절하게 정의를 해주어야 한다.
Veiw에서는 HTTP의 요청에 관련해서 처리를 하게 되는데 HTTP의 주요 메서드인 Get, Post, Put, Petch, Delete를 처리하게 된다.
하지만 이것이 CRUD와 성격이 비슷해서 내가 헷갈렸던것 같다. 이전 블로그에도 정리를 다시 했고 여기도 했으니 절대 잊지 말자.
이전 포스팅에서는 Serializer에 대해서 작성을 했기에 다시 작성하려고 했던 view에 대해서 작성을 해보자!!
'Django' 카테고리의 다른 글
[DRF] VIEW - Mixins (4) | 2024.03.26 |
---|---|
[DRF] VIEW - APIVIEW (0) | 2024.03.25 |
[DRF] Validation-유효성 검증 (4) | 2024.03.24 |
[DRF] Serializer CRUD - DRF TUTORIALS (0) | 2024.03.22 |
(Django) 1.Serializer(직렬변환) (0) | 2024.03.19 |