Python Flask에서 사용자 회원가입과 로그인을 하는 서버를 구축하였다.
이후 현재 로그인한 계정으로 데이터를 전송하고자 하였는데, 이 때 사용자가 로그인한 id가 필요로 하다.
Python Flask에서는 로그인 한 현 상태의 id를 어떻게 가져오는지 알아보던 중, "Session"을 통해 알아낸다고 하였다.
호스트 프로세스 간에 세션을 생성하고 유지, 종료 등을 담당한다. 즉 로그인과 로그아웃, 동기화 같은 서비스를 담당한다는 의미이다.
세션과 관련된 데이터는 서버에 저장이 되는데. 이 때 가장 많이 비교 되는 대상이 쿠키이다.
Cookie와 Session의 비교는 아래와 같다.
| Cookie | Session | |
| 저장위치 | Client (클라이언트의 웹 브라우저가 지정하는 Memory or HDD) |
Server |
| 저장형식 | Text | Object |
| 만료시점 | 쿠키 저장시 설정 (설정 없으면 브라우저 종료시) * 저장할 때 expires 속성을 정의해서 무효화 시키면 삭제될 날짜를 직접 정할 수 있음 |
정확한 시점 모름 (클라이언트가 로그아웃하거나, 설정 시간 동안 아무 반응이 없으면 무효화 되기 때문에 정확한 시점을 알 수 없다는 것) |
| 리소스 | 클라이언트의 리소스 (클라이언트에 저장->메모리 사용, 서버의 자원을 이용하지 않음) |
서버의 리소스 (서버에 저장되고 서버의 메모리로 로딩되기에 세션이 생길 때마다 리소스를 차지) |
| 용량제한 | 한 도메인당 20개, 한 쿠키당 4KB (클라이언트도 모르게 접속되는 사이트에 의해 설정될 수 있기 때문에 이에 발생하는 위험을 방지하고자 제한) |
제한없음 (클라이언트가 접속하면 서버에 의해 생성되므로 제한 없음) |
표 출처 : https://gyoogle.dev/blog/web-knowledge/Cookie%20&%20Session.html
서버에 사용자 로그인 정보가 저장되고 이를 바탕으로 목표로 하는 서비스를 개발하려면 세션을 건드려야 한다는 것을 알 수 있다.
Flask에서는 {Key:Value}인 딕셔너리 형태로 세션을 저장하기에, key를 통해 해당 값을 불러올 수 있다.
세션 데이터는 쿠키의 위에 저장되고, 서버는 쿠키에 암호화 방식으로 서명하기에 이 때 암호화를 위해 Flask에서는 세션 관리와 암호화를 위해 secret_key가 필요로 하다.
코드는 아래와 같다.
from flask import Flask
from flask import request, jsonify, session, escape
import pymysql
import json
app=Flask(__name__)
app.config["DEBUG"]=True
app.secret_key = "[임의생성]"
config = {
'host': 'rds.amazonaws.com',
'port': 3306,
'user': '[user]',
'password':'[password]',
'database': '[database]'
}
# login
@app.route('/login', methods=['GET','POST'])
def login():
json_data = request.get_json()
db = pymysql.connect(**config)
cur = db.cursor()
print(type(json_data))
print(json_data, " json_data")
if json_data:
sql = '''select id, pwd from user where id = %s and pwd = %s'''
cur.execute(sql, [json_data['id'], json_data['pwd']])
data = cur.fetchall()
db.commit()
db.close()
for row in data:
user_id = row[0]
if data:
session['user'] = user_id # user_id를 session에 저장
해당 서버를 AWS EC2에 올려놓았기에 POSTMan에서 Json으로 ID와 Password를 보낸다.

Flask에서 Session과 관련된 사용법은 블로그(클릭 시 이동)를 참고하였다.
'개발자의 개발개발한 하루' 카테고리의 다른 글
| Linux 명령어 - find (0) | 2021.07.20 |
|---|---|
| Linux Vi Editer에서 라인 수 나타내기 :set number (0) | 2021.07.20 |
| Linux 명령어 - tail (0) | 2021.07.20 |
| Linux 명령어 - cd (0) | 2021.07.16 |
| How to import pymysql in AWS Lambda (0) | 2021.05.18 |
댓글