curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.5.1/docker-compose.yaml'
해당 명령어를 사용해 주면 docker-compose.yaml의 기본 파일을 끌고 올 수 있다.
_PIP_ADDITIONAL_REQUIREMENTS
environment
구성 중 _PIP_ADDITIONAL_REQUIREMENTS: ${_PIP_ADDITIONAL_REQUIREMENTS:- }
를 수정해 준다. -
뒤에 docker 실행 시 다운로드 받을 모듈들을 입력해 준다.-
는 _PIP_ADDITIONAL_REQUIREMENTS
가 존재한다면 이 환경 변수의 내용을 사용해 주고 이 환경 변수의 내용이 존재하지 않는다면 Container가 실행될 때 -
뒤에 있는 모듈들을 환경 변수로 사용하라는 뜻이다. _PIP_ADDITIONAL_REQUIREMENTS: ${_PIP_ADDITIONAL_REQUIREMENTS:- yfinanace pandas numpy oauth2client gspread}
volumes
- ${AIRFLOW_PROJ_DIR:-.}/data:/opt/airflow/data
해당 내용을 추가해 준다. airflow-init
부분도 수정이 되어야 하는데 data
부분을 추가해 주어야 한다.mkdir -p /sources/logs /sources/dags /sources/plugins/sources/data
chown -R "${AIRFLOW_UID}:0" /sources/{logs,dags,plugins, data}
docker compose up -d
-d
옵션 사용 시 detach 모드로 실행된다.-f
로 지정해 주어야 한다.docker exec -it airflow_scheduler_container_name airflow variables get DATA_DIR
Webhooks
을 생성하면 Sample Url이 나오게 된다.curl -X POST -H 'Content-type: application/json' --data '{"text":"Hello, World!"}' https://hooks.slack.com/services/slack_link_endpoint
WebHook
생성 시 나온 Endpoint 주소를 slack_url
이라는 Variable로 저장한다.on_failure_callback
에 slack 호출을 해 준다.dag = DAG(
dag_id = 'name_gender_v4',
start_date = datetime(2023,4,6), # 날짜가 미래인 경우 실행이 안됨
schedule = '0 2 * * *', # 적당히 조절
max_active_runs = 1,
catchup = False,
default_args = {
'retries': 1,
'retry_delay': timedelta(minutes=3),
'on_failure_callback': slack.on_failure_callback, #slack_callback 호출
}
)
docker-compose.yml
파일 아래서 정의된다.docker-compose.yml
이 어디에 저장되느냐에 따라 관리 포인트가 달라지게 된다.image: ${AIRFLOW_IMAGE_NAME:-}
dags_folder
가 가리키는 폴더를 서브 폴더들까지 다 스캔해서 DAG 모듈이 포함된 모든 파이썬 스크립트를 실행해 새로운 DAG를 찾게 되며 이로 인해 가끔 사고가 일어난다.Airflow
에서 무시해야 하는 것들을 DAG_FOLDER
의 디렉터리 혹은 파일 지정한다.정규식 패턴
으로 지정하며 매칭되는 파일들은 무시된다.환경 설정 중심의 접근 방식으로 config 폴더를 생성하고, 그 안에 summary 테이블별로 하나의 환경 설정 파일을 생성한다.
다양한 테스트를 추가할 수 있고 비개발자들이 사용할 때 어려움을 덜 느낄 수 있다.
input_check
: sql 구문을 돌렸을 때 count보다 큰지 작은지 확인하는 것
output_check
: sql 구문을 돌렸을 때 count보다 크거나 같은지 확인 (크거나 같으면
#config/nps_summary.py
{
'table': 'nps_summary',
'schema': 'ssong_ji_hy',
'main_sql': """
SELECT LEFT(created_at, 10) AS date,
ROUND(SUM(CASE
WHEN score >= 9 THEN 1
WHEN score <= 6 THEN -1 END)::float*100/COUNT(1), 2)
FROM ssong_ji_hy.nps
GROUP BY 1
ORDER BY 1;""",
'input_check':
[
{
'sql': 'SELECT COUNT(1) FROM ssong_ji_hy.nps',
'count': 150000
},
],
'output_check':
[
{
'sql': 'SELECT COUNT(1) FROM {schema}.temp_{table}',
'count': 12
}
],
}
control
: 현재 버전test
: 새 버전Fake Door Testing
Impressions
의 수를 줄이는 영향이 있는 게 아니라면 통계적으로 동일해야 하는데 이 부분이 다르다면 실험 자체에 문제가 있는지 의심해 보아야 한다.User size
에서는 보통 둘의 크기가 통계적으로 동일하기를 바라며 그게 아니면 테스트 설정에 무엇인가 잘못된 게 있음을 확인할 수 있다. 총 10 개월 (타임라인)
먼저 A/B TEST 시스템 구축
다음으로 A/A 테스트 수행 (검증 용도)
총 20 번의 A/B 테스트를 통해 ML 기반 추천 엔진 론치
A/B TEST의 성격에 따라 USER_ID(로그인을 한 사용자)를 사용할지 DEVICE_ID(모든 사용자, 브라우저에 쿠키를 심음)를 사용할지 결정해야 한다.
주어진 트래픽을 A 혹은 B로 나눈다. 이때 트래픽을 임의의 숫자로 표현해서 숫자 나머지 연산을 수행해서 나눌 수도 있고