WEB 22

[WEB] 토큰 기반 인증과 JWT

프로젝트에서 로그인을 구현할 때 JWT를 많이 사용했다. 시간이 지날수록 JWT를 사용했던 이유와 동작 원리를 잊게되었다. 따라서 이번에는 토큰 기반 인증의 원리와 이러한 인증의 방법 중의 하나인 JWT를 정리해보려고 한다. 토큰 기반 인증 토큰 기반 인증은 로그인을 시도했을 때 서버에서 가입된 사용자인지 확인 후에 이미 가입된 사용자일 경우 사용자에게 토큰을 발급한다. 이때 토큰은 클라이언트측에서 관리를 하며 로그인이 필요한 서비스를 이용할 때 토큰을 함께 보내어 인증을 시도한다. 세션 기반 인증의 문제점 토큰 기반 인증을 사용하게 된 이유를 기존의 세션 기반 인증의 문제점에서 찾아보자. 기본적으로 세션 기반 인증은 서버가 클라이언트에 대한 정보를 메모리/디스크/데이터베이스 등에 저장하여 세션을 유지한..

WEB 2021.10.13

[Django 09] Authentication

폼을 통해 게시글을 작성할 때 제목과 내용, 작성시간, 수정시간 등을 데이터베이스의 모델과 연관된 ModelForm을 생성하여 활용하였다. ModelForm을 통해 쉽게 폼을 입력받고 데이터베이스에 저장할 수 있었다. 이처럼 폼 클래스를 사용하면 복잡한 동작도 간단하게 구현할 수 있는데 Django에서는 사용자가 로그인, 로그아웃, 회원가입 등의 기능을 할 수 있도록 폼 클래스를 제공한다. 이를 위해 어떠한 폼이 있는지 알아본다. 로그인과 로그아웃 로그인과 로그아웃을 한다는 것은 서버로부터 쿠키를 부여받고 세션이 시작되거나 종료되는 것을 의미한다. 먼저 로그인 버튼을 눌렀을 때 View에서 어떠한 동작을 하는지 알아보자. 먼저 로그인을 하는 Form을 불러와야 하며 사용자의 인증을 위한 Form은 "dj..

WEB 2021.03.23

[Django 08] Forms

HTML의 form을 통해 사용자가 입력한 정보를 서버에 전달하여 조회, 생성, 수정, 삭제 등을 할 수 있다. 하지만 사용자가 입력한 정보를 "유효성 검사"를 실시하여 알맞은 데이터를 저장할 수 있도록 한다. 이 과정은 꽤 복잡할 수 있는데 Django에서는 Forms라는 클래스를 통해 이러한 복잡한 과정을 축소할 수 있다. (Django 공식 사이트와 MDN을 참고한다.) Form이란 태그 안에는 최소 한 개 이상의 을 포함하여 여러가지의 으로 이루어져있다. 의 type 속성을 통해 다양한 위젯을 표현할 수 있다. 사용자가 안에 어떠한 데이터를 입력하고 submit 버튼을 눌렀다면 의 action에 정의된 주소로 전달된다. action에는 데이터를 전달받은 곳의 URL 주소를 설정하며, 설정하지 않았..

WEB 2021.03.16

[Django 07] CRUD

CRUD는 소프트웨어가 기본적으로 갖는 데이터 처리 기능인 Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 의미한다. Django를 통해 간단한 게시판을 만들어보며 Django의 프로젝트 흐름을 파악하고 CRUD를 이해한다. 프로젝트 생성 ①. CRUD라는 프로젝트를 생성한다. $ django-admin startproject CRUD . ②. 게시판을 만들 posts라는 애플리케이션을 생성한다. $ python manage.py startapp posts ③. 프로젝트 폴더의 settings.py에서(CRUD/settings.py) 생성된 애플리케이션을 등록한다. Model 만들기 ①. 애플리케이션 폴더의 models.py에서 Post라는 클래스를 정의하여 속성들의 데..

WEB 2021.03.11

[Django 06] Model

Django는 MTV 패턴을 갖고있으며 그 중 Model은 저장된 데이터의 구조를 의미하며 Python 객체를 통해 데이터에 접근하고 관리한다. 데이터베이스의 구조 스키마 : 데이터베이스 내에 데이터들이 어떠한 구조로 저장이 되는지를 명세한 것 테이블 : 행과 열로 정렬된 데이터의 집합 행 : 가로에 있는 데이터들로 테이블의 데이터를 행에 저장한다. 열 : 세로에 있는 데이터들로 같은 열에 있는 데이터는 같은 데이터 형식을 갖는다. 기본키 : 각 행을 구별하는 Primary Key인 기본 키가 존재하며 Django에서는 자동적으로 생성해준다. ORM 모델을 알아보기 전에 ORM을 먼저 이해해야 한다. ORM은 객체-관계 매핑으로 객체지향 언어에서 클래스로 정의한 객체와 관계형 데이터베이스에서 테이블을 자..

