render
redirect
User
ID(pk)
password
1:n
Article
글내용
작성자: ID(fk.forign key)
n:1
Authentication 인증 시스템 구축
if request_user_is_authenticated
세션.
Profileapp
Account와 Profile 1대1 대응. user는 하나의 profile만 가질 수 있음. user를 지우면 profile도 같이 지워짐.
ModelForm
model에 있는 것들을 그대로 사용가능. 상속.
form.save(commit=False)
저장을 미룸. 작성자가... ?
request
사용자 to 서버. 요청.
response
서버 to 사용자. 응답.
Articleapp
ListView
- args ** kwargs..?
detail
if문..
Pagination
article=article
article에 저장해서 html을 가져오겠다!
Commentapp
create view는 object가 없다
detail view는 form이 없다
과제
- 쿠키, 세션, 토큰 설명
쿠키
공개 가능한 정보를 사용자의 브라우저에 저장.
서버는 클라이언트의 로그인 요청에 대한 응답을 작성할 때, 클라이언트 측에 저장하고 싶은 정보를 응답 헤더의 set-cookie 에 담는다.
이후 클라이언트가 재요청 할 때마다 저장된 쿠키를 요청 헤더의 cookie 에 담아 보낸다.
서버는 쿠키에 담긴 정보를 바탕으로 해당 요청의 클라이언트가 누군지 식별.
session
비밀번호와 같은 인증 정보를 쿠키에 저장하지 않고 대신에 사용자의 식별자인 session id 를 저장. 서버에는 인증 정보와 더불어 이 ID에 해당하는 사용자의 정보를 저장.
토큰
헤더(Header),페이로드(payload),서명(signature) 세 파트를 . 으로 구분하는 구조
장점
header와 payload 를 가지고 signaure를 생성하므로 데이터 위변조를 막을 수 있다.
인증 정보에 대한 별도의 저장소가 필요없다. (서버 부하 ↓)
JWT는 토큰에 대한 기본 정보과 전달할 정보 및 토큰이 검증 되었다는 서명 등 필요한 모든 정보를 자체적으로 지니고 있다.
토큰은 한 번 발급되면 유효기간이 만료될 때까지 계속 사용이 가능하다.
단점
쿠키나 세션과 다르게 JWT는 토큰의 길이가 길어 인증 요청이 많아질수록 네트워크 부하가 심해진다.
payload 자제는 암호화되지 않기 땨문에 유저의 중요한 정보를 담으면 안된다.
토큰을 탈취당하면 대처하기 어렵다.
특정 사용자의 접속을 강제로 만료하기 어렵지만, 쿠키/세션 기반 인증은 서버 쪽에서 쉽게 세션을 삭제 할 수 있다.
ORM
Object Relation Mapper
객체(Object)와 관계형 데이터베이스(Relational)을 연결(Mapping). 데이터베이스의 테이블을 객체(Object)와 연결하여 테이블에 CRUD를 할 때, SQL 쿼리를 사용하지 않고도, 가능하게 한다.
1:1
한 테이블의 하나의 레코드가 다른 테이블의 단 하나의 레코드만을 참조할 때
1:n
게시물과 유저
n:1
n:n
하나의 테이블의 하나 이상의 레코드가 다른 테이블의 하나 이상의 레코드를 참조하는 것을 말합니다.
예를 들어 좋아요 기능을 구현한다고 하면, 유저는 여러개의 게시물에 좋아요를 누를 수 있고, 게시물의 좋아요는 여러 유저를 받을 수 있는, 이런 것을 N:M 관계라합니다.