시스템 개발 및 관리 141

Dagster로 시작하는 데이터 엔지니어링 오케스트레이션

데이터를 다루는 사람이라면 '데이터 오케스트레이션'이라는 단어를 한 번쯤 들어보셨을 것입니다. ETL, ELT, 데이터 파이프라인, 워크플로우 관리 등의 기능을 지원함으로써 실질적인 사용 효율을 높이는 것이 바로 데이터 오케스트레이션의 핵심입니다. 최근에는 다양한 프레임워크들이 등장하면서 이러한 파이프라인을 더욱 효율적으로 관리할 었습니다. 데이터 오케스트레이션이란?데이터 오케스트레이션(Data Orchestration)은 여러 데이터 작업 단계를 체계적으로 연결하고 조율하는 기술입니다. 개별 처리 작업들을 순차적으로 실행하거나 병렬로 처리하고, 전체 워크플로우를 안정적으로 운영할 수 있도록 설계합니다.가장 많이 사용되는 대표적인 오케스트레이터는 Apache Airflow이며, 최근 주목받고 있는 현대적..

Python enum – 상수를 깔끔하게 관리하는 방법

Python에서는 여러 고정된 값을 다룰 때 enum(열거형)을 사용할 수 있습니다.이 글에서는 enum이 무엇인지, 왜 쓰는지 간단히 정리해봅니다. enum이란?**enum(enumeration)**은"이름이 붙은 상수들의 집합" 을 만들어주는 기능입니다.import enumclass Models(enum.Enum): XGBOOST = enum.auto() ENCODER = enum.auto() LOGISTIC = enum.auto() Models.XGBOOST, Models.ENCODER처럼 의미 있는 이름으로 상수를 관리할 수 있어요.enum.auto()를 사용하면 값은 자동으로 부여됩니다. enum을 쓰는 이유 예시def train_model(model_type): i..

Python namedtuple – 왜, 언제 사용하는 걸까?

파이썬을 하다 보면 namedtuple을 종종 보게 됩니다.이 글에서는 namedtuple이 왜 필요하고, 언제 사용해야 하는지간단하고 명확하게 정리해봅니다. namedtuple이란?namedtuple은 이름을 가진 튜플을 쉽게 만들기 위한 도구입니다.collections 모듈에서 제공하며, 다음과 같이 사용할 수 있습니다.from collections import namedtupleModelInfo = namedtuple("ModelInfo", ["filename", "params"])model = ModelInfo(filename="xgb_model.json", params={"n_estimators": 100}) model.filename처럼 이름으로 필드에 접근할 수 있고기본 튜플처럼 가볍고 빠른..

파이썬에서 언더스코어 두 개(__)와 Name Mangling(맹글링)의 차이

파이썬 코드를 보다 보면어떤 파일이나 변수 이름에 언더스코어(_)가 두 개 붙은 것을 볼 수 있습니다.이 글에서는파일명/변수명에 언더스코어를 두 개 붙이는 이유Name Mangling(맹글링)이란 무엇인가맹글링은 왜 필요한가를 차근차근 정리해봅니다. 언더스코어 두 개(__) 사용 – 내부 전용 표시파이썬에서는 파일이나 변수 이름 앞에 **언더스코어 두 개(__)**를 붙이면,"이건 내부 전용이니까 외부에서 직접 쓰지 마세요" 라는 의미를 전달합니다.❗ 하지만 주의할 점:Python은 이걸 강제하지 않습니다.단순히 **"개발자끼리의 약속(convention)"**일 뿐입니다. 예시:project/├── __internal_module.py├── public_module.py __internal_module..

파이썬 pathlib에서 디렉토리 생성할 때 알아야 할 두 가지 옵션

파이썬 프로젝트를 구성할 때, 필요한 폴더(디렉토리)를 자동으로 생성해주는 코드를 자주 작성합니다.특히 pathlib 모듈을 사용할 때는 mkdir() 메서드의 두 가지 옵션을 제대로 이해하는 것이 중요합니다.이번 글에서는 그 옵션들을 간단하게 정리해볼게요. 기본 코드 예시for dir_path in [DATA_DIR, RAW_DATA_DIR, PROCESSED_DATA_DIR, MODEL_OUTPUT_DIR]: dir_path.mkdir(parents=True, exist_ok=True) 두 가지 중요한 옵션 왜 이 옵션이 필요할까?parents=True가 없으면 상위 폴더가 없을 때 오류가 발생할 수 있어요.exist_ok=True가 없으면 이미 폴더가 존재할 경우 오류가 나버립니다.→ 이 ..

파이썬에서 변수명을 대문자로 쓰는 이유는?

