서버가 클라이언트 인증을 확인하는 방식은 대표적으로 쿠키, 세션, 토큰 3가지 방식이 있다.
브라우저는 사용자를 기억하지 못하기 때문에 쿠키에 담아 사용자를 구별한다.
쿠키(웹 쿠키, 브라우저 쿠키)는 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각
쿠키는 Key-Value 형식의 문자열 덩어리이다.
브라우저는 그 데이터 조각들을 저장해 놓았다가, 동일한 서버에 재요청 시 저장된 데이터를 함께 전송
두 요청이 동일한 브라우저에서 들어왔는지 아닌지를 판단할 때 주로 사용한다.
이를 이용하면 사용자의 로그인 상태를 유지할 수 있다.
➡️ 각 사용자마다의 브라우저에 정보를 저장하니 고유 정보 식별이 가능한 것이다.
브라우저(클라이언트)가 서버에 요청(접속)을 보낸다.
서버는 클라이언트의 요청에 대한 응답을 작성할 때, 클라이언트 측에 저장하고 싶은 정보를 응답 헤더의 Set-Cookie에 담는다.
이후 해당 클라이언트는 요청을 보낼 때마다, 매번 저장된 쿠키를 요청 헤더의 Cookie에 담아 보낸다.
서버는 쿠키에 담긴 정보를 바탕으로 해당 요청의 클라이언트가 누군지 식별하거나 정보를 바탕으로 추천 광고를 띄우거나 한다.
민감한 정보는 클라이언트에 보내지말고 서버에서 모두 관리한다.
세션은 비밀번호 등 클라이언트의 민감한 인증 정보를 브라우저가 아닌 서버 측에 저장하고 관리한다. 서버의 메모리에 저장하기도 하고, 서버의 로컬 파일이나 데이터베이스에 저장하기도 한다.
유저가 웹사이트에서 로그인하면 세션이 서버 메모리(혹은 데이터베이스) 상에 저장된다.
이때, 세션을 식별하기 위한 Session Id를 기준으로 정보를 저장한다.
서버에서 브라우저에 쿠키에다가 Session Id를 저장한다.
쿠키에 정보가 담겨있기 때문에 브라우저는 해당 사이트에 대한 모든 Request에 Session Id를 쿠키에 담아 전송한다.
서버는 클라이언트가 보낸 Session Id 와 서버 메모리로 관리하고 있는 Session Id를 비교하여 인증을 수행한다.
사용자가 아이디와 비밀번호로 로그인을 한다.
서버 측에서 사용자(클라이언트)에게 유일한 토큰을 발급한다.
클라이언트는 서버 측에서 전달받은 토큰을 쿠키나 스토리지에 저장해 두고, 서버에 요청을 할 때마다 해당 토큰을 서HTTP 요청 헤더에 포함시켜 전달한다.
서버는 전달받은 토큰을 검증하고 요청에 응답한다.
토큰에는 요청한 사람의 정보가 담겨있기에 서버는 DB를 조회하지 않고 누가 요청하는지 알 수 있다.
One-to-One (일대일)
일대일 관계는 두 개의 테이블 간에 각각의 행이 다른 테이블의 행과 하나씩 대응되는 관계
Many-to-Many (다대다)
다대다 관계는 두 개의 테이블 간에 각각의 행이 다른 테이블의 여러 행과 관련되는 관계
One-to-Many (일대다)
일대다 관계는 한 테이블의 행이 다른 테이블의 여러 행과 관련되는 관계
Object Relational Mapping, 객체 -관계 매핑
Python 객체와 관계형 데이터베이스 연결
SQL 쿼리를 자동으로 생성함
데이터베이스 데이터 <- 매핑 -> Python Object
객체를 통해 간접적으로 데이터 베이스 핸들링
Django ORM, SQLAlchemy, Pony
.get()
.all()
.filter()
.save()
.delete()
.update()