본문 바로가기

오탈자 정보

[Apache Airflow 기반의 데이터 파이프라인]_오탈자

현재까지 발견된 이 책의 오탈자 정보와 오류를 안내합니다. 번역과 편집 시에 미처 확인하지 못하고 불편을 끼쳐드려 죄송하다는 말씀을 드립니다. 아래의 오탈자 사항은 추후 3쇄 시에 반영하도록 하겠습니다.

 

이외의 오탈자 정보를 발견하시면 옮긴이(jeongmin@gmail.com)나 출판사(help@jpub.kr)로 연락주시면 고맙겠습니다. 

 

최종수정일자: 2024년 4월 29일 
2쇄본 오탈자

12쪽 본문 2번째 줄에서(LDesire 님 제보)

개념적으로 스케줄러는 다음과 단계를 통해

⇒
개념적으로 스케줄러는 다음 단계를 통해

 

12쪽 3번 항목 2번째 줄에서(LDesire 님 제보)

의존성 태스크가 완료되지 않았다면 실행 대기열에 추가합니다.

⇒
의존성 태스크가 완료되었다면 실행 대기열에 추가합니다.

 

31쪽 리스트 2.10 '도커에서 Airflow 실행하기'의 1~2번째 행에서(유영기 님 제보)

docker run \

docker run -it -p 8080:8080 \  호스트에 8080 포트 개방

⇒
docker run -it \

       -p 8080:8080 \  호스트에 8080 포트 개방

 

40쪽 끝줄에서(LDesire 님 제보)

DAG 안의 있는 태스크는 어디에 위치하든지 재시작할 수 있습니다.

⇒
DAG 안에 있는 실패한 작업은 어디에 위치하든지 재시작할 수 있습니다.

 

41쪽 본문 5번째 줄에서(LDesire 님 제보)

다음으로, 데이터 분석에 대해 점전적인 접근 방법을 확인하고

⇒
다음으로, 데이터 분석에 대해 점진적인 접근 방법을 확인하고

 

42쪽 리스트 3.1 '(예약 안 된) 이벤트 DAG의 버전 초기화' 1~2번째 행에서(LDesire님 제보: 'dt' 위치 변경)

import datetime as
dt from pathlib import Path

⇒
import datetime as dt
from pathlib import Path

 

43쪽 리스트 3.1 '(예약 안 된) 이벤트 DAG의 버전 초기화' 8번째 행에서(LDesire님 제보: 'https'가 아니라 'http')

"https://localhost:5000/events"

⇒
"http://localhost:5000/events"

 

44쪽 그림 3.1 설명 1번째 줄에서(LDesire님 제보)

DAG가 시작일은 2019-01-01

⇒
DAG의 시작일은 2019-01-01

 

44쪽 2번째 노트 삭제(LDesire님 제보: 84쪽의 노트와 내용상 중복되어 삭제)
Jinja 사용을 위해서 템플릿화할 수있는 파일을 검색할 경로를 제공해야 합니다. 기본적으로 DAG 파일의 경로만 검색되지만 /tmp에 저장했기 때문에 Jinja가 해당 파일을 찾을 수 없습니다.
⇒
Jinja 사용을 위해서 템플릿화할 수있는 파일을 검색할 경로를 제공해야 합니다. 기본적으로 DAG 파일의 경로만 검색되지만 /tmp에 저장했기 때문에 Jinja가 해당 파일을 찾을 수 없습니다.

 

46쪽 밑에서 6번째 줄에서(LDesire님 제보)

0 0 * * MON, WED, FRI = 매주 월, 화, 금요일 자정에 실행

⇒
0 0 * * MON, WED, FRI = 매주 월, 수, 금요일 자정에 실행

 

51쪽 리스트 3.7 '템플릿에서 축약어 사용하기'의 1번째 주석에서(LDesire님 제보)

ds는 YYYYMM-DD 형식의 execution_date를 제공합니다.

⇒
ds는 YYYY-MM-DD 형식의 execution_date를 제공합니다.

 

52쪽 본문 6번째 줄에서(LDesire 님 제보)

실행 날짜별로 데이터 세트를 파티션하는 이점은 DAG에서 아래 두 번째 태스크(compute_stats)

⇒
실행 날짜별로 데이터 세트를 파티션하는 이점은 DAG에서 아래 두 번째 태스크(calculate_stats)

 

58쪽 리스트 3.12 '하나의 태스크 안에서 두 개의 작업은 원자성을 무너뜨림'의 마지막 행 삭제(LDesire님 제보)

calculate_stats >> email_stats

⇒
calculate_stats >> email_stats

 

71쪽 상단 코드문 주석에서(이도엽 님 제보)

중괄호 안의 값은 로켓 발사 1회 내용을 나타냅니다

⇒
PythonOperator는 파이썬 함수를 이용해 실행하며, BashOperator는 Bash 명령을 문자열로 받아 실행합니다.

 

72쪽 리스트 4.6 'kwargs에 저장된 키워드 인수'의 주석에서(LDesire님 제보)

그리고 캡처 인수의 이름을 kwrgs에 지정합니다.

