본문 바로가기
취업_TIL

취업_TIL | 2022-09-02 (5) _ 기술 면접 대비 질문 17~27

by Hee94 2022. 9. 2.

기술 면접 준비

17. 데이터 테이블 간의 관계를 나타내는 FK, OneToOne, ManyToMany 필드에 대해서 설명하시오.

  • FK는 Foreign Key(외래키)로 참조키이며, 테이블과 참조되는 테이블의 관계를 나타냅니다. FK는 참조할 모델의 PK를 값으로 가져오며, 가져온 값을 작성하는 모델에 필드로 기록합니다. FK는 일대다 형식의 관계를 가지고 있습니다.
  • OneToOne 필드는 일대일 관계를 갖는 모델을 연결할 때 사용합니다. 오직 하나의 레코드에만 대응하는 값을 가집니다. 예를 들면, 유저와 유저프로필 사이에 사용합니다.
  • ManyToMany 필드는 다대다 관계 모델을 연결하는 필드입니다. A 와 B 모델이 있을때, A가 여러 개의 B를 가질 수도 있고, B가 여러 개의 A를 가질 수도 있을 때 사용하는 모델. 예를 들면, Follow / 좋아요와 같은 기능을 구현할 때 사용합니다.

18. Django에서 ManyToMany필드를 만드는 방법에 대해서 설명하시오

  • 모델 A와 모델 B중 ManyToManyField를 지정할 모델의 필드에 다른 모델을 상속 받아 생성합니다.
  •  

19. FBV와 CBV는 각각 무엇이며, 어떤 차이가 있나요?

  • FBV란 Function-Base View 함수에 기반을 둔 방법입니다. HTTP Request의 메서드를 분기문으로 조회하여 View를 진행하고, 하나의 함수 안에서 여러 개의 HTTP Request 메서드를 처리합니다.
  • CBV란 Class-Base View 장고가 제공하는 클래스를 활용해서 구현하는 방법입니다. 하나의 큰 기능과 관련된 View를 클래스로 구분하고 각각 HTTP 메서드인 Post, Get, Put, Delete 함수를 각각 생성하여 특정 메서드에 진입할 때 해당 함수가 실행되도록 하는 구조로 처리합니다.
  • FBV는 편하게 구현이 가능하고 읽기 편한 로직이며, 데코레이터 사용이 명료합니다
    단점으로는 확장 / 재사용이 어렵습니다.
    CBV는 확장 / 재사용이 용이하며 다중 상속, Mixin 가능합니다.
    HTTP Method가 클래스 안에서 나누어 처리할 수 있고 Generic Class View 사용이 가능하고, 단점으로는 읽기 어려우며 상속, Mixin으로 인해 코드 이해를 위해 여러 곳을 확인해야합니다.

20. 테스트코드를 작성하는 이유는 무엇이며 어떤 장점이 있나요?

  • 테스트 코드를 통해 개발 과정 중 예상치 못한 문제를 미리 발견 할 수 있고, 작성한 코드가 의도한 대로 작동하는지 검증할 수 있는 장점이 있습니다
    CI를 통해 주기적으로 테스트코드 유효성을 확인함으로써 안정적인 추가 빌드가 가능합니다.

21. 테스트코드에서 setUp 함수와 setUpClass의 차이는 무엇인가요?

  • setUp 함수는 각 테스트 메소드를 호출하기 이전에 호출되는 메소드입니다.
    테스트 케이스가 실행될 때 마다 사용되어집니다.
  • setUpClass 함수는 해당 테스트 클래스가 시작되기 이전 1번만 호출되는 메소드입니다.
  • 둘의 차이점으로는 setUp 메소드는 각 테스트 메소드 이전에 항상 호출이 되지만,
    setUpClass는 해당 테스트 클래스가 시작되기 전 1번만 호출됩니다. 또한, 메소드에
    @classmethod 라는 데코레이터를 달아줘야하고 메소드 인자로 cls를 넘겨줘야합니다.

22. Template Engine을 사용할 때, 발생하는 CSRF Error가 무엇이고 어떻게 해결하나요?

  • CSRF란 Cross Site Request Forgery (사이트간 요청 위조)로 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격을 말하며, Django Template Engine에서는 CSRF 공격을 막기 위한 코드인 {% csrf_token %} 이 내장되어 있으며, POST 요청 시 해당 코드가 반드시 필요로 합니다. 이 코드를 작성하지 않으면 Request 에러가 발생하게 되고, 해당 코드를 기입하는 것으로 에러를 해결할 수 있습니다.

23. Django ORM에서 queryset과 object의 차이점에 대해서 설명하시오

  • queryset은 object의 집합체이며 리스트로 구성되어있습니다.
  • object는 데이터베이스에서 하나의 레코드입니다.
  • 둘의 차이점으로는 object는 해당 필드 이름을 메서드로 사용하여 값을 추출할 수 있지만, queryset은 리스트 형태로 구성되어 있어, index를 사용하거나 반복문을 통하여 추가적인 작업을 해야 필드 값을 추출할 수 있습니다.

24. Django ORM에서 정참조와 역참조에 대해서 설명하시오

  • 장고의 모델에서 내가 참조하고 있는 모델의 필드 조회하는것을 정참조라고 합니다.
  • 참조되고 있는 모델에서 나를 참조하고 있는 모델을 조회하는 것이 역참조라고 합니다.

25. Response 결과와 함께 status code를 반환하는 이유는 무엇인가요?

  • 개발자들 간의 약속된 규약으로 status code를 통해 프론트엔드에서 서버에 request시,어떤 상태값을 반환 받는지에 따라 코딩을 해야함으로 함께 반환합니다. 이는 코드를 통해서 개발하는 환경에 있어 명확하게 요청의 성공과 실패를 결과물에서 확인할 수 있으며, 또한 이를 사용자에게 UI및 UX의 형태로 보여주기 위함입니다.

26. 회원탈퇴, 게시글 삭제와 같은 기능을 구현할 때 실제 레코드를 삭제합니까? 그렇지 않다면 그 이유는 무엇인가요?

  • 실제 레코드를 삭제한다면 더이상 해당 데이터베이스에 접근할 수 없기때문에, setnull등을 통해 회원탈퇴나 게시글 삭제를 진행하여도, 기록은 남아 있을 수 있도록 할 수 있습니다.
  • 탈퇴한 사용자나, 삭제한 게시글과 같은 형태의 레코드를 단순히 삭제 기능을 구현하는 것이 아닌 is_active와 같은 메서드를 사용해 노출을 숨기는 것으로 백업할 수 있는 데이터를 남겨두는 것이 차후 서비스의 안정성을 높일 수도 있습니다.

27. RESTful API는 무엇을 의미하나요?

  • REST의 특징을 기반으로 API를 구현한것을 RESTful API라고 합니다
    HTTP 요청을 보낼 때, 어떤 URI에 어떤 Method를 사용할 지 개발자들 사이에 널리 지켜지는 약속이며 프레임워크등이 아닌 형식이기때문에 기술에 구애 받지 않습니다.
  • REST 란
    어떤 자원에 의해 CRUD(Create, Read, Update, Delete)연산을 수행하기 위해 URI(Resource)로 GET, POST등의 방식(Method)를 사용하여 요청을 보내며, 요청을 위한 자원은 특정한 형태(Representation of Resource)로 표현되는 것입니다.