db 8

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

회원가입 엔드 포인트 먼저 회원가입 엔드포인트를 데이터베이스를 사용해서 구현해 보도록 하자. 기본적인 구조는 5장에서 구현했던 것과 동일하다. 다만 데이터를 하드코드하거나 메모리상에 저장하지 않고 데이터베이스에 저장한다. new_user_id = app.database.execute(text(""" HTTP 요청을 통해 전달받은 회원가입 정보를 데이터베이스에 저장한다. app.database는 SQLAlchemy를 통해 MySQL 데이터베이스에 연결된 Engine 객체다. app.database를 통해 원하는 SQL구문을 해당 데이터베이스에 실행하게 된다. 이 경우에는 새로운 사용자 정보를 저장하는 것이므로 INSERT 구문을 통해 새로운 사용자 정보를 users 테이블에 저장하도록 한다. """), n..

백엔드 2021.08.17

SQLAlchemy

SQLAlchemy 파이썬 코드에서 DB와 연결하기 위해서 사용할 수 있는 다양한 라이브러리가 있는 데, 그중 SQLAlchemy라는 라이브러리가 파이썬에서 가장 널리 쓰이는 라이브러리 중 하나다. SQLAlchemy 라이브러리를 사용하여 파이썬 코드에서 데이터베이스에 연결하여 SQL을 실행시킬 수 있다. SQLAlchemy는 ORM(Object Relational Mapper)이다. ORM이란, 간략하게 설명하자면 관계형 데이터베이스의 테이블들을 프로그래밍 언어의 클래스로 표현할 수 있게 해주는 것을 말한다. 즉 클래스를 사용해서 테이블들을 표현하고 데이터를 저장, 읽기, 업데이트 등을 할 수 있게 해 준다. 하지만 이 책에서는 ORM 부분은 사용하지 않고 CORE 부분만을 사용할 것이며, 데이터베이스..

백엔드 2021.08.17

API에 데이터베이스 연결하기

API에 데이터베이스 연결하기 이제 본격적으로 API에 MySQL 데이터베이스 시스템을 연결하여 데이터를 저장하도록 하자. 앞서 이야기했듯이 관계형 데이터베이스 시스템은 데이터를 저장하기 전에 미리 테이블 구조와 관계를 구현해 놓아야 한다. 그러므로 먼저 미니터 API를 위한 테이블 구조와 관계, 즉 스키마(schema)를 구현하도록 하자. 스키마는 데이터베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술한 메타데이터의 집합이다. 스키마는 데이터베이스를 구성하는 데이터 개체(Entity), 속성(Attribute), 관계(Relationship) 및 데이터 조작 시 데이터 값들이 갖는 제약 조건 등에 관해 전반적으로 정의한다. 미니터 API의 데이터베이스 스키마는 다음과 같을 것이다. user 테이블..

백엔드 2021.08.16

API 개발하기(미니터 : 타임라인)

타임라인 엔드포인트 마지막으로 사용자 타임라인 엔드포인트를 구현해보자! 트위터의 타임라인처럼 해당 사용자의 트윗들 그리고 팔로우하는 사용자들의 트윗들을 리턴해주는 엔드포인트다. 타임라인 엔드포인트는 데이터의 수정이 없이 받아오기만 하는 엔드포인트이므로, HTTP 메소드는 GET이 될 것이다. 그리고 타임라인 엔드포인트가 리턴하는 JSON 데이터는 다음과 같은 형태의 데이터를 리턴한다. 타임라인 엔드포인트 구현 @app.route('/timeline/', methods=['GET']) 엔드포인트의 주소에서 부분을 볼 수 있다. 엔드포인트의 주소에 해당 사용자의 아이디를 지정할 수 있게 해준다. def timeline(user_id): 타임라인 엔드포인트를 구현하는 함수에 user_id를 인자로 받는 것을 ..

백엔드 2021.08.08

API 개발하기(미니터 : 트윗)

300자 제한 트윗 글 올리기 이번에는 미니터의 메인 기능인 300자 제한 트윗(Tweet) 글 올리기 엔드포인트를 구현해보자! [ 트윗 필수 요소 ] 사용자는 300자를 초과하는 글 올릴 수 없름 300자 초과한다면 엔드포인트는 400 Bad Request 응답을 보내야 함 사용자는 300자 이내의 글을 전송하면 엔드포인트는 사용자의 글을 저장하고 있어야 함 그래서 사용자의 타임라인 엔드포인트를 통하여 읽을 수 있도록 해야 함 Tweet 엔드포인트를 호출할 때 전송하는 json 데이터는 다음과 같다. { "id" : 1 "tweet" : "My First Tweet" } id : 트윗을 보내는 해당 사용자의 아이디 tweet : 트윗 내용 엔드포인트는 다음과 같이 구현할 수 있다. app.tweets ..

백엔드 2021.08.07

Do it! 모델 만들기

01. 모델 속성 구상하기 질문과 답변 모델에는 어떤 속성이 있어야 할까? 질문 모델에는 다음 속성이 필요하다. 속성명 설명 id 질문 데이터의 고유 번호 subject 질문 제목 content 질문 내용 create_date 질문 작성일시 답변 모델은 다음과 같은 속성이 필요하다. 속성명 설명 id 답변 데이터의 고유 번호 question_id 질문 데이터의 고유 번호(어떤 질문에 달린 답변인지 알아야 하므로 질문 데이터의 고유 번호가 필요하다) content 답변 내용 create_date 답변 작성일시 02. 질문 모델 생성하기 이렇게 구상한 속성을 바탕으로 모델을 정의해 보자. 먼저 pybo 디렉터리에 models.py 파일을 생성하고 질문 모델인 Question 클래스를 작성하자. Questio..

백엔드 2021.08.06

플라스크 ORM 라이브러리 사용하기

파이썬 ORM 라이브러리 중 가장 많이 사용하는 SQLAlchemy를 사용해 보자. 이와 더불어 파이썬 모델을 이용해 테이블을 생성하고 컬럼을 추가하는 등의 작업을 할 수 있게 해주는 Flask-Migrate 라이브러리도 사용해 보자. 01. ORM 라이브러리 설치하기 Flask-Migrate 라이브러리를 설치하면 SQLAlchemy도 함께 설치되므로 myproject 가상 환경에서 다음 명령을 수행하여 Flask-Migrate 라이브러리를 설치하자. pip install Flask-Migrate 02. 설정 파일 추가하기 파이보에 ORM을 적용하려면 config.py라는 설정 파일이 필요하다. 루트 디렉터리에 config.py 파일을 생성하고 다음과 같은 코드를 작성하자. SQLALCHEMY_DATAB..

백엔드 2021.08.06

플라스크 프로젝트 생성하기

01. 프로젝트 루트 디렉터리 생성하기 플라스크 프로젝트는 여러 개가 될 수 있으므로 프로젝트를 모아 둘 프로젝트 루트 디렉터리를 생성해야 한다. 여기서 프로젝트 루트 디렉터리 이름을 projects로 지었다. 02. 프로젝트 루트 디렉터리 안에서 가상 환경에 진입하기 다음 명령어를 입력해 앞에서 만든 myproject 가상 환경에 진입한다. 이때, 반드시 프로젝트 루트 디렉터리에서 명령어를 입력해야 한다. "길어도 꾹 참고 입력!" 03. 플라스크 프로젝트를 담을 디렉터리 생성하고 이동하기 플라스크 프로젝트를 담을 myproject 디렉터리를 생성하고 이동하자 04. 배치 파일로 myproject 가상 환경에 간단히 진입하기 myproject 가상 환경에 진입하려면 매번 명령 프롬프트를 실행하고 C:\..

백엔드 2021.07.30