전체 글

데이터엔지니어 / Data Engineer
Programming Language/Python

[Python] Miniconda 주요 특징

Miniconda미니콘다(Miniconda)는 파이썬/데이터 과학 생태계에서 널리 사용되는 경량 배포판(lightweight distribution)임.아나콘다(Anaconda)의 패키지 관리자(conda)와 필수 파이썬 환경만 제공하는 최소 구성 버전임.아나콘다와 비교했을 때 부피가 작고, 필요한 라이브러리들을 개별적으로 설치함으로써 보다 유연하고 미니멀한 구성을 선호하는 사용자층에게 적합함. 미니콘다의 주요 특징1. 경량 배포판미니콘다는 필수 파이썬(또는 R) 인터프리터와 conda 패키지 관리자만 포함하여 크기가 매우 작음(수십 MB 수준).아나콘다(수 GB 단위)와 달리 초기 설치 용량이 작으므로, 디스크 용량을 절약하며 빠르게 설치할 수 있음. 2. 유연한 환경 관리conda 환경 관리 기능은 ..

Programming Language/Python

[Python] Anaconda 핵심 요소

Anaconda아나콘다(Anaconda)는 데이터 과학, 머신러닝, 인공지능, 통계 분석 등을 위한 오픈소스 기반의 파이썬(Python) 및 R 언어 배포판(distribution)임.아나콘다 배포판은 복잡한 라이브러리 의존성을 체계적으로 관리하고, 개발 환경을 독립적으로 구성하기 쉽게 만들어 주므로, 데이터 사이언스 분야에서 사실상 표준 도구로 자주 사용됨. 아나콘다의 핵심 요소 1. 파이썬 및 R 환경 통합아나콘다는 데이터 사이언스 및 과학 컴퓨팅에 주로 사용되는 수백 가지의 파이썬 및 R 라이브러리를 포함하고 있음.특히 NumPy, pandas, SciPy, scikit-learn, Matplotlib, TensorFlow, PyTorch 등과 같은 핵심 라이브러리들이 미리 빌드되어 제공됨.R 언어..

Operating System/Computer

[Computer] HTTP 프로토콜

