728x90
반응형

FastAPI 16

Fastapi와 svelte를 이용한 게시판 개발 #2

데이터베이스 연결 데이터베이스에 연결하여서 게시판에서 생성되는 내용을 mysql에 저장하도록 할 것이다. 앞에 Setup.md에서 Database에 연결하기 위한 설정을 해두었다. 이제 관련 내용을 하나씩 채워나가보도록 하겠다. alembic 초기화 alembic을 사용하기 위해서 다음 명령어를 통해서 초기화를 진행한다. alembic init migrations 이 명령어를 입력하고 나면 migrations라는 디렉토리가 생성되며 그 디렉토리 안에 alembic을 사용하기 위한 내용들이 채워진다. alembic 코드 수정 alembic을 사용할 준비를 하였다. 위의 명령어에서 migrations라는 디렉토리를 생성하였고 여기에 필요한 코드와 이후 마이그레이션에서 사용되는 생성 코드들이 저장된다. ale..

Fastapi와 svelte를 이용한 게시판 개발 #1

초기화 본 코드는 python 3.9 환경에서 구성되었다. 프로젝트 생성 프로젝트는 다음 코드로 생성한다. poetry new fastapi-bbs 위의 명령어를 입력하면 fastapi-bbs라는 디렉토리가 생성된다. poetry 라이브러리를 통해서 파이썬 패키지 의존성을 관리하도록 할 것이다. 이제 디렉토리 이름을 변경한다. 처음에 poetry 명령어로 디렉토리를 생성하면 하위에 같은 이름으로 디렉토리가 더 생성된다 여기서는 fastapi-bbs로 생성하였기 때문에 fastapi-bbs 디렉토리 아래 fastapi-bbs라는 디렉토리가 생성된다. 이 디렉토리 이름을 app으로 변경한다. 그럼 디렉토리 구조가 아래와 같다. fastapi-bbs |- app | |- __init__.py |- tests ..

[가계부 만들기] 지출입 기록 - 설계

제일 많이 사용하고 제일 중요한 자료가 되는 것이 바로 지출입 자료일 것이다. 가계부에서 사실 이게 전부라고 할 수 있다. 어쨌든 근본적으로 이 기록을 남기기 위한 기본 설정을 지금까지 해왔다고 할 수 있다. 가계부를 만들기로 한 이유는 바로 형태가 마음에 딱 맞는 것이 없었기 때문이다. 예를 들어서 대형마트에 가서 장을 본다고 했을 때, 이를 세부적으로 분류해서 기록할 수가 없다. 마트에서 장을 보면 장남감을 살 수 있고, 식재료를 살 수 있고, 또는 생활용품을 구매할 수도 있는데 이를 세부적으로 기록할 수 있는 툴을 제공하는 프로그램이 없다. 그래서 일단은 엑셀로 정리해서 사용했는데 아무래도 파일로 기록하다보니 부족함을 느끼게 된다. 그래서 일단 프로그램을 만들어서 사용해보기로 한다. 기록 형태 우선..

[가계부 만들기] Category 생성/수정/삭제

이전 포스팅에서 카테고리에 관련된 기능을 구현하기 위해 설계한 구조와 리스트를 가져오는 내용을 정리하였다. 이번 포스팅에서는 생성/수정/삭제와 관련된 기능을 기록하려고 한다. 사실 생성/수정/삭제 기능은 이전에 회원 정보를 관리할 때 사용한 기능과 거의 동일하다. 테이블이 바뀌니 모델이 달라지고 패스워드가 없으니 암호화되는 과정이 생략되는 정도로 생각하면 된다. 카테고리 생성 먼저 생성하는 코드를 먼저 구현한다. 이전과 동일하게 로직은 services 아래 category_service.py에서 구현하고 라우팅만 연결하도록 할 것이다. 로직을 먼저 구현한다. 코드는 아래와 같다. # 카테고리 생성 async def create_category( db: AsyncSession, member_no: int,..

[가계부 만들기] 카테고리 설정 - 구조/리스트조회

가계부에서 수입/지출 항목을 입력하는 기능을 만들기 전에 먼저 카테고리 설정에 관련된 기능을 구현하고자 한다. 모든 수입/지출 내역은 카테고리로 정리할 수 있을 것이다. 물론 카테고리 항목이 비어있을 수도 있겠지만 카테고리를 정리해두면 추후에 통계 자료를 만들 때 활용할 수 있는 여지가 많다. 다년간 개발을 하다보니 원 데이터가 상세하면 이를 가공해서 만들 수 있는 통계도 훨씬 다양하게 만들 수 있다. 이전 내용에서 회원 가입시 기본 카테고리를 자동으로 생성해주는 코드를 붙여두었다. 기본적인 카테고리 정보가 있으니 먼저 카테고리 리스틑 가져오는 것부터 시작해서 카테고리를 새로 생성하고, 수정하고, 삭제하는 기능을 구현하도록 할 것이다. 카테고리는 하나의 카테고리 정보가 때어내어서 관리하는 일보다는 리스트..

