전체 글 39

얼마남지 않은 2023년에 대한 다짐과 반성

작년 11월에 그토록 원하던 이직을 했다. 이직을 하면서 느낀 점이 정말 많아 기록으로 남겨둬야지 했는데 이제는 그 느낌만 남아있다. 다 내가 게으른 탓이다. 어쨌든 서비스 회사의 데이터 엔지니어로 이직을 했다. 올해 초 까지는 새 직무 새 회사에 적응하느라 정신이 없었고, 적응을 하고서는 여러 업무를 쳐낸다고 정신이 없었다. 그리고 주변 환경이 많이 바뀌었고 바꿨다. 5월 부터 7월까지는 그동안 바빴던 것에 대한 보상심리가 들었는지 그냥 놀았다. 하루도 안빼고 술을 마셨던거 같기도 하다. 원래 술을 먹는 빈도가 네다섯달에 한번 맥주 한잔 마시는 정도였는데 주량도 예전 20대 초반 만큼이나 늘어난 것 같다. 논 만큼 뒤쳐진 것 같고 좀 많이 허무하다. 올해의 키워드는 허무함인 것 같다. 벌써 두 달 정도..

회고 2023.09.02

프로그래머스 데이터 엔지니어링 스터디 9기 수강 후기

https://school.programmers.co.kr/learn/courses/14783 [스터디/10기] 실리콘밸리에서 날아온 데이터 엔지니어링 스타터 키트 with Python 🎁 아쉽지만 10기는 마감되었어요. 11기 오픈 알림 신청하고 최저가에 수강하세요! 오픈 알림 신청 데이터 엔지니어링을 시작하려는 모두에게 자신있게 추천하는 첫 스텝 : 실리콘밸리에서 날아 school.programmers.co.kr 1. 신청 계기 올해 초 직무 전환 이직을 결심했다. 당시에는 정말 'ML/DL 엔지니어나 데이터 분석가만 아니면 된다' 하며 이것 저것 닥치는 대로 공부를 했다. 스프링 백엔드도 조금 공부했다가 사이드 프로젝트를 기획하며 플러터를 공부하기도 했다. 여러 개발 블로그들을 구경하곤 하는데 그러..

[6주차] Airflow 심화학습

9. Airflow Deepdive 2 scheduler : 특정 DAG를 정해진 시간에 실행 task : 실행해야 할 코드 멱등성을 고려하도록 하는 job은 ETL에서 L의 역할에 좀더 가까움 ETL과 ELT의 차이 ETL : 하나의 데이터 파이프라인(하나의 DAG) ELT 아키텍처에 가까운 용어 데이터를 소비하는 패턴. summary table을 만듦. 처리하는 데이터가 큼. ETL을 통해 적재된 데이터를 묶어 새로운 정보를 만들어내는 패러다임 여러 소스에서 데이터를 추출해 데이터 레이크를 형성(Load) 이후 Transform 일단 Load를 해두기 때문에 정형, 비정형 데이터 모두 보관을 할 수 있음 이후에 필요한 데이터만 뽑아서 사용할 수 있기 때문에 처리를 함에도 용이 클라우드 스토리지 시스템..

[5주차] Airflow 소개

8. Airflow Deepdive start_date DAG의 처음 실행 시간이 아님 Incremental update를 구현한다고 가정했을 때 처음 읽어와야하는 데이터의 날짜 Airflow는 DAG를 Incremental update로 가정함 daily job이라면 start_date + 하루 가 실제 DAG의 첫 실행시간 hourly job이라면 start_date + 한시간 이 첫 실행시간 → schedule interval로 결정 start_date + 실행주기가 처음 실행시간이 됨 execution_date full refresh를 할 때는 중요하지 않음. incremental update를 할 때 중요 airflow가 제공해주는 시스템 변수로 읽어와야할 데이터의 날짜와 시간이 들어옴 한번 구..

[4주차] ETL(Extract, Transform and Load)과 Airflow

7. ETL/Airflow 소개 Spark/Athena 사용 시나리오 Spark나 Athena를 쓰는 경우는 대부분 데이터가 비구조화 데이터인 경우 or 데이터 사이즈가 큰 경우 (ex. 사용자 이벤트 데이터) 데이터 웨어하우스의 스토리지는 비쌈 → 값이 싼 스토리지에 먼저 저장 (데이터 레이크) 데이터 레이크 : 스토리지 가격이 싸서 비구조화 데이터를 저장하기 좋음 데이터 웨어하우스 : 스토리지 가격이 비싸 구조화된 데이터 위주로 저장 Athena : SQL로 데이터들을 처리 Spark : Pandas의 데이터 프레임처럼 처리할 수도 있고 SQL 형태로 처리할 수도 있음 Athena/Spark -> 큰 데이터를 Adhoc하게 사용할 수 있게함 ML Model에 필요한 input을 동적으로 계산할 수도 ..

