2024/10 40

[Airflow] @task 데코레이터 사용하기

Airflow에서는 파이썬 함수를 간단히 데코레이터를 통해 task로 변환할 수 있는 @task 데코레이터를 제공합니다. 이를 통해 PythonOperator를 직접 정의하는 것보다 효율적이고 간결하게 DAG 내의 task를 작성할 수 있습니다.데코레이터(Decorator)란?데코레이터는 함수를 '감싸서' 기능을 추가하는 파이썬 기능입니다. 함수를 인자로 전달하거나 함수 내부에 함수를 정의하는 것이 가능하기 때문에, 함수를 쉽게 확장할 수 있습니다. @데코레이터명으로 사용하며, Airflow에서는 이를 활용해 task를 정의합니다. Airflow에서의 @task 데코레이터 활용하기Airflow의 @task 데코레이터를 사용하면, 파이썬 함수 정의만으로 손쉽게 task를 생성할 수 있습니다. 이는 Airf..

MLOps/Airflow 2024.10.31

[TS] Type Guard 와 as 키워드

TypeScript를 사용하다보면 유니온 타입(|) 을 자주 만나게 됩니다. 유니온 타입은 여러 타입이 혼합된 경우를 의미하는데, 코드의 안전성을 높여주지만, 다양한 타입이 섞여 있으면 원하는 기능을 작성하기 어려울 수 있습니다. 이때 타입 가드(type guard)를 사용하면 특정 타입을 확인하고 좁힐 수 있어, 더 안전한 코드를 작성할 수 있습니다.타입 가드(Type Guard)란?타입 가드(type guard)는 특정 조건을 통해 유니온 타입을 특정 타입으로 좁히는 방법입니다. 이를 통해 TypeScript는 조건문 내부에서 해당 타입을 안전하게 사용할 수 있게 도와줍니다. in 연산자를 활용한 타입가드 예시type Dog = { bark: () => void };type Cat = { meow: ..

[Airflow] Python Operator로 외부 모듈을 Import하는 방법

1. Python Operator와 모듈 경로 이해하기Airflow에서 PythonOperator를 사용해 작업을 정의할 때, 외부 함수가 필요하면 해당 모듈을 DAG 내에서 import할 수 있습니다. 이때 import 경로를 정확히 지정하는 것이 중요합니다.Python 경로 설정 기본 원칙실행 중인 Python 파일과 동일한 디렉토리에 있는 모듈은 자동으로 import됩니다.pip로 설치한 라이브러리들은 자동으로 sys.path에 포함됩니다.sys.path 변수에 경로를 추가해, Python이 모듈을 찾을 수 있도록 설정할 수 있습니다.Airflow의 기본 sys.path 구성Airflow는 dags와 plugins 폴더를 자동으로 sys.path에 포함합니다. 따라서 이 두 폴더에 외부 모듈을 배치..

MLOps/Airflow 2024.10.30

[Airflow]Python Operator

Airflow의 python operator는 파이썬 함수를 직접적으로 실행할 수 있도록 해주는 오퍼레이터이다.이를 통해 특정 로직을 처리하거나 데이터를 가공하는 파이썬 함수를 작성한 뒤, ETL 파이프라인을 통해 작업을 간편하게 실행할 수 있다.PythonOperator 예제1. Airflow DAG 설정from airflow import DAGfrom airflow.operators.python_operator import PythonOperatorfrom datetime import datetime# 간단한 Python 함수 정의def my_python_function(): print("Hello from Python Operator!")# Airflow DAG 정의with DAG( 'p..

MLOps/Airflow 2024.10.26

[JS] every 메소드로 객체 속 값 비교하기

JavaScript에서 배열이나 객체의 값을 비교할 때 every 메소드는 아주 유용하다. 이 메소드는 배열의 모든 요소가 주어진 조건을 만족하는지 확인해주는데, true나 false를 반환하는 게 특징이다. 객체의 속성값을 비교할 때도 이를 잘 활용하면 깔끔하게 비교 작업을 처리할 수 있다.every 메소드 every 메소드는 배열의 모든 요소가 특정 조건을 만족하는지 확인할 때 사용된다. 모든 요소가 조건을 만족하면 true, 하나라도 만족하지 않으면 false를 반환한다.const numbers = [2, 4, 6, 8];const allEven = numbers.every(num => num % 2 === 0);console.log(allEven); // true위 코드에서는 배열 numbers의..

[TS] interface와 type 비교 및 상속, 그리고 Omit과 Pick 활용

TypeScript를 사용하다 보면 객체의 구조를 정의할 때 가장 자주 사용하는 것이 바로 interface와 type입니다. 이 둘은 매우 유사하지만, 용도와 사용 방식에서 미묘한 차이가 있습니다. 이번 글에서는 interface와 type의 차이를 살펴보고, 어떻게 상속받거나 확장할 수 있는지 알아보겠습니다. 또한, Omit과 Pick 같은 유틸리티 타입을 통해 좀 더 유연하게 타입을 관리하는 방법을 배워보겠습니다.1. interface와 type의 차이interface란?interface는 주로 객체의 구조를 정의할 때 사용합니다. 특히 객체 지향 프로그래밍 스타일에 익숙하다면, 상속을 통해 인터페이스를 확장하는 방식이 매우 자연스러울 것입니다.interface Person { name: stri..

[Angular] ngOnChanges() 훅 제대로 이해하기

Angular는 컴포넌트 간의 상호작용을 효과적으로 관리하기 위해 다양한 생명주기 훅(Lifecycle Hook)을 제공한다. 그 중 하나가 바로 ngOnChanges()인데, 이 훅은 @Input() 속성 값이 변경될 때마다 호출되며, 컴포넌트가 부모로부터 전달받은 데이터가 변했을 때 적절한 처리를 할 수 있도록 도와준다.ngOnChanges()란?ngOnChanges()는 Angular 컴포넌트의 생명주기 훅 중 가장 먼저 실행되는 메서드이다. 이 훅은 @Input() 데코레이터로 부모 컴포넌트로부터 전달받은 값이 변경될 때마다 호출된다. 변경된 값뿐만 아니라 이전 값도 확인할 수 있어, 값이 변할 때마다 원하는 로직을 수행할 수 있다.ngOnChanges()가 호출될 때ngOnChanges()는 다..

FE/Angular 2024.10.19

[Angular] @Input()과 @Output()

Angular를 사용하다 보면 부모 컴포넌트와 자식 컴포넌트 간의 데이터 통신이 필수적이다. 이때 중요한 두 가지 데코레이터가 바로 @Input()과 @Output()이다. 이 글에서 각각의 역할과 사용법을 예시를 통해 쉽게 설명하려고 한다.@Input() – 부모에서 자식으로 데이터 전달@Input()은 부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달할 때 사용한다. 예를 들어, 부모 컴포넌트에서 자식 컴포넌트에 텍스트 메시지나 객체와 같은 데이터를 보내고 싶을 때 유용하다.@Input() 사용 예시1. 부모 컴포넌트 (ParentComponent)부모 컴포넌트에서 자식 컴포넌트에 메시지를 전달하고자 한다.부모 컴포넌트// parent.component.tsimport { Component } from..

FE/Angular 2024.10.18

[JS] Prototype과 __proto__

JavaScript를 사용하면서 한 번쯤 들어봤을 프로토타입(prototype)과 __proto__. 이 둘은 JavaScript의 객체지향 프로그래밍에서 매우 중요한 개념이지만, 처음 접할 때는 다소 혼란스러울 수 있다. 이번 글에서는 ES6 문법을 바탕으로 이 개념들을 쉽게 이해할 수 있도록 설명하려고 한다.1. Prototype의 역할JavaScript는 프로토타입 기반 상속을 사용한다. 즉, 각 객체는 다른 객체로부터 속성이나 메서드를 상속받을 수 있는데, 이때 사용되는 것이 바로 prototype이다. 모든 함수(클래스 포함)는 생성될 때 prototype 객체를 가지고 있으며, 이 객체에 있는 메서드와 속성을 다른 객체들이 공유하게 된다.class A { constructor() { t..

[Angular] EventEmitter

Angular에서는 컴포넌트 간에 데이터를 주고받을 때, 주로 부모-자식 관계를 활용한다. 그중에서 자식 컴포넌트에서 부모 컴포넌트로 이벤트를 전달할 때 사용하는 것이 바로 @Output() 데코레이터와 EventEmitter이다.1. 자식 컴포넌트에서 EventEmitter 선언먼저, 자식 컴포넌트에서 @Output() 데코레이터로 이벤트를 선언한다. 이 이벤트는 부모 컴포넌트에 전달되어 특정 작업을 실행하게 만든다. 예를 들어, 자식 컴포넌트에서 버튼을 클릭했을 때 부모에게 그 정보를 전달하고 싶을 때 사용할 수 있다.import { Component, Output, EventEmitter } from '@angular/core';@Component({ selector: 'app-child', t..

FE/Angular 2024.10.16