깃허브 주소

https://github.com/son-kino/goverment_check_project.git

 

GitHub - son-kino/goverment_check_project: 국회의원의 국회의원 회의 참석율과 공약이행률 확인하는 airflow

국회의원의 국회의원 회의 참석율과 공약이행률 확인하는 airflow. Contribute to son-kino/goverment_check_project development by creating an account on GitHub.

github.com

 

우선 네이버 개발자 api를 통해서 애플리케이션 api 받아오기

application을 등록 후 발급 받은 모습, 웬만하면 잘 해주는 모양이다.

 

그 다음에 가져온 api를 테스트 해본다.

.env 파일에 넣어서 외부 사용자가 보지 못하도록 보안을 처리한 다음 환경 변수로 값들을 읽어온다.

 

뉴스에 넣기 원하는 검색어를 가져와서 query={}부분에 넣어준다.

 

헤더에 넣어서 api를 요청하면 거기에 맞는 값이 나올 수 있도록 설정했다.

 

이후 검색어를 다양화하고 Elastic Search를 통해서 원하는 값들을 가져올 예정이다.

import os
import requests
from dotenv import load_dotenv

# .env 파일 로드
load_dotenv()

# 환경 변수 읽기
client_id = os.getenv("NAVER_API_ID")
client_secret = os.getenv("NAVER_API_PW")

# 검색어와 URL 설정
enc_text = "국회의원"

# 헤더 추가
headers = {
"X-Naver-Client-Id": client_id,
"X-Naver-Client-Secret": client_secret
}

# API 요청
response = requests.get(url, headers=headers)

# 응답 확인 및 출력
if response.status_code == 200:
print(response.json()) # JSON 형태로 출력
else:
print(f"Error Code: {response.status_code}")

github 주소

https://github.com/son-kino/data_pipeline_guide.git

 

GitHub - son-kino/data_pipeline_guide: 데이터파이프라인 핵심 가이드 책을 따라해본 hub

데이터파이프라인 핵심 가이드 책을 따라해본 hub. Contribute to son-kino/data_pipeline_guide development by creating an account on GitHub.

github.com

데이터 파이프라인 실습을 위한 환경을 구축한다


1번) 파이썬 환경 설정

 작년 10월, 파이썬 3.13 버젼이 나왔는데 버젼 호환성으로 인해 사용해 본 적이 없는데, 드디어 사용해볼 수 있게 되었다.
 GIL을 제외할 수 있는 기능이 있다는데 한 번 써 보는 기회가 되면 좋을 거 같다.
현재 os는 macOs라는 것을 얘기한다. 
python3 -m venv venv로 가상환경을 설정해준다.github에는 gitignore를 올려둬서 레포에서는 보이지 않을 것이다.

그 다음에 source venv/bin/activate를 사용해서 가상환경을 켜준다.
그 다음에 pip install configparser을 추가해서 config를 추가해주는 작업을 하나보다.
touch pipeline.conf를 통해 config를 설치해주는데 설정 파일이므로 gitignore에 추가하는게 좋다.

2번) 클라우드 파일 스토리지 설정

가장 유명한 클라우드 서비스에서는 AWS일것이다. 
그중에서도 현재 12개월 동안 무료로 AWS S3 버킷을 생성할 수 있다. 
이후 AWS Identity and Access Management (IAM)을 통해 외부 접근을 설정할 수 있다. 

그리고 이런 AWS S3와 상호작용하기 위해서 boto3이라는 
파이썬용 AWS Software Devloepment Kit(SDK)를 pip install boto3를 통해 가져와야 한다.

1. s3 버킷 만들기

2. IAM 권한 설정하기

IAM 사용자 설정 권한에서 직접 연결해 s3Fullaccess를 추가하면 된다.

3. 이후 액세스 키 할당 만들기

만든 IAM 사용자를 눌러보면 액세스 키 만들기가 나올 것이다.
그냥 아무거나 누르고 .config에 잘 저장하면 된다. 나는 로컬 코드를 눌러서 생성했다.

4 rds 만들기

잘 사용하는 언어로 손쉬운 생성을 언어로 하면 프리티어가 있을 것이다. 없으면 도망쳐라. 그리고 생성하고 좀 시간이 걸린다.
그럼 이렇게 켜져 있는 모습을 볼 수 있다. 안 쓸 때는 끄는게 지갑 건강에 좋다.


 +) 주의 사항

 RDS는 쓰지 않는다면 일시적으로 중지를 눌러 주도록 하자. 

무섭지만 데이터 파이프라인 핵심가이드를 따라가보기로 한다.

중지해도 아침 9시에 다시 열리니까 다시 꺼주는 귀찮은 작업을 해야할수도 있다. 아님 쿨하게 돈 내버리기?

aws 프리티어 확인

여기 적혀있는 요건을 확인하는게 언제나 좋다.

예산설정

예산 설정을 통해 돈이 0.01원이라도 나가면 메일이 가도록 설정하자

 

데이터엔지니어 취업 특강을 들으면서 python의 GIL이라는 단어를 처음 들었다.


