[기술면접] 10일차 문답 | DRF Serializer -2-
Serializer를 통해서 특정 모델에 존재하지 않지만, 관계 있는 테이블의 필드 레코드를 반환하는 방법에 대해서 설명하시오
Serializer에서 특정 모델에 존재하지 않지만 관련있는 테이블의 필드 레코드를 반환하려면 source, to_representation, SerializerMethodField 를 사용할 수 있습니다.
source는 모델 필드와 Serializer 필드를 연결하여 데이터를 가져오는 데 사용되고, to_representation은 데이터를 직렬화할 때 데이터를 커스터마이징하는 데 사용되며, SerializerMethodField는 직렬화된 데이터에 커스텀 필드를 추가하는데 사용됩니다. SerializerMethodField는 관계가 없는 것도 가능합니다.
Serializer를 통해서 역참조 하는 방법에 대해서 설명하시오
Serializer를 통한 역참조는 관계 필드를 사용해 관련 객체를 참조합니다.
Serializer 클래스 내에서 관계 필드를 정의하고, source나 many=True 등의 옵션을 설정하여 관련된 객체의 정보를 포함시킵니다. (source는 model에서 선언한 related_name을 입력해줍니다.)
Serializer의 Meta 클래스에 역참조한 field명을 포함시킵니다.
이를 통해 직렬화 과정에서 한 번에 관련 데이터를 가져와 애플리케이션에서 쉽게 처리할 수 있습니다.
Serializer에서 어떻게 객체를 validate하게 됩니까?
is_valid를 통해 serializer 객체를 validate하게 될 경우 과정은 is_valid가 호출되며 데이터 수집을 하고,
serializer객체에서 필드 유효성 검사를 실행합니다.
이후 is_valid가 호출한 validate함수 혹은 커스텀 validate함수로 사용자 정의 유효성 검사를 진행한 후,
객체 전체의 유효성 검사를 순차적으로 실행합니다.
이 과정에서 유효한 데이터인지 여부를 반환하는데, 에러가 발생할 경우 serializer.errors를 호출하여 오류 메세지를 점검할 수 있습니다.
Serializer에서 Custom Validation을 하는 이유는 무엇입니까?
custom validation을 하는 이유는 상황에 따라 유효성 검사를 다양하게 활용하기 위함입니다.
custom validation을 하는 경우는 데이터의 일관성과 보안을 유지, 비즈니스로직의 규칙 적용, 복잡한 검증 로직 처리, 사용자 정의 에러메세지 전송 등이 있습니다.
1. 데이터 일관성 유지 → serializer 모델과의 일치성을 유지
2. 보안을 유지 → 신뢰할 수 없는 소스라는 가정 하에 데이터 자체를 변환 및 검증하는 과정을 가짐
3. 비즈니스로직의 로직과 규칙 적용 → DB저장, 중요 정보는 특정 비즈니스 로직과 규칙을 적용해야하는 경우가 있음
4. 복잡한 검증 로직 처리 → 간단한 필드 유효성 검사 이상의 다양한 로직에 대한 검사가 가능함
5. 사용자 정의 에러메시지 전송 → (프론트엔드와의 협의필요), 일반화된 오류 메시지를 대체