12. Django에서 테이블을 설계하고 DB에 반영하는 방법에 대해서 설명하시오.
1. models.py에서 models.Model을 상속한 클래스 생성 : 이 클래스가 데이터 테이블이 된다.
2. 필드 생성
3. 마이그레이션 파일 생성 : 모델이 새로 생성되거나 변경사항이 생길 때 사용
4. 마이그레이션 파일을 적용하는 migrate 명령어로 db에 반영
13. 회원가입을 할 때 비밀번호 저장을 암호화하는 이유는 무엇입니까?
비밀번호는 절대 유출되어서는 안 되는 정보이기 때문에 해킹, 정보유출 등의 위험을 방지하기 위해 복호화 할 수 없는 해시값으로 암호화해 저장함
14. JWT는 무엇입니까?
JSON Web Token의 줄임말 - 유저를 인증하고 식별하기 위한 Token기반의 인증
JSON데이터를 Base64를 통해 인코딩하여 직렬화 한 것이 포함되며,
토큰 내부에는 위변조 방지를 위해 개인키를 통한 전자 서명도 있다.
사용자는 로그인을 통해 JWT를 발급받아 브라우저에 저장(인증)하고, 로그인된 사용자라는 조건으로 웹의 기능에 접근할 때 JWT를 제시하여 인가된 사용자는 기능을 접근할 수 있게 됩니다.
15. JWT를 통한 인증과 인가의 차이에 대해서 설명하시오
인증 : 사용자를 식별하는 행위 - 로그인 등으로 권한이 있는 사용자라는 것을 인증함.
인가 : 사용자 액세스 권한을 허용/거부하는 행위 - 사용자가 홈페이지 내의 어떤 기능을 사용할 때 로그인여부를 판별함으로써 권한이 있는 사용자인지 판별하고 허용/거부하게 됨
16. JWT의 Access Token과 Refresh Token은 왜 필요한가요?
Access Token을 통해 유효한 토큰인지 확인할 수 있음
Refresh Token을 통해 아직 유효한 기간이 남아있다면 새로운 Access Token을 발급
JWT를 발급하여 Access Token으로 사용자는 인가를 받을 수 있지만, 해당 토큰을 브라우저에 저장하기때문에 만료시간을 두지 않으면 보안상 위험할 수 있음
하지만 만료시간이 지나치게 짧다면 반복적인 로그인을 해야하는 단점으로 사용자의 유저 경험이 나빠지게 됨으로 Refresh Token을 활용하여 유저 경험은 살리되 최소한의 보안 장치를 해둘 수 있음
17. Django의 기본기능을 사용하는 것과 JWT를 사용하여 로그인 기능을 구현하는 것에는 어떤 차이점이 있습니까?
Django 기본기능을 통해서 로그인을 구현할 시에는 사용자의 인가 정보와 관련된 기능은 모두 서버 데이터가 부담하게 됨
즉, 데이터를 서버에서 처리하므로 양이 많아질수록 서버에 부담
JWT를 사용 - 서버에 모든 정보가 저장되는 것이 아닌 사용자가 각자 클라이언트에서 인가 정보를 부담
-> 서버의 부담을 줄일 수 있으며, 토큰을 재발급하는 형식으로 관리하기도 좋음
18. 데이터 테이블 간의 관계를 나타내는 FK, OneToOne, ManyToMany 필드에 대해서 설명하시오.
- FK: Foreign Key(외래키)로 참조키로써 테이블과 참조되는 테이블의 관계를 나타냄, 참조할 모델의 PK를 가져옴, 일대다
- OnetoOne: 일대일 관계를 갖는 모델을 연결할 때 사용, 오직 하나의 레코드에만 대응하는 값을 가진다.
- ManytoMany: A와 B 모델이 있을 때 A 모델에 연관된 B 모델 필드가 여러개 일 수 있고, B모델에 연관된 A 모델 필드가 여러개일 수 있는 관계
19. Django에서 Many-to-Many 필드를 만드는 방법에 대해서 설명하시오
모델과 다대다 관계에 두고 싶은 모델을 manytomany 필드로 연결
GitHub 댓글