전체 글

전체 글

    [fluent python]함수 데코레이터와 클로저

    데코레이터 데코레이터란? 파이썬 데코레이터 decorator라는 단어처럼 기존의 코드에 여러가지 기능을 추가하는 "장식"역할을 해주는 파이썬 구문 데코레이터는 다른 함수를 인수로 받는 콜러블(데코레이트된 함수) 함수를 반환하거나 함수를 다른 함수나 콜러블 객체로 대체합니다. def deco(func): def inner(): print('running inner()') return inner @deco def target(): print('running target()') target() -> 출력: running inner() print(target) -> 출력: 데커레이터는 다른 함수를 인수로 전달해서 호출하는 일반적인 콜러블과 동일하며 편리 구문(syntactic sugar)일 뿐입니다. 데코레이터..

    [python] 일급 함수 디자인 패턴

    요즘 [전문가를 위한 파이썬] 기술서적으로 파이썬 스터디를 하고 있습니다. 발표 회차에 다가와서...이번 포스트에서는 함수 객체를 이용해 Strategy 패턴을 리팩토링하는 내용을 다루겠습니다. 일급 함수란? 파이썬 함수는 일급 객체입니다. 일급 객체는 다음 작업을 수행할 수 있는 프로그램 개체입니다. - 런타임에 생성할 수 있다 - 데이터 구조체의 변수나 요소에 할당할 수 있다 - 함수 결과로 반환할 수 있다 전략(Strategy) 패턴 리팩토링 Strategy 패턴? 모든 프로그램은 문제를 해결하기 특정 알고리즘이 구현되어 있다. Strategy 패턴에서는 그 알고리즘을 구현한 부분을 모두 교환할 수 있다. 즉 알고리즘을 빈틈없이 교체해서 같은 문제를 다른 방법으로도 쉽게 해결할 수 있도록 도와주는 ..

    Spark tuning

    이번 포스트에서는 Spark 작업을 최적화하여 성능을 향상시키는 방법에 대해서 다룹니다. Spark 성능 튜닝은 시스템이 사용하는 메모리, 코어와 인스턴스를 대상으로 기록할 설정을 조정하는 프로세스를 가리킵니다. Spark 튜닝을 통해 편의성과 성능 사이의 균형을 맞추고 리소스 병목 현상을 예방하는 효과를 얻을 수 있습니다. Data Serialization 객체를 직렬화하는 부분에서 성능에 영향이 크기 때문에 Spark 어플리케이션 최적화를 위해 가장 먼저 조정합니다. 여기서 직렬화를 다루는 이유는 직렬화는 spark은 네트워크로 데이터를 전송하거나 디스크에 쓸 때 바이너리 포맷으로 변환하기 위한 과정이나 셔플과정에서 쓰이기 때문에 이부분 튜닝이 성능에 큰 영향을 줄 수 있습니다. spark에서는 ja..

    [Spark] Spark run in Cluster Mode-YARN

    이전까지 spark 스크립트를 배치로 돌리면서 클러스터에서 spark-submit커맨드를 보내기 급급했는데 어플리케이션이 클러스터에서 어떻게 실행되는지 설명할 수 있어야겠다고 생각이 들었습니다. 이번 포스트에서는 spark-submit으로 클러스터에 띄운 어플리케이션이 어떻게 실행되는지 공식 문서 내용을 정리합니다. 용어 설명 Task executor에 전달되는 작업 단위 Job Spark action에 대한 응답으로 생성되는 여러 태스크로 구성된 병렬 연산. 각각의 작업을 실행하여 전체적인 처리 과정을 분산시킵니다. Stage 개별의 job은 stage라고 불리는 소규모 태스크 세트로 분할됩니다. Application Spark 스크립트로 빌드된 프로그램. 클러스터에 driver와 executor로 구..

    [Airflow] Operators

    하나의 오퍼레이터는 Airflow에서 완수해야하는 하나의 기본 단위이다. 이번 포스트에서는 가장 많이 쓰이는 오퍼레이터인 BashOperator, PythonOperator, KubernetesPodOperator 등 모든 오퍼레이터가 상속받는 BaseOperator 내용을 보면서 필수 인자와 각 오퍼레이터별 별도 필요 인자를 살펴본다.BaseOperator Abstract base class for all operators. 모든 오퍼레이터들을 위한 추상 클래스 오퍼레이터들은 DAG 내의 노드가 되는 객체들을 생성하기 때문에, BaseOperator는 DAG 크롤링 행동을 위한 많은 재귀 메서드들을 포함하고 있다. 이 클래스에서 파생되기 위해서는, 생성자와 'execute' 메서드를 재정의하면 된다. ..

    2023 회고

    연말에 회고를 작성하며 마무리하려고 했는데 초고만 써두고 새로운 해가 되었다. 이번 글에서는 신년에 대한 기대점을 곁들여... 커리어, 일상에 대한 활동과 생각을 남긴다.커리어팀에서 진행했던 백오피스 프로덕트를 오픈할 수 있었다. 프론트, 백엔드, ETL 작업을 팀원들과 다양한 논의를 하면서 진행할 수 있어서 재밌었다. 고민이 많았던 시기에 프로덕트를 통해서 방향성이 가시화되는 것 같았다. 앞으로 더 고도화하고 회사에서 많은 편의를 만들 수 있으면 좋겠다. 한 해동안 작업을 돌아보면 빨리 잘하고 싶었고 단번에 잘하고 싶었던 욕심이 컸다. 다른 동료들이 쌓아온 시간과 연습들은 안 보이고 그 높이와 속도만 비교되었다. 그런 마음을 단번에 모두 내려놓을 수는 없겠지만 이제는 공부도 연습이라고 생각하고 접근하려..

    Airflow Concept

    Airflow는 배치성으로 처리가 필요한 워크플로우를 개발하고 스케쥴링하고 모니터링하는 오케스트레이션 플랫폼이다. 스트리밍 솔루션이 아니기 때문에 계속 돌아가는 이벤트기반 워크플로우를 위해 설계되지 않았다. 보통은 Kafka를 통해서 실시간 데이터를 입수 및 처리해서 스토리지에 쌓고 Airflow가 주기적으로 데이터 처리를 시작한다. 이번 포스트에서는 Airflow의 기본 개념과 중요한 구성 요소들을 간단하게 소개한다. 스크립트 작성보다 기존에 사용하던 Airflow의 기본 철학을 이해하고 DAG를 구성하면서 사용했던 인자들을 복습하는 장이다. Workflow airflow에서는 워크플로우를 코드로 정의할 수 있다는 특징을 가진다. 이런 특성은 다음 목적을 위해 구현된다. Dynamic: 파이썬 코드로 ..

    utf8

    배경데이터베이스 테이블에서 emoji등 문자열을 저장해야하는 컬럼은 대부분 utf8mb4로 타입을 명시했다. utf8mb3는 emoji를 저장할 수 없기때문에 4바이트까지 저장할 수 있는 변수형을 사용해야한다는 것이다.그렇다면 utf8은 어떻게 3바이트를 저장하고 utf8mb4는 4바이트인걸까?이모지를 사용하기 위해서는 4바이트가 필요하다고 한다. 이모지가 4바이트를 차지하는지 어떻게 아는가?문자열과 이모지를 저장하기 위해 컬럼 타입을 utf-8mb4로 설정하고 간단하게 끝내는 것은 마치 이야기의 엔딩만 고치고 끝난거 같아서 이전까지 '알았다고 생각했던' 문자 인코딩에 대해서 한번 더 짚고 넘어가고 싶었다. ASCIIAmerican Standard Code for Information Interchang..