분류 전체보기
-
[Django] ORM에서 Func()를 사용해 커스텀 DB 함수 구현하기언어/파이썬 & 장고 2020. 3. 7. 20:22
장고 ORM에서는 데이터베이스의 함수를 다수 지원합니다. 하지만 전부를 지원하는 것이 아니여서 지원하지 않는 함수를 쓸 땐, DB에서 데이터를 받아온 다음 파이썬 코드를 작성해야 합니다. 여기서는 Func()를 사용해 장고에서 지원하지 않는 DB 함수를 구현합니다. 먼저 장고에서는 pg의 unnest라는 기능을 제공하고 있지 않습니다. unnest는 어레이 타입의 컬럼 데이터를 인덱스 별로 각 row로 분리시켜주는 기능입니다. 데이터가 {1,2,3} 이렇게 1개의 row로 되어 있다면 unnest를 사용하여 3개의 row로 표현할 수 있습니다. (각 row는 1, 2, 3 으로 3개의 row)from django.db.models import Func temp = Test.objects.annotate(..
-
[Django] array_agg, string_agg, unnest ORM으로 구현하기언어/파이썬 & 장고 2020. 3. 7. 18:38
PostgreSQL에서 지원하는 array나 string 타입의 함수를 장고에서도 일부 지원을 합니다. 예를 들어, array 타입 함수의 unnest나 여러 row를 array로 변형하는 함수 등을 구현할 수 있습니다. 이러한 기능을 잘 사용하면 DB에서 가져온 데이터를 파이썬 코드로 반복문을 돌면서 형태를 변환하는 수고를 줄일 수 있습니다. 여기서는 복수 row를 가지는 컬럼을 단일 array로 만들거나 구분자를 주어 string 타입으로 변형하는 예시입니다.먼저 테이블 내 컬럼은 아래와 같습니다.testabc11223가나다array_aggfrom django.contrib.postgres.aggregates import ArrayAgg temp = Test.objects.aggregate( test..
-
[Django] 장고에서 concurrent.futures의 process 사용하기언어/파이썬 & 장고 2020. 3. 7. 17:39
장고의 ORM을 사용하지 않고 DB 패키지인 (여기서는 PG를 선택) psycopg2를 사용하여 구현한다면 아래와 같은 코드로 예시를 들 수 있습니다.from concurrent.futures import ProcessPoolExecutor import psycopg2 import psycopg2.extras from psycopg2.extensions import new_type, DECIMAL class MultiProcessTest: def __init__(self): db = {} # DB 정보 self.dsn = f"host='{db['HOST']}' port='{db['PORT']}' dbname='{db['NAME']}' user='{db['USER']}' password='{db['PASS..
-
[Design Pattern] 어댑터 패턴 (Adapter Pattern)공부/디자인 패턴 2020. 2. 29. 22:38
어댑터 패턴이란?한 클래스의 인터페이스를 다른 클래스에서 사용하고자 할 때, 다른 클래스에서 사용할 수 있도록 호환성을 제공해주는 패턴입니다. 예를 들어, 한국에서는 220v가 표준이지만 일본은 110v가 표준입니다. 한국에서 사용하는 충전기를 일본에 가져가면 콘센트의 모양이 맞지 않아 충전을 할 수 없습니다. 이 때, 돼지코와 같은 변환기(어댑터)를 사용해 한국에서 가져온 충전기를 일본에서 충전할 수 있도록 하는 기능이 여기서 말하는 어댑터 패턴이라 볼 수 있습니다.예시아래와 같이 한국전자제품 인터페이스와 삼성 클래스가 있다고 구현합니다.public interface KoreaElectronicProduct { public void 220v(); public void electricPressure();..
-
[Python] 추상화 클래스 ABC와 NotImplementedError 차이점언어/파이썬 & 장고 2020. 2. 29. 21:12
추상화 클래스 모듈인 ABC와 상속 받을 클래스의 함수 내에서 구현을 강제하는 NotImplementedError은 기능상 동일합니다. 상속을 받고 해당 함수를 정의하지 않으면 에러를 발생 시킵니다. 여기서 미묘한 차이가 나오는데 어떤 차이가 있는지 설명합니다.추상화 클래스 ABC 예시ABC 모듈은 파이썬 내장 모듈로 기능을 제공하고 있습니다.from abc import ABCMeta, abstractmethod, ABC class DBManager(metaclass=ABCMeta): @abstractmethod def connect(self): pass # 또는 class DBManager(ABC): @abstractmethod def connect(self): pass class MySQL(DBMan..
-
[Design Pattern] 팩토리 패턴 (Factory Pattern)공부/디자인 패턴 2020. 2. 29. 20:15
팩토리 패턴이란?객체를 만들어 반환하는 함수를 생성자 대신 팩토리 형태로 제공하여 초기화 과정을 외부에서 보지 못하게 숨기고 반환 타입을 제어하는 방법입니다.일반적으로 자바에서는 객체를 아래와 같이 생성합니다. SomeClass someClassObject = new SomeClass (); 위 선언의 문제는 SomeClass의 객체를 사용하는 부분에서 SomeClass의 구현에 의존성이 생기는 것입니다. new를 사용하여 객체를 생성하는 부분은 문제가 없지만 코드를 구체적인 구현 클래스에 결합하여 제공을 하게 됩니다. 이러한 경우는 구현 문제가 아닌 인터페이스에 대한 코드 위반입니다. 더 자세하게 나무위키에 나온 예시를 봅니다. (https://namu.wiki/w/%EB%94%94%EC%9E%90%E..
-
코루틴이란?공부 2020. 2. 23. 21:24
코루틴이란?코루틴은 동시성 프로그래밍을 가능케 하도록 만든 개념입니다. 코루틴은 보통 스레드와 비교가 많이 됩니다. 코루틴은 나온지 꽤나 오래된 기술이나스레드가 나타나면서 방치가 되었었습니다. 이후 스레드의 자원 경쟁, 데드락 등의 문제로 인해 다시 주목받고 있습니다. 코루틴은 별도의 스레드 없이 메인 스레드 상에서 번갈아가며 병렬처리와 유사한 동작을 수행할 수 있기 때문입니다.스레드와 차이점스레드는 비동기로, 여러 스레드가 있다면 한꺼번에 동시에 실행되는 반면, 코루틴은 프로그램이 실행 중일 때 특정 시점에 코루틴으로 이동하고 그 전에 진행 중이던 루틴은 정지합니다. 즉, 한번에 하나의 코드만 실행됩니다. 이는 기존의 프로그래밍과 유사한 성격으로 보일 수 있습니다. 하지만 기존의 프로그래밍은 에러가 나..
-
[Golang] 에러언어/Golang 2020. 2. 23. 20:12
Go는 내장 타입으로 error 라는 인터페이스 타입을 갖습니다. error 인터페이스는 Error() 라는 하나의 메서드만 갖습니다. 이 개발자는 이 인터페이스를 상속받아서 커스텀 에러 타입을 구현할 수 있습니다.package main import ( "log" "os" ) type error interface { Error() string } func main() { f, err := os.Open("C:\\temp\\1.txt") if err != nil { println("에러다") log.Fatal(err.Error()) } println(f.Name()) } 또한 에러의 타입별로 switch 문을 사용하여 구별할 수 있습니다.package main import ( "log" "os" ) fun..
-
[Design Pattern] 프로토타입 패턴 (Prototype Pattern)공부/디자인 패턴 2020. 2. 23. 19:28
프로토타입 패턴이란?프로토타입 패턴은 원래 객체를 복제한 새로운 객체를 만들고, 그 복제본을 변경해 사용하는 패턴이프로토 타입 패턴은 기존의 객체를 복사하여 새로운 객체를 만들고 복사한 객체를 변경하여 사용하는 패턴입니다. 여기서 복사된 객체를 프로토타입이라고 합니다. 이러한 행동을 하는 이유는 때때로 새로운 객체를 만드는 것이 기존 객체를 복사하는 것 보다 비용이 더 많이 들 수 있습니다. 예를 들어, DB에서 데이터를 가져오는 클래스가 있는데 프로그램 내에서 데이터 수정을 여러번 이뤄지면 똑같은 데이터를 매번 DB에서 가져오는 것은 좋지 않습니다. 이러한 문제로 인해서 인스턴스를 깊은 복사 또는 얕은 복사를 통해 1번만 DB에 접근하여 데이터를 수정할 수 있도록 합니다.파이썬에서..파이썬에서는 cop..
-
[Design Pattern] 싱글톤 패턴 (Singleton Pattern)공부/디자인 패턴 2020. 2. 23. 18:41
싱글톤 패턴이란?개발을 진행하다 보면 클래스 내에서 인스턴스를 1개만 생성해야 하는 경우가 있습니다. 이럴 때, 해당 클래스를 사용하는 여러 곳에서 인스턴스를 계속 생성하다 보면 불필요하게 메모리 낭비를 야기 시킵니다. 이럴 때 싱글톤 패턴을 사용하면 불필요한 메모리 낭비를 방지하고 해당 클래스의 인스턴스를 바로 호출할 수 있습니다.싱글톤 패턴에서는 생성자를 클래스 자체에서만 접근할 수 있도록 private와 같이 접근 제어자를 통해 제어해야 합니다. 만약 생성자를 열어두면 해당 클래스를 다른 부분에서 인스턴스화 시킬 수 있기 때문입니다. 접근 제어자로 막는 것과 더불어 수정이 되지 않도록 막아야 합니다. 만약 인스턴스 생성 이후, 수정이 가능하다면 해당 클래스의 인스턴스를 Null로 초기화 시켜버릴 수..