파이썬 코드에서 가끔 PROJECT_ROOT, **DATA_DIR**처럼모두 대문자로 작성된 변수명을 볼 때가 있습니다."왜 소문자가 아니라 대문자로 썼을까?" 궁금해본 적이 있다면,이 글을 통해 간단히 정리해볼게요! 대문자 변수는 "상수"를 의미한다파이썬에서는 변하지 않는 값(상수, Constant) 을대문자+언더스코어 형식으로 작성하는 것이 관례입니다. 예를 들어:PROJECT_ROOT = Path(__file__).resolve().parentDATA_DIR = PROJECT_ROOT / "data" 여기서 PROJECT_ROOT, DATA_DIR는코드 실행 중에 변하지 않을 값을 저장하는 용도입니다. 왜 대문자로 작성할까? 공식 권장사항 (PEP8)파이썬 스타일 가이드(PEP8)에서도 이렇게 ..

os.path vs pathlib.Path – 파이썬 경로 처리 방식 차이 이해하기

파이썬에서 파일이나 디렉토리 경로를 다룰 때 os.path와 pathlib.Path를 모두 볼 수 있습니다.둘은 비슷해 보이지만, 실제로는 스타일과 철학이 다릅니다.이번 글에서는 이 둘의 차이를 간단하고 직관적으로 정리해보겠습니다. os.path란?os.path는 경로 관련 기능을 제공하는 함수 기반 모듈입니다.경로 연결, 절대 경로 변환, 디렉토리 추출 등을 함수로 처리합니다.전통적인 방식으로, 파이썬 초창기부터 존재해왔습니다.import osPROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) pathlib.Path란?pathlib.Path는 객체지향 방식으로 경로를 다루는 모듈입니다.파이썬 3.4부터 도입된 비교적 현대적인 스타일입니다.경로를 문자열..

GitLab Docker 설정에서 $GITLAB_HOME은 호스트일까? 컨테이너일까?

Docker로 GitLab을 설치할 때 docker-compose.yml 파일 안에서 가장 헷갈리는 부분 중 하나는 바로 volumes 설정입니다.volumes: - '$GITLAB_HOME/config:/etc/gitlab' 이 구문을 보면 "GitLab을 호스트로 보는 건가?", "GitLab이 컨테이너인데 왜 이렇게 연결하지?" 같은 의문이 생길 수 있어요. 이 글에서는 그 구조를 직관적으로 이해할 수 있도록 정리해볼게요. 볼륨(volume)이란?Docker에서 볼륨은 호스트와 컨테이너 사이의 파일 공유 공간입니다.컨테이너가 생성되고 삭제돼도, 데이터는 **호스트의 볼륨에 남기 때문에 영속성(persistence)**을 유지할 수 있어요. $GITLAB_HOME/config:/etc/gitlab ..

GitLab Docker에서 포트 설정이 중요한 이유 – 포트 매핑 완벽 이해하기

GitLab을 Docker Compose로 실행할 때 docker-compose.yml 안에서 반드시 설정해야 하는 부분 중 하나가 바로 ports:입니다. 단순히 컨테이너를 실행한다고 끝나는 것이 아니라, 컨테이너 내부의 서비스를 외부에서 접근 가능하도록 "열어줘야" 하거든요. 포트 매핑(port mapping)이란?컨테이너는 기본적으로 호스트(서버 또는 내 PC)와 분리된 가상 네트워크 안에서 실행됩니다.이 말은 곧, 컨테이너 안에서 GitLab이 80, 443, 22 포트를 사용하고 있어도외부에서는 그 포트에 접근할 수 없다는 뜻이에요.그래서 필요한 게 바로 **포트 매핑(port mapping)**입니다. 포트 매핑 예시ports: - "80:80" - "443:443" - "22:22" ..

환경변수는 파라미터처럼 동작한다 — GITLAB_OMNIBUS_CONFIG 이해하기

Docker로 GitLab을 실행할 때 자주 보게 되는 설정 중 하나가 바로 GITLAB_OMNIBUS_CONFIG입니다.이 환경변수는 마치 함수에 파라미터를 전달하듯,컨테이너 내부 GitLab 인스턴스에 설정 값을 외부에서 넘겨주는 역할을 합니다. 환경변수는 파라미터처럼 동작한다Docker에서 컨테이너를 실행할 때 environment: 항목을 통해 환경변수를 지정할 수 있습니다.이 값들은 컨테이너 내부의 앱이나 서비스가 실행될 때 설정 값 또는 조건처럼 사용됩니다.environment: GITLAB_OMNIBUS_CONFIG: | external_url 'https://gitlab.example.com' → 이 구조는 마치 아래와 같이 함수에 인자를 전달하는 것과 유사합니다:def start_..