본문 바로가기
취업_TIL

취업_TIL | 2022-09-05 (6) _ 기술 면접 대비 질문 28~40

by Hee94 2022. 9. 5.

기술 면접 준비

28. DRF를 사용해 API를 개발할 경우 어떤 장점이 있나요?

  • valid 분기문을 통한 검증을 하지 않아도 되기에 좋습니다.
  • DRF 시리얼라이저의 Validation을 통해서, 모델 필드의 형식과 맞는지 자동으로 검사해주므로, 입력 값을 조회하여 확인해주지 않아도 되는 편리함이 있습니다.
  • Django 프로젝트에서, Serializer(직렬화)를 통해 JSON과 같은 양식으로 다양한 플랫폼의 클라이언트에게 데이터를 제공해 줄 수 있는 장점이 있습니다.

29. Django 와 DRF를 통한 개발의 차이점은 어떤 것이 있나요?

  • Django와 DRF 둘 다 Python 기반의 웹 프레임 워크이지만, Django는 서버와 클라이언트 사이에 html,css,JS주고 받습니다.(request&response).
    반면, DRF는 Serializer를 사용하여 서버와 클라이언트 사이에 JSON형식의 데이터만 상태를 표시하며 주고 받습니다.

30. Django User 모델과 DRF Custom User 모델의 차이는 무엇인가요?

  • Django의 기본 유저모델은 아이디,비밀번호,이메일과 같은 기본 필드만 제공되며, 추가로 다른 필드를 필요하게 될 경우 직접 클래스를 만들어 사용해야 합니다.
  • DRF는 AbstractBaseUser 클래스를 상속받아서 커스텀 유저모델을 작성할 수 있습니다.
    지원되는 기본 필드에는 is_active, is_admin, is_staff가 있고, 사용자 아이디를 다른 필드로 지정할 수 있거나, 필수로 입력 받을 필드를 지정할 수 있고, 관리자 계정 여부를 정할 수 있습니다.

31. DRF Serializer는 무엇이며, 어떤 기능을 수행하나요?

  • Serializer는 직렬화로, 입력받은 데이터를 JSON화 하여 출력합니다.
  • View에서 입력받은 값에 해당하는 데이터를 하나하나 묶어줘서 반환해줘야 하는 불편함이 있지만, Serializer를 사용해서 원하는 데이터 테이블과 필드를 손쉽게 묶어서 반환해주는 장점이 있습니다.

32. JSON 형식으로 데이터를 받고, Serializer를 통해서 JSON형식으로 데이터를 반환하는 이유는 무엇인가요?

  • 다른 환경과 데이터를 주고 받으려면 동일한 데이터 구조 표준을 가져야 하며, javascript를 사용하는 프론트엔드의 작업효율을 높입니다. 왜냐하면, 파싱 및 시리얼라이저를 따로 또 사용하지 않아도 읽기 쉽고, 사용하기 쉬운 JSON 형태로 받았기 때문입니다.

33. Serializer를 통해서 모델에 존재하지 않지만, 관계 있는 테이블의 필드 레코드를 반환하는 방법에 대해서 설명하시오

  • 원하는 데이터의 필드 이름을 변수로 지정하여 해당하는 모델의 Serializer에
    SerializerMethodField()를 추가하여 데이터의 값을 반환하며, fields에 지정한 변수를 입력하여야 합니다.
  • MethodField는 Vaildator를 타지 않습니다.

34. Serializer를 통해서 역참조 하는 방법에 대해서 설명하시오

  • 외래키로 참조되어 있는 데이터 테이블의 필드를 조회하고 싶을 때 Serializer를 통해 진행할 수 있으며, 모델에 저장된 필드의 이름 변수에 set 메서드를 통해 역참조 구문을 사용할 수 있습니다.
  • 변수를 내가 원하는 이름으로 변경하고 싶다면 source를 통해 커스텀 해줄 수 도 있습니다.

35. Django Q기능을 통해서 쿼리하는 것은 어떤 장점이 있나요?

  • Django DB 작업에서 사용할 수 있는 SQL조건문으로, filter메서드에서 주로 사용합니다.
  • ORM은 조건이 많아지면 코드가 길어지는 단점이 존재하는데, Q를 통해 SQL쿼리문을 쓰지 않고도 간단하게 쿼리할 수 있는 장점이 있습니다

36. Serializer에서 어떻게 객체를 validate하게 됩니까?

  • DRF에 내장되어 있는 validate함수를 활용하여, 데이터 테이블 모델의 필드의 형식이 올바른지, 데이터는 모두 입력되어 있는지 등의 내용을 기본 내장 validate()메서드를 통해 입력 받은 데이터의 값을 True, False로 구분하여 is_valid() 메서드에 반환하여 검증하게 됩니다. 개발할 때, 이를 사용하여 검증이 되었는지 여부를 확인할 수 있습니다.

37. Serializer에서 Custom Validation을 하는 이유는 무엇인가요?

  • 데이터 테이블의 모델의 필드의 형식 외에 추가적으로 검증하고 싶은 조건이 있을 때, Custom Validation을 통해 추가 검증을 진행합니다.

38. Serializer에서 create, update 함수는 어떤 기능을 수행하나요?

  • create는 is_valid()를 통과한 데이터를 입력받아, 추가적인 데이터를 덮어 씌우는 데 활용됩니다.
    create = 유효성 검사를 통과한 데이터들을 바탕으로 새로운 DB인스턴스를 생성하고 반환합니다.
  • update는 말 그대로 데이터를 수정할 때 사용됩니다.
    update = 유효성 검사를 통과한 데이터들을 바탕으로 기존의 DB 인스턴스를 수정하고 반환합니다.

39. Serailizer Custom validate함수를 통해 오류 케이스를 어떻게 처리하나요?

  • 기본 및 Custom Validation을 통해서 검증할 데이터마다 확인되는 조건을 통과하지 못할 때, raise 구문으로 예외 처리를 하여 검증 오류문을 반환하게 됩니다.

40. DRF permission_classes를 사용하는 이유는 무엇인가요?

  • 사용자마다 개별적인 권한을 부여하기 위해 사용합니다.
  • 구현되어 있는 API별로 각각 다른 조건의 접근 권한을 부여하기 위해서는 Django 기본 기능의 authenticate 의 구문으로는 부족하기에, permission_classes를 활용하여 다양한 조건을 생성하고, 해당 조건을 만족하는 사용자에게 접근 권한을 부여할 수 있게 되므로 복잡한 기능을 구현할 수 있게됩니다.