⇒
그리고 캡처 인수의 이름을 kwargs에 지정합니다.

 

74쪽 밑에서 2번째 줄에서(LDesire님 제보)

되고 다른 모든 변수는 함수 서명에서 명시적으로 정의하지 않았으므로

⇒
되고 다른 모든 변수는 함수 시그니처에서 명시적으로 정의하지 않았으므로

 

80쪽 8번째 줄에서(LDesire님 제보)

Airflow는 XCom이라는 기본 메커니즘을 제공하여 Airflow 메타스토어에서 선택 가능한

⇒
Airflow는 XCom이라는 기본 메커니즘을 제공하여 Airflow 메타스토어에서 피클링이 가능한

 

88쪽 9번째 줄에서(LDesire님 제보)

예를 들어, 2장에서 DAG를 가져오는 로켓 발사 사진(그림 5.1)은

⇒
예를 들어, 2장에서 로켓 발사 사진을 가져오는 DAG(그림 5.1)는

 

88쪽 그림 5.1 제목에서(LDesire님 제보)

2장의 메타데이터 다운로드, 사진 가져오기, 알림 전송을 위한 세 가지 태스크로 구성된 로켓 사진 가져
오기 DAG(그림 2.3과 동일)

⇒
2장의 메타데이터 다운로드, 사진 가져오기, 알림 전송을 위한 세 가지 태스크로 구성된 로켓 사진을 가져
오는 DAG(그림 2.3과 동일)

 

89쪽 밑에서 6~5번째 줄에서(LDesire님 제보)

Umbrella DAG의 주요 목적은 서로 다른 두 소스에서 매일 날씨 및 판매 데이터를 가져와서 두 데이터 세트를 데이터 세트로 결합하여 모델을 학습시키는 것이었습니다.

⇒
Umbrella DAG의 주요 목적은 서로 다른 두 소스에서 매일 날씨 및 판매 데이터를 가져와서 두 데이터를 데이터 세트로 결합하여 모델을 학습시키는 것이었습니다.

 

90쪽 리스트 5.4 '팬아웃(일 대 다) 의존성에 추가하기(dags/01_start.py)'의 1~2행에서(LDesire님 제보: "dummy module is deprecated.")

from airflow.operators.dummy import DummyOperator
start=DummyOperator(task_id="start")

⇒
from airflow.operators.empty import EmptyOperator
start=EmptyOperator(task_id="start")

 

96쪽 리스트 5.12 아랫줄에서(LDesire님 제보)

마찬가지로 두 데이터 정제 태스크를 연결은

⇒
마찬가지로 두 데이터 정제 태스크의 연결은

 

96쪽 끝줄에서(LDesire님 제보)

datasets 태스크를 건너뛰어 실행하지 않습니다(그림 5.8).

⇒
datasets 태스크를 건너뛰기 때문에 실행하지 않습니다(그림 5.8).

 

97쪽 9~10번째 줄에서(LDesire님 제보)

이를 통해 모든 상위 항목이 실행 완료 및 실패가 없을 시에 즉시 작업이 실행됩니다.

⇒
이를 통해 모든 상위 항목이 실행이 완료되고 실패가 없을 시에 즉시 작업이 실행됩니다.

 

100쪽 리스트 5.17 'DAG에서 조건부 빌드하기(dags/06_condition_dag.py)'에서(LDesire님 제보: latest_only 변수 들여쓰기 수정)

def _latest_only(**context):
...
     latest_only=PythonOperator(
          task_id="latest_only",
          python_callable=_latest_only
     )
latest_only >> deploy_model

⇒
def _latest_only(**context):
...
latest_only=PythonOperator(
     task_id="latest_only",
     python_callable=_latest_only,

     dag=dag,
)
latest_only >> deploy_model

 

102쪽 본문 1번째 줄에서(박정원 님 제보)

LastOnly

⇒
LatestOnly

 

102쪽 밑에서 4번째 줄에서(박정원 님 제보)

결론적으로 Airflow에 사용 가능한 실행 슬롯이 있는 있다면

⇒
결론적으로 Airflow에 사용 가능한 실행 슬롯이 있다면

 

124쪽 리스트 6.3 'DAG에서 최대 동시 태스크 수 설정하기'에서(LDesire님 제보: 변수명 모두 소문자로 수정)

Dag_id="couponing_app",
Start_date=datetime(2019, 1, 1),
Schedule_interval="0 0 * * *",
Concurrency=50,

⇒
dag_id="couponing_app",
start_date=datetime(2019, 1, 1),
schedule_interval="0 0 * * *",
concurrency=50,

 

129쪽 중간 코드문 제목에서(역자 제보: 끝에 마침표 삭제요망)

리스트 6.4.

⇒
리스트 6.4

129쪽 중간 코드문 1번째  주석에서(이도엽  님 제보)

dag_id는 정렬되어야 합니다.

⇒
dag_id는 일치해야 합니다.

 

134쪽 그림 6.21 캡션에서(LDesire님 제보)

schedule_intervals가 정렬되어 있지 않아

⇒
schedule_interval이 정렬되어 있지 않아