[python] Tornado와 쿠키/세션 관리

Tornado는 Python으로 작성된 비동기 웹 프레임워크로, 많은 웹 개발자들에게 인기가 있습니다. 이를 통해 강력한 웹 애플리케이션을 개발할 수 있습니다. 이번 포스트에서는 Tornado를 사용하여 쿠키와 세션을 관리하는 방법에 대해 알아보겠습니다.

1. 쿠키(Cookie) 사용하기

쿠키는 클라이언트 단에 저장되는 작은 정보 조각입니다. 보통 사용자 인증, 선호 설정, 장바구니 등과 같은 정보를 저장하는 데 사용됩니다. Tornado에서는 set_cookie 메서드를 사용하여 쿠키를 설정할 수 있습니다.

import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.set_cookie("username", "John Doe")
        self.write("Cookie has been set!")

app = tornado.web.Application([
    (r'/', MainHandler),
])

if __name__ == '__main__':
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

위의 예제에서는 / 경로로 GET 요청이 들어오면 쿠키의 이름을 “username”으로 설정하고 값은 “John Doe”로 설정합니다. 이후 “Cookie has been set!”의 메시지를 클라이언트로 전송합니다.

2. 세션(Session) 관리하기

세션은 서버 측에서 사용자 상태를 유지하기 위해 사용됩니다. Tornado에서는 Session 클래스를 사용하여 세션을 관리합니다. 세션을 사용하기 위해서는 몇 가지 단계를 거쳐야 합니다.

  1. Tornado 애플리케이션에 settings 딕셔너리를 추가합니다. 세션에 사용될 비밀번호, 쿠키 이름 및 세션 유효 시간 등의 정보를 포함해야 합니다.
settings = {
    "cookie_secret": "my_cookie_secret",
    "session_cookie_name": "my_session",
    "session_expiry": 7200,  # 2 hours
}
  1. Tornado RequestHandler 클래스를 상속하여 새로운 클래스를 만듭니다.
import tornado.web
from tornado_session import SessionMixin

class MainHandler(tornado.web.RequestHandler, SessionMixin):
    def get(self):
        session = self.get_session()
        username = session.get('username', 'Guest')
        self.write(f"Hello, {username}!")

    def post(self):
        username = self.get_argument("username")
        session = self.get_session()
        session['username'] = username
        self.write("Username has been set!")

app = tornado.web.Application([
    (r'/', MainHandler),
], **settings)

if __name__ == '__main__':
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

위의 예제에서는 MainHandler 클래스가 SessionMixin을 상속합니다. get_session()을 사용하여 세션 객체를 가져오고, 필요한 경우 값을 설정하거나 가져올 수 있습니다.

마무리

이렇게 Tornado를 사용하여 쿠키와 세션을 관리하는 방법에 대해 알아보았습니다. Tornado는 간편하게 쿠키와 세션을 다룰 수 있는 기능을 제공하므로, 웹 애플리케이션 개발에 유용하게 활용될 수 있습니다.

참고 자료:

```

단어 하나가 안보입니다. 제가 더 에러가 많아서 걱정하고 있네요. 하나 더 작성 부탁드릴게요.