어제에 이어 Airflow를 학습할텐데 설치 및 코딩 실습을 진행해보고자 한다.
데이터 전송 과정에서 중간에 실패하게 되면 ROLLBACK을 진행해야 하는데 이때 데이터 정합성이 깨질 수 있는 문제를 개선하고자 하는 방법.
즉, 원자성을 보장하며 실행되어야 하는 SQL을 묶어서 하나의 작업처럼 처리하는 방법이다.
종류로는 2가지가 있는데 아래와 같다.
1. autocommit = True
-> 모든 SQL문이 바로 물리 테이블로 커밋되며, 이를 바꾸고자 한다면 BEGIN;END; 또는 BEGIN;COMMIT; 또는 ROLLBACK을 사용한다.
2. autocommit = False
-> 모든 SQL문이 커밋되지 않으며 모두 스테이징 상태로 존재한다. 커넥션 객체의 .commit()과 .rollback()을 통해 커밋할지 말지 결정한다.
+) try, except 문 사용 시엔 except 뒤에 raise 사용하여 에러 여부 판단할 것.추가적인 내용은 아래 링크를 참고하자! (기존에 학습한 내용)
Transaction Isolation Level
< 추가 사항 >
오케스트레이션 (Airflow)로 자동화 트리거로부터 자동화 -> 관리 측면에서 유연함
AWS - Step function VS Airflow
직접 설치방법은 다음과 같다.
1. laptop에 도커 설치 후 Airflow 설치
2. AWS EC2 등 리눅스 서버에 직접 설치윈도우 환경에서 리눅스 사용하는 방법.
cmd에서 wsl --install로 현재 가장 최신 버전인 wsl2를 설치해준다.
wsl이란 리눅스용 윈도우 하위 시스템으로 윈도우 환경에서 리눅스 환경 실행이 가능한 즉, 파일 사용이 가능하도록 만든 호환성 계층이다.
풀네임을 보면 Windows Subsystem for Linux로 기존 VM, 듀얼뷰팅 없이 대부분의 Linux 명령줄 도구, 유틸리티 및 애플리케이션을 윈도우에서 실행할 수 있게 해주는 도구이다.리눅스를 써본적이 아예 없으니.. 아래 리눅스 관련 용어를 이해하고 가자.
Ubuntu : 리눅스 타입 중 하나
ssh : 리눅스 혹은 유닉스 서버에 로그인해주는 프로그램 (터미널), private key, public key 사용
sudo : 보통 슈퍼유저로서 프로그램을 구동할 수 있도록 하는 프로그램
apt-get : Ubuntu/데비안 계열의 리눅스에서 프로그램 설치/삭제를 관리해주는 프로그램
su : substitue user의 약자로 현재 사용중인 사용자 계정을 로그아웃하지 않고 타 사용자 권한 얻을 때 사용
vi : 텍스트 에디터, https://withcoding.com/112실습에 사용할 Airflow는 2.5.1을 설치할 것이고 다음과정을 거칠 예정이다.
- Airflow 메타DB로 로컬 서버에 Postgres 설치 예정
- Airflow는 /var/lib/airflow/ 밑에 설치됌
- Airflow 서버에 총 3개의 account 사용 (ubuntu(메인-슈퍼유저), postgres(해당 계정으로 postgres 설치 및 액세스), airflow (Airflow 전용 어카운트))
docker란 컨테이너화된 응용 프로그램을 개발, 배포 및 실행하기 위한 오픈 소스 플랫폼이다.
여기서 컨테이너란 SW를 패키징하고 그 패키지를 실행할 수 있는 독립적인 단위를 의미한다.윈도우 환경에서 docker 설치 : 링크텍스트
docker를 설치하게 되면 docker desktop이 실행되는데, docker desktop을 통해 다음 기능을 수행할 수 있다.
1. 컨테이너 관리 (가상환경을 생성하고 삭제하는 등의 관리를 통해 애플리케이션과의 종속성을 격리해 실행할 수 있다)
2. 이미지 관리 (이미지란 컨테이너 실행에 필요한 파일과 설정을 포함하는 template)
3. 리소스 관리 (호스트 시스템의 리소스를 효율적으로 사용하고 필요에 따라 CPU, 메모리 할당량 조절 가능)
윈도우에서의 예시)[wsl2] # 메모리 8GB 정도면 안정적, 프로세서 할당, swap 여부 등 wslconfig 파일을 코드로 실행 memory=8GB processors=2 swap=0
- 네트워킹 (컨테이너 간 고유 IP를 할당해 네트워크 통신 관리)
- 볼륨관리 (컨테이너 별 데이터를 컨테이너 내부, 호스트 시스템과 공유할 수 있는 볼륨 가짐)
- 디버깅 및 로깅 (컨테이너 내부의 애플리케이션 로그를 캡처하고 볼 수 있는 기능 제공)
- 개발 환경 통합 (다양한 개발 도구, IDE와의 통합으로 원활한 개발 환경 제공 가능 ex) vscode, Eclipse etc.)