반응형

Backend 11

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

solved! windows python pre-commit error

Windows 환경에서 적용 불가 에러 해결 야심차게 Pre-commit을 잘 적용했고 동료들이 잘 썼지만 변수가 하나 있었습니다. 바로 Windows PC를 사용하는 환경에서는 pre-commit을 제대로 수행 할 수 없었습니다. 원인은 Python PATH 문제 였으며, 해결 방법으로 아래 처럼 pytest 수행 시 entry: 부분에 python path를 직접 넣는 방법이 있었습니다. ... - id: pytest name: pytest entry: C:\\Users\\sobor\\anaconda3\\envs\\venv\\python.exe -m pytest -s ... 하지만 이것은 아니라는 생각이 들었습니다. 각자 local 환경의 python PATH 를 위와 같이 입력하고, .pre-com..

Backend 2023.02.16

python pre-commit Git Hook / flake8 / pytest / PEP8, python pre-commit python path error

안녕하세요. 글쓰는 개발자 입니다. 원활한 협업을 위해 필요한 pre-commit 적용기를 소개합니다. 프로젝트를 리딩하면서 제가 꼭 하고 싶었던 코드 리뷰를 도입하고 실제로 활발히 진행 중입니다. 그런데 로직보다 PEP8에 맞지 않는 code convention check에 많은 시간이 소요된다는 것을 알게 되었습니다. 그래서 예전부터 적용해야겠다고 생각한 Git Hook 을 사용하여 pre-commit을 적용하였고 코드 리뷰 시, 조금 더 코드 구조와 로직에 집중할 수 있게되었습니다. 그럼 python backend (FastAPI) 환경에 어떻게 pre-commit을 적용했는 지 소개하겠습니다. 2023. 2. 16(목) 추가 내용 : 3. Windows 환경에서 적용 불가 에러 해결 (아래 링크)..

Backend 2023.02.15

Docker 환경에서 postgreSQL 설치, backup, restore 하기

안녕하세요. 글쓰는 개발자 입니다. "GNU GPL 2 license"여서 상업용으로 사용할 경우 "소스코드 공개 의무"가 있는 MariaDB 대신 쓸 수 있는 PostgreSQL을 Docker 를 활용해 설치하고 백업 및 복구 방법까지 소개합니다. 본래 docker compose로 작성하는 것이 가장 간편하지만 전체 인프라가 MSA로 구성 될 예정이고 최종적으로 kubenetes 로 관리 할 예정이기에 이런 방식이 굳이 필요하지는 않지만, 사내 docker network 교육 세미나를 위해 단계별로 작업한 내용을 공유합니다. 목차 1. 개발 환경 2. postgreSQL Docker Container 실행 3. DB 생성 4. postgres backup 5. postgres restore 6. doc..

Backend 2023.02.15

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
반응형