분류 전체보기 323

[Python Utils] 코드 컨벤션 템플릿 셋팅 (pre-commit, black, pycharm)

협업 간 코드 스타일/컨벤션을 맞추기 위해 다음과 같은 간단한 Code Formatter를 설정하였다. 목표 기능 1. git에 코드 push시 자동으로 formatting 체크 및 변경 2. 평소 IDE에서 코드 작성 후 저장시 자동으로 formatting 변경 사용 Tool - pre-commit-hook (pip install pre-commit-hooks) - Black (pip install black) - Pycharm (IDE) 1. pre-commit-hook.yaml 파일 - black을 hook으로 등록 (추가적으로 .flake8, isort 등 등록 가능) # See https://pre-commit.com for more information # See https://pre-comm..

Python/Utils 2023.05.29

[Django Ninja] GIS 데이터 처리 관련 정리

Django Ninja & GIS 관련 설계 조사 정리 내용 Postgis : PostgreSQL DB의 gis 기능이 추가 된 확장 플러그인 (GIS 데이터 처리에 용이)GIS 데이터라 함은 위/경도 데이터 및 반경 내 xx 조사 등, GIS 기반의 기능 구현에 사용됨  1. Postgis 및 GIS 데이터 활용하기 위해서 일반적인 방법- geoDjango라는 Project 기반으로 작업 가능 - PointField 등 자유롭게 활용 가능 - 단, 프로젝트 자체가 geoDjango로 진행되어야 한다는 단점이 존재- https://docs.djangoproject.com/en/4.1/ref/contrib/gis/install/   2. Django Ninja + Pydantic (geo_json)- Dj..

Python/Django Ninja 2023.05.24

[좋은 DB 설계하기] RDB에서 JsonField 사용 vs 관계형 테이블 맺기

JSON Field의 장단점 (vs 외래키 테이블 구성)Json Field 장점- 추가 적인 테이블 관리가 필요 없음 (테이블 간 추가 Join 필요 X)- 생성/수정시 값에 대해 Dictionary를 교체하는 식으로 쉽게 가능- Validation이 큰 상관이 없는 경우 / 정적인 값 경우 사용하기 좋음- JSON Field만 가지고 추가 쿼리 가능 Json Field 단점- 난독화 발생 우려- JSON 내 관계형 값이 변할시 값을 업데이트 하기 힘듬- JSON 값에 대한 Validation을 하기가 힘듬  (값 검증시 내부 값들의 type 까지 검증 필요)- DB 테이블 트랜잭션 분산 가능- RDB가 JOIN이 잘되어 있으면 성능적으로 큰 이점은 없음 JSON Field의 장단점사례 1. Articl..

[Django Ninja] 정참조, 역참조 Schema 구현

Ninja 정참조 구현models.py는 Comment 테이블에서 Post 테이블을 정참조 함schema.py는 댓글(Comment)에서 게시글(Post) 정보를 하위 항목으로 조회 한다.# models.pyclass Post(models.Model): title = models.CharField(max_length=100) content = models.TextField(max_length=300)class Comment(models.Model): message = models.CharField(max_length=20) post = models.ForeignKey(Post, on_delete=models.CASCADE)# ================================..

Python/Django Ninja 2023.04.29

[Django Ninja] 커스텀 Pagination 모듈 구현기

Django Ninja에서의 Pagination은 Decorator 선언 만으로 동작 될 수 있도록 유저 편의성이 매우 좋다.(유저 편의성이 좋다는 건 대신 그만큼 커스텀하기 까다롭다는 것..)  이번 글에서는 공식 Docs에서 제공하는 일반적인 Pagination 방법 2가지를 간단히 실행해보고,추가로 직접 CustomPagination을 구축한 방법에 대해 공유 해보려고 한다.(해당 글은 ninja 0.21.0 버전을 기준으로 작성하였음) 참고 : https://django-ninja.rest-framework.com/guides/response/pagination/ PageNumber 기반 페이지네이션ninja.pagination 모듈에서 제공하는 PageNumber 기반 페이지네이션 방법이다.방법..

