본문 바로가기
Tech Development/Python Backend (Flask API)

Python Backend - Study Notes 8

by JK from Korea 2022. 9. 4.

날짜: 2022.05.13

 

[데이터베이스 연동시키기]

데이터베이스를 연동시킨 전체 코드로 한번에 넘어가고 싶지만 먼저 엔드포인트별로 쪼개서 접근해야지 전체 코드가 더 잘 이해되기 때문에 엔드포인트 단위별로 접근해보겠다.

 

[회원가입 엔드포인트]

먼저 회원가입 엔드포인트부터 다시 구현 해보자.

 

 

위의 코드는 크게 3가지 부분으로 나눌 수 있다.

 

첫 번째는 HTTP Request로 받은 데이터를 python dictionary로 전환 및 DB에 저장이다. “new_user”에 데이터가 python dictionary 형태로 저장되어 있기 때문에 parameter로 넘겨주는 것이다. MySQL 문법을 통해서 request.json 정보가 어떻게 DB에 저장되는지 알아보자. 라인 ⑯에서 “lastrowid” 구문이 있다. lastrowid는 DB에 저장할 때 row #를 가장 마지막 것으로 지정하라는 것이다. 밑에는 공식 MySQL 홈페이지에 lastrowid를 설명한 링크이다.

 

https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-lastrowid.html

 

lastrowid의 예시를 들자면 사용자가 많아질수록 id를 1번부터 자동으로 1씩 증가 시켜야한다. 앞서 우리가 만든  config.py에서 DB를 만들 때 AUTO_INCREMENT 옵션을 users 테이블에 설정했다. 즉, 사용자가 생길 때 마다 row가 밑으로 하나씩 늘어나면서 id 번호를 지정해주는 것이다.

 

두번째 부분은 “row”에다가 DB에서 읽은 데이터를 저장하는 것이다. 방금 저장한 데이터를 다시 읽어서 row 변수에 저장하는 것이다. 여기서 주의할 점은 WHERE 구문이다. 라인 ㉕를 보면 “id = :user_id = :new_user_id = lastrowid”가 된다. API의 엔드포인트가 id를 생성해주기 때문에 선택할 id 번호가 존재한다.

 

세 번째는 두 번째에서 가져온 row 정보를 created_user 변수에 담아서 JSON 형식으로 클라이언트한테 보내는 것이다. 즉, 서버 측에서 보면 흐름이 다음과 같다.

 

클라이언트한테 정보 받음 → 데이터베이스에 정보 저장 → 저장된 정보를 다시 클라이언트한테 보냄

 

따로 테스트를 하지는 않을 것이다. 이후 app.py에서 최종본으로 HTTP request & response를 테스트할 것이다. 그리고 tweet 엔드포인트, timeline 엔드포인트 등 기존 엔드포인트를 개별적으로 테스트할 수 있지만 최종 app.py에서는 DB에 정보를 저장하거나 수정하는 부분을 개별 함수로 구현할 것이기 때문에 바로 최종본을 구현했다.

 

구현 한뒤 실행 중에 오류가 떠서 내가 겪은 오류를 다뤄보려한다.

 

  1. 먼저 index.py를 실행시킨다. 오류 없다.

 

  1. 터미널로 이동해서 http 요청을 넘겨본다. 먼저 mysql을 실행시킨다. 그리고 가장 간단한 ping 엔드포인트를 호출한다. 오류없다. 정상적으로 pong 을 리턴하는 것을 볼 수 있다.

 

  1. sign_up 엔드포인트를 호출해보자. 데이터를 넘겨줘야 한다. 오류가 난다.

 

  1. 3번과 같은 오류는 이미 email (UNIQUE KEY)가 데이터베이스에 존재하기 때문이다. 진짜로 그럴까? 한번 데이터베이스를 확인해보자. miniter 데이터 베이스에 접속해서 users 테이블을 조회해보자.

 

  1. 4번과 같이 이미 사용된 이메일 주소이다. 그러면 이제 테이블의 데이터를 삭제하자.

 

  1. 이제 다시 API를 통해서 데이터를 넘겨보자.



다른 엔드포인트도 http 송신을 해보자.

 

  1. tweet 엔드포인트이다.

 

  1. follow  엔드포인트이다. 중간에 john (id = 7) 사용자를 만들고 tweet도 생성했다.

 

  1. 마지막으로 timeline 엔드포인트이다. 모두 정상 작동하는 것을 볼 수 있다. 이후 mysql 테이블 정보 초기화를 위해 저장된 사용자 데이터는 delete 하는 것을 추천한다.

 

728x90
반응형

댓글