[파이썬] Tornado에서의 세션 관리

세션(session)은 웹 애플리케이션에서 사용자의 상태를 유지하는 데 필요한 중요한 요소입니다. Tornado 웹 프레임워크에서는 세션 관리를 위한 내장된 기능을 제공하며, 이 기능을 사용하여 사용자의 로그인 상태, 쇼핑 카트 등의 정보를 안전하게 저장하고 관리할 수 있습니다. 이번 글에서는 Tornado에서 세션을 관리하는 방법에 대해 알아보겠습니다.

세션 저장 및 관리

토네이도에서는 별도의 패키지 없이도 내장된 세션 관리 기능을 제공합니다. 세션을 저장하기 위해 Tornado의 RequestHandler 클래스를 상속한 커스텀 핸들러를 만들어 사용할 수 있습니다.

import tornado.web
import tornado.gen
import uuid


class SessionHandler(tornado.web.RequestHandler):
    sessions = {}

    def get_session(self):
        session_id = self.get_secure_cookie("session_id")
        if session_id:
            return self.sessions.get(session_id)

    def create_session(self):
        session_id = str(uuid.uuid4())
        self.set_secure_cookie("session_id", session_id)
        self.sessions[session_id] = {}
        return self.sessions[session_id]

    def delete_session(self):
        session_id = self.get_secure_cookie("session_id")
        if session_id:
            self.clear_cookie("session_id")
            del self.sessions[session_id]

    def get_current_user(self):
        return self.get_session()

    def initialize(self):
        self.session = self.get_session() or self.create_session()

위의 코드에서 SessionHandler 클래스는 세션을 저장하고 관리하기 위한 메서드들을 포함하고 있습니다. get_session 메서드는 현재 유저의 세션을 반환하고, create_session 메서드는 새로운 세션을 생성합니다. delete_session 메서드는 현재 유저의 세션을 삭제하는데 사용됩니다.

get_current_user 메서드는 Tornado의 인증 기능과 연동하여 현재 로그인 된 사용자를 반환하는데 사용됩니다. initialize 메서드는 각 요청의 맨 처음 호출되며, 세션을 초기화하고 현재 유저를 설정합니다.

세션 사용하기

세션 관리를 위한 커스텀 핸들러를 작성했다면, 이제 해당 핸들러를 사용하여 세션을 관리하는 로직을 작성할 수 있습니다. 예를 들어, 로그인과 로그아웃 기능을 구현해보겠습니다.

class LoginHandler(SessionHandler):
    def get(self):
        self.render("login.html")

    def post(self):
        username = self.get_argument("username")
        password = self.get_argument("password")

        # 로그인 처리 로직...

        self.redirect("/")

위의 코드에서 LoginHandler 클래스는 세션 관리용 SessionHandler 클래스를 상속하고 있습니다. get 메서드는 로그인 페이지를 보여줍니다. 로그인 폼에서 제출된 정보를 받아온 후, 실제 로그인 처리 로직을 작성하면 됩니다. 로그인이 성공했다면 쿠키를 설정하여 세션을 생성하고, 홈페이지로 리디렉션합니다.

class LogoutHandler(SessionHandler):
    def get(self):
        self.delete_session()
        self.redirect("/")

LogoutHandler 클래스는 세션을 삭제하고 홈페이지로 리디렉션하는 로직을 담고 있습니다. 해당 핸들러를 호출하면 현재 유저의 로그인 상태가 종료됩니다.

요약

Tornado 웹 프레임워크에서는 세션 관리를 위한 내장된 기능을 제공하고 있습니다. 이를 통해 사용자의 로그인 상태나 기타 정보를 안전하게 저장하고 관리할 수 있습니다. 이번 글에서는 Tornado에서 세션을 저장하고 관리하는 방법에 대해 살펴보았습니다.