Django 셀프 50문 50답 1~20번

김태인·2022년 9월 13일
0

Django 50문 50답

목록 보기
1/2
post-thumbnail

1. Django 는 무엇인지 설명하시오

  • 파이썬이라는 개발언어에서 웹을 개발하기 위해 만들어진 프레임워크
  • 프레임워크는 프로그래밍 언어에서 복잡한 기능을 수행하기 위해 만들어진 틀이며, 다양한 기능을 구현하기 위해 사용함

2. Django를 백엔드 스택으로 선정한 이유

  • Django는 템플릿부터 데이터베이스까지 웹을 구현하는데 필요한 기본적인 기능을 전부 제공하는 프레임워크이다보니 처음 학습하기에 좋다고 생각해서 선택했음
  • 쉽고 빠르게 구현할 수 있는 장점과 함께 Django는 관계형데이터베이스 기반의 프레임워크이기에 첫 시작으로 적합하다고 생각
  • Flask는 접근성이 좋고 빠르게 구현할 수 있지만, 웹에 필요한 다양한 기능을 전부 구현하려면 많은 라이브러리를 가져와서 사용해야 함으로 숙련도를 요구함

3. Django의 장점

  • ORM을 지원함
  • admin을 제공함으로 데이터베이스 접근이 용이해 시간을 절약할 수 있으며, 앱 별 파일구조 (urls, views, serializers)가 나뉘어 있어서 묶어 보기가 편함
  • 웹 구현에 필수적인 기본 기능을 제공함 (로그인, 회원가입, 유저모델, 비밀번호 해싱, DB등)

4. Django와 다른 Python 웹 프레임워크중 비교되는 특징은 무엇인가?

  • Django는 RDB를 사용
  • 앱 별 파일구조를 가지고 있음
  • admin 시스템을 제공
  • MTV 시스템
  • 기본적인 보안을 제공

5. Django의 프로세스는 어떤 순서로 동작하는가?

  • Request -> URL -> View -> Model -> DB -> Template -> Response
  • Client에서 요청을 보내면 urls.py 에서 요청이 온 url을 보고 이에 맞는 view로 넘김
  • 모델과 데이터베이스 관계를 보고 데이터를 받아온 후 이것을 템플릿으로 넘겨주는 Response로 반환함
  • Client는 Response를 보여줌

6. Django의 MTV 패턴 시스템은 무엇인가?

  • Model, Template, View
  • Model -> 데이터를 읽거나 쓸 때 사용하며 model.py가 담당
  • Template -> 유저가 실질적으로 보는 화면을 의미
  • View -> URL패턴에서 들어온 요청을 처리하고, 요청에 따라 모델을 호출하거나 템플릿을 호출하고 최종적으로 유저에게 HTML파일을 보내주는 역할을 하며 views.py 가 담당

7. ORM이란?

  • Object Relation Mapping
  • 객체와 관계형 데이터베이스를 자동으로 매핑해줌
  • 프로그래밍 언어에서 데이터베이스 레코드에 접근할 때 SQL의 쿼리문을 사용하여 질의하지 않고 프레임워크 자체적인 메서드를 사용해서 데이터를 조회 및 수정할 수 있도록 하는 코드
  • 데이터베이스의 레코드를 하나의 객체(Object)로 가져와서 그 자체를 활용 및 재사용한다

8. Django ORM의 장단점

  • 장점 : 쿼리문을 사용하지 않기때문에 SQL관련 지식이 적더라도 데이터베이스에 접근하여 개발할 수 있음
  • 객체 자체를 가지고 활용, 재사용이 가능하기 때문에 개발에 용이
  • 단점 : ORM은 메서드를 사용하여 쿼리문으로 변환하는 작업이기에 복잡할 경우 속도가 느려짐
  • 쿼리문에서 쉽게 해결할 수 있는 문제를 복잡한 코드를 통해 해결해야 할 수 있음

9. Django Admin은 무엇이고 어떤 기능을 제공하나?

  • 사이트 관리자를 위한 기능으로 Django는 인터페이스를 모두 자동으로 생성해주는 장점이 있음
  • 자동으로 생성되는 admin은 기본적인 CRUD를 제공함

10. Django Template Engine 은 무엇이고 어떤 기능을 제공하나?

  • Django에서 제공하는 서버 사이드 렌더링으로 Template 엔진을 통해서 Return 된 데이터를 HTML상에서 코드를 작성하여 웹을 구현할 수 있게 하는 도구를 의미
  • Django Template Engine으로 프론트와 백엔드를 분리하지않고 웹을 전부 구현할 수 있음