WEB 2021.03.10

[Django 05] form 사용하기

form 태그는 사용자가 입력한 데이터를 받아 처리할 수 있다. Django에서 form태그를 활용하여 입력받은 데이터를 처리하여 출력해보자. form 태그의 구성 form 태그는 아래와 같이 구성되어있다. 안에서 입력받은 데이터들은 action 속성에서 정의한 주소로 보내진다. 또한 form 태그는 기본적으로 method가 GET으로 설정되어있다. GET : 데이터를 조회하기 위한 명령이며 조회할 데이터를 URL에 포함시켜 전달한다. POST : 리소스를 생성하고 변경하기 위한 명령이며 데이터를 body안에 포함시켜 전달한다. label의 for과 input의 id의 값을 같게하여 label과 input이 짝을 지을 수 있도록한다. input의 type에는 다양한 종류가 있으며 여기서는 문자열을 입력받..

WEB 2021.03.09

[Django 04] URL 분리하기

프로젝트의 규모가 커질수록 애플리케이션별로 URL을 분리하여 사용하는 것이 효율적이다. 또한 같은 이름의 HTML문서가 있다면 어떤 페이지를 출력할까? urls.py에 URL 등록하기 기존에는 프로젝트의 urls.py에 애플리케이션들의 URL을 등록해서 사용하였다. 아래와 같이 applications라는 애플리케이션을 생성하고 app/이라는 URL을 사용자가 요청했을 때 views.py의 index함수가 요청을 받고 html문서를 보여주도록 한 것이다. 하지만 또다른 애플리케이션을 생성하여 URL을 등록할 때 같은 이름의 views 모듈이 존재한다. 이러한 경우와 각각의 애플리케이션을 독립적으로 분리하기위해 URL을 분리할 필요가있다. from django.contrib import admin from ..

WEB 2021.03.09

[Django 03] 템플릿 상속

프로젝트가 커질수록 만들어야하는 페이지도 증가한다. 매번 일정부분 똑같은 내용을 모두 새롭게 만들지 않고 기본 템플릿을 상속하여 페이지를 만들어간다면 효율적이다. Django에서는 템플릿을 상속하는 기능을 제공하고 있다. settings.py ->TEMPLATES 상속을 사용하기 위해서는 TEMPLATES의 DIRS이라는 리스트에 디렉터리를 설정해줘야한다. DIRS = [BASE_DIR / [프로젝트 이름] / templates] 다음과 같이 기본이 되는 템플릿을 프로젝트에 생성한다. 그리고 {% block %} {% endblock %}을 지정한다. 다른 HTML문서에서는 이 block부분만 채우면된다. 그리고 title과 content라는 이름을 함께 적었는데 다른 HTML문서에서 사용할 때 정의한 ..

WEB 2021.03.08

[Django 02] Django Template Language(DTL)

Django에서 Template에 제공하는 기능으로 변수, 조건, 반복 등을 HTML 문서에서 실행할 수 있다. views.py에서 렌더링을 할 때 해당 HTML에 문서에 변수도 함께 전달하여 HTML 문서 내에서 views.py에 정의된 함수에서 처리된 데이터를 활용할 수 있다. Variables 변수는 다음과 같이 사용할 수 있으며 두 개의 중괄호 안에 변수를 대입하면 템플릿 엔진이 적절한 값으로 변환한다. 변수 이름은 영문자와 "_"로 구성될 수 있으며 "_"로 시작할 수는 없다. 점(.)을 사용하여 변수의 속성에 접근할 수도 있다. {{ Variable }} Filters 필터를 사용하여 변수를 수정할 수 있다. 필터는 아래와 같이 변수 다음에 "|"으로 사용할 수 있다. {{ Variable |..

WEB 2021.03.08

[Django 01] 첫 번째 프로젝트 생성하기

새로운 프로젝트 생성하기 이제 Django를 통해 프로젝트를 생성해보자. 하나의 프로젝트를 생성할 때는 다음과 같은 명령을 한다. startproject 다음에 본인이 원하는 프로젝트 이름을 입력하여 프로젝트를 생성한다. 프로젝트 이름 다음에 현재 경로를 나타내는 "."을 추가하면 현재 경로에 바로 프로젝트가 생성이된다. $ django-admin startproject [프로젝트 이름] 프로젝트가 생성되었다면 파일의 구조는 다음과 같을 것이다. manage.py : 웹 서버를 실행하고 새로운 애플리케이션을 생성하는 등의 명령을 한다. __init__.py : Python에게 해당 디렉토리를 패키지처럼 다룰 수 있도록 알려주는 파일이다. settings.py : Django 프로젝트의 환경 및 구성을 저..

WEB 2021.03.08
728x90
반응형