홍카나의 공부방

[DE 데브코스] 06.04 TIL - 트랜잭션과 Airflow 설치 본문

Data Engineering/프로그래머스 데브코스

[DE 데브코스] 06.04 TIL - 트랜잭션과 Airflow 설치

홍문관카페나무 2023. 6. 4. 14:35

DELETE FROM vs TRUNCATE

  • 분명 DROP까지 포함해서 삭제 쿼리문들의 차이점을 정리해놨었는데, 트랜잭션에서 레코드를 다 날려버릴 때 왜 DELETE를 쓰지? 잠시나마 고민했었다. 생각해보니 TRUNCATE가 auto commit이 되는 명령어라 트랜잭션을 이용하기 어렵겠구나하는 판단이 들었다.
  • https://hongcana.tistory.com/102 정리본을 다시 읽어보자..
 

[데이터베이스] 삭제 : DELETE vs DROP vs TRUNCATE

데이터베이스 삭제 명령어 DELETE, DROP, TRUNCATE 모두 DB에서 객체를 삭제하는 데 사용하는 명령어다. 하지만 각각의 명령어는 세세한 차이점을 가지고 있다. DELETE DELETE 문은 테이블에서 특정 레코드

hongcana.tistory.com

 

트랜잭션에서 try/except를 사용할때 주의점

try:
    cur.execute(sql)
    cur.execute("COMMIT;")
except:
    cur.execute("ROLLBACK;")
    raise
  • 위 코드 처럼 except에서 raise를 호출하면 발생했던 exception이 상위 코드로 전파된다. 
  • 즉, 예외 처리를 더 상위 레벨에서 수행할 수 있게 한다.
  • ETL을 관리하는 입장에서 어떤 에러가 감춰지는 것보다는 명확하게 드러나는 것이 좋다.

 

Airflow Setup

  • 직접 설치하고 운영하는 방법과 AWS의 MWAA처럼 클라우드를 사용하는 방법이 있다.
  • 클라우드는 기본적으로 서버 3대를 돌리기 때문에 비용 부담이 생긴다. 그래서 직접 설치하여 사용해 보겠다.
  • 직접 설치는 개인 컴퓨터에 Docker를 설치한 뒤에 Airflow를 설치하는 방법을 사용할 수 있다.

 

리눅스 이해하기

  • 우분투(ubuntu) : 리눅스 타입 중의 하나로, 다른 타입은 데비안, 레드햇, 페도라 등이 있다.
  • ssh : private key와 public key를 이용하여 리눅스 혹은 유닉스 서버에 인증을 가능케 하는 프로그램(터미널)이다.
  • sudo : 보통 슈퍼유저로서 프로그램을 구동할 수 있도록 하는 프로그램이다.
  • apt-get : 우분투/데비안 계열의 리눅스에서 프로그램 설치/삭제를 관리하는 프로그램이다. ( apt-get install... )
  • su : substitute user의 약자로 현재 사용 중인 사용자 계정을 로그아웃하지 않고, 다른 사용자의 권한을 얻을 때 사용한다.
  • vi : 리눅스 계열에서 사용하는 텍스트 에디터다.

 

Airflow 설치 과정(using Docker)

  1. 먼저 Docker Engine을 각자 컴퓨터에 설치한다.
  2. Docker를 실행하고 설정 메뉴에서 메모리 할당 부분을 맥은 4GB, 윈도우 6GB로 부여한다.
  3. 터미널 프로그램을 실행하고 airflow를 설치할 적당한 폴더로 이동한다.
  4. airflow-setup Github repo를 클론한다.
  5. cd airflow-setup 이후, 2.5.1 이미지 관련 yaml 파일을 다운로드한다.
  6. docker-compose 명령을 수행하여 이미지 다운로드와 컨테이너를 실행한다.
  7. 로컬호스트 8080번 포트로 들어가서 airflow:airflow를 계정으로 입력하여 접속하면 되는데, 추후 이게 인터넷 환경으로 배포될 경우, 계정 정보를 꼭 보안 측면에서 변경해줘야 한다.

docker 정보

  • 설치가 정상적으로 완료되었다면 위 사진과 비슷하게 Container 정보가 나올 것이다. init 프로세스가 비활성화 되어있는데, init은 초기화를 위한 프로세스로 본인 역할이 끝나서 실행되지 않는 것이다.

 

Airflow 기본 프로그램 실행

  • airflow 코드의 기본 구조는 DAG를 대표하는 객체를 먼저 만들고, DAG를 구성하는 태스크들을 만들면 된다.
  • 태스크를 만들 때는 태스크별로 적합한 오퍼레이터를 선택하고, 태스크 ID를 부여하고 해야할 작업의 세부사항을 지정한다.
  • 최종적으로는 태스크들 간의 실행 순서를 결정하면 된다.
  • DAG를 설정할 때는 먼저 모든 태스크들에 공통으로 적용되는 설정을 default_args라는 딕셔너리로 만들어준다.
from datetime import datetime, timedelta

default_args = {
    'owner': 'hongcana',
    'email': ['hongcana@kakao.com'],
    'retries': 1,
    'retry_delay': timedelta(minutes=3),
}
  • 그다음 실제로 DAG를 만들면 된다.
from airflow import DAG

dag = DAG(
    "dag_v1", # DAG name
    start_date = datetime(2020,8,7,hour=0,minute=00),
    schedule = "0 * * * *",
    tags =['example'],
    catchup=False,
    # common settings
    default_args = default_args
 )
  • 위 코드에서 Catchup은, start_date와 현재 date 간의 간격이 있을 때 그 간격을 메꾸느냐, 메꾸지 않느냐를 정의할 때 사용한다.
  • 현재는 False니까 그 간격을 메꾸지 않겠다는 뜻이 된다. 예를 들어 Full refresh를 한다고 했을 때 과거와의 시간 간격을 맞출 필요는 없기 때문에 False로 설정하는 것이다.
  • schedule은 각각 Minute, Hour, Day, Month, Week인데 크론 익스프레션으로 None, @once, @hourly.. 로 작성할 수도 있다.

DAG 상세 정보

  • 웹 UI를 통해서 DAG의 여러 정보를 살펴볼 수 있다.
  • 커맨드 라인의 실행은 다음의 게시글을 참조한다.
  • https://hongcana.tistory.com/118
 

[Airflow] CLI에서 Docker Airflow 로그인

Docker에 설치되어 있는 Airflow에 로그인하는 방법을 살펴본다. 전제가 Docker 기반 Airflow임에 유의한다. EC2에 설치된 Airflow나 MMWA의 방법과는 다를 수 있다. 정확하게는 Airflow Scheduler 안으로 로그인

hongcana.tistory.com

 

반응형