Python 18

페이지네이션 Offset기반과 Cursor기반 Pagination 차이점

📌 페이지네이션 많은 양의 데이터가 있을 때 서버에서 모든 데이터를 한번에 가져오는 것은 서버입장에서도 클라이언트 입장에서도 좋은 방식이 아니다. 따라서 "특정한 정렬 기준"과 "지정된 갯수"의 데이터를 가져오는 것이 필요하다. 이를 페이지네이션(Pagination)이라고 하는데 찾아보니 페이지네이션 구현 방법은 크게 두가지 방식으로 처리 가능하다. 1. 오프셋 기반 페이지네이션 (Offset-based Pagination) 2. 커서 기반 페이지네이션 (Cursor-based Paginantion) 1번의 방법이 구현하는데 있어서 쉬운 방법이지만 여러가지 문제점이 존재한다. 그렇기 때문에 웬만해선 2번의 방법으로 페이지네이션을 구현하는게 좋다고 한다. 1번의 어떤 문제가 존재하는지 살펴보고 2번에 대해..

Python 2024.01.01

FastAPI에서 MySQL 연결

FastAPI에선 SQLAlchemy ORM 라이브러리로 DB를 조작할 수 있다. 먼저 MySQL과 연결하기 위해 sqlalchemy를 설치한다. pip install sqlalchemy ✅ 설정 파일 추가하기 FastAPI에 ORM을 적용하려면 데이터베이스 설정이 필요하다. database.py 파일을 생성하고 아래와 같이 코드를 작성한다. # app/database/conn.py from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker from common.config import Settings SQLALCHEMY_DAT..

Python/FastAPI 2023.12.24

Dependency와 FastAPI에서의 Dependency Injection

의존성(Dependency)이란? 코드에서 의존성은 두 모듈간의 연결을 의미한다. class A가 다른 class B를 사용할 때 A는 B에 의존한다고 볼 수 있다. 즉 한 객체의 코드에서 다른 객체를 생성하거나 다른 객체의 메서드를 호출할 때, 또는 파라미터로 객체를 전달받아 사용할 때 의존성이 발생한다고 할 수 있다. 이렇게 되면 A는 B 없이는 작동할 수 없고 B를 재사용하지 않으면 A또한 재사용할 수 없으며 하나를 수정하면 다른 클래스에도 영향을 끼치게 된다. 강한 결합은 강한 의존성을 만들게 되고 이는 유지보수를 힘들게 하며 재사용을 어렵게 만든다. ​ 의존성 주입(Dependency Injection)이란? 흔히 DI(Dependency Injection)라고 불리는 의존성 주입은 위와 같은 ..

Python/FastAPI 2023.12.22

FastAPI에서 JWT 로그인 기능 구현하기(회고)

IT 서비스를 이용하면서 로그인 기능은 흔히 볼 수 있는 기능이다. 가장 흔하고 구현을 위한 수 많은 라이브러리가 존재하기 때문에 쉽지만, 그만큼 보안에 있어서 가장 중요한 부분이기 때문에 신경써야 할 점들이 많다. 회사에서 내년 3월 일본에 테스트할 서비스를 만들면서 로그인 기능구현을 담당하게 됐다. 어떤 방식을 적용하면 좋을까 고민하게 됐었고, JWT와 AccessToken, RefreshToken을 이용하기로 했다. 이틀이라는 시간에 걸쳐 현재는 로그인 구현을 완료한 상황이지만 구현하는 과정에서 생겼던 의문점과 회고를 기록하고 싶다는 생각이 들었다. FastAPI에 대한 이해 현재 다니고 있는 회사는 Python 기반의 FastAPI 프레임워크를 사용한다. FastAPI는 어플리케이션을 빠르게 개발..

Python/FastAPI 2023.12.16

파이썬 Coroutine(코루틴) 사용하기(feat. 비동기, asyncio)

최근 회사에서 코딩을 하다가 문제없이 작성한 코드에서 Coroutine 에러가 났었습니다. 처음보는 에러였는데 내용을 살펴보니 파이썬 비동기 함수를 제대로 사용하지 못했던게 이유였습니다. 파이썬 비동기 라이브러리인 asyncio에 대해 알아보기 전에 동기와 비동기 개념에 대해서 알아보겠습니다. 동기와 비동기 동기(synchronous)처리는 특정 작업이 끝나면 다음 작업을 처리하는 순차처리 방식이고 비동기(asynchronous)처리는 여러 작업을 처리하도록 예약한 뒤 작업이 끝나면 결과를 받는 방식입니다. 비동기의 장점은 Request, I/O와 같이 딜레이가 발생하는 작업에서 뛰어난 효과를 보입니다. 즉 서버에 요청하거나 데이터를 읽는 등에 대한 작업에서 유리합니다. 대기 시간이 발생하는 상황에서의 ..

