본문 바로가기

백엔드

엔드포인트 데이터베이스 사용하여 구현하기

반응형
회원가입 엔드 포인트

 

먼저 회원가입 엔드포인트를 데이터베이스를 사용해서 구현해 보도록 하자. 기본적인 구조는 5장에서 구현했던 것과 동일하다. 다만 데이터를 하드코드하거나 메모리상에 저장하지 않고 데이터베이스에 저장한다.

 

new_user_id = app.database.execute(text("""

HTTP 요청을 통해 전달받은 회원가입 정보를 데이터베이스에 저장한다. app.database는 SQLAlchemy를 통해 MySQL 데이터베이스에 연결된 Engine 객체다. app.database를 통해 원하는 SQL구문을 해당 데이터베이스에 실행하게 된다. 이 경우에는 새로운 사용자 정보를 저장하는 것이므로 INSERT 구문을 통해 새로운 사용자 정보를 users 테이블에 저장하도록 한다.

 

"""), new_user).lastrowid

위의 sql 구문에 사용될 실제 데이터들은 HTTP 요청에서 읽어 들인 데이터를 그대로 사용한다. HTTP 요청을 통해 전송된 JSON 데이터의 주소가 위의 SQL에서 필요한 필드를 모두 포함하고 있기 때문이다. 

 

row = current_app.database.execute(text("""

위에서 새로 생성한 사용자의 정보를 데이터베이스에서 읽어 들인다.

 

created_user = {

위에서 읽어들인 새 사용자의 정보를 딕셔너리로 변환한다. 그래서 JSON으로 HTTP 응답으로 보낼 수 있도록 한다.

 

 

 

 

tweet 엔드 포인트

 

트윗 보내기 엔드포인트도 회원 가입 엔드포인트와 비슷하다. 저장해야 하는 데이터를 http 요청을 통해서 받아서 데이터베이스에 저장하면 된다.

 

 

app.database.execute(text("""

HTTP 요청을 통해 전달받은 트윗 데이터를 데이터베이스에 저장한다. INSERT 구문을 통해 트윗 데이터를 tweets 테이블에 저장하도록 한다.

 

"""), user_tweet)

위의 sql 구문을 통해 insert될 트윗 데이터는 HTTP 요청을 통해 전송된 JSON 데이터를 그대로 사용한다.

 

 

 

 

timeline 엔드 포인트

 

이제 INSERT 구문 말고 SELECT 구문을 사용하는 엔드포인트를 구현해보자.

timeline 엔드포인트를 구현하려면 SELECT 구문을 사용해야 한다. 기본적인 구조는 앞서 본 엔드포인트들을 구현하는 방법과 비슷하다. 하지만 데이터를 저장이 아니라 데이터베이스에 있는 데이터를 읽어들여서 JSON 형태로 변환하여 HTTP 응답으로 보내야 한다.

 

 

rows = app.database.execute(text("""

SELECT 구문과 JOIN구문을 사용하여 해당 사용자의 트윗들과 해당 사용자가 팔롱하는 사용자들의 트윗들을 데이터베이스에서 읽어 들인다. 여기서는 LEFT JOIN을 사용하여 혹시나 해당 사용자가 팔로우하는 사용자가 없더라도 해당 사용자의 트윗만을 읽어 들일수 있게 한다. 읽어 들이는 로우의 수가 여럿일 것이므로 fetchall 메소드를 사용해서 전부 다 읽어 들인다.

 

timeline = [{

위에서 읽어들인 트윗 리스트를 딕셔너리 리스트 형태로 변환한다. 즉 하나 하나의 로우를 딕셔너리로 변환하여 전체를 리스트에 담는 것이다.

 

return jsonify({

위에서 변환한 딕셔너리 리스트를 JSON 형태로 HTTP 응답으로 보낸다.

 

 

 

 

 


 

 

 

나머지 엔드포인트는 알아서 구현해보는 걸로!

 

 

 

전체 코드는 "깔끔한 파이썬 탄탄한 백엔드" 책의 깃허브 리포지토리에서 확인할 수 있다.

https://github.com/rampart81/python-backend-book/tree/master/chapter6

 

GitHub - rampart81/python-backend-book

Contribute to rampart81/python-backend-book development by creating an account on GitHub.

github.com

 

반응형

'백엔드' 카테고리의 다른 글

API : 인증  (0) 2021.08.22
SQLAlchemy  (0) 2021.08.17
API에 데이터베이스 연결하기  (0) 2021.08.16
SQL(Structured Query Language)  (0) 2021.08.10
데이터베이스(Database)  (0) 2021.08.10