전체 글 1141

[Python] 비동기 - Future와 Task

개요이전에 2024.06.26-[Python] asyncio - 비동기 프로그래밍에서 Python에서 비동기 프로그래밍을 하기 위한 라이브러리, 문법, 실행 방법을 알아보았었다.근데 실제로 사용해 보니 동작 방식에 대한 이해도가 낮아 프로그래밍에 어려움을 느꼈다. 그래서 이번 글에서는 Python 비동기 프로그래밍에서 사용하는 Future와 Task 개념에 대해 정리한다.  FutureFuture란 비동기 프로그래밍에서 널리 사용하는 개념으로, 어떠한 작업의 실행 상태와 결과를 저장하는 객체이다.실행 상태는 PENDING, CANCELLED, FINISHED 값을 가지는데, CANCELLED / FINISHED가 작업의 완료를 의미한다. 실행 결과는 작업의 결과 또는 작업을 진행하면서 발생한 예외 객체가..

Python 2024.11.09

[Pandas] S3에 gz 압축 DataFrame csv 업로드하기

개요Pandas로 처리한 DataFrame을 압축한 CSV 형태로 S3에 업로드하고 싶다. 가능하면 CSV 파일을 파일 시스템에 남기지 않을 수 있었으면 좋겠다. 적절한 방법이 있는지 찾아보자.  테스트 데이터이전에 S3에 저장했던 아래 데이터를 사용하여 테스트해 본다.one, 1two, 2three, 3   코드DataFrame의 CSV 형식 데이터를 gz 압축 파일 객체에 쓰고, 압축 파일 객체의 값을 S3에 업로드하는 방식으로 문제를 해결할 수 있다.  1. 압축할 DataFrame 로드import boto3import pandas as pdbucket = 'BUCKET_NAME'prefix = 'PREFIX'filename = 'FILE_NAME# 압축할 파일 로드df = pd.read_csv(f..

[Yaml] null 표현하기

개요최근 yaml 형식의 문서에 null 값을 명시적으로 지정해야 하는 일이 생긴 김에, 방법을 기억해 두고자 적어둔다.설정한 값은 PyYAML을 사용해 어떻게 인식되는지 확인해본다.  null 키워드yaml에서 빈 값을 지정하는 가장 기본적인 방법은 null 키워드를 사용하는 것이다.key: null  테스트import yamlyaml_txt = """key: value1: null"""print(yaml.safe_load(yaml_txt))  ~~ 문자를 사용하여 null을 표현할 수도 있다.key: ~ 테스트import yamlyaml_txt = """key: value1: null2: ~"""print(yaml.safe_load(yaml_txt)) 생략키-값을 기재할 때 값을 생략해도 null로 ..

기타 2024.11.07

[기록] API 개발 시 주의할 점

개요최근 API 개발 업무를 담당하고 있다. 기능 개발 자체는 애플리케이션 내부에서 발생하기 때문에 크게 어려움이 없었는데, 애플리케이션 외부와의 요청 및 응답을 처리하는 과정에서 애로사항이 발생했다.관련해서 기억해 둘 만한 부분을 적어둔다. 참고로 대단히 경험적인 이야기다…….  JSON 데이터 생성은 생성기를 사용한다.일반적으로 데이터를 주고받는 형식 중 하나인 JSON은 문자열 데이터이다. 프로그래머가 코드에서 문자열 객체로 JSON 데이터를 만들거나 프로그래밍 언어에서 지원하는 JSON 관련 라이브러리로 데이터를 만들 수 있다. 당연한 말이지만 JSON 형식 데이터를 문자열로 직접 생성하는 것은 지양하는 것이 좋다. 사람이 JSON 문자열을 다루는 경우에는 큰따옴표가 아니라 따옴표를 사용하여 문자..

기타 2024.11.06

[HTTP] header - Content-Type, Accept

개요최근 API 개발 업무를 담당하고 있는데, API 정의서에 Content-Type, Accept라는 HTTP 헤더에 대한 내용이 기재되어 있었다. 두 헤더 모두 데이터 형식과 관련된 것으로 보이는데, 각각의 개념에 대해서 적어둔다.  Content-TypeHTTP 메시지 본문(Body)의 미디어 타입, 즉 전송된 데이터의 유형을 나타낸다.Content-Type: text/html; charset=utf-8Content-Type: application/json; charset=utf-8Content-Type: multipart/form-data; boundary=somethingHTTP 표준을 따르는 브라우저와 웹 서버는 Content-Type 헤더를 기준으로 HTTP 메시지 내 데이터를 해석한다.참고..