python은 Global Interface Lock이 있어서 특정 시점에 싱글 스레드만 사용 가능하도록 제한하는 기능이다.

 

GIL은 파이썬의 코드를 여러 개의 스레드가 동시에 읽지 못하도록 만든다.

 

그 이유가 뭐냐면, 파이썬은 참조를 통해 변수에 id를 준다. 다른 언어는 변수에 값에 주소를 줘서 할당한다.

비유를 하면 숫자에 티켓을 붙여서 변수로 불러오는데, 이후 이 티켓의 개수를 세는 레퍼런스 카운팅을 실시한다.


근데, 여러 개의 쓰레드가스레드가 동시에 티켓의 개수를 세 버리면 여러 스레드가 티켓의 개수를 세서 동기화가 일어나지 않는 Race Condition이 발생할 수 있다.

 

여러 스레드가 공유 데이터를 수정해서 동기화가 발생하지 않을 수 있기 때문에 파이썬에서는 이를 막아둔 것이다.

 

그래서 이번 파이썬 3.13에서는 GIL을 풀 수 있는 기능을 실험적으로 추가해 봤다. 내가 멀티 스레드를 통해 속도를 개선할 일이 있을까 싶지많은 신기한 기능이라서 한 번 올려보았다.

 

https://docs.python.org/3/whatsnew/3.13.html#free-threaded-cpython

 

What’s New In Python 3.13

Editors, Adam Turner and Thomas Wouters,. This article explains the new features in Python 3.13, compared to 3.12. Python 3.13 was released on October 7, 2024. For full details, see the changelog. ...

docs.python.org

 

Python 3.13 새 기능 및 주요 변경점 요약 (2024년 10월 7일 출시)

1.  인터프리터 개선  
    • 새로운 상호작용(interactive) 인터프리터 도입:  
    • 멀티라인 편집 및 명령 기록 유지.  
    • 색상이 기본 활성화된 오류 메시지와 도움말.  
    • 키보드 단축키(F1~F3)를 통한 편리한 명령 실행.  
    • 오류 메시지 개선:  
    • 표준 라이브러리와 충돌하는 스크립트 이름에 대한 경고.  
    • 잘못된 키워드 인자 사용 시 올바른 제안을 포함한 메시지.
2.  Free-threaded CPython (PEP 703):  
    • GIL(Global Interpreter Lock) 없이 실행 지원(실험적 기능).  
    • 멀티코어 CPU에서 성능 향상 가능.  
    • 새로운 sys.\_is\_gil\_enabled() 함수로 GIL 활성화 상태 확인 가능.
3.  JIT(Just-In-Time) 컴파일러 (PEP 744):  
    • 실험적으로 도입된 JIT 컴파일러.  
    • 실행 속도는 일부 프로그램에서 향상 가능.
4.  타입 시스템 개선:  
    • PEP 696: TypeVar와 같은 타입 매개변수에 기본값 지원.  
    • PEP 702: warnings.deprecated() 데코레이터 추가.  
    • PEP 705: TypedDict 항목을 읽기 전용으로 설정하는 ReadOnly 도입.

주요 표준 라이브러리 변경점

1.  argparse:  
    • 명령줄 옵션과 인자를 deprecated 처리할 수 있는 기능 추가.
2.  base64:  
    • 새로운 Z85 인코딩/디코딩 함수 추가.
3.  dbm:  
    • SQLite를 기본 백엔드로 사용하는 dbm.sqlite3 추가.
4.  os:  
    • 타이머 알림 파일 디스크립터와 관련된 Linux 기능 추가.
5.  ssl:  
    • 기본 검증 설정 강화(보안 향상).
6.  copy:  
    • 객체 복사를 위한 copy.replace() 함수 추가.

보안 개선  
• SSL 기본 컨텍스트에서 강력한 인증 플래그(VERIFY\_X509\_PARTIAL\_CHAIN, VERIFY\_X509\_STRICT) 활성화.  
• 보안 취약점 방지를 위한 경고 및 동작 개선.

중요 제거 사항

1.  PEP 594:  
    • 더 이상 사용되지 않는 19개의 표준 라이브러리 모듈 제거:  
    • 예: cgi, telnetlib, pipes, sunau 등.
2.  2to3 도구:  
    • Python 2를 Python 3으로 변환하던 도구 제거.

이외 개선 사항

1.  표준 문법 개선:  
    • 클래스 정의의 첫 번째 줄 번호를 기록하는 **firstlineno** 속성 추가.  
    • locals() 반환값을 조작할 때의 동작 명확화(PEP 667).
2.  성능 최적화:  
    • 여러 표준 라이브러리 모듈의 가져오기 속도 개선.  
    • textwrap.indent() 속도 약 30% 향상.

1번) ETL과 ELT

- ETL : Extract, Transform, Load
- ETL : Extract, Load, Transform

2번) ELT가 등장한 이유

