코드 결과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. * (별표)키워드 전용..
Avro 파일형식Apache Avro는 데이터 직렬화(Serialization) 시스템이자 파일 포맷으로, 주로 스키마(메타데이터) 기반으로 데이터를 효율적으로 인코딩하고 전송 및 저장하기 위해 설계됨.Hadoop, Kafka 등 빅데이터 에코시스템에서 널리 사용되며,스키마 진화(진화적 스키마 변경)와 RPC(원격 프로시저 호출) 기능을 염두에 둔 포맷이라는 점이 가장 큰 특징임.Avro를 이해하기 위해서는 내부 구조, 스키마 정의 방식, 직렬화·역직렬화 메커니즘, 스키마 호환성, Avro 컨테이너 파일(Avro Object Container) 구조, 운영 시나리오 등을 종합적으로 살펴봐야 함. Avro의 핵심 특징1. 스키마 기반(점진적 스키마 진화 지원)Avro는 데이터를 직렬화할 때, 별도의 스키마..
Apache ParquetApache Parquet은 컬럼 지향(Columnar) 저장 형식임.대규모 분산 처리 환경(Hadoop, Spark 등)에서 효율적으로 데이터 분석을 수행하기 위한 오픈소스 파일 포맷임.빠른 쿼리 성능, 높은 압축률, 유연한 스키마 정의 등 다양한 이점을 제공하여 빅데이터 생태계에서 사실상 표준으로 자리 잡음. Apache Parquet 특징과 철학1. 컬럼 지향 저장 방식(Columnar Format)Parquet은 같은 컬럼(열)의 데이터를 인접하게 저장하여, 열 단위로 효율적으로 읽고 쓸 수 있도록 함.예를 들어 “age”, “gender”, “income” 등의 컬럼이 있을 때, 행(row) 단위 포맷(CSV, JSON)에서는 레코드 1행, 2행, 3행 순으로 데이터를 ..
쿠버네티스의 etcd쿠버네티스(Kubernetes)에서 etcd는 클러스터 상태를 영구적으로 저장하기 위한 분산 Key-Value 저장소임.모든 Kubernetes 오브젝트(네임스페이스, 파드, 서비스, 컨피그맵, 시크릿, RBAC, CRD 등)의 메타데이터와 상태 정보가 etcd에 저장되므로, etcd가 멈추면 쿠버네티스의 컨트롤 플레인 전체가 동작할 수 없게 됨.따라서 etcd는 쿠버네티스에서 가장 중요한 컴포넌트 중 하나임. etcd의 특징 및 아키텍처1. Key-Value 모델etcd는 key → value 형태로 데이터를 저장함.쿠버네티스의 모든 리소스 정보는 특정 경로(Key)에 직렬화된 형태(주로 JSON 등)로 저장됨.예를 들면 다음과 같음./registry/pods//, /registry..
쿠버네티스의 컨트롤플레인쿠버네티스(Kubernetes) 아키텍처에서 컨트롤 플레인(Control Plane)은 클러스터 전반의 ‘두뇌’ 역할을 수행하는 핵심 컴포넌트들의 집합임.즉, 워커 노드(Worker Node)와 파드(Pod)를 비롯한 모든 리소스를 제어하고 관리하는 중앙 집행부라고 볼 수 있음.컨트롤 플레인의 주요 목적은 클러스터 상태를 파악하고(상태 관리), 요청에 따른 적절한 자원 할당(스케줄링), 리소스의 원하는 상태(Desired State) 보장을 통해 전체 클러스터가 정상적으로 동작하도록 유지 및 관리하는 데 있음. 주요 구성 요소 : kube-apiserver1. 역할쿠버네티스의 프런트엔드(Front-end) HTTP/REST API 역할을 수행함.모든 요청(클라이언트, 내부 컴포넌트..
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 등)에서 ..
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 보안 등 추가 설정이 필요..
OAuthOAuth(Open Authorization)은 API 보안을 위해 등장한 오픈 표준(Open Standard) 프로토콜임.사용자가 애플리케이션(클라이언트)에게 자신의 자격 증명(예: 비밀번호 등)을 직접 제공하지 않고도 제3의 서비스(리소스 서버)에 접근할 수 있도록 “권한 위임(Authorization Delegation)”을 가능하게 하는 체계임.주로 “소셜 로그인” 방식이나, 다른 플랫폼 간 데이터 공유·접근을 위임할 때 활용됨.최근에는 OAuth 2.0이 가장 널리 쓰이며, OAuth 1.0a는 이전 버전이지만 보안상의 특징 덕분에 일부 환경에서 쓰이기도 함. OAuth의 주요 개념 및 용어1. Resource Owner(리소스 소유자)사용자를 의미함.실제로 보호된 자원(Protecte..
쿠버네티스에서 롤링 업데이트쿠버네티스(Kubernetes)에서 롤링 업데이트(Rolling Update)는 애플리케이션을 중단 없이 점진적으로 새 버전(이미지, 설정 등)을 배포하는 방법을 의미함.이를 통해 서비스 가용성을 유지하면서 새로운 버전을 배포할 수 있음. 롤링 업데이트의 기본 개념1. 점진적 배포(Gradual Deployment)기존 파드를 전부 내려버리고 새 파드를 한 번에 띄우는 방식(“빅뱅” 방식)이 아닌, 기존 파드와 새 파드를 일정 비율/순서대로 교체해 나가는 배포 방식임. 2. 무중단 서비스(Zero-downtime)최대한 “무중단(Zero-downtime)”을 지향함.기존 버전을 종료하기 전에 일부 새 버전을 먼저 올려서 트래픽을 대체하도록 함. 3. ReplicaSet / D..