11. Django를 통해 CRUD를 구현하는 방법에 대해서 HTTP Method와 함께 설명하시오

  • Django는 사용자의 Request 요청에 따라 url을 조회하여 해당하는 view로 이동합니다
  • FBV, CBV에 따라 작성된 HTTP메서드를 확인합니다
  • GET 메서드를 통해 조회를하고, POST를 통해 게시글 작성등을 진행하며, PUT을 활용하여 데이터 전체를 업데이트 할 수 있고, DELETE를 통해 삭제합니다
  • PATCH를 통해 부분적인 업데이트를 진행하기도 하나, PUT의 partial=True를 통해 부분적으로 업데이트를 함으로써 PUT하나로만으로도 업데이트 관련 메서드를 진행할 수 있습니다

12. Django에서 테이블을 설계하고 데이터베이스에 반영하는 방법에 대해 설명하시오

  • models.py 에서 생성할 데이터 테이블을 클래스로 정의하고, 필드를 생성합니다
  • 모델에 변경사항이 생긴 것 혹은 변경된 것을 인식하게 하는 makemigrations 를 입력하는 것으로 마이그레이션 파일을 생성합니다
  • 변경사항을 적용하는 migrate를 입력하는 것으로 데이터베이스에 반영합니다

13. 회원가입을 할 때 비밀번호를 암호화 하여 저장하는 이유는 무엇입니까?

  • 먼저는 보안성을 위해 외부 공격자(해커)를 방어하기 위함이며, 관리자조차 사용자의 암호를 알지 못하게 함으로 신뢰성과 함께 보안을 유지하기 위함입니다

14. JWT에 대해서 설명하시오

  • JSON Web Token의 줄임말로써 유저를 인증하고 식별하기 위한 Token기반의 인증을 말합니다
  • JSON데이터를 Base64를 통해 인코딩하여 직렬화 한 것이 포함되고, 토큰 내부에는 위변조 방지를 위해 개인키를 통한 전자 서명도 있습니다
  • 사용자는 로그인을 통해 JWT를 발급받아 브라우저에 저장(인증)하고, 로그인된 사용자라는 조건으로 웹의 기능에 접근할 때 JWT를 제시하여 인가된 사용자는 기능을 접근할 수 있게 됩니다.

[JWT 심화]

  • JWT는 세가지의 정보로 구분되어있으며 header, payload, verify signature로 구분되어있습니다
  • Payload에는 JSON 데이터를 Base64를 통해 인코딩하여 직렬화 한 내용이 포함되어있으며 이를 클레임이라고 합니다
  • Header에는 두가지 정보가 담겨있으며 Type은 항상 고정으로 JWT가 들어가있으며 다른하나는 alg(알고리즘) 이 담겨있다
  • 이곳에는 3번 서명 값을 만드는 데 사용될 알고리즘이 지정된다 (HS256 등 여러 암호화 방식 중 하나를 지정)
  • verify signature에는 1번 헤더와 2번 페이로드 그리고 서버에 감춰놓은 비밀 값 이 셋을 이 암호화 알고리즘에 넣고 돌리면 3번 서명값이 나오는 것

15. JWT의 Access Token과 Refresh Token은 왜 필요한가?

  • Access Token을 통해 유효한 토큰인지 확인할 수 있음
  • Refresh Token을 통해 아직 유효한 기간이 남아있다면 새로운 Access Token을 발급
  • JWT를 발급하여 Access Token으로 사용자는 인가를 받을 수 있지만, 해당 토큰을 브라우저에 저장하기때문에 만료시간을 두지 않으면 보안상 위험할 수 있음
  • 하지만 만료시간이 지나치게 짧다면 반복적인 로그인을 해야하는 단점으로 사용자의 유저 경험이 나빠지게 됨으로 Refresh Token을 활용하여 유저 경험은 살리되 최소한의 보안 장치를 해둘 수 있음

16. Django의 기본 기능을 사용하는 것과 JWT를 사용하여 로그인 기능을 구현하는 것에는 어떤 차이가 있는가?

  • Django 기본기능을 통해서 로그인을 구현한다면, 사용자의 인가 정보와 관련된 기능은 모두 서버 데이터가 부담하게 됩니다
  • 이는 데이터를 서버에서 처리하게 됨으로 양이 많아질 수록 서버에 부담을 줍니다
  • JWT 통해 사용자가 각자 클라이언트에서 인가 정보를 부담하게 된다면 서버의 부담을 줄임과 동시에 토큰 재발급 형식으로 편리하게 관리가 가능합니다

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

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

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

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

19. FBV와 CBV는 각각 무엇이며, 어떤 차이가 있는지 설명하시오

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

20. 테스트 코드를 작성하는 이유는 무엇이고 어떤 장점이 있는지 설명하시오

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

0개의 댓글