[Airflow] Dynamic task mapping
·
Data Engineering
batch 작업을 손쉽게 도와주는 Airflow이번 포스팅에서는 airflow의 metadata DB, executor, operator, decorator 기본 개념과 Dynamic task mapping에 대해 정리하고자 한다. Airflow우선 Airflow는 기본적으로 scheduler, workers, metadata DB, webserver로 이루어져 있다. SchedulerScheduler는 DAG 파일을 주기적으로 스캔하고 있다가 실행할 task가 있으면 Executor에게 전달한다.즉, 어떤 task가 언제 실행되어야 하는지 모니터링하고 있다가 Executor에게 알려준다. ExecutorExecutor는 Scheduler가 스케줄링한 task들을 실제로 어디서, 어떻게 실행할지 결정한다..
[Operating System Concepts] 1.8 분산 시스템
·
도서 개념 정리
1.8분산 시스템은 물리적으로 떨어져있는 이기종 컴퓨터들의 집합이다.여러 컴퓨터들을 하나의 컴퓨터처럼 사용할 수 있도록 하는 아키텍처라고 생각하면 된다. 사용자가 시스템 내의 다양한 자원들을 접근할 수 있도록 네트워크로 연결되어 있다.네트워크를 통해 공유 자원을 사용할 수 있게 되고, 이는 곧 계산 속도와 기능, 데이터 가용성 및 신뢰성을 향상시킨다. 원래 네트워크를 통한 통신은 소켓 프로그래밍(socket, connect, bind, listen, accpect), 프로포콜(http, ftp), 시스템 콜, 라이브러리 사용한다.근데 몇몇 운영체제(ex. Linux)의 경우에는 네트워크 인터페이스의 장치 드라이버에 네트워크 통신을 정의해 네트워크를 파일처럼 처리할 수 있도록 돕는다.리눅스에서 네트워크 연..
[Operating System Concepts] 1.4 운영체제의 작동
·
도서 개념 정리
컴퓨터가 os를 올리기 위해서는 초기 프로그램을 실행해야 한다.일반적으로 컴퓨터 하드웨어 내에 펌웨어로 저장되어 있다.부트스트랩 프로그램이 운영체제 커널을 찾아 메모리에 적재해야 한다. 커널이 적재되어 실행되면 시스템과 사용자에게 서비스를 제공할 수 있게 된다.커널이 실행되는 전체 시간 동안 실행되는 프로그램을 시스템 데몬이라 한다.Linux에서 첫번째 시스템 프로그램은 systemd이다. 이렇게 실행된 운영체제는 이벤트를 기다린다.이벤트는 거의 항상 인터럽트를 발생시키고, 운영체제가 이를 처리한다.하드웨어적인 인터럽트(장치 드라이버 등 I/O 처리에서 발생하는 오류) 외에 사용자 프로그램에서 발생시키는 소프트웨어 생성 인터럽트(트랩)가 있다.0으로 나누거나 유효하지 않은 메모리에 접근했을 때와 같이 프..
[Operating System Concepts] 1.1-1.2. Introduction
·
도서 개념 정리
1.1 Operating System- 하드웨어를 control- 각 자원들을 각 프로그램에 알맞게 할당하는 역할- user와 hardware 사이에서 중재자 역할을 수행 A computer system can be divided: hardware, os, application programs, user- 하드웨어 : CPU, memory, I/O devices, storage- application programs : 문제를 해결하기 위해 자원이 어떻게 쓰일지 정의- os : 각 프로그램들이 유용한 작업을 할 수 있는 환경 제공 1.1.1. User View- 사용자 관점에서 컴퓨터는 인터페이스에 따라 달라진다. 랩탑, PC, 모바일, Siri(voice recognition) 등의 형태- 이러한 시스..
Github cherry-pick
·
DataHub
여러 명이 관리하는 깃헙 레포에서는 다양한 일이 발생한다..최근에 한 문제 상황을 cherry-pick CLI로 해결하여 이를 기록해보려 한다. Diff우선, 깃헙에서 코드 관리는 무조건 diff를 기준으로 업데이트한다. 레포의 기존 코드와 commit된 코드의 차이를 업데이트하는 것이다. commit된 코드를 레포의 기존 코드로 모두 덮어쓰기를 하지 않는다는 것을 유념해야 한다.똑같은 소리 아닌가? 예를 들어 살펴보자. 레포에 dev, main 브랜치가 있고, 아래의 코드를 두 브랜치 공통 base 코드라고 가정해보자.answer = 0for i in range(10): answer += iprint(answer) 이후 dev 브랜치에 아래의 두 커밋이 추가되었다.answer = 0for i in ra..
[SSAFY] 싸피 10기 임베디드 트랙 합격 후기
·
회고
요새 IT 취업 시장이 좋지 않아 그런지 신입 경쟁률뿐만 아니라 부트캠프의 경쟁률 마저 점점 심해지고 있다.주변에서도 취업이 되지 않아 싸피에 관해서 물어보는 사람들이 많은데, 이참에 때늦은..(싸피 끝나고 취업한지 1년 됨..) 후기를 한 번 작성해보려고 한다.  우선 작성자는 인서울 4년제 컴퓨터공학과를 나왔다.칼졸업을 하고 한 학기 동안 취준을 했는데, 당시 너무 가고 싶었던 삼성전자가 서류는 계속 붙는데 코딩테스트에서 계속 떨어졌었다.알고리즘 공부를 제대로 하고 싶던 와중에 때마침 싸피 공고가 올라왔다. 붙은 기업도 있었지만(성에 차지 않았기도 하고..) 삼성전자를 더 가고 싶어서 싸피에 가게 되었다. 싸피는 크게 자바, 파이썬으로 웹을 배우는 반과 특화 반(임베디드, 모바일 등)으로 구성된다. ..
[React hooks] - useState, useEffect
·
React
Hook?처음에 React는 클래스 컴포넌트로 컴포넌트를 관리했다. 클래스 안에서 componentDidMount, componentDidUpdate, componentWillUnmount 라는 함수를 사용해 생명주기에 따른 데이터를 처리했다. 그러다 클래스 컴포넌트보다 더 간결한 함수 컴포넌트가 생겨났고, 함수 컴포넌트 안에서 사용할 수 있는 생명주기 함수가 필요했다. 그래서 생겨난 것이 Hook 개념이다. 아래는 버튼을 클릭하면 count 변수의 값이 1씩 증가하는 예제 코드이다. 첫번째가 클래스 컴포넌트로 작성한 코드이고 두번째가 함수 컴포넌트인데, 한눈에 봐도 함수 컴포넌트가 더 간략한 것을 볼 수 있다.import React, { Component } from "react";class Class..
NAVER DAN24 - CQueryHub
·
Data Engineering
24년 11월 12일에 네이버 컨퍼런스 DAN에 다녀왔다.참가한 세션 중 인상 깊은 세션이었던 [CQueryHub: Data Warehouse입니다. 근데 이제 Flink와 Iceberg를 곁들인] 세션에 대해 정리를 해보려 한다. 세션 주제는 CDC 아키텍쳐이었다.CDC는 Change Data Capture의 약자로, Source DB에 변경점이 생기면 실시간으로 변경된 데이터에 대해서만 Target DB에 반영하는 기술이다. 기존 ETL 기술과 비교되는 기술이다. 둘 다 Source DB와 Target DB와의 sync를 맞춘다는 공통점을 갖고 있지만, ETL은 배치성 작업으로서의 성격이 짙다. ETL은 변경점을 기준으로 Target DB에 반영하지 않고 매일 매시간을 기준으로 업데이트 사항을 반영한..
대규모 프로젝트에 디버깅툴 달기
·
DataHub
대규모 프로젝트 BE를 로컬에서 디버깅하고 싶다면 어떤 설정들을 해줘야 할까?   해당 프로젝트는 모듈별로 도커 이미지로 말아 k8s 위에 배포되어 있다고 가정해보자. 보통 대규모 프로젝트는 FE / BE 이렇게 단순하게 이뤄져 있지 않다.Web에서 사용자가 이벤트를 발생시키면, 인증 처리를 거친 뒤, 비동기적으로 처리하기 위해 Middle-Ware로 Kafka와 같은 MQ를 둔다.MQ는 이벤트에 따라 BE, ElasticSearch와 같은 서비스로 이벤트를 전달한다.각 이벤트들은 최종적으로 DB에 데이터를 전달한다.이렇게 대규모 프로젝트들은 FE, MQ, BE, DB 등 다양한 컴포넌트로 구성되어 있어 각각이 통신을 하고 있다. 프로젝트의 구조를 알았으니 디버깅 툴을 다는 방법을 알아보자.디버깅을 하려..
[spring] - test code 작성하기
·
Spring
안드로이드 개발을 할 때, 작성한 코드가 원하는대로 작성했는지 확인하려면'코드 작성 -> 빌드 -> 실행 -> 작동 확인 -> 오류 발생 -> 코드 수정' 순으로 진행했다. vue나 nodejs도 개발할 때 같은 방식으로 했는데, spring에서는 너무 똑똑하게 코드로 손쉽게 테스트할 수 있다.(마음에 아주 찰썩 듦..) spring 프로젝트를 열어보면 src 폴더 안에 main 폴더와 test 폴더가 있다.이 test 폴더에 보통 테스트 코드를 작성한다.자바는 클래스 단위로 코드를 짜니 main 폴더에는 여러 클래스들의 자바 파일이 있을 것이다.이 클래스들은 선언해서 원하는 값을 집어넣어 보고, 빼보고 하면서 기대한 값과 일치하는지 테스트하는 것이다. 코드로 확인해보자. Spring Codepackag..