Projects 7

Fastify와 Python 서버 간 작업 처리

1. 서버 구조 개요이 시스템은 클라이언트 요청을 처리하기 위해 Fastify 서버와 Python 서버가 상호작용하며, 작업 요청과 결과를 처리하는 구조로 설계되었습니다.Fastify 서버:클라이언트로부터 요청을 받아 Redis 작업 큐에 작업을 등록.작업 결과를 기다렸다가 클라이언트에 반환.Python 서버:Redis 작업 큐에서 작업을 가져와 GPU 기반의 모델 추론을 실행.작업 결과를 Redis Pub/Sub 채널을 통해 Fastify 서버에 전달.Redis:작업 큐: Fastify와 Python 서버 간 작업 요청 및 처리 상태를 관리.Pub/Sub: Python 서버가 작업 결과를 Fastify 서버에 전달.스트림: 작업의 퍼포먼스 데이터를 기록.2. 시스템 초기화Fastify 서버Redis 초..

Projects 2024.11.27

[ClimaML] 커스텀 센서로 안정성 높은 데이터 파이프라인 구축

프로젝트 개요지난 시간 공공데이터 API를 활용하여 10년간의 기상 데이터를 PostgreSQL 데이터베이스에 적재하는 작업에 이어 이번 시간에는 매일 새로운 데이터를 수집하는 자동화된 데이터 파이프라인을 구축하는 프로젝트를 진행했습니다.이번 포스팅에서는 다음과 같은 내용을 다룹니다:매일 기상 데이터를 적재하는 자동화 DAG 작성안정성을 높이기 위한 커스텀 센서 작성진행 중 겪었던 문제와 해결 과정1. 매일 데이터 적재를 위한 자동화 DAG 작성요구사항매일 전날(D - 1) 데이터를 API에서 가져와 DB에 적재.Airflow DAG를 작성하여 스케줄링.구현된 DAGDAG는 매일 13시에 실행되며, 전날 데이터를 API에서 가져와 DB에 적재하는 작업을 수행합니다. 이렇게 스케줄링을 한 이유는 기상 AP..

Projects/ClimaML 2024.11.25

Python으로 비동기와 멀티스레딩을 활용한 작업 관리 API 구축

이번 포스팅에서는 FastAPI를 기반으로, 이미지 스타일 학습 요청을 처리하는 API를 설계하면서, 비동기 프로그래밍과 멀티 스레딩을 어떻게 활용할 수 있는지에 대해 다뤄보겠습니다.프로젝트 개요이 프로젝트는 이미지 스타일 학습 작업 관리 API를 구현한 사례입니다. 유저는 이미지 스타일 학습 요청을 API로 보내고, 작업이 완료되면 학습된 스타일 모델을 받을 수 있습니다. 주요 기능은 다음과 같습니다:사용자가 학습 요청을 보내면 작업이 학습 대기열에 추가됩니다.백그라운드에서 대기열을 지속적으로 확인하고, 작업을 하나씩 처리합니다.학습은 별도의 스레드에서 실행되어 메인 이벤트 루프의 차단을 방지합니다.사용자는 학습 상태를 조회하거나 작업을 취소할 수 있습니다.사용 기술1. FastAPIPython 기반의..

Projects 2024.11.23

[Airflow] 기상 데이터 적재 자동화: 2014년부터 2024년까지

들어가며Airflow를 활용하여 2014년부터 2024년까지의 기상 데이터를 공공 API를 통해 요청하고, PostgreSQL 데이터베이스에 저장하는 과정을 설명합니다.디렉토리 구조 및 common 폴더: 프로젝트 디렉토리 구조와 공통으로 사용될 파일 정의Airflow DAG 설계: 데이터 적재 작업을 정의.Custom Operator 작성: API 요청과 데이터 적재 로직 구현.PostgreSQL 데이터베이스와 스키마 자동 생성.프로젝트 디렉토리 구조아래는 현재까지의 프로젝트 디렉토리 구조입니다: ├── dags/│ ├── climaml_historical_weather_data_dag.py # DAG 정의 파일├── plugins/│ ├── operators/│ │ ├── climam..

Projects/ClimaML 2024.11.18

[Postgresql] Open API 데이터 ETL 플로우

Open API 데이터를 추출하고, 원하는 데이터 형식으로 변환하고, 그것을 데이터 베이스에 적재하는 ETL 플로우에 대해 알아보겠습니다. 저장할 DB는 PostgreSQL을 사용하였습니다. PostgreSQL을 선택한 이유?MLOps 프로젝트의 기상 데이터 적재와 관리 용도로 사용할 데이터베이스(DB)로 데이터 양, 접근 방식, 쿼리 성능 등을 고려하여 선택하였습니다.10년치 기상 데이터라면 수십 GB 이하로 예상이 되기 때문에 오픈소스인 PostgreSQL이나 MySQL으로도 충분히 감당할 수 있다고 생각하였습니다. 또한 구조화된 스키마를 가지고 있어, 각 지역 및 날짜별 기상 데이터를 정리할 수 있을 것이라고 판단했습니다. 그리고 PostgreSQL이 최근 각광받고 있다는 점때문에 PostgreSQ..

Projects/ClimaML 2024.11.04

[API] 공공 데이터 포털에서 기상 데이터 받아오기

공공 데이터 포털에서 기상 데이터를 fetch 하는 방법에 대해 알아보겠습니다. 공공 데이터 포털은 기상 데이터 외에도 교육, 국토 관리, 공공 행정, 재정 금융, 산업 고용 등 우리나라의 많은 데이터들을 api 외에도 파일 데이터로 제공해주는 사이트입니다. https://www.data.go.kr/index.do 공공데이터 포털국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datasewww.data.go.kr 제가 필요한 데이터는 기상청_지상(종관, ASOS) 일자료 조회서비스입니다.https://www.data.go.kr/tcs/dss/selectApiDataDeta..

Projects/ClimaML 2024.11.04

[Postgresql] Linux(Ubuntu)에서 설치

리눅스에서는 apt 패키지 관리자를 통해 PostgrSQL을 설치할 수 있습니다. 1. 터미널에서 PostgreSQL을 설치합니다.sudo apt updatesudo apt install postgresql postgresql-contrib 2. PostgreSQL 설치가 완료되면 서비스가 자동으로 시작되며, 확인하기 위해서는 다음의 명령어를 입력합니다.sudo systemctl status postgresql상태 출력 예시active (running): PostgreSQL 서비스가 정상적으로 실행 중.inactive (dead): 서비스가 실행되지 않음.failed: 서비스가 오류로 인해 중단됨. 3. PostgreSQL에 접속합니다.sudo -i -u postgrespsqlsudo -i -u post..

Projects/ClimaML 2024.11.03