티스토리챌린지 21

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

[TS] Record 타입 알아보기

Record는 TypeScript에서 제공하는 유틸리티 타입으로, 객체의 키와 값의 타입을 명시적으로 지정할 때 사용됩니다. 이를 통해 객체의 구조를 더 명확히 정의할 수 있습니다.기본 문법Record Keys: 객체의 키 타입 (일반적으로 문자열, 숫자, 또는 유니온 타입).Type: 키에 해당하는 값의 타입.사용 예시1. 간단한 객체 정의type User = Record;const users: User = { id: '123', name: 'Alice',};  string 키: 객체의 모든 키가 문자열이어야 함.string 값: 모든 값이 문자열이어야 함.2. 키와 값의 타입을 명시적으로 정의 type Settings = Record;const appSettings: Settings = { th..

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

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

Projects/ClimaML 2024.11.25

[Airflow] ExternalTaskSensor: DAG 간 의존성 설정과 활용

DAG 간 의존성을 설정하는 방법Airflow에서는 DAG 간 의존성을 설정하는 데 두 가지 주요 방법을 제공합니다.1. TriggerDagRunOperator한 DAG의 특정 작업이 완료되었을 때 다른 DAG을 실행하도록 설정할 수 있습니다.DAG 간의 순차적 실행이 필요할 때 유용합니다.2. ExternalTaskSensor외부 DAG의 특정 작업(Task)이 완료된 후 현재 DAG의 작업(Task)을 실행하고 싶을 때 사용됩니다.작업 간의 동기화를 보장하며, 복잡한 DAG 네트워크에서 의존성을 쉽게 관리할 수 있습니다.https://airflow.apache.org/docs/apache-airflow/stable/_api/airflow/sensors/external_task/index.html ai..

MLOps/Airflow 2024.11.24

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

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

Projects 2024.11.23

[Ionic] Shadow DOM을 활용한 컴포넌트 스타일링

Shadow DOM이란?Shadow DOM은 웹 컴포넌트의 핵심 기술 중 하나로, 컴포넌트 내부의 DOM 구조와 스타일을 외부로부터 캡슐화하는 기술입니다.주요 특징스타일 격리컴포넌트 내부의 스타일이 외부 스타일에 영향을 받지 않으며, 반대로 외부 스타일도 컴포넌트 내부에 영향을 미치지 않습니다.구조 보호컴포넌트 내부 구조가 외부로부터 숨겨져 변경이나 접근이 어렵습니다.Shadow DOM의 실제 활용일반 HTML 요소와 Shadow DOM 기반 컴포넌트의 차이를 이해하기 위해, 아래 예제를 보겠습니다.버튼버튼위 코드에서 .button 클래스를 스타일링하면 첫 번째 요소에는 적용되지만, ion-button은 Shadow DOM 내부에 캡슐화되어 있어 스타일이 적용되지 않습니다.Ionic에서 Shadow D..

FE 2024.11.22

[Airflow] File Sensor에 대하여

File Sensor란?Airflow의 FileSensor는 파일 시스템에서 특정 파일이나 디렉토리가 존재하는지 감지하기 위해 사용됩니다. 워크플로우에서 다른 작업이 파일의 존재 여부에 의존할 때 매우 유용합니다. FileSensor는 주기적으로 파일을 확인하며, 파일이 존재하면 성공으로 처리되고, 존재하지 않으면 설정된 간격 동안 재시도합니다.FileSensor의 주요 매개변수fs_conn_id (File Connection ID)Airflow에서 설정된 파일 연결 ID를 참조합니다.기본적으로 FileSystemHook을 통해 연결을 관리합니다.filepath (파일 경로)파일의 상대 경로를 지정합니다.fs_conn_id로 설정된 기본 경로를 기준으로 상대적인 위치를 입력합니다.recursive (재귀..

MLOps/Airflow 2024.11.21

[Angular] Ionic에서 Popover가 Sidebar 뒤에 렌더링되는 문제

1. 문제 상황Ionic과 Angular를 활용한 프로젝트에서, Sidebar와 Popover를 함께 구현했을 때 Popover가 Sidebar 뒤에 렌더링되는 문제가 발생했습니다. 문제는 Popover가 제대로 동작하지 않으며, 클릭 또한 불가능하다는 것이었습니다.이 문제는 특히 ion-popover와 ion-app의 구조 및 동작 방식에 대한 이해가 부족하면 쉽게 놓칠 수 있는 부분입니다.2. 문제 원인Sidebar 디렉티브가 Angular의 동적 DOM 조작을 통해 body에 직접 추가되었고, 이로 인해 Ionic의 ion-app 컨텍스트 외부에 위치하게 되었습니다. 하지만, Ionic의 ion-popover는 기본적으로 ion-app 내부에서 동작하도록 설계되어 있습니다.이로 인해 다음과 같은 문..

FE/Angular 2024.11.20

[Airflow] Sensor에 대해 알아보자

Sensor Operator란?Sensor Operator는 특정 조건이 충족될 때까지 대기하는 Task로, 조건이 만족되면 True를 반환하여 다음 Task로 넘어갑니다. 모든 Sensor는 BaseSensorOperator를 상속하여 구현되며, 반드시 두 가지 메서드를 오버라이딩해야 합니다:__init__(): 초기화 메서드로, Sensor의 기본 설정을 정의합니다.poke(context): 센싱 로직을 정의하는 메서드로, 특정 조건을 만족하는지 확인합니다.BaseSensorOperator는 Airflow의 BaseOperator를 상속하며, Sensor의 동작과 모드를 결정하는 다양한 매개변수를 제공합니다.Airflow docs: https://airflow.apache.org/docs/apache..

MLOps/Airflow 2024.11.19

[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