전체 글 315

[디자인 패턴] 구조 패턴 - 복합자 패턴

구조 (Structure) 패턴구조 패턴 이란 객체 간의 상호 작용에 대한 구조적 관계를 명확히 정의하여, 코드의 유연성과 재사용성을 높이는 디자인 패턴 주요 패턴으론 다음 사항들이 있다.어댑터 (Adapter) 데코레이터(Decorator) 복합자(Composite) 파셔드(Facade)플라이웨잇(Flyweight)프록시(Proxy)브릿지(Bridge) 복합자 (Composite) 패턴 이란Composite 는 객체를 트리 구조로 구성하여, 트리 전체가 하나의 객체인 것처럼 동작 하게 할 수 있는 구조적 디자인 패턴1개, 혹은 그 이상의 객체를 연결 지어 명령을 연결에 따라 전파하여, 하나의 객체 처럼 이용하는 것 등장 배경ex) 여러 제품 주문 요청에 대해 각각 따로 포장을 하고 이 모든걸 모아서 최..

[디자인 패턴] 구조 패턴 - 데코레이터 패턴

구조 (Structure) 패턴구조 패턴 이란 객체 간의 상호 작용에 대한 구조적 관계를 명확히 정의하여, 코드의 유연성과 재사용성을 높이는 디자인 패턴 주요 패턴으론 다음 사항들이 있다.어댑터 (Adapter) 데코레이터(Decorator) 복합자(Composite)파셔드(Facade)플라이웨잇(Flyweight)프록시(Proxy)브릿지(Bridge) 데코레이터 (Decorator) 패턴 이란특정 행동을 수행하는 특수 warpper 객체들을, 메인 객체에 연결시키는 구조적 디자인 패턴 아래 예시 처럼 wrapping을 점진적으로 진행 하여 대상을 확장함 (상속 대신 데코레이터 패턴으로 행동을 확장 가능)  등장 배경 3가지 종류의 알림을 구현하고자 함.  시간이 지날 수록 다양한 조합의 알림 조합 니즈..

[디자인 패턴] 구조 패턴 - 어댑터 패턴

구조 (Structure) 패턴구조 패턴 이란 객체 간의 상호 작용에 대한 구조적 관계를 명확히 정의하여, 코드의 유연성과 재사용성을 높이는 디자인 패턴 주요 패턴으론 다음 사항들이 있다.어댑터 (Adapter) 데코레이터(Decorator)복합자(Composite)파셔드(Facade)플라이웨잇(Flyweight)프록시(Proxy)브릿지(Bridge) 어댑터 (Adapter) 패턴 이란서로 호환되기 힘든 인터페이스를 지닌 클래스들이 함꼐 동작할 수 있도록 하는 구조적 패턴 아래 예시 처럼 자동차를 레일에서도 다를 수 있도록 어댑터 를 구성하는 패턴 등장 배경얻은 데이터 (xml)을 분석툴(json 데이터에만 동작)에 넣고 싶음어댑터가 필요 ! 구조1. Client 클래스 : 기존 비즈니스 로직을 포함 하..

[Django] Prefetch 에 대한 이해

