본문 바로가기
관리자

Programming-[Backend]

(393)
[TIL] Django soft delete cascade (SafeDeleteModel), deleted null 아닌 항목만 찾기 soft Delete 연관관계가 있는 모델끼리는 SafeDeleteModel을 상속받고, Cascade 옵션이 적용되어 있다면 soft delete도 cascade 된다.SafeDeleteModel의 soft_delete_cascade_policy_action() 메서드를 사용하는 경우 적용된다. Post : RelatePost = 1 : N인 관계가 있고, RelatePost에서 post를 FK로 갖고 있을 때, 아래와 같이 SafeDeleteModel을 상속받고 FK로 CASCADE 옵션이 지정된 상황이라고 가정한다. class RelatePost(SafeDeleteModel): post = ForeignKey( Post, on_delete=CASCADE, related_name="relate_pos..
[TIL] Django bulk_update 방법과 주의사항 Django bulk update는 인자값으로 fields를 주어야한다. 모델의 어떤 필드를 업데이트할 것인지 직접 지정해줘야하는 것이다. 아래 코드에서 some_models =[] 에는 필드값이 업데이트된 Some_Model의 QuerySet 객체가 들어있다고 보면 된다. Some_Model.objects.bulk_update( some_models, batch_size=3000, fields=["status", "result"], ) 자바-스프링 계열은 JPA가 dirty checking을 알아서 해줬었는데.. 아쉽다 ㅠㅠ bulk_create, bulk_insert 시 주의할점 serializer에서 제공하는 validate가 먹히지 않을 수 있기 때문에 def validate_xxx 로 입력값에 ..
OpenAPI 명세, Swagger 기본 개념 : Django restframework, drf-spectacular로 swagger split OpenAPI 명세 개념 개요 여기서 말하는 것은 Open API가 아니라 붙여쓰는 OpenAPI이다. 참조 1에 따르면 Open API는 말 그대로 개방된 API로 날씨, 주소 정보 등 공개된 API를 의미한다. OpenAPI는 Restful API의 명세(Spec)를 규칙에 맞게 json이나 yaml로 표현하는 방식을 말한다. https://jojoldu.tistory.com/31 규칙: JSON, YAML로 표현 규칙에 맞게라고 했는데, 어떤 규칙을 가질까? 우선 json과 yaml 파일 형식에 대한 것은 대부분의 개발자가 알고 있으리라 생각된다. 그냥 어떤 정보를 표현하는 양식이라고 생각하면 된다. 아래 그림을 참고하자. 참조 2.https://levelup.gitconnected.com/yaml..
파이썬 중급 - 10. 멀티 스크래핑 실습 : asyncio, beautifulsoup 목적 멀티 스크래핑 실습을 통해서 비동기 I/O Coroutine 작업을 연습해본다. Blocking I/O : 호출된 함수가 자신의 작업이 완료될 때까지 제어권을 갖고 있음. 타 함수는 대기 Non Blocking I/O : 호출된 함수(서브루틴)가 yield후 호출한 함수(메인 루틴)에 제어권을 전달. 타 함수 작업 진행 asyncio는 Non Blocking I/O를 편하게 구현할 수 있는 라이브러리다. 여기서 주의할 점은 해당 라이브러리를 사용하더라도 내가 작성한(사용하는) 함수가 Blocking 형태로 코딩이 되있다면 asyncio를 사용하는 의미가 없어진다. 설치 파이썬 프로젝트를 하나 만들고, asyncio와 beautifulsoup4를 설치한다. pip install asyncio pip ..
파이썬 중급 - 9. 동시성과 병렬성 : Futures 개요 동시성, 병렬성과 관련한 부분은 실제 코딩이 어렵다기보다는 이론적인 배경을 정확하게 아는 것이 어렵고, 중요하다. 따라서 이번 강의 내용 정리는 개요 수준이고, 앞으로 더 많은 경험과 학습을 통해서 완전한 이해가 필요하다. Futures를 이용하여 동시성 작업을 할 수 있다. 목적은 비동기 작업을 실행하여 지연 시간(Block)과 리소스 낭비를 방지하는 것이다. 보통 File, Network 등 I/O 관련 작업에서 동시성을 활용하는 것을 권장한다. 과거에는 threading, multiprocessing 등의 모듈을 import 해야했지만, 지금은 더 캡슐화되어 futures로 통합되었다. 특히 futures는 GIL(Global Interface Lock) 방식을 사용한다. 이것은 두 개 이상의..
[TIL] django, postgresql에서 json column 내부값(key값) 조회하기 anti-pattern일 수 있지만, 아래처럼 많은 양의 데이터를 우선적으로 column 하나에 json으로 넣어야할 수 있다. 이런 경우 내부 값을 조회하는 postgresql의 문법을 위 예시에 적용하면 다음과 같다. select table.data -> 'length', table.data -> 'size', ... https://popsql.com/learn-sql/postgresql/how-to-query-a-json-column-in-postgresql Django에서도 더블 언더 스코어(__) 문법으로 이를 지원한다. def get_queryset(self): return ( self. queryset .filter( table__data__length__isnull=True, )
파이썬 중급 - 8. 제너레이터 개념 되짚기, 코루틴 이해하기 코루틴 제너레이터 개념 되짚기 참조2의 예제를 참고하여 제너레이터의 caller - callee 개념을 이해하고나서 코루틴에 대해서 알아본다. callee 제너레이터를 호출하는 곳이 caller라고 보면, caller에서 next()로 callee를 호출할 때마다 아래 그림과 같은 과정이 진행된다. 여기서 유의할 점은 caller는 callee를 항상 호출하고 callee는 일방적으로 데이터를 caller에게 전달해주는 역할만 한다는 점이다. 이것이 일반적인 제너레이터의 개념이다. def callee(): yield 1 yield 2 x = callee() i = next(x) i = next(x) 코루틴 개념 위와 다르게 코루틴은 메인 루틴인 caller가 서브 루틴인 callee에게 데이터를 전달할 ..
파이썬 중급 - 7. 병행성 흐름: iter, hasattr, isinstance, stopIteration, Yield, itertools 이터레이터와 제너레이터 병행성 흐름을 이해하기 위해서 연결된 개념인 이터레이터와 제너레이터를 좀 더 깊이 이해할 필요가 있다. 이터레이터는 반복이 가능한 객체를 의미한다. 파이썬에서 기본적으로 반복이 가능한(iterable) 자료형들은 다음과 같다. collections, list, text file, Dict, Set, Tuple, unpacking, *args… __iter__의 구현방식 반복가능한 객체는 dir()로 확인 시 iter 메서드를 포함하고 있다. 다시 말해 iter() 함수를 내부적으로 호출한다는 것이다. 확인을 위해서 직접 반복 가능한 문자열 객체를 iter() 함수에 대입해보자. iter()함수를 문자열 w에 적용하고, 적용된 t 변수에서 dir(t) 의 출력 시, __next__ ..