전체 글 315

[Python] Datetime 이해 - aware, naive, datetime, timezone 등

Datetime 패키지 이해하기 Python에서 기본적으로 제공하는 Datetime 패키지에 대해 이해해 본다. - Datetime 모듈은 date와 time에 대한 조작을 위해 사용된다. Datetime 모듈 예시 1. naive vs aware - 해당 패키지에서 사용되는 날짜/시간 객체는 timezone 포함 여부에 따라 naive와 aware로 구분된다. - naive : tzinfo 정보를 포함하지 않는 날짜, 시간 객체 - aware : tzinfo, DST(daylight saving time) 정보를 포함한 날짜, 시간 객체 - 활용 1) 들어오는 datetime 값 (aware인지 naive인지)에 대한 형태 정의 - 활용 2) tzinfo 체크 및 시간대 변경 - 활용 3) tzinfo..

Python/Utils 2023.05.29

[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, ..