[python] Tornado를 활용한 RESTful API 개발

이번 포스트에서는 Tornado 웹 프레임워크를 사용하여 간단한 RESTful API를 개발하는 방법에 대해 알아보겠습니다. RESTful API는 웹 어플리케이션과의 통신을 위해 사용되며, 클라이언트와 서버 간의 데이터 송수신을 위한 표준 방법입니다.

Tornado란?

Tornado는 파이썬으로 개발된 비동기 웹 프레임워크로, 웹 서버, HTTP 클라이언트, 비동기 템플릿 엔진 등 다양한 기능을 제공합니다. Tornado는 이벤트 기반 아키텍처를 사용하며 비동기 처리가 가능하므로 대규모의 동시 접속 처리에 적합합니다.

개발 환경 구축

먼저, Tornado를 실행할 수 있는 개발 환경을 구축해야 합니다. 파이썬과 pip 설치 후, 다음과 같이 터미널에서 필요한 패키지를 설치할 수 있습니다.

pip install tornado

기본적인 RESTful API 서버 구현하기

이제 Tornado를 사용하여 기본적인 RESTful API 서버를 구현해보겠습니다. 다음은 간단한 예시 코드입니다.

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, World!")

class UserHandler(tornado.web.RequestHandler):
    def get(self, user_id):
        self.write(f"Getting user with ID: {user_id}")

    def post(self):
        username = self.get_argument("username")
        self.write(f"Creating user with username: {username}")

    def put(self, user_id):
        username = self.get_argument("username")
        self.write(f"Updating user with ID: {user_id}. New username: {username}")

    def delete(self, user_id):
        self.write(f"Deleting user with ID: {user_id}")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
        (r"/user/(\d+)", UserHandler),
    ])

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

위 코드에서는 MainHandlerUserHandler 두 개의 핸들러 클래스를 정의하고 있습니다. MainHandler는 기본 경로(“/”)에 접근했을 때 실행되며, “Hello, World!”를 출력합니다. UserHandler는 “/user/” 경로 뒤에 사용자 ID를 추가로 입력받아 해당하는 기능을 수행합니다. 각각의 HTTP 메서드(GET, POST, PUT, DELETE)에 따라 다른 동작을 정의하고 있습니다.

make_app() 함수에서는 URL 패턴과 핸들러 클래스들을 연결해주는 라우터를 생성합니다. 이후 app.listen()으로 필요한 포트 번호를 설정하고 서버를 실행합니다.

실행 및 테스트

위 코드를 실행하려면 터미널에서 다음과 같이 실행해주면 됩니다.

python api_server.py

서버가 실행된 후에는 웹 브라우저나 curl 등을 사용하여 API를 테스트할 수 있습니다. 예를 들어, GET /은 “Hello, World!”를 반환하고, GET /user/1은 “Getting user with ID: 1”를 반환합니다. 또한, POST /user로 새로운 사용자를 생성하거나, PUT /user/1로 사용자 정보를 업데이트하고, DELETE /user/1로 사용자를 삭제할 수 있습니다.

결론

이번에는 Tornado를 활용하여 간단한 RESTful API 서버를 개발하는 방법에 대해 알아보았습니다. Tornado는 비동기 처리 능력과 뛰어난 성능을 가지고 있기 때문에 대규모의 API 서버를 구축하기에 매우 적합한 도구입니다. 추가적인 기능 구현이나 보안 강화를 위해서는 Tornado의 공식 문서나 다른 자원들을 참고하여 보다 깊이 있는 개발을 진행할 수 있습니다.