장고 50문 50답 - 3

코변·2022년 9월 18일
0

장고 50문 50답

목록 보기
3/5
post-thumbnail
  1. 테스트코드에서 setup 함수와 setupclass의 차이는 무엇입니까?

    • setupclass는 @classmethod라는 데코레이터 함수를 감싸 사용되며 모든 테스트함수들을 아울러 데이터를 한번만 설정한다. 한꺼번에 테스트에 필요한 데이터들을 정의하고 한곳에서 관리할 수 있다는 장점이 있다.
    • setup함수는 테스트가 실행될 때마다 호출되며 테스트에 공통 데이터가 아닌 각각 필요한 데이터를 넣을 수 있다는 장점이 있다.
  2. Template Engine을 사용할 때, 발생하는 CSRF Error가 무엇이고 어떻게 해결합니까?

    • CSRF Error는 CSRF 즉, cross site request forgery 사용자가 의도치 않은 행위를 하도록 만드는 일종의 사이트 혹은 사용자에 대한 공격을 방지하기 위해 존재한다.
    • 공격을 방지하기 위해서 장고 서버는 middleware 설정에서 csrf 토큰을 헤더에 담아 통신하도록 설정 되어 있다. 따라서 장고 백엔드 서버와 통신하기 위해서는 CSRF토큰이 필수적입니다. (@csrf_exempt 데코레이터를 사용하거나 미들웨어를 수정하는 경우를 제외하고는)
    • 결론적으로 error를 해결하기 위해서는 csrftoken을 헤더에 담아 보내주면 되는데 {% csrf_token %} 으로 감싼 form 태그를 사용하거나 hidden_input에 csrf_token을 담아서 같이 보내주는 방법이 있다.
  3. Django ORM에서 queryset과 object의 차이점에 대해서 설명하시오

    • 쿼리셋은 오브젝트의 집합이다. filter를 통해 가져온 값이나 여러개의 데이터를 동시에 가져온다면 쿼리셋에 담겨져 온다.
    • object는 내가 설정한 모델의 클래스 한 단위라고 생각하면 편하다. get(), first()등의 명령어를 통해 가져올 수 있다.
  4. Django ORM에서 정참조와 역참조에 대해서 설명하시오

    • 정참조와 역참조를 쉽게 이해하는 방법은 내가 설정한 필드에 그 값이 존재하는가를 기준으로 생각하면 편한데 모델에 설정한 필드에 그 값이 존재하고 fk, 혹은 manytomany로 설정해두었다면 그건 정참조이다.
    • 반대로 내가 모델에 설정하지 않았으나 데이터간의 상관관계에 의해서 데이터를 조회하는 것이 역참조이다.
    • 정참조를 사용하여 데이터를 조회할 때는 내가 선언한 필드명으로 바로 조회할 수 있지만 역참조는 (내가 따로 설정해놓지 않았다는 전제하에) 필드명_set으로 조회할 수 있다.
  5. Response 결과와 함께 status code를 반환하는 이유는 무엇입니까?

    • http의 마지막 p는 프로토콜의 약자이다. 프로토콜의 사전적 정의를 보면 데이터 통신을 원활하게 하기 위해 필요한 통신 규약이라고 나와 있다.
    • response에 어떤 데이터가 담겨있는지 그리고 어떤 요청에 대한 response인지 프런트에서는 알 수 있는 길이 없다.
    • 따라서 단순히 지켜져야할 규약을 넘어서 양방향의 소통이 원활하기 위해서 status_code의 반환이 필요하다고 생각한다.
  6. 회원탈퇴, 게시글 삭제와 같은 기능을 구현할 때 실제 레코드를 삭제합니까? 그렇지 않다면 그 이유는 무엇입니까?

    • 삭제하기 보다는 유저의 기능을 정지시킨다. 유저가 활동했던 레코드들이 그 이유가 된다. 웹서비스는 특성상 유저테이블은 다른 테이블과의 연관성이 많다.
    • 따라서 유저의 정보를 삭제한다면 연관된 모든 테이블이 삭제되거나 혹은 연관된 부분에서 유저만 빠져서 에러를 일으킬 수도 있기 때문에 유저의 기능을 정지시키는 쪽을 선호한다.
  7. RESTful API는 무엇을 의미합니까?

    • REST란 http통신에서 특정 자원에 대한 요청을 리소스와 메소드로 표현하여 특정한 형태로 응답하는 하나의 아키텍쳐이다.
      • 메소드란 CRUD → POST, GET, PUT, DELETE를 말하고
      • 특정한 형태란 JSON형식을 말한다.
    • 여기서 REST에 ful을 붙여 형용사처럼 사용하는데 이 과정이 프로토콜처럼 규약이 정해져 있는 것은 아니나 이것이 RESTful 한지에 대한 약속 같은 것은 권장되어 있다.
    • uri, url에 직관적인 표현을 담아 그것만으로도 어떤 기능을 하는 API인지 유추가 가능하고 기존의 SOAP 같은 규약보다 자유롭고 비교적 가벼워 많이 사용되고 있다.
  8. DRF를 사용해 API를 개발할 경우 어떤 장점이 있습니까?

    • DRF는 기존 장고에서 제공하는 직관성에 더해 serializer라는 클래스를 제공하여 데이터를 JSON형태로 변화시키고 반대로 JSON형태의 데이터를 클래스형태로 쉽게 변화시켜 개발자로 하여금 더 쉽고 빠르게 개발할 수 있도록 돕는다.
    • 기존의 장고의 문제점인 프로젝트 자체가 무거워진다는 단점을 가볍지만 장고에서 제공하는 다양한 툴을 사용하는 형태로 극복할 수 있다.
  9. Django 와 DRF를 통한 개발의 차이점은 어떤 것이 있습니까?

    • 기존 장고의 형태는 views.py 파일 자체가 감당하는 코드의 양이 상당히 많다고 생각한다.
    • 이는 MTV 형태의 단점으로 꼽을 수 있는데 모델에서 데이터를 가져오고 그 데이터를 또 template에 보내주는 양방향 통신 역할을 view가 모두 담당하고 있기 때문에 자칫하면 코드의 가독성이 떨어질 수 있으나
    • DRF는 serializer를 통해 그 무게를 줄여 줄 수 있으며 요즘 많은 기업들이 채택하고 있는 msa방식으로 개발하기에 좋다.
  10. Django User 모델과 DRF Custom User 모델의 차이는 무엇입니까?

    • 기존 장고의 유저모델은 내가 회원가입시에 어떤 값을 필요로 하는지 그 필드의 이름은 무엇인지 수정은 가능하나 필요할지도 모른다고 생각한 기능들이 다 들어가 있다보니 불필요한 필드가 많아질 수 있다.
    • 또한 새로운 필드들을 기존 user 모델에 추가할 수도 있겠으나 그렇게 추가로 필드를 넣는다면 굳이 장고 user모델을 사용할 이유가 없다.
    • 이렇게 프로덕트 단계에서는 장고유저모델보다는 커스텀 유저모델이 선호되지만 만약 테스트 서버나 간단하게 프레젠테이션을 위한 작은 프로젝트를 만든다면 굳이 내가 일일이 필드를 선언할 필요가 없이 장고 기본모델을 상속받아 빠르게 개발을 할 수 있다는 점에서 장점이 있다.
profile
내 것인 줄 알았으나 받은 모든 것이 선물이었다.

0개의 댓글