Python/FastAPI 2023.11.19

FastAPI localhost port 변경

from fastapi import FastAPI app = FastAPI() @app.get("/") async def root(): return {"message": "Hello World"} uvicorn main:app --reload FastAPI를 사용하던 중 위 명령어를 사용해 서버를 실행하려고 하는데 ERROR: [Errno 48] error while attempting to bind on address ('127.0.0.1', 8000): address already in use 다음과 같은 에러가 발생 FastAPI를 사용할 때 "Address already in use"에러가 발생하면 대부분은 해당 포트 번호가 이미 다른 FastAPI 애플리케이션 또는 다른 프로세스에서 사용 중인 ..

Python/FastAPI 2023.11.01

[DRF] CORS에러 처리하기

얼마전 면접을 봤던 회사에서 CORS를 처리한 경험을 말해달라고 했다. CORS에 대해서 간략하게만 알고 있었고, Django에서는 프론트엔드와 백엔드가 분리되어 있지 않다보니 CORS 에러를 경험하지 못했고, 제대로 된 답변을 하지 못했다. 탈탈털린 경험을 바탕으로 오늘은 CORS에 대해서 정리해보고자 한다. ✅ CORS란? CORS란 Cross-Origin Resource Sharing의 약자로, 의미 그대로 서로 다른 출처에서 리소스를 공유하는 것을 CORS라고 한다. CORS는 출처가 다른 자원들을 공유한다는 뜻으로 한 출처에 있는 자원에서 다른 출처에 있는 자원에 접근하도록 하는 개념이다. 하지만 CORS를 위해서는 별도의 설정이 필요하다. 필요한 설정을 하지 않은 채 서로 다른 출처에서 리소스..

Python/DRF 2023.03.29

[DRF] 이론 정리(Serializer, REST API)

✅ DRF(Django Rest Framework)와 Django 차이점이 뭔데? Django로 프로젝트를 진행하다가 DRF를 사용해보면서 이해가 안됐던 점들이 많다. 지금은 어느정도 사용법에 익숙해진 느낌이지만 이론적인 부분을 정확하게 짚고 넘어가고자 차이점을 비교해보고자 한다. ✅ DRF(Django REST Framework) Django는 프론트엔드와 백엔드를 모두 처리해주는 풀스택 프레임워크이다. 프로젝트에 적용한걸 예시로 들어보면 @login_required def create(request): form = QuestionForm(request.POST or None, request.FILES or None) if form.is_valid(): temp = form.save(commit=Fal..

Python/DRF 2023.03.28

[DRF] retrieve 메서드와 router 변수 사용하기

# APIvew와 ViewSet으로 Response하기 [DRF] DB에 저장된 데이터를 APIview와 ViewSet으로 Response하기 Django REST Framework에서 views.py 파일은 API 엔드포인트를 처리하는 함수를 정의하는 곳이다. 기본적으로 DRF에서 제공하는 APIview나 ViewSet 클래스를 상속하여 사용하며, 각 클래스는 HTTP 요청 메서드(GE emhaki.tistory.com 이전에 포스팅했던 내용의 확장으로 News 리스트를 출력하고 detail페이지까지 넘겨주는 방법에 대해 정리해보고자 한다. 🔎 views.py class NewsViewSet(viewsets.ModelViewSet): queryset = News.objects.all() serializ..

Python/DRF 2023.02.18

[DRF] DB에 저장된 데이터를 APIview와 ViewSet으로 Response하기

Django REST Framework에서 views.py 파일은 API 엔드포인트를 처리하는 함수를 정의하는 곳이다. 기본적으로 DRF에서 제공하는 APIview나 ViewSet 클래스를 상속하여 사용하며, 각 클래스는 HTTP 요청 메서드(GET, POST, PUT, DELETE)에 대한 처리 함수를 가지고 있다. DB에 저장된 데이터를 출력하는 방법을 살펴보기전에 views.py의 기본적인 구조는 다음과 같다. 🔎 views.py from rest_framework.views import APIView from rest_framework.response import Response class MyView(APIView): def get(self, request): # GET 요청 처리 # 결과 데이..

Python/DRF 2023.02.17
728x90