Prefetch 란perfetch_related 함수는 쿼리에서 Join을 하지 않고, 개별 쿼리를 실행 한 후 django에서 직접 데이터를 조합하는 것 예시) A, B, C 모델이 존재 / A:B 는 1:N / B:C 는 1:N의 관계를 가짐 비교 1 ) A에서 C 까지의 Prefetch1안. Prefetch 병렬로 쓰기a = ( A.objects.filter(id=1).prefetch_related( Prefetch( "b_set", # A에서 B 역참조 ), Prefetch( "b_set__c_set", # A에서 C역참조 ), )).first() 2안. Prefetch 중첩해서 쓰기a = ( ..

Python/Django 2024.05.19

[Django-Ninja] API 문서 Docs 커스텀

Ninja Docs기본적으로 Ninja에서는 가벼운 설정으로 Swagger나 Redoc을 지원하며https://django-ninja.dev/guides/api-docs/ 문서를 관리하기 위한 다양한 부가 기능들이 존재한다.문서 권한 설정문서 숨기기커스텀 태그 (openapi_extra 속성 v1이상 지원)커스텀 Docs 만들기 (링크) 등 도 가능하다. 문서 숨기기기본적으로 /api/openapi.json 을 바탕으로 -> /api/docs 의 문서를 생성해준다. 이를 Production 등에 활용시 다음과 같이 설정하면, url을 감춰준다.from ninja import NinjaAPIapi = NinjaAPI(docs_url=None) 참고 링크https://github.com/vitalik/dja..

Python/Django Ninja 2024.05.18

[Utils] Python 메모리 프로파일러 (memory_profiler)

배경특정 API를 호출시 계속 서버의 메모리가 폭증하는 현상 발생-> loop 혹은 DB 데이터가 Python 메모리로 불러오는 과정에서 문제가 있을 것으로 생각하고 프로파일링을 통해 원인을 찾아 보기로 하였다. 결과적으로 API에서 비효율적으로 파이썬 메모리를 사용하는 로직을 찾아 수정하여서 해결하였다. memory_profiler  외부 패키지 라이브러리메모리를 개괄적으로 프로파일링 할 수 있는 외부 패키지 라이브러리docs 링크 : https://pypi.org/project/memory-profiler/ memoy-profilerA module for monitoring memory usage of a python programpypi.org 패키지 설치pip install memory_profi..

카테고리 없음 2024.05.05

[디자인패턴] 행동 패턴 - 상태(State) 패턴

행동(Behavioal) 패턴객체들이나 클래스들 사이에 상호 작용이나 책임(역할)분배를 하는 방법에 대한 패턴. 여러 객체에 책임을 분배하고, 객체 간의 종속도 최소화 한다.  주요 패턴으론 다음 사항들이 있다.옵저버(Observer) 커맨드(Command)상태(State) 전략(Strategy)책임 연쇄(Chain_Of_Responsibility)반복자(Iterator)중재자(Mediator)반복자(Visitor) 상태 (State) 패턴 이란State 패턴은 행동 패턴 중 하나로 내부 상태가 변경될 때 객체의 행동을 교체한다. 객체가 상태(값)을 변경하여, 행동의 변화를 유발함으로서 클래스 자체가 변경된 것 처럼도 보일 수 있다.  등장 배경[초안, 검토, 출판본]의 상태를 가진 문서 객체가 있다고..

[디자인패턴] 행동 패턴 - 전략(Strategy) 패턴

행동(Behavioal) 패턴객체들이나 클래스들 사이에 상호 작용이나 책임(역할)분배를 하는 방법에 대한 패턴. 여러 객체에 책임을 분배하고, 객체 간의 종속도 최소화 한다.  주요 패턴으론 다음 사항들이 있다.옵저버(Observer) 커맨드(Command)상태(State) 전략(Strategy) 책임 연쇄(Chain_Of_Responsibility)반복자(Iterator)중재자(Mediator)반복자(Visitor) 전략 (Strategy) 패턴이란행동 패턴 방법 중 하나로 동일한 레벨의 다양한 알고리즘을 정의 및 캡슐화 하고, 런타임시 동적으로 해당 알고리즘을 선택할 수 있게 하는 디자인 패턴이다. 이로서, 복잡한 알고리즘 내용을 비즈니스 로직에서 분리 하여 감출 수 있고, 클라이언트는 런타임 중 자..

[디자인패턴] 행동 패턴 - Command 패턴

행동(Behavioal) 패턴객체들이나 클래스들 사이에 상호 작용이나 책임(역할)분배를 하는 방법에 대한 패턴. 여러 객체에 책임을 분배하고, 객체 간의 종속도 최소화 한다.  주요 패턴으론 다음 사항들이 있다.옵저버(Observer) 커맨드(Command) 상태(State) 전략(Strategy) 책임 연쇄(Chain_Of_Responsibility)반복자(Iterator)중재자(Mediator)반복자(Visitor) Command (커맨드) 패턴이란커맨드 패턴은 행동 패턴 중 하나로, 요청을 요청 정보를 가지고 있는 독립 실행 객체로 전환하는 패턴을 말한다. 이 변환을 통해, 요청을 메서드 파라미터로 넘기거나, 요청의 실행을 지연 또는 큐에 넣기, 되돌리기 기능 등을 지원 가능한 패턴한다. 등장 배..

[디자인패턴] 행동 패턴 - 옵저버 패턴

행동(Behavioal) 패턴객체들이나 클래스들 사이에 상호 작용이나 책임(역할)분배를 하는 방법에 대한 패턴. 여러 객체에 책임을 분배하고, 객체 간의 종속도 최소화 한다.  주요 패턴으론 다음 사항들이 있다.옵저버(Observer) 커맨드(Command) 상태(State) 전략(Strategy) 책임 연쇄(Chain_Of_Responsibility)반복자(Iterator)중재자(Mediator)반복자(Visitor) 옵저버 패턴 이란?Observer 패턴은 관찰 중인 개체(주제, subject)에 이벤트가 발생시, 다른 개체들(구독자, observer)에 알리는 메커니즘으로 주제에 변화가 있으면 갱신 내용을 observer에 전달한다. 한 객체의 상태가 바뀌었을 때, 그 객체에 의존하는 다른 객체에..