기록 블로그

전체 글 73

06/19 51일차 ELT 작성과 구글시트_슬랙 연동 (전반부)

Airflow 고급 기능, dbt, Data Catalog 주요 메모 사항 ELT 작성과 구글시트/슬랙 연동 Airflow Docker 환경부터 다시 설정 이번 강의를 진행하기 전에 먼저 Docker로 환경설정부터 다시 하자 이미 learn-airflow Github repo를 다운로드받은 상황이라면 - git pull 아니라면 아래를 수행 ㄴ $ git clone https://github.com/learndataeng/learn-airflow.git ㄴ 2.5.1 이미지 관련 yml 파일 다운로드 ㄴ $ curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.5.1/docker-compose.yaml' docker-compose.yaml 수정 _PI..

06/15 50일차 개발환경 구축을 위한 Docker & K8s (5)

Docker, K8s 주요 메모 사항 이번 강의는 배운내용들 개념 정리에 대해 중점적으로 다뤘음 사실 제목에 K8s라고 적혀있으나 K8s는 너무 방대하고 어려운 개념. -> 아키텍처에 대한 설명만 다룸 왜 필요하고 어떤 기능을 해주는지, Docker와 서로 어떤 관계인지 이해하고 기본적인 사용법만 다룸! Docker 정리 경량화되어 있어 빠르고, 독립적인 환경으로 작성되기 때문에 사용, 호환성! Docker 관련 용어들 Docker Image ㄴ Dockerfile ㄴ 이미지를 만들기 위한 파일 (DSL), 그냥 text파일이지만 구성되는 요소들이 많음 ㄴ 하나의 앱을 만들었다고 가정하고 이를 하나의 스냅샷과 같은 이미지를 만드는 것, dockerizing 라고 부름! Docker Container ㄴ ..

06/15 49일차 개발환경 구축을 위한 Docker & K8s (4)

Docker Compose 주요 메모 사항 .dockerignore란? .gitingnore와 같은 것 Image build 할 때 추가하지 말아야할 파일들이나 폴더 지정 앞서 살펴봤던 voting-application의 경우 dockerignore의 내용은 다음과 같음 (근데 gitignore로 되어 있다) 이외에 고려해볼만한 내용들은? Dockerfile에서 COPY 명령 실수로 불필요한 파일 혹은 민감한 정보가 들어있는 파일들이 이미지로 들어가는 걸 막으려면 COPY 명령을 처음이나 파일이나 폴더별로 일일이 적어주는 것이 좋을 수 있음. ㄴ>그러면서 .dockerignore의 내용 보강 맥에서 발생하는 port 5000 에러 (필자는 우분투라서 문제가 없었음) 맥에서 Container에 port 5..

06/14 48일차 개발환경 구축을 위한 Docker & K8s (3)

Docker Compose 주요 메모 사항 Docker 명령 정리 Image 관련 - 빌드명령어, 아키텍처를 --platform 옵션으로 설정 docker build --platform=linux/amd64 -t name/hangman - 목록 docker images docker image ls - 이미지 삭제 docker rmi docker image rm Docker Hub 관련 - git과 같은 명령 docker login -u 사용자ID -p 사용자PW docker pull name/hangman docker push name/hangman Container 관련 - 리눅스명령어와 거의 동일하다 docker create docker run --name -p -v 이미지이름 docker ps do..

06/13 47일차 개발환경 구축을 위한 Docker & K8s (2)

Docker, Github Actions 주요 메모 사항 웹 서비스를 Docker로 실행해보기 Hangman 웹서비스를 Github을 통해 Docker Image로 Docker Hub에 업로드 이 챕터를 위해 필요한 것들 Github 계정 Docker Hub 계정 Docker가 설치된 컴퓨터 본인 Github 계정 아래 존재하는 hangman repo - https://github.com/learndataeng/hangman_web 를 포크 -> 이에 대해 별도로 설명하고 이 repo에 Dockerfile을 추가해볼 예정 웹서비스를 Docker로 구동해보는 전체 과정 익히기 hangman_web이라는 repo의 main에 코드가 머지될 때마다 다음을 수행 1. 테스트 수행 2. Docker Image 빌..

06/12 46일차 개발환경 구축을 위한 Docker & K8s (1)