Airflow 설치하기 (맥 로컬에 설치)

1. Mac 사양 에어플로우를 설치할 Mac의 사양은 다음과 같다. 2. Airflow 공식 문서 https://airflow.apache.org/docs/apache-airflow/stable/start/local.html Python3만 지원하며 pip만 가능 Poetry나 pip-tools는 지원하지 않는다. 기본경로는 ~/airflow 를 권장한다. 위의 순서대로 설치를 진행하려 한다. 3. 설치 문서에 나온 순서대로 다음과 같이 환경변수를 설정해준다. 파이썬 버전은 3.7 버전을 사용했다. export AIRFLOW_HOME=~/airflow AIRFLOW_VERSION=2.3.4 PYTHON_VERSION="$(python --version | cut -d " " -f 2 | cut -d "...

[3주차] 데이터 엔지니어링을 위한 SQL

6. SQL for Data Engineers Summary Table을 만드는 방식 : DBT(다양한 형태의 정보를 재조직)라는 기술을 많이 사용하는 추세. 이 과정을 Analytics Engineering 이라고도 함. Count 퀴즈 value NULL 1 1 0 0 4 3 SELECT COUNT(1) FROM count_test -> 7, 인자로 들어가는 값이 NULL이어도 count, 레코드의 개수를 세는 쿼리 SELECT COUNT(value) FROM count_test -> 6, NULL 이외의 값 count SELECT COUNT(DISTINCT value) FROM count_test -> 4 인자로 주어진 값이 NULL인 경우 카운트 하지 않음. NULL인 경우 하나씩 카운트 SQL의..

[2주차] Cloud & AWS 그리고 Redshift

3. 데이터 엔지니어의 일주일 4. Cloud & AWS 간단 소개 CAPEX : 비용을 정하고 비용안에서 일괄 구매한 후에 시스템을 운영 OPEX : 필요할 때마다 빌려서 사용하고 비용을 지불 S3 → 데이터를 loss 하지 않을 확률에 따라 가격이 달라짐 5. Redshift 소개 Data Warehouse Deep Dive Data Warehouse : a seperate SQL database 데이터 웨어하우스 - 구조화된 데이터를 처리하는 데 최적화 → SQL 기반의 관계형 데이터베이스 (데이터가 커도 처리가 되는) - Redshift (고정비용방식), Snowflake, Bigquery (가변비용방식) OLAP - 데이터 웨어하우스는 OLAP - 별도로 존재하는 DB - 속도보다 크기가 중요 ..

[1주차] 데이터 조직이란 무엇일까?

1. 데이터 팀의 역할 소개 Data Flow 0. Site traffic & 3rd party data Production database 사용자들이 사용하면서 다양한 데이터가 만들어짐 내외부에 있는 데이터를 수집해서 데이터 웨어하우스에 저장하고 관리 1. Data Team 데이터 엔지니어는 데이터를 한 곳으로 수집해야 함 데이터 엔지니어팀이 인프라를 만들고 관리함 → 데이터 인프라의 핵심은 데이터 웨어하우스 데이터 웨어하우스 → 관계형 데이터베이스, 회사에서 필요한 내외부 데이터를 수집해서 저장하는 저장소 데이터 웨어하우스를 만들고 관리하는 것이 데이터 엔지니어의 책임 ETL 프로세스를 만들어야 함 2. Business Insights 중요 지표를 데이터를 기반으로 정리하고 대쉬보드로 시각화 회사 ..

[Effective Python] Better way 10. 대입식을 사용해 반복을 피하라

Better way 10. 대입식을 사용해 반복을 피하라 fresh_fruit = { 'apple': 10, 'banana': 8, 'lemon': 5, } def make_lemonade(count): print(f'Making {count} lemons into lemonade') def out_of_stock(): print('Out of stock!') count = fresh_fruit.get('lemon', 0) if count: make_lemonade(count) else: out_of_stock() 위 코드에서 count 변수는 if 문의 첫 번째 블록 안에서만 쓰인다. if 앞에서 count를 정의하면 else 블록이나 그 이후의 코드에서 count 변수에 접근해야 할 필요가 있는 것 ..

Language/Python 2022.08.23