분류 전체보기 1187

[Jenkins] Pipeline - agent Section

Sections Jenkins 파이프라인에서 Section이란 Declarative Pipeline의 구성 요소로, 하나 이상의 Directives(지시문)이나 Steps를 포함한다. agent, post, stages, steps에 해당된다. agent : 전체 파이프라인 또는 특정 stage를 실행할 환경 지정 post : 파이프라인 또는 stage 실행이 완료될 때 실행되는 추가 steps 정의 stages : 하나 이상의 단계 지시문(stage directives) 정의 steps : 단계 지시문(stage directives)에서 실행할 하나 이상의 step 정의 이 글에서는 Sections 중 agent에 대해서 정리해보려고 한다. agent 전체 파이프라인 또는 특정 stage를 실행한 환경..

Jenkins 2023.11.01

[Jenkins] Pipeline 구성 요소

개요 2023.10.30 - [Jenkins] 파이프라인 생성에서 간단하게 예제를 이용해 파이프라인을 생성하고 실행해 봤는데, 이 글에서는 파이프라인을 구성하고 있는 요소에 대해 정리해보려고 한다. 구성 요소 Pipeline CD 파이프라인의 사용자 정의 모델. 일반적으로 애플리케이션을 빌드하고, 테스트한 뒤 전달하는 과정을 포함하는 전체적인 빌드 프로세스를 정의한다. Node Jenkins 환경의 일부임과 동시에 파이프라인을 실행할 수 있는 머신. Stage 전체 파이프라인을 통해 수행되는 태스크를 개념적으로 구별한 하위 집합. Jenkins 파이프라인의 상태와 진행 상황을 시각화하는 기준이 된다. Step 단일 작업. Jenkins에게 어떤 시점에 무엇을 해야 하는지 정의한다. Pipeline 구문 ..

Jenkins 2023.10.31

[Jenkins] 파이프라인 생성

Jenkins Pipeline Jenkins는 연속적인 작업을 하나의 파이프라인으로 묶어서 관리할 수 있도록 하는 Pipeline 플러그인을 제공한다. 개발자가 개발한 소프트웨어를 사용자에게 제공하기 위해서는 개발한 소스를 빌드, 테스트, 배포하는 일련의 과정이 필요하다. 개발한 소프트웨어를 유지보수하기 위해서는 위 과정이 반복적으로 발생하게 되는데, 반복적으로 발생하는 빌드, 배포 과정의 자동화와 함께 CI/CD(Continuous Integration / Continuous Delivery)라는 방법론이 자리 잡았다. Continuous Delivery (CD)는 빌드와 테스트가 완료되어 Git과 같은 버전 제어 저장소에 업로드된 소프트웨어를 사용자에게 전달하는 과정을 자동화하는 것을 의미한다. 대표..

Jenkins 2023.10.30

[Airflow] Dag 직렬화 (Serialization)

직렬화 직렬화(Serialization)란 데이터 구조나 객체 상태를 나중에 재구성할 수 있는 형식으로 변환하는 과정을 말한다. 다르게 말하면 객체를 바이트 스트림으로 인코딩하는 과정으로, 직렬화된 데이터는 동일하거나 다른 환경에 저장될 수 있다. 반대로 직렬화된 데이터를 개체나 데이터 구조로 다시 재구성하는 과정, 인코딩 되어있는 바이트 스트림으로부터 객체를 복원하는 과정을 역직렬화(Deserialization)라고 한다. Airflow 1 DAG 프로세싱 Airflow는 DAG_FOLDER 내 DAG 정의 파일을 읽어 들이고 처리한다. Airflow 1에서는 DAG를 스케쥴링하고 UI로 표시하기 위해 스케쥴러와 웹 서버 모두 DAG 정의 파일에 접근해 처리해야 했다. 웹 서버를 시작/재시작하는 경우에..

Apache Airflow 2023.10.27

[Python] Counter - 중복집합 연산

개요 2023.10.10 - [Python] Counter - 데이터 수 확인에서 Counter 클래스에 대해 알아보았고, 2023.10.25 - [Python] 다중집합 교집합/합집합 구현에서 Python으로 중복집합의 교집합, 합집합 연산을 구현해 봤다. 근데 공식 문서를 보니 Counter 클래스가 다른 프로그래밍 언어의 multiset과 유사하다고 한다. 생각해 보면 중복집합 \(\{a, a, a, b, b, c, c, c, c\}\)는 \((\{a, b, c\}, (a \mapsto 3, b \mapsto 2, c \mapsto 4))\)로도 표현할 수 있는데, 이는 원소를 Key로 하고 중복도를 Value로 하는 딕셔너리로 생각할 수 있다. 그래서인지 Counter 클래스는 중복집합을 생성하기..

Python 2023.10.26

[Python] 다중집합 교집합/합집합 구현

