Airflow ETL 환경 구축
2025. 10. 8. 11:58ㆍ카테고리 없음
* uv 기반 가상환경 사용
도커 환경 (MySQL)
docker run -d \
--name airflow-mysql \
-e MYSQL_ROOT_PASSWORD=0000 \
-e MYSQL_DATABASE=airflow_db \
-e MYSQL_USER=airflow \
-e MYSQL_PASSWORD=airflow_pass \
-p 3306:3306 \
mysql:8.0
MySQL 예제 쿼리 및 데이터 입력
CREATE TABLE users (
user_id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
country VARCHAR(50)
);
INSERT INTO users (user_id, name, age, country) VALUES
(1, 'Alice', 25, 'US'),
(2, 'Bob', 32, 'KR'),
(3, 'Charlie', 29, 'JP'),
(4, 'David', 40, 'US'),
(5, 'Eunji', 27, 'KR');
위 docker run 명령어로 MySQL 8.0 컨테이너를 생성하고, 예제 쿼리로 users 테이블과 샘플 데이터를 구성했습니다.
ETL_Project
[ETL_tutorial GitHub 바로가기]
(https://github.com/Jindongleee/ETL_tutorial#etl_project)
Extract(운영DB, 데이터포털, SNS) → Transform(Pandas, Spark ML, Spark, Hadoop) → Load(S3, AWS Redshift, GCP BigQuery, HBase) 사용예정
airflow 보안 이슈 .env 사용
cd [project 위치]
export $(cat .env | xargs) # airflow.cfg 파일 lite 버전 덮어씌우기 위함
airflow db migrate
airflow api-server --port
airflow triggler
airflow dag-processor
- 반드시 가상환경과 파일이 ~/airflow/dags 에 존재해야 함(감시 위치)
- 위 명령어 안쓰고 airflow standalone 일단 사용 예정
Flow
-- Airflow --
Mysql dump → transform (pandas) → load to s3 → copy s3 to redshift
Airflow Connection 설정
Mysql_default
(docker create → mysql, MacOS/Ubuntu → default IPv6 따라서 localhost가 아닌 IPv4 127.0~로 설정)
- host: 127.0.0.1
- port: 3306
- db: ariflow_db
AWS_S3_default, IAM (AmazonS3FullAccess 생성)
- AWS Access Key ID = IAM Access Key
- AWS Secret Access Key = IAM Secret Key
- 추가 필드 JSON:
{ "region_name": "ap-northeast-2" }
redshift_default, IAM role 생성\\ (AmazonS3ReadOnlyAccess, 퍼블릭 모드로 전환 필요)
- host: redshift 작업그룹 엔드포인트
- User: 네임스페이스 user
- pwd: 네임스페이스 작업 토글 관리자 보안
- port: 5439
- db: 네임스페이스 DB 이름
- 추가 필드 JSON:
{ "sslmode": "require" }
결과 Redshift → query editor v2

*다음 시간에는 Transform을 Transform에 대해 자세히 다뤄보도록 하겠습니다
\ 질문에 답변 달아드립니다!