분류 전체보기
-
[Python] asyncio 파헤치기언어/파이썬 & 장고 2021. 3. 1. 20:12
asyncio는 파이썬 버전 별로 사용하는 형태가 조금씩 다릅니다. 아래 설명에서는 파이썬 3.8 기준으로 작성했습니다. asyncio란? 파이썬 3.5부터 지원하는 asyncio는 비동기 프로그래밍을 위한 모듈입니다. 동기란 빨래를 시작하고 종료가 되면 설거지를 시작하고 완료가 되면 TV를 보는 것처럼 한 번에 하나의 작업을 하는 것이고, 비동기는 빨래를 시작시키고 설거지를 하면서 TV를 보는 것과 같이 여러 작업을 동시에 하는 것과 같은 행동을 하는 것입니다. 하지만 파이썬에서는 GIL때문에 비동기 프로그래밍이 동기 프로그래밍보다 느릴 수도 있습니다. asyncio는 이벤트 루프와 코루틴을 기반으로 동작하며 데이터를 요청하고 응답을 기다리는 I/O bound한 작업에서 효율적입니다. 코루틴 기반이므로..
-
[PostgreSQL] COALESCE, NULLIF, SIGN, IS DISTINCT FROMDB/PostgreSQL 2021. 2. 28. 19:41
COALESCE와 NULLIF 두 함수는 유사한 동작을 하는 것 같지만 실제로는 다른 결과를 유발합니다. COALESCE COALESCE(X, Y)는 첫 파라미터인 X가 NULL이라면 Y를 반환하고 그렇지 않으면 X를 반환합니다. select coalesce(null, '123'); -- '123' select coalesce('1', '123'); -- '1' NULLIF NULLIF(X, Y)는 X와 Y가 같다면 NULL을 반환하고 그렇지 않으면 X를 반환합니다. select nullif('1', '1'); -- null select nullif('1', '2'); -- 1 select nullif(null, null); -- null SIGN 입력된 값이 양수면 1, 0이면 0, 음수면 -1을 반환..
-
[PostgreSQL] CUBE문을 사용해 사용자 액션 집계하기DB/PostgreSQL 2021. 2. 28. 18:51
먼저 사용자들의 액션 플래그를 집계하는 쿼리를 다음과 같다고 가정합니다. WITH action_flag AS ( SELECT user_id, SIGN(SUM(CASE WHEN action = 'purchase' THEN 1 ELSE 0 END)) AS has_purchase, SIGN(SUM(CASE WHEN action = 'review' THEN 1 ELSE 0 END)) AS has_review, SIGN(SUM(CASE WHEN action = 'favorite' THEN 1 ELSE 0 END)) AS has_favorite FROM action_log GROUP BY user_id ) SELECT * from action_flag 이러한 결과는 다음과 같습니다. user_id has_purch..
-
[PostgreSQL] ROLLUP을 사용해 소계 구하기DB/PostgreSQL 2021. 2. 28. 17:15
먼저 아래와 같은 데이터가 있다고 가정합니다. dt order_id user_id item_id price category sub_category 2017-01-01 1 1 1 10000 men jacket 2017-01-01 1 1 2 5000 food fish 2017-01-01 1 1 3 2500 book business 2017-01-01 2 2 1 10000 men jacket 2017-01-01 2 2 5 50000 women bag 2017-01-01 3 2 2 5000 food fish 2017-01-01 4 3 1 10000 men jacket 2017-01-01 5 4 4 40000 cd classic 이러한 데이터에서 카테고리별 총 매출과 소계를 계산하고자 합니다. 소계란 전체가 아닌..
-
Z 차트로 매출의 추이 확인하기공부/데이터 2021. 2. 28. 16:36
고객에게 제공하는 서비스, 상품, 콘텐츠 중에는 계절에 따라 매출이 변동하는 경우가 있습니다. Z 차트를 작성할 때는 월차매출, 매출누계, 이동년계 라는 3가지 지표가 필요합니다. z차트(https://kb.tableau.com/articles/howto/Create-Z-Chart-Numbers-Accumulated-Total-Numbers-Movement-Total-Numbers-Within-a-Year-in-a-View?lang=ko-kr) 월차매출 매출 합계를 월별로 집계합니다. 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월 1월 2월 3월 합계 합계 합계 매출누계 해당 월의 매출에 이전월까지의 매출 누계를 합하여 집계합니다 1월 2월 3월 4월 5월 6월 7월 8월 9월 1..
-
[PostgreSQL] window function의 window frame 알아보기DB/PostgreSQL 2021. 2. 27. 21:59
window function에 관해서는 https://brownbears.tistory.com/310 에서 설명이 되어 있습니다. window function의 사용예제를 보다 보면 BETWEEN 구문이 들어가 있는 것을 확인할 수 있습니다. 이를 window frame 즉, 프레임 지정 구문이라 합니다. 프레임 지정이란 현재 레코드 위치를 기반으로 상대적인 window를 지정하는 구문입니다. 프레임 지정 구문은 {범위} BETWEEN {시작} AND {종료} 또는 {범위} {시작} 형태입니다. 시작, 종료 시작과 종료에는 다음과 같은 키워드를 조합하여 사용할 수 있습니다. CURRENT ROW: 현재 행 n PRECEDING: n행 앞 n FOLLOWING: n행 뒤 UNBOUNDED PRECEDING..
-
[PostgreSQL] with문으로 공통 테이블 식 (CTE) 사용하기DB/PostgreSQL 2021. 2. 27. 21:09
CTE는 Common Table Expression으로 간단하게 쿼리 결과를 일시적으로 저장하여 테이블처럼 사용하는 것입니다. PostgreSQL에서는 with구문을 사용해 구현할 수 있습니다. WITH temp_query_result AS ( SELECT category_name, product_id, sales, row_number() over (PARTITION BY category_name ORDER BY sales DESC) AS rank FROM product_sales ) SELECT * FROM temp_query_result; with문은 조회 결과 뿐만 아니라 values 구문을 사용해 유사 테이블을 만들 수 있습니다. WITH device(id, device) AS ( VALUES (..
-
[Java] Stream언어/Java 2021. 2. 27. 18:38
Stream 자바 8에서 추가된 스트림은 람다를 활용할 수 있는 기술 중 하나로 배열과 컬렉션을 함수형으로 처리할 수 있습니다. 스트림 생성 배열 String[] arr = new String[]{"1", "2", "3"}; Stream stream = Arrays.stream(arr); 컬렉션 List list = Arrays.asList("1", "2", "3"); Stream stream = list.stream(); stream.of stream.of() 메소드를 사용하면 스트림 객체를 바로 생성할 수 있습니다. Stream stream = Stream.of("1", "2", "3"); // [1, 2, 3] 빈 리스트 Stream stream = Stream.empty(); builder bui..
-
[Python] dataclasses 모듈 사용하기언어/파이썬 & 장고 2021. 2. 13. 20:15
들어가기 전에 파이썬 3.6부터 컴파일 언어와 같이 정적 타입을 미리 선언하여 사용할 수 있습니다. from typing import Dict def test(number: int, name: str) -> Dict[str, int]: return {name: number} test(1234, 'Kim') # {'Kim': 1234} test(1234, 1224) # 에러가 나진 않음 # {1224: 1234} 이는 개발을 할 때, hint를 줄 뿐이지 구문 오류와 같은 에러는 발생시키지 않습니다. 아래에서 설명할 때, 위 개념을 사용하여 설명합니다. 개요 파이썬 3.7부터 dataclasses 모듈이 도입되어 인스턴스 생성 시, 변수 할당부터 코드의 양을 줄일 수 있는 많은 기능이 생겼습니다. AS-I..
-
[Python] Enum 타입언어/파이썬 & 장고 2021. 2. 11. 17:03
파이썬 3.4부터 enum 타입을 지원하고 있습니다. 보통 enum은 연관 있는 여러 개의 상수를 선언할 때 사용하게 됩니다. enum 클래스를 사용하면 인스턴스의 종류를 제한할 수 있어서 프로그래밍에 있어 도움이 됩니다. 클래스 타입 enum 타입의 상수는 기본적으로 name과 value를 가지고 있습니다. from enum import Enum class Status(Enum): SUCCESS = 1 FAILURE = 2 RETRY = 3 Status.SUCCESS Status.SUCCESS.name Status.SUCCESS.value # Status.SUCCESS # SUCCESS # 1 이터레이션을 지원하므로 반복문을 통해 접근할 수 있고 value나 name으로도 직접 접근이 가능합니다. fo..