[가계부 만들기] Category Table 구조 변경

카테고리 관련 기능을 구현하려고 보니 카테고리 관련 테이블 구조가 잘못된 것을 알게 되었다. 최초에는 시스템에서 정의한 카테고리만 보이도록 하고 시스템에서 정의한 카테고리는 변경을 할 수 없도록 하려고 했다. 그러나 출력되는 순서를 변경하고 싶거나 시스템 카테고리에 서브로 카테고리를 더 추가하고 싶을 수도 있을 것이라고 판단된다. 그럼 회원이 가입할 때 시스템 정의 카테고리를 회원별로 정의해 주고 회원별로 정의된 카테고리는 각 회원이 자신의 필요에 맞춰 수정할 수 있도록 해야 할 것이다. 그리고 최초 정의한 테이블에는 지출에 대한 카테고리만 생각하고 정의했는데 수입에 대해서도 카테고리를 정의하고 싶을 수 있으므로 카테고리 테이블에 수입/지출에 대한 구분 값을 넣을 것이다. 마지막으로 순서를 변경할 수 있..

[가계부 만들기] DB 비동기 처리

프로그램을 구현하다 보면 좀 더 효율적이고 빠르게 동작하는 프로그램으로 계속 수정해나가야 한다. 이렇게 프로그램의 퍼포먼스를 증가시켜서 더 사용자들에게 프로그램이 진화하고 있다는 것을 보여주는 것이 중요하다. 프로그램을 개발하다 보면 보편적으로 가장 많은 리소스를 차지하는 것이 결국에는 IO 처리이다. 파일을 읽고 쓰고, 네트워크로 데이터를 주고 받고 하는 일련의 과정들이 결국에는 IO인 셈이다. 그럼 이렇게 리소스를 많이 잡아먹고 대기시간을 길게하는 IO 작업을 한없이 기다리게 할 수 없을 것이다. 그래서 일반적으로는 이런 처리를 비동기로 처리하도록 개발한다. 동기와 비동기에 대한 차이를 여기서는 자세히 기술하지 않을 것이다. 간단하게 설명하면 동기 방식으로 프로그램을 구현하면 네트워크에 질의를 하였을..

[가계부 만들기] Backend - 회원 관리 기능 #5

회원 관리 기능에서 기초가 되는 기능에서 마지막은 refresh token을 통해서 access token과 refresh token을 갱신하는 기능일 것이다. 세션을 사용하지 않고 JWT만으로 사용자 정보를 검증하기 때문에 access token의 유효시간이 만료되었을 때 이를 새로 갱신해줄 필요가 있다. 해당 포스팅에서 해당 기능을 간단하게 구현하도록 한다. Schema 생성 refresh token을 갱신할 때 Response로 받을 schema를 추가적으로 생성할 것이다. 물론 그냥 str로 받아도 되지만 이렇게 받는 것보다 schema를 통해서 정의하는 것이 좀 더 좋아보인다. databases/schemas.py 파일에 아래 코드를 추가한다. # Refresh token을 위한 request ..

[가계부 만들기] Backend - 회원 관리 기능 #4

이제 사용자가 전달한 값을 통해서 실제로 Database에 연동하는 코드를 넣을 것이다. 서비스 디렉토리 생성 먼저 비즈니스 로직을 담당하는 파일들을 모아둘 디렉토리를 생성하고 __init.py__ 파일을 추가해둔다. 그리고 회원 관련 로직을 작성할 members_service.py 파일을 생성한다. 이제 구조를 만들었으니 이제 내용을 작성해보자. 외부 파일 참조 및 변수 선언 from sqlalchemy import select from sqlalchemy.orm import Session from sqlalchemy.sql import func from datetime import timedelta from ..database import models, schemas from ..libraries i..

[가계부 만들기] Backend - 회원 관리 기능 #3

기능 개발을 해가다보니 앞에 개발했던 부분에서 뭔가 부족한 부분을 발견하고 추가하게 된다. 앞선 회원 관리 기능 포스팅에서 schema에 대한 내용을 정리했었는데 회원 정보에 대한 관리 기능을 구현하다가 보니 처음에는 생각하지 못했던 부분을 추가하게 되었다. Schema 현재 버전의 schema.py 파일은 아래 내용과 같다. from pydantic import BaseModel, Field from typing import Optional # 회원 가입에 대한 Request Schema class MemberCreate(BaseModel): member_id: str = Field(title="사용자 아이디", max_length=30) member_pw: str = Field(title="사용자 패..

728x90
반응형