개발자

Django serializer 현업에서는 어떻게 설계를 어떻게 하시나요?

3월 13일조회 77

안녕하세요 RN 개발을 진행하면서 백엔드로 Django를 사용하고 있고, Django를 공부한지 몇개월 되지 않았습니다. 개발을 진행하면서 아래의 문제가 생겼는데, 혹시 애초에 serializer와 model을 잘못 설계한 것은 아닌지, 또한 현업자 분들은 어떻게 시리얼라이저를 사용하시는지 궁금합니다. [문제 설명] 프로젝트의 모델에는 하위 게시글 모델이 여러 개 올 수 있습니다. 모델 구조는 아래와 같습니다. Project { id: number, posts: Post[], } Post { id: number, project: number, <- 무한 참조를 방지하기 위해 id } 앱 개발을 하다가 Post 데이터에서 Project까지 UI를 그려야하는 상황에서 또 프로젝트를 불러오는 API를 사용하니까 (프로젝트 id에서 프로젝트 오브젝트 불러오기, fetchProjectAPI). UI 지연이 되어서 프로젝트 오브젝트를 불러오고 싶은데, 프로젝트 시리얼라이저 내에서 또 포스트 오브젝트가 나오고 거에서 또 프로젝트가 나오는 문제가 생기더라구요. 이와 같은 경우에는 어떻게 해결하면 좋을까요? posts를 제외한 ProjectSummarySerializer를 새로 생성하면 되겠지만 근본적인 해결책은 아니라고 생각합니다 (제외하고 싶은 필드가 생길때마다 시리얼라이저를 만들어야하니깐요). 혹시 애초에 모델을 잘못 설계한걸까요? 또한 애초에 오브젝트로 반환하는 것을 잘 안하나요? (DB 와 송수신 로드를 줄이기 위해서 아이디로만 반환한다던지)

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 0

답변이 없을 때 보이는 아이콘

첫 답변을 기다리고 있어요.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

3월 13일

Django REST 프레임워크의 시리얼라이저의 사용에 대해 질문을 주셨군요. 이 문제는 Django 모델 사이의 관계를 잘 처리하도록 설계하는 것이 중요합니다. 문제 상황에서 소개한 구조에서, Post 모델에 대한 참조가 무한대로 반복되는 것으로 이해했습니다. 이 문제를 해결하기 위한 몇 가지 방법이 있습니다: 1. **Depth Control**: Serializer 클래스 에 depth 옵션을 넣어줍니다. 특정 깊이까지만 관계를 추적하여 무한 루프를 방지할 수 있습니다. ```python class ProjectSerializer(serializers.ModelSerializer): class Meta: model = Project fields = ('id', 'posts') depth = 1 ``` 위 코드는 posts 필드가 foreign key로 referece 되어 있는 경우, 해당 post의 serializer까지 호출합니다. 하지만, 이 post serializer 에서 다시 project를 reference하는 경우 이는 depth 제어로 인해 제외되므로 무한루프를 방지할 수 있습니다. 2. **Nested Serializer**: Post에 대한 Nested Serializer를 만들고, 그 내부에서 project 값을 출력하지 않도록 설계하면 됩니다. 예시 코드는 아래와 같습니다. ```python class PostNestedSerializer(serializers.ModelSerializer): class Meta: model = Post exclude = ('project',) class ProjectSerializer(serializers.ModelSerializer): posts = PostNestedSerializer(read_only=True, many=True) class Meta: model = Project fields = ('id', 'posts') ``` 이처럼, 두번째 방법인 Nested Serializer를 사용하면 특정 필드를 제외할 수 있고, 그로 인해 무한 참조를 방지할 수 있습니다. 이는 모델의 설계 문제가 아닌 시리얼라이저에서 어떻게 데이터를 가공하느냐에 따른 문제이므로 이렇게 해결할 수 있습니다. 장고 모델 설계는 개발자의 의도와 요구 사항에 맞게 적절하게 결정하는 것이 중요합니다. 때문에 직접적으로 '잘못'되었다고 말씀드리기는 어렵습니다. 그러나 serialization 과정에서 생기는 이러한 문제들을 잘 해결할 수 있는 방법론과 패턴을 숙지하는 것이 중요합니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!