반응형

Backend/Django 8

Django Swagger(drf_yasg) 수정하여 FastAPI + Pydantic 처럼 API문서 자동화 하기

안녕하세요. 글쓰는 개발자 입니다. Frontend와 원활한 협업과 의사소통 비용 감소를 위해 API 문서화를 중요하게 생각합니다. drf_yasg 를 활용해서 Backend에서 쉽게 작성하고, API 문서를 보는 사람이 최대한 편하게 읽을 수 있도록 고민을 많이 했습니다. (참고: Django Swagger 연동하기 1편, 2편) 그러던 어느 날(약 1년 전) FastAPI 를 처음 접하게 되었고 Pydantic을 활용해 endpoint의 argument에 type만 지정해주면 자동으로 문서가 작성되는 것을 보고 신세계라 느껴졌습니다. 편리하다 생각했던 @swagger_auto_schema 데코레이터는 FastAPI를 접하고 '불편한', '한 번 더 작업해야하는' 것이라는 기분이 들었습니다. 그렇게 당..

Backend/Django 2023.05.02

Django Base Model 을 통한 Model 중복 제거 (db_table, primary_key), __init_subclass__

안녕하세요. 글쓰는 개발자 입니다. Django ORM 을 사용하면, 간편하게 Model을 정의하고 강력한 migration 기능 덕분에 손 쉽게 DB에 Table을 생성 할 수 있습니다. 하지만, 아래와 같이 매번 class Meta 코드를 작성하고 db_table을 정의하는 것이 불편하게 느껴졌습니다. 그래서 BaseModel을 만들고 이를 상속 받기만 하면 Model을 생성 할 때 마다 중복 되는 작업을 없앨 수 있도록 하였습니다. 요구 사항은 다음과 같습니다. 1. Model 의 Class name을 "Model" 을 제외하고 snake case 로 변환한 값을 Table name으로 세팅 2. id 는 Auth Increment로 적용 3. Mixin을 활용해 TimeStamped Column ..

Backend/Django 2023.05.02

Django Middleware에서 API 접근 권한 검증하기 (Django, DRF의 request.user 와 Middleware에의 AnonymousUser)

안녕하세요. 글쓰는 개발자입니다. 어플리케이션을 개발하다 보면, 서비스 내 정의된 권한 레벨에 따라 접근 가능한 API가 상이한 경우가 많습니다. Django에서 'request.user' 를 통해 User 객체를 불러오고 권한 레벨에 해당하는 인자를 검증하여 403 Forbidden Error 를 반환 할 수 있습니다. 다양한 방법이 있겠지만, Django Custom Middelware 를 활용해 End Point가 '/admin/' 으로 시작하는 API에 대해 권한 검증하는 방법을 소개 합니다. 그런데 저는 이 과정에서 간단히 Middleware에서 response 객체 생성 이전에 request.user 를 활용해 User 객체를 받아오면 된다고 생각했지만, 지속적으로 'AnonymousUser'..

Backend/Django 2023.05.02

[Django + Redis + Celery] Python 분산 비동기 작업 큐 (Distributed Task/Job Queue) 튜토리얼

Django, Django RestFramework 를 활용해 웹 어플리케이션을 개발하면서, 처리 시간이 오래 걸리는 API 를 개발해야하는 경우가 있습니다. 처리 시간이 지연되어 사용자의 대기 시간이 길어지면서 사용자 경험은 부정적으로 흘러갑니다. 이런 문제를 해결하기 위해 Celery를 Django app에 포함 시켰고, 사용 방법을 소개 합니다. 튜토리얼 방식으로 진행하며, Python 가상환경 설정 및 Django 설치 부터 차근차근 진행하겠습니다. 본 튜토리얼을 통해, 다음 내용을 얻으실 수 있습니다. 1. Celery를 어떤 경우에 사용하는지 2. Django app 에 Celery를 적용하고, Redis 를 Message Broker로 사용하기 3. Celery task_id 를 활용한 ta..

Backend/Django 2023.03.31

Django 실전 운용 - 2. Django project 생성

본 시리즈는 Python과 Django Backend 개발 경험이 있으신 분들을 대상으로 작성되었습니다. 안녕하세요. 글쓰는 개발자 입니다. 다수의 다양한 Project를 수주 받는 SI회사에서 Project 초기 세팅 비용 최소화 및 회사 차원의 기술 축적을 위해 수행한 Project Base 구축 과정을 시리즈로 소개합니다. 1. Project Base 구축 필요성 (요구 기능과 필요한 기술) 2. Django project 생성 3. Django, mariaDB, Redis with Docker Compose (예정) 4. settings.py 개발 환경, 운영 환경 분리 (예정) 5. Logging (예정) 6. Error Log 관리자 email 전송 (예정) 7. Django, Celery, ..

Backend/Django 2022.12.25

Django 실전 운용 - 1. Project Base 구축 필요성 (요구 사항과 필요한 기술)

본 시리즈는 Python과 Django Backend 개발 경험이 있으신 분들을 대상으로 작성되었습니다. 안녕하세요. 글쓰는 개발자 입니다. 다수의 다양한 Project를 수주 받는 SI회사에서 Project 초기 세팅 비용 최소화 및 회사 차원의 기술 축적을 위해 수행한 Project Base 구축 과정을 시리즈로 소개합니다. 시리즈의 첫 번 째로 제가 어떠한 동기부여로 이 목표를 달성했으며, 무엇을 이루고자 했는지 소개하겠습니다. 1. Project Base 구축 필요성 (요구 기능과 필요한 기술) 2. Django project 생성 3. Django, mariaDB, Redis with Docker Compose (예정) 4. settings.py 개발 환경, 운영 환경 분리 (예정) 5. Log..

Backend/Django 2022.12.23

[Django] 유효성 검증, DRF Serializer validate (feat: FastAPI 와 비교)

안녕하세요. 글쓰는 개발자 입니다. 최근 Django에 대한 대체제로써 FastAPI 적용을 검토 하면서 기본적인 Restful API 테스트를 위해 인증 서버를 간단히 구현해 보았습니다. FastAPI를 직접 사용 하면서 몇 가지 '편리하다.' 라고 느낀 점이 있었으며, 그 중에서도 Request에 대한 Validation Check 가 제일 편하게 느껴졌습니다. Django에서 Request Data Valiation을 위해 DTO를 매번 구현해서 사용했던 저로서는 Pydantic을 활용해 이런 불편함을 해소하고 exception까지 자동으로 처리하는 부분은 굉장히 매력적으로 느껴졌습니다. 그럼에도 불구하고 저는 곧 진행할 Project 에서 계속 Django를 사용하기로 동료와 결론을 내렸습니다. ..

Backend/Django 2022.10.12

1. Django 개발환경 구축 / 웹 프로젝트 만들기 (Windows, 가상환경, Pycharm)

1. 개발환경 1) OS : Window 2) IDE : Pycharm Community [Python] PyCharm 설치 (Community) 아래 링크를 통해 접속한 후 Community 버전 다운로드를 클릭합니다. 설치된 exe 파일을 실행한 후 컴퓨터를 재부팅하면 설치완료 됩니다. 다만, 설치시 나타나는 checkbox는 모두 체크해 주시면됩니�� backstreet-programmer.tistory.com 3) Python version : 3.6.6 4) Django Version : 3.0.8 2. 환경 구축 1) 프로젝트별 개발환경을 독립적으로 사용하기 위해 가상환경을 사용함 2) 가상환경 생성 (1) windows cmd 에서 원하는 경로로 이동함 (2) 가상환경을 생성하고 activa..

Backend/Django 2020.07.21
반응형