(1) Deque(DoubleEndedQueue)란?

  • Deque(DoubleEndedQueue)는 앞,뒤 양방향 모두 데이터 처리가 가능한 자료구조이다.
  • 큐와 스택 기능을 모두 가지고있어 원하는대로 사용하면 된다.
  • Collections 내에 내장되어있어 import collections을 해줘야 사용이 가능하다.
  • 장점
    • Deque는 어느 방향에서나 거의 동일한 O(1) 성능으로 데크의 양쪽에서 스레드 안전, 메모리 효율적인 추가 및 팝을 지원한다.

(2) Deque Class 및 함수

class collections.deque([iterable[, maxlen]])
  • append(x) - 오른쪽에 x값 추가
  • appendleft(x) - 왼쪽에 x값 추가
  • clear() - 전체 요소 제거
  • copy() - deque 복사
  • count(x) - x와 같은 요소 갯수
  • extend(iterable) - 오른쪽에 반복가능한 인수의 요소를 추가
  • extendleft(iterable) - 왼쪽에 반복가능한 인수의 요소를 추가
  • index(x) - x의 위치를 반환
  • insert(i,x) - x를 i에 삽입
  • pop() - 오른쪽 요소를 제거하고 반환
  • popleft() - 왼쪽 요소를 제거하고 반환
  • remove(x) - 값이 x인 첫번째 항목을 제거
  • reverse() - 요소를 뒤집는다
  • rotate(n) - n만큼 요소들을 오른쪽으로 이동(맨오른쪽에있는요소는 맨왼쪽으로 이동)

(3) 사용법

from collections import deque

deque = deque()

deque.append('a')
print(deque)                #deque(['a'])

deque.appendleft('b')
print(deque)                #deque(['b', 'a'])

temp_deque = deque.copy()
print(temp_deque)           #deque(['b', 'a'])

deque.clear()
print(deque)                #deque([])

deque.extend(temp_deque)
print(deque)                #deque(['b', 'a'])

deque.append('c')
print(deque)                #deque(['b', 'a', 'c'])

deque.extendleft(temp_deque)
print(deque)                #deque(['a', 'b', 'b', 'a', 'c'])

print(deque.index('b'))     #1

deque.insert(3,'d')
print(deque)                #deque(['a', 'b', 'b', 'd', 'a', 'c'])

print(deque.pop())          #c
print(deque)                #deque(['a', 'b', 'b', 'd', 'a'])

print(deque.popleft())      #a
print(deque)                #deque(['b', 'b', 'd', 'a'])

deque.remove('d')           #deque(['b', 'b', 'a'])
print(deque)

deque.reverse()             #deque(['a', 'b', 'b'])
print(deque)

deque.rotate(1)             #deque(['b', 'a', 'b'])
print(deque)

참조 - docs.python.org/3/library/collections.html

(1) JWT(Json Web Token)란?

  • Json Web Token의 약자입니다.
  • 서버와 클라이언트 간 정보를 주고 받을 경우 별다른 인증과정 없이 Http Request 헤더에 포함되어 있는 토큰을 통해 인증합니다.
  • 토큰은 비공개 Secret 키 또는 공개/비공개 키를 사용하여 서명합니다.
  • 장점
    • 다수의 도메인 - 쿠키는 발행한 서버에서만 유효하지만 JWT는 토큰만 유효하다면 상관없습니다.
    • 선택적인 권한 부여 - 아마존에 구글 계정으로 로그인 할 수 있어도 아마존이 로그인한 구글 계정의 메일을 읽을 수 없습니다.
    • 다양한 디바이스 지원 - 웹 앱 간의 상이한 쿠키 세션을 처리할 수 있습니다.
  • 단점
    • 토큰은 데이터베이스를 조작하더라도 토큰에 적용할 수 없습니다.
    • 데이터 트래픽 크기에 영향을 미칠 수 있습니다.

(2) JWT(Json Web Token) 구조

JWT 구조
JWT Encoded, Decode 예제

  • HEADER
    • alg - 알고리즘 방식을 지정합니다
      • HS256
      • RSA
    • typ - 토큰의 타입을 지정
      • JWT
  • PAYLOAD
    • iss(issuer) - 토큰 발급자
    • sub(subject) - 토큰 제목
    • aud(audience) - 토큰 대상자
    • exp(expiration) - 토큰 만료시간 (항상 현재시간보다 늦어야 함)
    • nbf(not before) - 토큰 활성 날짜
    • iat(issued at) - 토큰 발급시간
    • jti(JWT ID) - 토큰 식별자
  • SIGNATURE

(3) Code (Python)

  • 토큰 발행
SECRET_KEY = 'secret_key'

@app.route('/api/login', methods=['POST'])
def login_post():
	payload = {
         'email': username_receive,
         'exp': datetime.utcnow() + timedelta(seconds=60 * 60 * 24)  # 로그인 24시간 유지
        }
        token = jwt.encode(payload, SECRET_KEY, algorithm='HS256').decode('utf-8')
        
	return jsonify({'result': 'success', 'token': token})
  • 토큰 확인
SECRET_KEY = 'secret_key'

payload = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])

참조 - www.opennaru.com/opennaru-blog/jwt-json-web-token/, covenant.tistory.com/201, jwt.io/

'Study > python' 카테고리의 다른 글

[Python] Deque 자료형 (Collections)  (0) 2021.03.16
[Python] Cookie Session에 저장 및 불러오기 (Flask)  (0) 2021.03.01

(1) Cookie Session에 저장하기

  • 패키지 설치
    • Flask
    • session
    • escape
  • app -> config 설정
    • app.config["SECRET_KEY"] = 'ABCD'
    • app.config["SESSION_COOKIE_NAME"] = 'name'
  • Cookie session에 저장
session['user_id'] = username_receive
  • Cookie session에서 불러오기
escape(session['user_id'])

 

 

'Study > python' 카테고리의 다른 글

[Python] Deque 자료형 (Collections)  (0) 2021.03.16
[Python] JWT(Json Web Token) 사용하기 (Flask)  (0) 2021.03.02

+ Recent posts