언어
-
[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..
-
[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..
-
[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..
-
[Python] 리스트, 딕셔너리 sort(), sorted() 사용하기언어/파이썬 & 장고 2020. 2. 22. 17:21
보통 리스트 타입을 정렬할 때, .sort()로 간단하게 사용할 수 있습니다. 하지만 이 때, 2차원 배열 같은 특정 경우에서 비교하거나 딕셔너리의 값을 기준으로 정렬을 하고 싶다면 sort() 또는 sorted()에서 제공하는 key 옵션을 사용하여 정렬을 진행할 수 있습니다. 먼저 sorted()는 내장함수로 (이터러블 타입, key, reverse)와 같이 3개의 파라미터를 받으며 결과를 반환합니다. sort(key, reverse)는 리스트에서 제공해주는 메소드이며 딕셔너리에서는 볼 수 없습니다. 2차원 배열 정렬먼저 아래와 같이 2차원 배열이 있다고 가정하고 내부 배열의 각 첫 번째 값으로 정렬을 하는 예제입니다.target = [[1, 2], [3, 1], [2, 6], [4, 5], [3, ..
-
[Python] 문자열 앞에 0 채우기언어/파이썬 & 장고 2020. 2. 22. 17:03
보통 문자열 앞에 0을 채우는 행동은 날짜를 문자열로 계산할 때 유용하게 사용됩니다. 예를 들어, 2월을 yyyy/mm/dd로 표시한다고 하면 2020/02/02 와 같이 표현할 수 있습니다. 이 때, 요구 사항때문에 월 또는 일을 정수로 변환하여 계산한 뒤, 다시 문자열로 변경하면 '02' → (정수 변환) 2 → (문자열 변환) '2'가 되어 0을 추가 해줘야 합니다. 이러한 행동을 좀 더 편하게 할 수 있도록 아래에서 설명합니다.문자열 타입에서 원하는 개수만큼 0 채우기문자열 타입일 경우, 아래와 같이 2가지 방법이 있습니다. 먼저 zfill(개수)를 사용하여 [현재 스트링의 길이 - 개수]만큼 0을 채울 수 있습니다.text = '2' a = text.zfill(2) b = text.zfill(1..
-
[Python] List, Dictionary insert 성능 비교언어/파이썬 & 장고 2020. 2. 22. 16:49
알고리즘 문제를 풀다가 임시 컨테이너 타입에 값을 넣고 정렬을 한 다음, 다시 추출을 해야되는 요구사항이 있었습니다. 이 때, 선택할 수 있는 컨테이너 타입이 리스트와 딕셔너리가 있었는데 이 둘 중, 어느 것을 사용하는게 더 빠른지 궁금증이 생겨 성능 비교를 한 결과를 공유합니다.insert 성능 비교다음 테스트 시나리오는 10000번 반복문을 실행하면서 리스트와 딕셔너리 각각에 값을 대입하는 것입니다. 리스트는 append()를 진행하고 딕셔너리는 key와 value를 동일한 값으로 대입합니다.테스트를 진행할 때, 진행하는 현재 컴퓨터 상태에 따라 속도가 차이날 수 있으므로 테스트를 10000번씩 10번 반복하여 진행했습니다.import timeit def list_append(): target = [..
-
[Python] Numpy란?언어/파이썬 & 장고 2020. 2. 18. 21:36
Numpy란? Numpy는 다차원 배열을 쉽게 처리하고 효율적으로 사용할 수 있도록지원하는 파이썬의 패키지입니다. NumPy는 데이터 구조 외에도 수치 계산을 위해 효율적으로 구현된 기능을 제공합니다. 데이터 분석을 할때, Pandas와 함께 자주 사용하는 도구로 등장합니다. 왜 Numpy를 사용할까 데이터란 이미지, 오디오, 텍스트, 숫자 등 다양한 형태와 크기로 존재합니다. 사람은 이런 데이터들을 가지고 이해하지만 컴퓨터는 0 또는 1만 이해합니다. 여기서 핵심은 데이터를 숫자의 배열로 볼 수 있습니다. 실제로 데이터 분석을 수행하기 위한 전제 조건은 컴퓨터가 이해할 수 있도록 데이터를 숫자 형식으로 변환하는 것입니다. 여기서 효율적으로 배열을 저장 및 조작할 수 있어야 하는데 이러한 요구사항으로 N..
-
[Golang] package 관리, 선언하기언어/Golang 2020. 2. 16. 20:57
main package패키지 이름에 main이라고 되어 있으면 Go 컴파일러가 이를 실행 프로그램으로 인식합니다. 또한 main 패키지 안의 main() 함수를 시작하고자 하므로 라이브러리를 만들 때, main 패키지나 함수명을 사용하면 안됩니다.package import패키지를 import하는 방법은 아래와 같이 2가지가 있습니다.package main // 단일 패키지 선언 import "bytes" // 복수 패키지 선언 import ( "bytes" "encoding/json" "encoding/xml" "io/ioutil" "net/http" )package scope패키지 내에는 함수, 구조체, 인터페이스, 메소드 등이 있는데, 이러한 이름의 첫 문자를 대문자로 시작하면 public으로 간주되..
-
[Golang] http 모듈 사용하기언어/Golang 2020. 2. 16. 20:29
Go에서 제공하는 http 모듈을 사용하면 보다 쉽게 데이터를 전송하고 가져올 수 있습니다.GET Method 사용하기http.Get 메소드를 사용하면 쉽게 요청을 보낼 수 있지만 헤더나 스트림을 추가할 수 없습니다. 따라서 NewRequest 객체를 직접 생성하고 http.Client 객체를 통해 호출해야 합니다.package main import ( "fmt" "io/ioutil" "net/http" ) func simpleGet() { // header나 추가적인 요청을 보낼 수 없음 resp, err := http.Get("https://naver.com") if err != nil { panic(err) } defer resp.Body.Close() // 결과 출력 data, err := iou..