Python/Django Ninja 2023.04.16

[Django Ninja] API Docs에서 Enum 드롭 다운 표시하기

API Docs에서 Drop down 선택형 구현하기 Django Ninja에서 기본적으로 제공하는 API Docs에서 dropdown 형태의 Enum 선택이 제공되면 편할 것 같아 찾아 보던 중 기존 Django의 enum을 상속 받는 Choices 모듈이 존재하였다. - 해당 Choices 모듈을 원하는 성격에 맞춰 (ex. TextChoices, IntChoices 등) 작성 후에 model에 선언하였고, - 해당 Schema에서 Choices의 형태를 받도록 구현하였다. - 실제 DB에 저장되는 값은, CharField로 선언하였기에 문자열로 저장된다. (ex. InProgress) - Choice에 등록되지 않은 값 추가시 에러가 발생한다. (추가) Choices 는 언제 써야 할까? 코드의 유..

Python/Django Ninja 2023.04.09

[SW 개발] 소프트웨어 버저닝 방법

Semantic Versioning 주번호(Major), 부번호(Minor), 패치번호(Patch)로 기반의 {major}.{minor}.{patch} 버저닝 방식 - 일반적으로 오픈소스에 자주 사용되는 Versioning 방법 - Major : 큰 변화, 리뉴얼, API 버전 업그레이드- Minor : 신규 기능 추가/변경, 컴포넌트 추가 (하위 버전 API 와 호환 가능) - Patch : 사소한 버그 수정, 약간의 디자인 변경, 리팩토링, (하위 버전과 호환 가능) - 예시 : Python 3.11.4 CalVer (Calendar Versioning) 날짜 기반의 버저닝 방법 - 연도, 월로 구성 - 직관적인 버저닝으로 이해하기 쉽고, 해석이 쉬움 - 예시 : Ubuntu 20.04 Alpha, ..

[Docker] Multi-stage Build (for Python Docker)

Multi-Stage Build란? Docker 17.05에서 도입된 기술로, 이미지의 용량을 줄이기 위한 목적 하나의 프로젝트를 만드는 빌드 과정에서, 순수 구동에 필요한 어플리케이션만 최종 추출하여 사용하는 방법 일전에는 Builder Pattern을 활용해 multi-statge와 비슷한 역할을 함 Multi-Stage Build 장점 - 이미지 사이즈를 줄일 수 있음 - 도커 이미지가 자주 변경시 빠르게 배포 가능 Dockerfile 구성 특징 FROM 1 : 빌드용 Base 이미지 (주로 AS builder 로 별칭을 붙임) FROM 2 : 어플리케이션 구동용 이미지 COPY --from = builder : 실제 어플리케이션을 위한 필요한 파일들만 복사 해온다. 나머지는 일반 Dockerfil..

DevOps/Docker 2023.03.21

[Django Ninja] Schema 비교 (Schema, ModelSchema, CreateSchema)

SchemaSchema란 어떤 데이터나 객체를 정의한 규칙으로 주고 받는 것을 의미한다.다른 언어, 프레임워크에서는 DTO (Data Transfer Object) 라는 용어로도 많이 사용된다. FastAPI vs Django Ninja 스키마 방식 차이ex) FastAPI에서 Schema 는 Pydantic을 이용해 정의된다. ex) Django Ninja의 Schema는 Pydantic을 상속 받아 작성 된 방식으로 자체적으로 만든 Schema라는 모듈로 정의됨 공식 Document 에서 제공하는 3가지 Schema를 만드는 방식에 대해 알아본다. 1. Schema2. ModelSchmea3. CreateSchema Schema가장 기본적인 Schema 형태로 DRF의 Serializer와 유사하다...

Python/Django Ninja 2023.02.27