학습 주제 주요 메모 사항 먼저 Airflow 운영상의 어려움을 설명 관리해야하는 DAG의 수가 100개를 넘어간다면? 데이터 품질이나 데이터 리니지 이슈 이외에도 다양한 이슈들이 발생 어떤 이슈들이 있을까? - 라이브러리 충돌 - Worker의 부족 - Worker 서버들의 관리와 활용도 이슈 1. 라이브러리 충돌 라이브러리/모듈의 충돌 이슈가 발생하기 시작함 DAG에 따라 실행에 필요한 라이브러리/모듈이 달라지기 시작 - 예) Python 버전 이로 인해 DAG 혹은 Task별로 별도의 독립공간을 만들어주는 것이 필요 - Docker to the rescue - Dag 혹은 Task 코드를 Docker Image로 만들고 이를 독립된 공간(Docker Container)안에서 실행 2. Worker의..

[회고록] 프로그래머스 데브코스-데이터 엔지니어, 9주차를 마치고

후기 7주차 데이터 웨어하우스 관리와 고급 SQL과 BI 대시보드, 8주차 프로젝트, 9주차 Airflow 를 진행했다. 7주차에는 Redshift, Snowflake 등 웨어하우스 서비스들을 사용했고 Superset 등 BI 대시보드 툴을 사용했다.이 당시에는 수업을 제대로 이해하지 못했던 것 같다. raw_data 이나 analytics 테이블 등 왜 이런 테이블들이 필요한지 등에 대해서 의문을 가졌었고 뭔가 개념만 아 그렇구나 하고 넘어갔던 것 같음. 8주차 세미 프로젝트에서 정말 많은 것을 경험한 것 같다. 먼저 지금까지 배워왔던 스킬들을 사용할 수 있었는데, 기존에 ETL, ELT, 아키텍처 등에 대한 추상적인 개념만 가지고 있었지 이게 뭐냐고 물어보면 설명하기 어려운? 느낌으로 이해하고 있었다..

06/09 45일차 데이터 파이프라인과 Airflow (5)

OLTP, Backfill, ELT 주요 메모 사항 전날 숙제 리뷰 2번째 프로젝트를 진행하면서 Cloud Functions와 Cloud Scheduler를 사용했던 것이 Airflow를 이해하는데 크게 도움이 된 것 같다. -> MAX님이 주신 Airflow 관련한 숙제를 푸는데 어려움이 없었음 MySQL(OLTP) 테이블 -> Redshift(OLAP) 테이블로 복사하기 - S3 connection 세팅들이 필요함, 보통 권한 등 -> IAM 다룰것 - airflow쪽에서 mysql쪽에 대한 엑세스도 필요 그럼 AWS 관련 권한 설정을 보자 - Airflow DAG에서 S3 접근 을 위한 권한 -> 이는 쓰기 권한 a. IAM User를 만들고 S3버킷에 대한 읽기/쓰기 권한을 설정, access k..

06/08 44일차 데이터 파이프라인과 Airflow (4)

Airflow, DAG, Backfill 주요 메모 사항 숙제 리뷰 airflow.cfg 1. DAGs 폴더는 어디에 지정되는가? 기본적으로는 Airflow가 설치된 디렉토리 밑의 dags 폴더가 되며 dags_folder 키에 저장됨 2. DAGs 폴더에 새로운 Dag를 만들면 언제 실제로 Airflow 시스템에서 이를 알게 되나? 이 스캔 주기를 결정해주는 키의 이름이 무엇인가? dag_dir_list_interval (기본값은 300 = 5분) 3. 이 파일에서 Airflow를 API 형태로 외부에서 조작하고 싶다면 어느 섹션을 변경해야하는가? api 섹션의 auth_backend를 airflow.api.auth.backend.basic_auth로 변경 4. Variable에서 변수의 값이 encr..

06/07 43일차 데이터 파이프라인과 Airflow (3)

DAG 주요 메모 사항 Hello World 예제 MAX님 소스코드 링크 Operators - PythonOperator from airflow.operators.python import PythonOperator load_nps = PythonOperator( dag=dag, task_id='task_id', python_callable=python_func, params={ 'table': 'delighted_nps', 'schema': 'raw_data' }, ) def python_func(**cxt): table = cxt["params"]["table"] schema = cxt["params"]["schema"] ex_date = cxt["execution_date"] # do what you..