기타 2024.11.05

[Nginx] proxy 사용 시 upstream timed out (110: Connection timed out) while reading response header from upstream

현상Nginx를 프록시 서버로 사용하고 있는데 간헐적으로 504 Timeout이 발생하는 것을 확인했다.504 Gateway Time-outnginx원인을 확인하고 해결 방법……이라고 하기 보다는 현상 해소와 관련된 설정값을 적어둔다.   원인관련 로그는 niginx 로그의 proxy-error.log에서 찾을 수 있다.2024/10/17 08:06:01 [error] 1345049#1345049: *1213 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 10.100.100.100, server: an.internal.example.biz, request: "POST /se..

Linux 2024.11.04

[Python] yield - 제너레이터(generator) 생성

개요Python 코드를 보다 보면 드물게 yield라는 키워드를 발견하게 된다. 관련 개념을 잘 알고 있지 않아 이번 글에서는 yield 키워드의 개념 및 역할 등에 대해 정리해보려고 한다.  제너레이터 (generator)yield 키워드에 대해서 알기 전에 제너레이터(generator)라는 개념을 먼저 짚을 필요가 있다.제너레이터는 필요한 데이터를 미리 만들어놓는 것이 아니라 필요할 때마다 하나씩 만들어내는 객체를 말한다.호출할 때마다 값을 반환하기 때문에 처리에 필요한 시간이 길수록 한 번에 데이터를 반환하는 return보다 성능 측면에 이점을 가질 수 있다. 또한 return문은 모든 결괏값을 메모리에 올려야 하지만 제너레이터는 결괏값을 하나씩 메모리에 올려놓는다는 차이를 가진다.이러한 특징으로 ..

Python 2024.11.01

[Python] JSON 로드 시 Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

개요다음과 같은 JSON 문자열을 JSON 객체로 변환하려고 하던 중 아래와 같은 에러가 발생했다. import jsonpayload = """{ 'http://example.org/about': { 'http://purl.org/dc/terms/title': [ {'type': 'literal', 'value': "Anna's Homepage"} ] }}"""print(json.loads(payload))원인을 알아보고 해결 방법을 적어둔다.   원인문자열이 JSON 형식에 맞지 않아 파싱 에러가 발생한 것이다. https://www.rfc-editor.org/rfc/rfc7159#section-7에 의하면 JSON에서는 문자열이 큰 따옴표로 시작..

Python 2024.10.31

[Pandas] 행 수를 기준으로 DataFrame split하기

개요2024.10.08-[Pandas] read_csv - 큰 데이터프레임을 행 수를 기준으로 잘라 로드하기에서 데이터가 아주 많은 CSV 파일을 로드할 때 행 수를 기준으로 작은 조각으로 나눠서 로드하고 처리했다. 그런데 이번에는 이미 처리과정에 있는 데이터프레임을 작은 조각으로 나누고 싶다.방법을 정리해 둔다.  numpy.array_split  array_split 함수는 분할할 array와 분할할 개수에 해당하는 indices_or_sections 전달받아 indices_or_sections 만큼의 하위 array 목록을 반환한다. 분할할 array에는 DataFrame도 전달할 수 있다.import numpy as npimport pandas as pddf = pd.read_csv('DimenL..

[Python] accumulate - 누적 합 구하기

개요최근 알고리즘 문제를 풀면서 구간 합을 구할 때는 구간 합 자체를 계산하기보다는 누적 합을 이용해 계산하는 방법이 더 효율적인 방법임을 알게 되었다. 누적 합 자체는 for문을 이용해서도 구할 수 있지만, itertools.accumulate 함수를 이용하는 것이 좀 더 효율적이다.이번 글에서는 accumulate 함수 사용법에 대해서 적어둔다.  accumulateaccumulate 함수는 function으로 전달받은 함수에 대해 누적된 합계나 누적된 결과를 반환하는 iterator를 만든다.itertools.accumulate(iterable[, function, *, initial=None])기본적으로 덧셈에 해당하는 add 함수를 사용한다. initial에는 초기값을 전달할 수 있는데, ini..

Python 2024.10.29