이것저것 개발노트
-
이번 포스팅에서는 데이터베이스로 MySQL의 Docker 컨테이너를 설정해, ToDo 앱에서 데이터베이스에 접속하는 방법을 알아본다. 01 MySQL 컨테이너 실행 Docker 컨테이너로 MySQL을 실행해 앱에서 접속해 본다. demo-app과 함께 demo라는 이름의 데이터베이스를 가진 db 서비스를 추가한다. docker-compose.yamlservices: demo-app: build: . volumes: - .dockervenv:/src/.venv - .:/src ports: - 8000:8000 # 호스트 머신의 8000번 포트를 docker의 8000번 포트에 연결 environment: ..
[FastAPI] [Chapter 11] 데이터베이스 연결과 DB 모델이번 포스팅에서는 데이터베이스로 MySQL의 Docker 컨테이너를 설정해, ToDo 앱에서 데이터베이스에 접속하는 방법을 알아본다. 01 MySQL 컨테이너 실행 Docker 컨테이너로 MySQL을 실행해 앱에서 접속해 본다. demo-app과 함께 demo라는 이름의 데이터베이스를 가진 db 서비스를 추가한다. docker-compose.yamlservices: demo-app: build: . volumes: - .dockervenv:/src/.venv - .:/src ports: - 8000:8000 # 호스트 머신의 8000번 포트를 docker의 8000번 포트에 연결 environment: ..
2024.10.18 -
이전 포스팅에서 요청 파라미터를 받지 않는 GET 함수를 정의했다. 이번 포스팅에서는 GET /tasks와 짝을 이루는, POST /tasks에 대응하는 create_task() 함수를 정의해 본다. POST 함수에서는 요청 본문을 받아 데이터를 저장한다. api/routers/task.py 에서 정의한 GET 함수는 id를 가진 Task 인스턴스를 반환했었다. 하지만, 일반적으로 POST 함수에서는 id를 지정하지 않고 DB에서 자동으로 id를 매기는 경우가 많다. 또한 done 필드에 대해서도 Task 작성시에는 항상 false이므로 POST /tasks의 엔드포인트에서 제외한다. 따라서 POST 함수는 요청 본문으로 title 필드만 받도록 해보자. POST 용으로 id, done 필드가 없는..
[FastAPI] [Chapter 10] 스키마 - 요청이전 포스팅에서 요청 파라미터를 받지 않는 GET 함수를 정의했다. 이번 포스팅에서는 GET /tasks와 짝을 이루는, POST /tasks에 대응하는 create_task() 함수를 정의해 본다. POST 함수에서는 요청 본문을 받아 데이터를 저장한다. api/routers/task.py 에서 정의한 GET 함수는 id를 가진 Task 인스턴스를 반환했었다. 하지만, 일반적으로 POST 함수에서는 id를 지정하지 않고 DB에서 자동으로 id를 매기는 경우가 많다. 또한 done 필드에 대해서도 Task 작성시에는 항상 false이므로 POST /tasks의 엔드포인트에서 제외한다. 따라서 POST 함수는 요청 본문으로 title 필드만 받도록 해보자. POST 용으로 id, done 필드가 없는..
2024.10.17 -
스키마에서는 API의 요청과 응답을 정확한 타입으로 정의한다. 이번 장에서는 먼저 응답에 대해 알아본다. 01 응답 타입 정의 api/schemas/task.py from pydantic import BaseModel, Field class Task(BaseModel): id: int title: str | None = Field(None, example="세탁소에 맡긴 것을 찾으러 가기") done: bool = Field(False, description="완료 플래그") 이 파일은 FastAPI의 스키마를 나타낸다. API의 스키마는 API 요청과 응답의 타입을 정의하기 위한 것 이 스키마를 이용하여 실제로 API 응답을 반환할 수 있는지 확인해 본다. api/routers/tas..
[FastAPI] [Chapter 9] 스키마 - 응답스키마에서는 API의 요청과 응답을 정확한 타입으로 정의한다. 이번 장에서는 먼저 응답에 대해 알아본다. 01 응답 타입 정의 api/schemas/task.py from pydantic import BaseModel, Field class Task(BaseModel): id: int title: str | None = Field(None, example="세탁소에 맡긴 것을 찾으러 가기") done: bool = Field(False, description="완료 플래그") 이 파일은 FastAPI의 스키마를 나타낸다. API의 스키마는 API 요청과 응답의 타입을 정의하기 위한 것 이 스키마를 이용하여 실제로 API 응답을 반환할 수 있는지 확인해 본다. api/routers/tas..
2024.10.17 -
01 경로 동작 함수에 대하여 경로 동작 함수는 경로와 동작의 조합이다.REST API의 엔드포인트와 HTTP 메서드에 각각 대응된다. ToDo 앱을 만들기 위해 라우터에는 다음과 같은 6가지 경로 동작 함수를 정의하게 된다.- GET /tasks- POST /tasks- PUT /tasks/{task_id}- DELETE /tasks/{task_id}- PUT /tasks/{task_id}/done- DELETE /tasks/{task_id}/done 02 경로 동작 함수 만들기6개의 함수를 하나의 파일에 담게 되면, 구현 상태에 따라서 파일 크기가 커져서 보기 않 좋을 수 있다. 해당 프로젝트는 처리가 비교적 단순해서 하나의 파일로 묶어도 크게 문제가 되지는 않는다. 하지만, 함수에 기능을 추가할 때..
[FastAPI] [Chapter 8] 라우터01 경로 동작 함수에 대하여 경로 동작 함수는 경로와 동작의 조합이다.REST API의 엔드포인트와 HTTP 메서드에 각각 대응된다. ToDo 앱을 만들기 위해 라우터에는 다음과 같은 6가지 경로 동작 함수를 정의하게 된다.- GET /tasks- POST /tasks- PUT /tasks/{task_id}- DELETE /tasks/{task_id}- PUT /tasks/{task_id}/done- DELETE /tasks/{task_id}/done 02 경로 동작 함수 만들기6개의 함수를 하나의 파일에 담게 되면, 구현 상태에 따라서 파일 크기가 커져서 보기 않 좋을 수 있다. 해당 프로젝트는 처리가 비교적 단순해서 하나의 파일로 묶어도 크게 문제가 되지는 않는다. 하지만, 함수에 기능을 추가할 때..
2024.10.17 -
02 REST APIREST API에서는 HTTP로 정보를 주고받을 때 URL로 모든 '리소스'를 정의한다.리소스를 나타내는 엔드포인트와 HTTP 메서드 (GET/POST/PUT/DELETE 등)을 조합하여 API 전체를 구성한다. REST에 따라 ToDo 앱을 구현하기 위해 필요한 기능을 정리해 본다. - ToDo 리스트 표시하기 - ToDo에 작업 추가하기 - ToDo 작업 설명문을 변경하기 - ToDo 작업 자체를 삭제하기- ToDo 작업에 '완료' 플래그 달기 - ToDo 작업에서 '완료' 플래그 제거하기 이 외에도 날짜순으로 정렬하거나, 수동으로 순서를 바꾸거나, 중첩된 ToDO 작업을 정의할 수 있도록 하는 등, 다양한 기능을 추가한 앱을 만들 수 있다. 이 기능들을 REST API에서,..
[FastAPI] [Chapter 7] 어플리케이션 개요와 디렉토리02 REST APIREST API에서는 HTTP로 정보를 주고받을 때 URL로 모든 '리소스'를 정의한다.리소스를 나타내는 엔드포인트와 HTTP 메서드 (GET/POST/PUT/DELETE 등)을 조합하여 API 전체를 구성한다. REST에 따라 ToDo 앱을 구현하기 위해 필요한 기능을 정리해 본다. - ToDo 리스트 표시하기 - ToDo에 작업 추가하기 - ToDo 작업 설명문을 변경하기 - ToDo 작업 자체를 삭제하기- ToDo 작업에 '완료' 플래그 달기 - ToDo 작업에서 '완료' 플래그 제거하기 이 외에도 날짜순으로 정렬하거나, 수동으로 순서를 바꾸거나, 중첩된 ToDO 작업을 정의할 수 있도록 하는 등, 다양한 기능을 추가한 앱을 만들 수 있다. 이 기능들을 REST API에서,..
2024.10.17 -
01 Hello World! 표시를 위한 파일 작성 지금까지 준비한 환경에서 FastAPI를 실행해본다. 프로젝트 디렉토리에 api 디렉터리를 생성하고 다음 파일을 추가한다. api/__init__.py (빈 파일) api/main.py from fastapi import FastAPIapp = FastAPI()@app.get("/hello")async def hello(): return {"message": "hello world!"} __init__.py 는 이 api 디렉토리가 파이썬 모듈임을 나타내는 빈 파일이다.main.py에는 FastAPI의 코드를 적는다. main.py에서app = FastAPI()를 살펴보자.app은 FastAPI의 인스턴스이다. main.py에서 if __n..
[FastAPI] [Chapter 6] FastAPI 기초 실행 - Hello World!01 Hello World! 표시를 위한 파일 작성 지금까지 준비한 환경에서 FastAPI를 실행해본다. 프로젝트 디렉토리에 api 디렉터리를 생성하고 다음 파일을 추가한다. api/__init__.py (빈 파일) api/main.py from fastapi import FastAPIapp = FastAPI()@app.get("/hello")async def hello(): return {"message": "hello world!"} __init__.py 는 이 api 디렉토리가 파이썬 모듈임을 나타내는 빈 파일이다.main.py에는 FastAPI의 코드를 적는다. main.py에서app = FastAPI()를 살펴보자.app은 FastAPI의 인스턴스이다. main.py에서 if __n..
2024.10.17