티스토리 뷰

웹 전반에서 중요한 Auth 인증 개념에 대해 알아보자.

 

먼저, 인증이 왜 필요할까? 바로 HTTP의 특징 때문이다.

HTTP의 특징은 무엇일까? 

1. 비연결성 - Connectionless : 기본적으로 클라이언트에서 서버에 요청을 보내면 서버는 클라이언트에 응답을 하고 접속을 끊는다.

2. 무상태성 - Stateless : 연결을 끊는 순간 클라이언트와 서버의 통신이 끝난다.

 

따라서 예시로 로그인을 하고 로그인 상태를 유지하기 위해 1) 쿠키 2) 세션  중 하나를 사용한다.

 

1. 쿠키

  • 쿠키란? 클라이언트의 로컬에 저장되는 key-value 쌍으로 이루어진 작은 데이터 파일이다.
  • 쿠키가 하는 일?
    • 세션 관리: 로그인, 아이디 자동완성, 공지 하루 안보기, 장바구니
    • 개인화: 사용자 테마
    • 트래킹: 사용자 행동 기록 및 분석

동일한 서버에 재요청시 저장된 쿠키🍪를 함께 보낸다.

 

동작 방식은 다음과 같다.

 

1)  클라이언트가 서버로 로그인을 요청한다. (GET)

2) 서버는 클라이언트의 로그인 요청의 유효성을 확인하고 응답헤더에 Set-Cookie: session-id=12345; 를 추가하여 응답한다. 

3) 클라이언트는 이후 서버에 요청할 때 Cookie: session-id-12345; 쿠키🍪를  header에 추가하여 요청한다. 이 작업은 브라우저가 한다. 

좌측에 쿠키

쿠키는 보기, 수정, 삭제가 모두 가능하다.

다음을 참조(크롬 개발자도구)

 

쿠키의 단점은 바로 위 링크가 보여주듯

1) 클라이언트단에서 수정이 가능하여 위변조 위험이 있고

2) 쿠키의 기한을 따로 설정하지 않으면 반영구적으로 쿠키가 남아있어서 역시 보안에 위험이 있다는 것이다.

(물론 크롬 등 브라우저의 보안은 강력한 편이다..)

 

2. 세션

이러한 쿠키의 단점을 보완하기 위해 나온 것이 세션 방식이다.

계속해서 사용자 정보가 남아있으면 위험하기 때문에, 브라우저가 실행되는 동안에만 클라이언트의 요청을 유지한다.

동작 방식은 다음과 같다.

 

1) 클라이언트가 서버에 username과 password를 담아 로그인 요청을 한다.(POST) 

2) 서버는 (1) 로그인 요청의 유효성을 확인하고 (2) session id📝를 생성한다. (3) session id📝를 발급한다. (4) 세션정보를 데이터베이스📁에 저장한다. 

3) 클라이언트는 발급받은 session id📝를 쿠키🍪에 저장한다.

4) 클라이언트는 이후 요청할 때마다 전달받은 세션 아이디📝 값이 담긴 쿠키🍪를 요청 header에 추가하여 요청한다.

5) 서버에서는 요청받은 쿠키속 세션아이디📝 값을 database📁에서 확인하고 (1) username 이 일치하고 (2) 세션이 유효하다면 요청을 처리해 응답한다.

 

 

쿠키의 수명에 따라 세션 쿠키는 두 개로 나뉜다.

  •  Session cookie : 현재 세션이 종료되면 삭제되는 쿠키
  • Persistent cookie : 지속적으로 남아있는 쿠키 => Expires 속성에 날짜를 정할 수 있다.

세션 방식의 단점은, 서버단에서 처리하기 때문에 사용자가 많을 때 서버 부하가 걸릴 수 있다는 것이다.

참고로 ID는 세션을 구별하기 위해 필요하며, 쿠키에는 ID만 저장한다.

 

쿠키 vs. 세션

  • 클라이언트(로컬)에만 저장되는 쿠키와 달리, 세션은 로컬과 서버에 저장되므로 상대적으로 안전하다.
  • 또한 쿠키는 브라우저를 종료해도 남아있지만 세션은 브라우저 종료시 삭제되므로 안전하다.

 

The Django Authentication System

Django 인증 시스템은 django.contrib.auth에 Django contrib module로 제공되고 있다.

 

장고 인증 시스템은 인증 Authentication과 권한 Authorization 으로 나뉜다.

인증은 신원을 확인하는 것이고, 권한은 인증된 사용자가 수행할 수 있는 작업을 결정하는 것이다. 

 

회원관련해서는 accounts 이름으로 앱을 설정해주는게 좋다. 장고 내부에서 그 이름으로 사용되고 있기 때문.

인증(Authentication)과 관련하여

세션은 장고의 MIDDLEWARE에서 관리하고 있다.

Django는 데이터베이스에 세션을 저장하며 이는 DB의 django_session 테이블에 저장된다.

 

 

 

참고자료

 

[WEB] 쿠키, 세션이란?

웹의 기초중 하나인 쿠키와 세션에 대해 알아봅니다.

chrisjune-13837.medium.com

'Programming basic' 카테고리의 다른 글

쿠키, 세션을 보완한 토큰 방식 JWT  (0) 2021.12.14
docstring 작성법  (0) 2021.11.29
HTTP 상태 코드  (0) 2021.10.25
변수 및 식별자 표기법 3가지  (0) 2021.10.20
추상화와 다양한 언어  (0) 2021.10.20
댓글