HTTP 개요HTTP(Hypertext Transfer Protocol)는 월드 와이드 웹(WWW)에서 하이퍼텍스트 문서를 전송하기 위한 애플리케이션 계층 프로토콜임.기본적으로 요청(Request)과 응답(Response) 기반의 비상태성(Stateless) 통신 방식으로 동작함.클라이언트와 서버 간의 자원(Resource) 교환을 책임짐. 1. 애플리케이션 계층TCP/IP 프로토콜 스택에서 가장 상위 계층으로, 사용자는 주로 이 계층에서 웹 브라우저, 웹 서버, API 서버 등의 애플리케이션을 통해 HTTP 프로토콜을 다루게 됨. 2. 비상태성(stateless)한 번의 요청-응답이 끝나면 연결 정보나 상태를 서버가 별도로 유지하지 않는 특징이 있음.이로 인해 확장성과 단순성이 뛰어나지만, 세션(ses..

Programming Language/Python

[Python] 데이터프레임 S3 저장 함수

코드 결과def save_to_parquet(self, *, df: pd.DataFrame, s3_output_path: str) -> None: df.to_parquet( path=s3_output_path, engine="pyarrow", compression="snappy", index=False, ) 설명위 코드는 Pandas DataFrame을 Parquet 포맷으로 저장하되, S3 경로를 직접 지정해 업로드하는 기능을 수행함. 함수 시그니처def save_to_parquet(self, *, df: pd.DataFrame, s3_output_path: str) -> None:1. self: 보통 클래스 내부 메서드(인스턴스 메서드)를 ..

Programming Language/Python

[Python] 파이썬에서 아테나에 쿼리를 실행하는 방법

코드 결과def fetchall_athena(self, *, query_string: str) -> list: client = boto3.client("athena") query_id = client.start_query_execution( QueryString=query_string, ResultConfiguration={ "OutputLocation": "s3:///" }, )["QueryExecutionId"] query_status = None while query_status in ["QUEUED", "RUNNING", None]: query_status = client.get_query_execut..

Programming Language/Python

[Python] 특정 기간동안 일 단위 날짜 함수

코드 결과def generate_daily_intervals(self, *, start_date: datetime, end_date: datetime): delta = timedelta(days=1) while start_date  코드 설명Python에서 제너레이터 함수(Generator Function)를 활용해, 특정 기간 동안 일 단위로 날짜를 순회하는 기능을 구현한 예시임. 함수 정의 시그니처def generate_daily_intervals(self, *, start_date: datetime, end_date: datetime): ...1. self클래스 메서드(인스턴스 메서드) 안에서 정의됨.메서드를 호출할 때 인스턴스 자신이 self로 전달됨. 2. * (별표)키워드 전용..

Programming Language/Python

[Python] Avro 파일 개념

Avro 파일형식Apache Avro는 데이터 직렬화(Serialization) 시스템이자 파일 포맷으로, 주로 스키마(메타데이터) 기반으로 데이터를 효율적으로 인코딩하고 전송 및 저장하기 위해 설계됨.Hadoop, Kafka 등 빅데이터 에코시스템에서 널리 사용되며,스키마 진화(진화적 스키마 변경)와 RPC(원격 프로시저 호출) 기능을 염두에 둔 포맷이라는 점이 가장 큰 특징임.Avro를 이해하기 위해서는 내부 구조, 스키마 정의 방식, 직렬화·역직렬화 메커니즘, 스키마 호환성, Avro 컨테이너 파일(Avro Object Container) 구조, 운영 시나리오 등을 종합적으로 살펴봐야 함. Avro의 핵심 특징1. 스키마 기반(점진적 스키마 진화 지원)Avro는 데이터를 직렬화할 때, 별도의 스키마..

Programming Language/Python

[Python] Parquet 파일 개념

Apache ParquetApache Parquet은 컬럼 지향(Columnar) 저장 형식임.대규모 분산 처리 환경(Hadoop, Spark 등)에서 효율적으로 데이터 분석을 수행하기 위한 오픈소스 파일 포맷임.빠른 쿼리 성능, 높은 압축률, 유연한 스키마 정의 등 다양한 이점을 제공하여 빅데이터 생태계에서 사실상 표준으로 자리 잡음. Apache Parquet 특징과 철학1. 컬럼 지향 저장 방식(Columnar Format)Parquet은 같은 컬럼(열)의 데이터를 인접하게 저장하여, 열 단위로 효율적으로 읽고 쓸 수 있도록 함.예를 들어 “age”, “gender”, “income” 등의 컬럼이 있을 때, 행(row) 단위 포맷(CSV, JSON)에서는 레코드 1행, 2행, 3행 순으로 데이터를 ..

Operating System/Kubernetes

[Kubernetes] 쿠버네티스의 etcd 개념

쿠버네티스의 etcd쿠버네티스(Kubernetes)에서 etcd는 클러스터 상태를 영구적으로 저장하기 위한 분산 Key-Value 저장소임.모든 Kubernetes 오브젝트(네임스페이스, 파드, 서비스, 컨피그맵, 시크릿, RBAC, CRD 등)의 메타데이터와 상태 정보가 etcd에 저장되므로, etcd가 멈추면 쿠버네티스의 컨트롤 플레인 전체가 동작할 수 없게 됨.따라서 etcd는 쿠버네티스에서 가장 중요한 컴포넌트 중 하나임. etcd의 특징 및 아키텍처1. Key-Value 모델etcd는 key → value 형태로 데이터를 저장함.쿠버네티스의 모든 리소스 정보는 특정 경로(Key)에 직렬화된 형태(주로 JSON 등)로 저장됨.예를 들면 다음과 같음./registry/pods//, /registry..

Operating System/Kubernetes

[Kubernetes] 컨트롤플레인 개념

쿠버네티스의 컨트롤플레인쿠버네티스(Kubernetes) 아키텍처에서 컨트롤 플레인(Control Plane)은 클러스터 전반의 ‘두뇌’ 역할을 수행하는 핵심 컴포넌트들의 집합임.즉, 워커 노드(Worker Node)와 파드(Pod)를 비롯한 모든 리소스를 제어하고 관리하는 중앙 집행부라고 볼 수 있음.컨트롤 플레인의 주요 목적은 클러스터 상태를 파악하고(상태 관리), 요청에 따른 적절한 자원 할당(스케줄링), 리소스의 원하는 상태(Desired State) 보장을 통해 전체 클러스터가 정상적으로 동작하도록 유지 및 관리하는 데 있음. 주요 구성 요소 : kube-apiserver1. 역할쿠버네티스의 프런트엔드(Front-end) HTTP/REST API 역할을 수행함.모든 요청(클라이언트, 내부 컴포넌트..

Operating System/Kubernetes

[Kubernetes] Flask의 AUTH_ROLES_MAPPING 및 AUTH_USER_REGISTRATION_ROLE

Flask의 AUTH_ROLES_MAPPING 및 AUTH_USER_REGISTRATION_ROLEFlask-AppBuilder(FAB)에서 사용자 등록과 역할(Role) 할당은 매우 중요한 보안·권한 관리 요소임.FAB는 다양한 인증 방식(DB, LDAP, OAuth 등)을 지원하는데, 새로운 사용자가 등록되거나 OAuth 등 외부 인증 프로바이더로부터 로그인할 때, 어떤 Role을 부여할지 정해야 함.이때 설정값인 AUTH_ROLES_MAPPING과 AUTH_USER_REGISTRATION_ROLE이 핵심적인 역할을 담당함. AUTH_ROLES_MAPPING: 외부 인증 Role → FAB Role 매핑AUTH_ROLES_MAPPING은 외부 인증 소스(OAuth Provider, LDAP 등)에서 ..

Operating System/Kubernetes

[Kubernetes] FlaskAppBuilder + Github OAuth

FlaskAppBuilder + Github OAuth아래는 Flask-AppBuilder(이하 FAB) 애플리케이션에서 GitHub OAuth로 로그인(인가) 연동을 구현하는 간단한 예시 코드임. 전제 조건은 다음과 같음.GitHub에서 OAuth App을 등록하여 Client ID, Client Secret을 발급받아야 함.등록 시 “Authorization callback URL”에 본인 앱의 콜백 경로를 정확히 설정해야 함.예를 들면, https://example.com/oauth-authorized/github (FAB 기본 콜백 패턴).아래 코드 예시는 최소 구성임.실제 서비스에 적용 시 데이터베이스, 권한 그룹(Role) 설정, HTTPS 구성, SECRET_KEY 보안 등 추가 설정이 필요..

Operating System/Kubernetes

[Kubernetes] OAuth 개념

OAuthOAuth(Open Authorization)은 API 보안을 위해 등장한 오픈 표준(Open Standard) 프로토콜임.사용자가 애플리케이션(클라이언트)에게 자신의 자격 증명(예: 비밀번호 등)을 직접 제공하지 않고도 제3의 서비스(리소스 서버)에 접근할 수 있도록 “권한 위임(Authorization Delegation)”을 가능하게 하는 체계임.주로 “소셜 로그인” 방식이나, 다른 플랫폼 간 데이터 공유·접근을 위임할 때 활용됨.최근에는 OAuth 2.0이 가장 널리 쓰이며, OAuth 1.0a는 이전 버전이지만 보안상의 특징 덕분에 일부 환경에서 쓰이기도 함. OAuth의 주요 개념 및 용어1. Resource Owner(리소스 소유자)사용자를 의미함.실제로 보호된 자원(Protecte..

Operating System/Kubernetes

[Kubernetes] 롤링 업데이트 개념

쿠버네티스에서 롤링 업데이트쿠버네티스(Kubernetes)에서 롤링 업데이트(Rolling Update)는 애플리케이션을 중단 없이 점진적으로 새 버전(이미지, 설정 등)을 배포하는 방법을 의미함.이를 통해 서비스 가용성을 유지하면서 새로운 버전을 배포할 수 있음. 롤링 업데이트의 기본 개념1. 점진적 배포(Gradual Deployment)기존 파드를 전부 내려버리고 새 파드를 한 번에 띄우는 방식(“빅뱅” 방식)이 아닌, 기존 파드와 새 파드를 일정 비율/순서대로 교체해 나가는 배포 방식임. 2. 무중단 서비스(Zero-downtime)최대한 “무중단(Zero-downtime)”을 지향함.기존 버전을 종료하기 전에 일부 새 버전을 먼저 올려서 트래픽을 대체하도록 함. 3. ReplicaSet / D..

Operating System/Kubernetes

[Kubernetes] 쿠버네티스의 앤드포인트

쿠버네티스의 앤드포인트쿠버네티스(Kubernetes)에서 “엔드포인트(Endpoint)”는 크게 두 가지 관점에서 이해할 수 있음.1. Kubernetes 리소스로서의 Endpoints(오브젝트)2. Service가 내부적으로 관리하는 Endpoints(서비스와 파드(Pod) 간 연결 정보)둘 다 공통적으로 “Service가 라우팅해야 하는 실제 대상(주로 파드)의 IP 및 포트 정보”를 담고 있다는 점에서는 유사하지만, 쿠버네티스 API 상에서 관리되는 방법이나 동작 방식에 차이가 있음.Endpoints 오브젝트 - 정의Endpoints는 Kubernetes가 각 Service에 연결된 파드들의 네트워크 위치(주로 IP와 Port)를 추적하기 위해 생성하는 리소스임.쿠버네티스에서 Service 오브젝..

Operating System/Kubernetes

[Kubernetes] 리소스 종류

쿠버네티스 리소스 종류쿠버네티스(Kubernetes)는 클러스터 환경에서 컨테이너화된 워크로드 및 서비스를 간편하고 효율적으로 배포·운영할 수 있도록 하는 컨테이너 오케스트레이션 플랫폼임.쿠버네티스는 다양한 “리소스(자원) 유형”을 정의하여, 각각의 목적과 기능에 따라 애플리케이션 및 인프라를 구성 및 관리함. 리소스 개념1. Kubernetes Resource쿠버네티스 API에서 관리되는 모든 “객체(Object)”를 가리킴.Pod, Service, Deployment, ConfigMap, Secret 등이 대표적임. 2. 리소스 스펙(Spec)과 상태(Status)쿠버네티스 오브젝트마다 “스펙(Spec)” 필드를 통해 원하는 상태(Desired State)를 정의함.실제 시스템이 인식하는 현재 상태(..

Operating System/Kubernetes

[Kubernetes] 쿠버네티스의 Secret 및 ConfigMap

쿠버네티스의 Secret 및 ConfigMap쿠버네티스(Kubernetes)에서 애플리케이션을 구성할 때 ConfigMap과 Secret은 매우 중요한 리소스 유형임. ConfigMap - 정의ConfigMap은 애플리케이션이 사용하는 구성(configuration) 데이터를 키-값(key-value) 쌍 형태로 저장하는 쿠버네티스 오브젝트임.예컨대 데이터베이스 연결 정보, 외부 API의 엔드포인트 주소, 환경 변수, 설정 파일 내용 등을 관리할 수 있음.ConfigMap 자체는 암호화되지 않은 일반 텍스트 형태로 데이터가 저장되므로 민감하지 않은 구성 정보에 사용하는 것을 권장함. ConfigMap - 주요 특징1. Key-Value 저장 구조data나 binaryData 필드에 JSON, YAML, ..

Operating System/Kubernetes

[Kubernetes] EKS 생성시 자동으로 생성되는 노드의 라벨

EKS 생성시 자동으로 생성되는 노드의 라벨Amazon EKS(Elastic Kubernetes Service)에서 매니지드 노드 그룹을 생성하거나, eksctl과 같은 툴을 사용해서 노드를 생성했을 때, 노드에는 AWS에서 자동으로 설정해주는 여러 가지 라벨(Label)이 붙음.이러한 라벨들은 크게 아래와 같은 목적을 가짐. 1. AWS 리소스 정보 노출2. 클러스터/노드 그룹 구분3. 리전/가용영역(Zone) 정보4. 쿠버네티스(및 Add-on) 스케줄링 최적화 리전(Region) 및 가용영역(Zone) 관련 라벨1. topology.kubernetes.io/region예시: topology.kubernetes.io/region=us-west-2역할: 해당 노드가 속해 있는 AWS 리전을 나타냅니다...

Operating System/Kubernetes

[Kubernetes] Affinity 개념

쿠버네티스의 Affinity쿠버네티스(Kubernetes)에서 애피니티(Affinity)는 파드를 어떤 노드, 혹은 어떤 다른 파드와 함께(또는 떨어져) 배치할지를 제어하는 스케줄링(Scheduling) 정책임.즉, 단순히 CPU, 메모리와 같은 리소스 사용량만을 보는 것이 아니라, 클러스터에 존재하는 노드 라벨, 파드 라벨 등을 기준으로 세밀하게 파드를 배치하는 방식임.애피니티에는 크게 아래와 같은 유형이 있음. 1. Node Affinity2. Pod Affinity3. Pod Anti-Affinity Node AffinityNode Affinity는 파드를 특정 노드 라벨(label)이 있는 노드에 스케줄링하도록 강제하거나, 혹은 스케줄러가 선호(prefer)하도록 유도하는 정책임.예를 들어, “r..

Operating System/Kubernetes

[Kubernetes] Deployment 배포 전략 종류

Deployment 배포 전략 종류쿠버네티스(Kubernetes)에서 Deployment 객체를 사용하여 애플리케이션을 배포할 때, 원하는 방식에 따라 여러 가지 배포 전략(Deployment Strategy)을 적용할 수 있음.기본적으로 쿠버네티스 Deployment에는 크게 두 가지 전략이 내장되어 있음.이를 확장하거나 변형해서 다양한 배포 패턴을 구현할 수 있음. RollingUpdate 전략 - 개요RollingUpdate 전략은 기존 버전의 파드를 점진적으로 종료하고, 새 버전의 파드를 점진적으로 생성하면서 트래픽 중단을 최소화하는 전략임.이 방식은 한 번에 하나 혹은 여러 개의 파드를 새 버전으로 교체해나가기 때문에, 애플리케이션 다운타임을 최소화하고 점진적(Gradual) 배포가 가능함. R..