- 데이터 웨어하우스가 가능해지면서 방대한 양의 원본 데이터를 저장하는게 가능해졌기 때문
- DB의 I/O효율성, 데이터 압축, 데이터 처리를 위한 병렬 노드에 데이터 및 쿼리 분산 기능

- 행기반 데이터 웨어하우스 : 데이터베이스의 각 행은 각 레코드 크기에 따라 하나 이상의 블록으로 디스크에 저장
                       나뉘지 않는 경우는 일부 디스크 공간을 사용하지 않은 상태로 남긴다.
                       단일 레코드를 자주 일고 쓰기 때문에 블록에 빈 공간을 남기는 것은 합리적인 절충안
- 열기반 데이터 웨어하우스 : Amazon Redshift, Snowflake 
                       동일한 데이터 유형, 빈 공간 남기지 않고 사용

3번) EtLT 하위 패턴

- 작은 t의 의미
    1. 테이블에서 레코드 중복 제거
    2. URL 파라미터를 개별 구성요소로 구문 분석
    3. 민감한 데이터 마스킹 또는 난독화

4번) ELT

1. 데이터 분석을 위한 ELT
2. 데이터 과학을 위한 ELT
3. 데이터 제품을 및 머신러닝을 위한 ELT
    - 파이프라인
    - 데이터 수집
    - 데이터 전처리
    - 모델 교육
    - 모델 배포
    - 파이프라인에 피드백 통합

3장 후기

열기반 데이터 웨어하우스가 우리가 잘 아는 데이터웨어하우스인데, 책에서는 엄청 자세히는 나오지 않아 어떤 데이터웨어하우스인지 알려고 해봐야겠다. 

저번에 프로젝트 할 때는 S3에 넣을 때 airflow를 통해서 Redshift를 사용하기보다는 적은 양의 데이터는 Amazon Athena를 사용해서 넣으면 되고 Spark를 통해서 데이터를 넣을 때는 Amazon Glue를 사용하면 되고 사용 용도에 맞는 기술을 써야 한다고 들었기에 다시 한 번 봐야겠다. 

그리고 DB의 성능에 대해서는 잘 모르는데 이것도 한번 알아봐야겠다.


  1. 열기반 데이터 웨어하우스
    • 열기반 데이터 웨어하우스가 제공하는 주요 장점은 무엇이라고 생각하나요?
    • Amazon Redshift와 Snowflake를 비교해본 경험이 있다면, 어떤 상황에서 각각을 사용하는 것이 더 적합할까요?

1장 - 데이터 파이프라인 소개

1번) 데이터 파이프라인이란?

- 가장 간단한 형태의 REST API
- 데이터 추출, 데이터 가공, 데이터 유효성 검사등을 포함하는 복잡한 단계가 일반적이다.

2번) 누가 파이프라인을 구축하는가?

- 데이터 엔지니어 (데이터의 유효성과 적시성을 보장하려고 한다. 이거를 대비해서 경고, 테스트를 만들지만 어디에선가 문제가 생길 것이다!)
- 공통적인 기술 
    - SQL
    - 데이터 웨어하우징 기초
    - 파이썬 or 자바
    - 분산 컴퓨팅
    - 기본 시스템 관리 (리눅스, cloud, 응용 프로그램 로그 분석)
    - 목표 지향적 사고방식

3번) 왜 구축 해야 하나?

- 데이터를 분석가가 활용가능하도록 만듦
- 데이터, 정리, 정혛와, 정규화 ,결합, 집계, 보안 처리

4번) 어떻게 구축하나?

- python
- sql
- java
- 등등

2장 - 최신 데이터 인프라

1번) 수집 인터페이스 및 데이터 구조

- Postgres, MySQL (데이터베이스)
- REST API (추상화 계층)
- Apach Kafka (스트림 처리 플랫폼)
- csv, nfs, 클라우드 스토리지버킷 
- 데이터 웨어하우스, 데이터레이크,
- HDFS, Hbase의 데이터베이스의 데이터
- JSON

2번) 데이터 클렌징과 유효성 검사

- 지저분한 데이터
    - 중복되거나 모호한 레코드
    - 고립된 레코드
    - 불완전하거나 누락된 레코드
    - 텍스트 인코딩 오류
    - 일치하지 않는 형식 (ex: 전화번호)
    - 레이블이 잘못되었거나 레이블이 지정되지 않은 데이터

3번) 데이터 수집 도구

- 대부분 직접 구축
- Singer
- Stitch
- Fivertran

4번) 데이터 변환 및 모델링 도구

- 개인 식별 가능 정보

5번) 워크플로 오케스트레이션 플렛폼

- Luigi
- AWS Glue
- Kubeflow pieline

6번) 방향성 비순환 그래프(DAG)


1,2장 후기

: 일단 1장은 데이터 파이프라인의 what, who, why, how를 담고 있고
2장은 데이터 인프라의 기본적인 정보에 대해 담고 있다. 일단 전반적인 개념을 훑어 볼 수 있다.
근데, 나는 디테일을 더 알고 싶은 거라서 책을 좀 더 읽어봐야겠다.

+ Recent posts