다중집합 수학에서 집합(set)은 어떤 조건을 만족시키는 서로 다른 대상의 모임으로, 집합 내 원소에 대해 중복을 허용하지 않는다. 반면 multiset(중복집합, 다중집합)은 각 원소를 어떤 기수만큼 중복하는 것을 허용하는 집합의 일반적인 개념이다. 원소가 중복된 횟수를 중복도(multiplicity)라고 하는데, 일반적인 집합은 각 원소의 중복도가 1인 중복집합이라고 생각할 수도 있다. 이 글에서는 Python으로 중복집합의 교집합과 합집합 연산을 구현한 코드를 정리한다. 프로그래머스 - [1차] 뉴스 클러스터링 문제 맞다……. 교집합 아래와 같은 중복집합 A, B가 있다고 할 때, a = [1, 2, 2, 3, 4, 5] b = [1, 1, 2, 3, 4, 6] 두 중복집합 A, B의 교집합은 [1..

Python 2023.10.25

[MySQL] SELECT FOR UPDATE

개요 하나의 트랜잭션 내에서 데이터를 쿼리 한 후 관련 데이터를 삽입하거나 갱신하는 경우, 일반적인 SELECT 문은 충분한 보호를 제공하지 않는다. 쿼리 한 데이터와 동일한 데이터를 다른 트랜잭션에서 갱신하거나 삭제할 수 있기 때문에 추가적인 안정성이 필요하다. SELECT FOR UPDATE는 이러한 동시성 문제를 해결하기 위해 InnoDB가 제공하는 locking read 방법 중 하나다. Locking Read InnoDB 테이블에 대해나 잠금 작업을 수행하는 SELECT 문이다. SELECT ~ FOR UPDATE 또는 SELECT ~ LOCK IN SHARE 문 두 가지가 해당된다. locking read는 교착 상태를 발생시킬 수 있으므로 사용에 주의해야 한다. SELECT FOR UPDAT..

Database 2023.10.24

[Python] PriorityQueue 사용

개요 2023.10.20 - [자료구조] 우선순위 큐 (Priority Queue)에서 우선순위 큐에 대해 살펴보았는데, 이 글에서는 Python에서 우선순위 큐를 제공하는 Priority Queue 클래스를 사용하는 방법을 정리해두려고 한다. Python queue.PriorityQueue는 내부적으로 heapq로 구현되어 있다. 클래스 임포트 PriorityQueue 클래스를 사용할 때는 아래와 같이 임포트 하여 사용할 수 있다. queue는 내장 모듈이므로 추가적인 라이브러리 설치는 필요하지 않다. from queue import PriorityQueue 선언 생성자를 사용하여 PriorityQueue를 선언한다. 큐의 최대 크기가 정해져 있다면 maxsize로 크기를 전달할 수있다. 큐의 크기에 ..

Python 2023.10.23

[자료구조] 우선순위 큐 (Priority Queue)

우선순위 큐 (Priority Queue) 큐나 스택과 같은 자료 구조 중 하나로, 각 원소가 우선순위를 가지고 있는 것이 특징이다. 우선순위 큐에서 높은 우선순위를 가진 원소가 낮은 우선순위를 가진 원소보다 먼저 처리된다. 우선순위가 같은 원소는 우선순위 큐 내 순서를 기준으로 처리된다. 우선순위 큐 == 힙 (?) 인터넷에 우선순위 큐에 대해 찾다 보면 힙과 함께 정리한 글이 많이 보이는데, 우선순위 큐가 힙이라고 할 수는 없다. 우선순위 큐는 리스트나 맵과 같은 추상적인 개념으로 힙, 배열, 연결 리스트 또는 다른 방식으로 구현할 수 있다. 다만 시간복잡도 등의 이유로 일반적으로 힙으로 많이 구현하는 것 같다. 아래는 우선순위 큐의 구현 방식에 따른 enqueue / dequeue 연산의 시간복잡도..

자료구조 2023.10.20

[Python] deque 사용

개요 2021.10.07 - [자료 구조] 회문 찾기 / 큐 & 스택에서 collections.deque을 이용해 Python으로 큐를 사용하는 방법을 간단히 적어두었다. 실제로 deque는 큐를 구현한 것 아니라 양방향 큐를 구현한 것으로, 종종 deque를 단방향으로 사용하여 큐로 취급하는 것 같다. 이 글에서는 deque 클래스를 사용하는 방법을 간단히 적어둔다. deque에 대한 개념은 2023.10.18 - [자료구조] deque - 양방향 큐에 정리해 두었다. 클래스 임포트 deque 클래스를 사용할 때는 아래와 같이 임포트 하여 사용할 수 있다. collections는 내장 모듈이므로 추가적인 라이브러리 설치는 필요하지 않다. from collections import deque 선언 생성자..

Python 2023.10.19