분류 전체보기
[Django] django 기본 인증 시스템 커스텀(아이디, 이메일 로그인)
AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', ) Django의 기본 인증시스템은 django.contrib.auth.backends.ModelBackend 를 사용한다. django session 기반의 인증 시스템이다. jwt인증을 구현했다고 하더라도 admin 페이지에서는 계속 기본 인증시스템을 사용한다. 인터넷을 사용하다 보면 사이트마다 로그인하는 방식이 다르다. 이메일 형식의 아이디 입력. 일반 단어 형식의 아이디 입력. 소셜 로그인 기타.. 처음에 회원가입을 할 때 아이디와 이메일을 모두 입력한다고 가정하자. 이때 아이디로도 로그인이 가능하고, 이메일로도 로그인이 가능하게 만들어보자. ## auth/authen..
[Django] DRF를 사용한 JWT Authentication #2
이번 포스팅에서는 JWT를 생성하고 로그인,로그아웃 기능을 구현하는 방법을 정리해 보려고 한다. 로그인 로직 클라이언트는 LoginApi를 호출하면서 {"username": "이름", "password": "비번"} 정보를 전달해준다. 서버는 username과 password를 가지고, 해당하는 유저를 찾은 다음 jwt_login을 수행한다. jwt_login에서는 access_token과 refresh_token을 생성한다. 생성된 access_token은 {"access_token": access_token}형태의 json으로 클라이언트에 전달되고, 생성된 refresh_token은 httpOnly=True 속성을 가진채로 cookie에 삽입된다. 로그아웃 로직 클라이언트에서 LogoutApi를 호출..
[Django] DRF를 사용한 JWT Authentication #1
이번 포스팅에서는 DRF를 사용해 JWT 인증시스템을 어떻게 구현하는지에 대해서 정리해보려고 한다. JWT란? JWT는 Json Web Token의 약자로 모바일이나 웹의 사용자 인증을 위해 사용하는 암호화된 토큰을 의미한다. JWT 정보(사용자 id, 토큰 생성시간, 만료시간)를 request에 담아 사용자의 정보 열람, 수정 등 개인적인 작업들을 수행할 수 있다. JWT를 사용해 인증시스템을 구축한 이유 1. 프론트엔드와 백엔드의 완전한 분리 Django의 세션기반 로그인을 사용하기 위해서는 Django Template을 사용해야한다. 이는 프론트엔드 개발인원들이 반드시 Django의 문법을 어느 정도 이해해야만 페이지를 구성할 수 있다는 뜻이다. 하지만 JWT를 사용한다면 클라이언트와 서버의 완전한..
[Django] Nested Serializer - Create
Writable nested serializers 기본적으로 nested serializer는 읽기 전용이다. 외래키로 연결되어 두개 이상의 모델이 중첩 된 serializer를 사용해 모델을 저장, 수정하려면 creat()또는 update()메서드를 만들어 외래키 관계를 저장하는 방법을 직접 구현해야 한다. Nested Model from django.db import models class BasePage(models.Model): created_time = models.DateTimeField('created time', auto_now_add=True) last_mod_time = models.DateTimeField('modified time', auto_now=True) class Meta: ..
[컴퓨터 구조] RAM & ROM
RAM(Random Access Memory) 특징 1 앞에서 설명하였던 임의 엑세스 방식을 이용하는 반도체 기억장치이다. RAM에 저장된 각 단어들은 CPU가 전송하는 주소에 의해 지정되어 직접 엑세스된다. 따라서 데이터가 칩 내의 어떤 위치에 있든, 엑세스에 걸리는 시간이 동일하다. 특징 2 RAM은 읽고 쓰는 것이 모두 가능하다. 위 그림은 1K x 8비트 용량의 RAM에 대한 블록 다이어그램과 제어 신호들을 보여주고 있다. 이 칩의 용량은 1KB이며, 주소 비트는 1K = 2^10 이므로 10개가 필요하다. 그리고 데이터 입출력은 한 번에 8비트씩 이루어지기 때문에, 데이터 버스의 폭은 8비트가 된다. CS : 해당 칩을 선택하는 신호 RD + AD : 해당 칩의 AD(주소)에 해당하는 장소로부터..
[컴퓨터 구조] 기억 장치 기본
기억장치의 데이터 엑세스 유형 순차적 엑세스 기억장치에 저장된 정보들을 처음부터 순서대로 엑세스한다. 자기 테이프 저장장치가 이 방식을 이용한다. 카세트를 떠올리면 이해가 편하다. 특징으로는, 임의의 위치에 저장된 특정 정보를 읽기 위해서 그 위치에 도달할 때까지 앞부분의 테이프를 모두 통과해야 한다. 따라서 정보가 저장된 위치에 따라 엑세스 시간이 달라진다. 직접 엑세스 읽기/쓰기 장치가 각 레코드의 근처로 직접 이동한 후에 순차적 검색을 통해 최종 위치에 도달한다. CD, DVD 가 사용하는 방식이다. CD를 읽는 팔이 움직여서 데이터가 있는 트랙으로 이동한다. 그리고 CD가 특정 방향으로 회전하며 데이터가 있는 섹터로 이동한다. 따라서 현재 위치에서 원하는 섹터에 도달하기 위한 엑세스 시간이 가변적..
[컴퓨터 구조] 제어 유니트 (Control Unit)
제어 유니트의 기능 제어 유니트가 수행하는 주요 기능들은 아래와 같다. 명령어 코드 해독 명령어 실행에 필요한 제어 신호들의 발생 제어 유니트는 컴퓨터 프로그램을 구성하고 있는 명령어들을 해독하고, 그 결과에 따라 명령어 실행에 필요한 동작들을 수행시키기 위한 신호들을 발생하는 장치이다. 같은 말로, 명령어 사이클이 적절히 수행되도록 모든 동작들을 제어하는 장치이다. 명령어 사이클은 다음으로 이루어진다. 인출 사이클 간접 사이클 실행 사이클 인터럽트 사이클 각 사이클에서는 여러 개의 마이크로 연산들이 수행된다. 예를 들어, 인출 사이클에서 수행되는 마이크로-연산들을 다시 보면 아래와 같다. 프로그램 카운터에 저장되어있는 다음 명령어의 주소를 MAR로 이동시킨다. 메모리의 MAR 위치에 있는 데이터를 MB..
[Django] django-debug-toolbar 안보임 오류 해결
degub-toolbar가 왜 안 나오는지 도저히 모르겠다면 꼭 해보세요. import mimetypes mimetypes.add_type("application/javascript", ".js", True) 위 코드를 settings.py가 있는 폴더의 urls.py에 추가해보자. from django.contrib import admin from django.conf import settings from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), ... ] import mimetypes mimetypes.add_type("application/javascript", ".js", True) if se..
[Java] Runnable과 Thread의 차이
자바에서 쓰레드를 구현할 때 2가지 방법이 있다고 한다. 1. Runnable 2. Thread1. RunnableRunnable은 이름부터 인터페이스의 느낌이 강하다.implements Runnable 을 통해서 Runnable 인터페이스를 구현할 수 있다. Runnable 인터페이스를 구현하게되면재사용성이 높고, 코드의 일관성을 유지할 수 있어서 Thread보다 더 효율적인 방법이라 할 수 있다.Runnable 인터페이스는 위와 같이 생겼다.추상 메서드 run을 반드시 구현해야 한다. Thread도 run을 구현해야 한다는 점은 같지만 추상 메서드가 아니라 단순 메서드 오버라이딩으로 구현한다.Runnable 인터페이스를 구현해 스레드 구현public class Main { public stati..
[Network] 네트워크 계층 : 라우팅(Link-State Routing)
라우팅 알고리즘의 목표는 송신자로부터 수신자까지 라우터의 네트워크를 통과하는 좋은 경로를 결정하는 것이다. 일반적으로 좋은 '경로'란 최소 비용 경로를 의미한다. 그러나 현실적으로는 네트워크 정책('Y'기관에 속해있는 라우터 x는 'Z'기관이 보낸 패킷을 전달해서는 안된다.)과 같은 실제 문제가 고려된다. 라우팅 알고리즘을 분류하는 일반적인 방법 1. 중앙 집중형 vs 분산형 중앙 집중형 네트워크 전체에 대한 완전한 정보를 가지고 출발지와 목적지 사이의 최소 비용 경로를 계산하는 알고리즘이다. 이러한 정보는 알고리즘이 실제로 계산을 수행하기 전에 어떠한 방법을 통해서라도 얻어야 한다. 계산 자체는 한 장소에서 수행하거나 각각의 라우팅 모듈로 복사될 수 있다. 이 알고리즘의 핵심은 연결과 링크 비용에 대한..