본문 바로가기
728x90

Python29

[Airflow] Airflow로 ETL 파이프라인 V2 만들기 (Variables + TaskGroup을 활용한 Task Factory 구현) 이번 포스트에는 저번에 작성했었던 각 작업들을 통합하여 만든 DAG인 ETL 파이프라인 구축하기 V1에서 중복된 태스크는 줄이고, 병렬실행을 도입시켰으며, task를 정의한 Variables 변수에 따라 Dynamic하게 갯수와 이름이 변하게 되게 끔 구성하였습니다. 저번에 작성한 포스트를 보고 싶으시다면 아래의 링크를 확인해주세요. https://spidyweb.tistory.com/506 [Airflow] Airflow로 ETL 파이프라인 만들기(python, EMR, glue crawler, Email, Slack, DB반영) 이번 포스트에는 회사에서 수동으로 처리하고 있던 일회성 ETL작업을 Airflow DAG으로 묶어서 파이프라인을 만든 경험에대해서 소개해드리겠습니다. 기존 업무 처리방식과 A.. 2024. 2. 9.
[Python] AWS SES + MIME을 이용한 메일 기능 구현 소 AWS SES(Simple Email Service)란? Outbound만 가능한 AWS의 이메일 전송서비스이다. SES를 사용하는 목적은 회원들에게 프로모션 전송, 회원가입 시 이메일 확인 인증, 비밀번호 전송 등을 수행하기 위해서이며, 프리티어 기준 매일 2,000통을 보낼 수 있다. 이처럼 SES는 대량의 이메일을 발송하기에 적절한 서비스이며 발송한 이메일의 수와 데이터 전송에 대해 요금이 부과되기 때문에 저렴한 비용으로 이용이 가능 SMTP를 사용 SMTP(Simple Mail Transfer Protocol)란? 메일 전송 프로그램이 서버로 메일을 보낼 때 사용하는 프로토콜 오직 텍스트만 전송이 가능하다. 스트림 방식을 이용하여 전송한다. 한 개의 메시지를 해당 서버의 여러 수신자에게 보낼 수 .. 2023. 11. 25.
[Python] Boto3 + Airflow로 특정 기간 지난 S3 데이터 삭제하기 업무를 하면서 개인정보 데이터에 대해서 6개월이 지나면 자동으로 파기가 되는 로직을 구현해야되는 일이 있었습니다. 따라서 하루단위 배치로 6개월이 지났는지 검사하고, 지났으면 데이터를 삭제하는 로직을 구현한 것에 대해 정리해보겠습니다. 요구사항, 상세정보 및 코드 사용 라이브러리 : boto3 배치 스케줄링 주기: 매일 00:05 요구사항: 6개월이 지난 개인정보 포함된 데이터는 파기가 되어야 함 해결 방법: s3 uri경로가 s3:bucket/~~/history 혹은 latest로 되어 있고 이후에 stnd_ymd=yyyy-mm-dd 파티션으로 구별 됨 → stnd_ymd 기준 6개월이 지나면 매일매일 검사하여 삭제하는 로직 구현 코드 from airflow import DAG import boto3 .. 2023. 11. 20.
[Python] Logging 라이브러리 정리, Airflow에서 Logging사용하기 Airflow에서 PythonOperator를 실행할 때 로그가 나오지 않아서 테스크가 잘 진행되고 있는지 확인하기가 어려웠던 상황이 있었습니다. logging 라이브러리를 사용해도 airflow UI에서 확인 할 수가 없었는데 관련해서 정리를 해보고자 합니다. 1. Logging The only time that print is a better option than logging is when the goal is to display a help statement for a command line application. Shell과 같은 커맨드 인터페이스에서 --help 옵션을 받아 사용법 도움말을 출력할 때 이외에는 항상 logging이 print보다 낫다는 뜻으로, 사실상 웬만한 상황에서는 prin.. 2023. 11. 20.
[AWS] Boto3 사용하기 1. S3 다루기 1. 사전 준비 Client low-level 인터페이스 service description에 의해 만들어짐 botocore 수준의 client를 공개(botocore는 AWS CLI와 boto3의 기초가 되는 라이브러리) AWS API와 1:1 매핑됨 메소드가 스네이크 케이스로 정의되어 있음 Resource high-level, 객체지향적 인터페이스 resource description에 의해 만들어짐 식별자(identifier)와 속성(attribute)을 사용 자원에 대한 조작 위주 2. 버킷 생성 import logging import boto3 from botocore.exceptions import ClientError class AWSBoto3(): def __init__(self): sel.. 2023. 4. 12.
[Python] 함수의 강점, 함수 return 이란?, 언제 사용할까? print()와의 차이점 왜 쓰는지 알고 쓰는 것과 그냥 쓰는 것의 차이는 굉장히 크다고 생각합니다. 늘상 접하고 있는 함수에 대해서 정리해보겠습니다. 1. 함수의 강점 1) 반복과 재사용에 강하다 기계와 사람의 큰 차이점은 어떤걸까? 같은 일을 반복함에 있어서 속도차이가 엄청나게 나는 부분이 제일 큰 차이가 아닐까 싶습니다. 프로그래밍에는 반복을 해야하는 일들이 존재합니다. 즉, 코드를 재사용할 일이 많다는 뜻입니다. 그런것을 도와주는 것이 반복문 함수 정도 일 것 같습니다. 2) 유지보수에 좋다 함수의 강점은 반복 뿐만이 아닙니다. modularity(모듈성)라 하는 시스템 구성 요소가 분리되고 재결합 될 수있는 정도를 나타내는 단어는 프로그래밍에 있어 중요합니다. 기능을 잘게 쪼개게 되면, 원하는 기능의 수정이 필요할 때에.. 2022. 12. 15.
[Python] Input() vs sys.stdin.readline() 입력 함수 차이 (feat. python version) 이번 포스트에는 사용자 입력을 처리하기 위한 내장 함수에 대해서 비교하여 정리하겠습니다. 1. Python 2.x 1) raw_input() 입력 값을 무조건 문자열로 받음 2) input() 입력으로 들어온 값을 evaluate 해서 그 값에 맞는 자료형으로 초기화(형변환이 자동으로 된다.) 2. Python 3.x 1) input() Python 3.x에서 input()는 Python 2.x 의 raw_input() 역할을 대신하여 입력 값을 문자열로 받음 -> 다른 타입을 넘겨주기 위해선 형변환이 필요 Python 3.x로 넘어오면서 모든 변수가 객체(object)로 처리됨에 따라서 결과 값도 type에서 class로 바뀌게 됨 input() 내장 함수는 parameter로 prompt messag.. 2022. 12. 15.
[Python] pandas vs pyspark 사용 및 코드 비교 이번 포스트에는 pyspark과 pandas를 쓰임새를 비교 해보고, pyspark의 코드를 pandas코드로 옮겨보고 비교해보겠습니다. 1. Pandas vs Pyspark 언제쓸까? pandas와 spark는 dataframe이라는 SQL 테이블 또는 Excel 스프레드 시트에서와 같이 이질적으로 유형이 지정된 열이있는 데이블 형식 데이터를 다루게 될 때 아주 적합함 대부분의 데이터처리에는 pandas 라이브러리를 통해 해결했었는데, pandas와 spark의 가장 큰 차이는 핸들링하는 데이터의 양의 크기 pandas는 통상적으로 spark보다 작은 데이터 처리에 대해서는 속도가 빠르다고 하는데, 10GB이상의 파일 처럼 파일의 크기가 커지게 되면, pandas는 메모리용량의 부족으로 인해 성능이 저.. 2022. 9. 22.
[Python] Numpy library 개념, 기본 사용법 1. Numpy 란? Numpy는 다차원 배열을 쉽게 처리하고 효율적으로 사용할 수 있도록지원하는 파이썬의 패키지 데이터 구조 외에도 수치 계산을 위해 효율적으로 구현된 기능을 제공 2. Numpy 설치 pip install numpy 3. Numpy 기본 사용법 1) ndarray 생성 import numpy as np arr1 = np.array([1,2,3,4]) # numpy의 배열인 ndarray 생성 print(arr1,type(arr1)) # [1 2 3 4] 출력 2) ndarray 데이터 타입 지정 float int bool str object arr2 = np.array([1,2,3,4], dtype = 'float') # dtype으로 배열의 데이터타입을 지정함 3) 1차원 이상의 배.. 2022. 7. 12.
728x90