전체 글

데이터엔지니어 / Data Engineer
Data Engineering/Spark

[Spark] Apache Spark 개념

Apache Spark 개념Apache Spark는 대규모 데이터를 빠르게 처리하고 분석하기 위해 만들어진 오픈 소스 분산 컴퓨팅 프레임워크임.탄탄한 메모리 기반의 처리 성능과 유연한 API로 빅데이터 생태계에서 핵심적인 위치를 차지하고 있음. Apache Spark 탄생 배경과 특징1. 탄생 배경초기 빅데이터 처리는 주로 Hadoop MapReduce가 담당했으나, 반복 연산이나 실시간·대화형 분석에 상대적으로 부적합했음(디스크 기반 처리, 반복 작업 시 I/O 부담 등이 크기 때문).Spark는 UC Berkeley AMP Lab에서 메모리에 최적화된 고속 분산 처리 엔진을 구현하기 위해 시작된 프로젝트로, 이후 Apache Software Foundation에 기여되어 활발하게 발전해 왔음. 2. ..

Data Engineering/Spark

[Spark] Pyspark에서 repartition(), coalesce() 사용

repartition()와 coalesce()의 역할과 차이점repartition()과 coalesce()는 Spark에서 데이터 파티셔닝 개수(=파티션 수)를 재조정하는 함수임.파티션은 Spark의 분산 처리 단위로, 적절한 파티션 수를 유지하면 클러스터 자원을 효율적으로 사용할 수 있음.두 함수의 특징은 아래와 같음. 1. repartition(n)데이터셋을 지정한 n개의 파티션으로 새롭게 분산.파티션 수를 늘리거나 줄이는 모든 경우에 사용 가능.셔플(Shuffle)이 항상 발생하기 때문에 비용이 높은 연산.파티션을 분산시킬 때 무작위 랜덤 샘플링 방식으로 데이터를 재분배하므로 전체 데이터를 고르게 분산하려는 경우 유용.예) df.repartition(10): DataFrame의 파티션을 10개로 만..

Data Engineering/Spark

[Spark] Disk Spill

Disk SpillApache Spark에서 디스크 스필(Disk Spill)이란, 메모리 내에서 처리하기 어려울 정도로 데이터가 많아졌을 때 데이터를 디스크(주로 임시 디렉터리)에 임시로 저장(“스필”)하여 처리를 이어가는 과정을 말함.이는 Spark가 분산 환경에서 대용량 데이터를 다룰 때 발생할 수 있는 정상적인 현상이며, 메모리를 효율적으로 활용하기 위해 설계된 핵심 매커니즘 중 하나임. 디스크 스필의 작동 원리1. 메모리 기반 연산의 한계Spark는 RDD(Resilient Distributed Dataset)나 Dataset/DataFrame 연산 시 최대한 메모리에서 데이터를 처리하여 빠른 속도를 추구함.그러나 다음과 같은 상황에서 메모리만으로는 처리가 어려워짐. 1-1. 작업(Task)에서..

Data Engineering/Spark

[Spark] SparkSQL의 Window함수 종류

SparkSQL의 Window함수 종류아파치 스파크(Spark)에서 윈도우 함수(Window Function)는 SQL 표준에서 정의된 윈도우 함수와 유사한 기능을 제공하며, 데이터 분석 및 처리 시 그룹 내에서의 순위, 이전/다음 행과의 비교, 누적값 계산 등 다양한 패턴을 효율적으로 구현할 수 있음.윈도우 함수는 GROUP BY 기반의 집계 함수로는 해결하기 어려운, 세분화된 계산 로직이 필요한 경우 자주 사용됨. 윈도우 스펙윈도우 함수를 사용하기 위해서는 먼저 윈도우 스펙(Window Specification)을 정의해야 함.윈도우 스펙은 다음 세 가지 요소로 구성됨. 1. PARTITION BY: 행을 어떤 기준으로 파티션(그룹) 지을 것인지 정의함.2. ORDER BY: 파티션 내에서의 정렬 순..

Data Engineering/Spark

[Spark] Apache Spark 구조

Apache Spark 구조Apache Spark는 분산 컴퓨팅 환경에서 대규모 데이터를 빠르게 처리할 수 있도록 설계된 클러스터 컴퓨팅 프레임워크임.Spark의 구조(아키텍처)를 이해하려면 먼저 Spark가 어떻게 동작하는지, 어떤 컴포넌트로 구성되어 있는지, 그리고 내부에서 어떤 메커니즘으로 최적화가 이루어지는지를 살펴볼 필요가 있음. 핵심 컴포넌트 개요Apache Spark에는 크게 다음과 같은 핵심 컴포넌트들이 존재함. 1. Driver (스파크 드라이버)2. Cluster Manager (클러스터 매니저)3. Executors (실행기)4. SparkSession / SparkContext (애플리케이션 진입점)5. RDD / Dataset / DataFrame (데이터 추상화)6. Cataly..

Data Engineering/Spark

[Spark] Apache Iceberg

Apache IcebergApache Iceberg는 아파치 재단의 오픈 소스 테이블 포맷(table format) 프로젝트임.대규모 데이터 레이크에서 테이블 단위의 관리와 ACID(원자성, 일관성, 격리성, 내구성) 트랜잭션을 안정적으로 지원하기 위해 설계됨.Iceberg는 기존에 많이 쓰이던 Hadoop/Hive 테이블 포맷이 갖는 문제점(예: 수많은 작은 파일이 생기는 문제, 스키마 진화와 파티셔닝의 유연성 부족, 트랜잭션 동시성 문제 등)을 해결하고자 도입됨.특히 Spark, Trino, Flink, Presto 등 다양한 엔진과의 연동이 활발하며, 데이터 레이크 상에서 DW(데이터 웨어하우스)에 준하는 기능을 제공하는 것을 목표로 하고 있음. Iceberg의 핵심 설계 목표1. 정확한 스냅샷/버..

Data Engineering/Spark

[Spark] Apache ORC 파일 구조

Apache ORC 파일 구조Apache ORC(Optimized Row Columnar) 파일은 빅데이터 환경에서 효율적인 컬럼 지향 분석 쿼리를 지원하기 위해 설계된 파일 포맷임.주로 Apache Hive, Apache Spark, Presto, Trino 등 다양한 분산 SQL 엔진 및 Hadoop 에코시스템에서 사용되며, 대규모 데이터 집합을 더 빠르고 더 적은 자원을 사용하여 처리할 수 있도록 여러 최적화를 내장하고 있음. 전체 파일 구조ORC 파일은 크게 다음과 같은 구성 요소로 이루어짐. 1. Postscript2. Footer3. Stripes (파일에서 실제 데이터가 저장되는 단위) [스트라이프들] [Footer] [Postscript]파일의 끝 부분에 Postscript와 Footer가..

Data Engineering/Spark

[Spark] Apache Parquet 파일 구조

Apache Parquet 파일 구조Apache Parquet는 컬럼 지향형(columnar) 저장 형식을 채택한 고성능 분석용 파일 포맷임.분산 시스템(예: Hadoop, Spark)에서 효율적인 저장 및 분석 작업을 하기 위해 설계되었으며, 적절한 인덱싱과 압축, 인코딩 방식을 결합함으로써 높은 성능을 제공함.내부 구조는 크게 File Header, File Footer, 그리고 그 사이를 구성하는 Row Group(안에는 여러 column chunk 및 page가 존재)으로 나눌 수 있음. 전체적인 파일 구조Parquet 파일은 논리적으로 다음과 같은 구성을 가짐.+-------------------+--------------------------+-----------------+| File ..

Data Engineering/Spark

[Spark] Spark Application 실행 과정

Spark Application 실행 과정아파치 스파크(Apache Spark)는 대규모 데이터 처리를 위해 설계된 분산 컴퓨팅 프레임워크임.스파크 애플리케이션은 “드라이버(Driver)”와 “익스큐터(Executor)”가 상호작용하며 작업을 수행하는 구조로 동작함.이때 기본적으로 스파크 애플리케이션이 생성되고 실행되는 과정을 이해하면, 내부 아키텍처나 최적화 전략을 수립하는 데 큰 도움이 됨. 스파크 애플리케이션의 구성 요소1. Driver Program(드라이버)사용자 코드(예: 스칼라, 파이썬, 자바 등)에서 SparkSession 또는 SparkContext를 초기화하면, 드라이버가 생성됨.드라이버는 스파크 애플리케이션의 메인 진입점으로, 전체 실행 계획(DAG)을 관리하고, 스케줄링하고, 작업(..

Operating System/Computer

[Computer] ChatOps

ChatOpsChatOps(챗옵스, Chat Operations)은 협업 도구(슬랙, 마이크로소프트 팀즈 등)와 자동화 툴(예: CI/CD 파이프라인, 스크립트, 봇 등)을 밀접하게 연동하여 팀이 작업을 수행하고 모니터링할 수 있도록 하는 실무 방식(Practices)임.간단히 말해, “채팅에서 직접 시스템을 제어하고 모니터링하자”라는 개념임.DevOps 문화와 애자일(Agile) 협업 문화가 만나는 지점 중 하나로 꼽히며, 실시간 커뮤니케이션과 빠른 피드백, 자동화된 워크플로우가 결합되어 높은 효율을 낼 수 있음. ChatOps의 주요 개념1. 실시간 협업(Real-time Collaboration)팀원 간의 모든 대화를 한 채널(예: Slack, Microsoft Teams, Mattermost 등)..

Operating System/Computer

[Computer] Github Action의 on 이벤트 종류

Github Action의 on 이벤트 종류GitHub Actions의 on 키워드는 워크플로우가 언제(trigger) 실행될지를 정의함.이 필드는 매우 유연하며 다양한 이벤트에 반응하도록 설정할 수 있음.이벤트는 크게 GitHub 이벤트(push, pull_request 등), 배포/릴리스 이벤트(release, deployment, page_build 등), 이슈 관련 이벤트(issues, issue_comment 등), 워크플로우 자체 이벤트(workflow_dispatch, workflow_run 등)로 분류할 수 있음.또한 schedule을 사용하면 정해진 시간 간격(CRON)으로 워크플로우를 실행할 수도 있음. 저장소의 기본 이벤트 (Commit, PR 관련 등)1. push1-1. 설명저장소..

Operating System/Computer

[Computer] Github Action

Github ActionGitHub Actions는 GitHub 저장소(Repository)에 특정 이벤트가 발생했을 때 자동으로 작업(워크플로, workflow)을 수행할 수 있는 자동화/CI/CD 플랫폼임.예전에는 외부 CI/CD 솔루션(Travis CI, Jenkins 등)을 사용하거나, 자신이 직접 CI/CD 파이프라인을 구축해야 했지만, GitHub Actions를 통해 GitHub 자체에서 더 쉽고 유연하게 빌드, 테스트, 배포 등을 자동화할 수 있음. Github Action 주요 특징1. GitHub 에코시스템과 밀접한 통합저장소에서 Issue, Pull Request, Release, Push 등 다양한 이벤트가 발생했을 때 쉽게 Workflow를 트리거(Trigger)할 수 있음. 2...

Database/Redis

[Redis] 인메모리 데이터베이스

인메모리 데이터베이스인메모리 데이터베이스(In-Memory Database)는 말 그대로 주 메모리(RAM)를 주된 저장 매체로 사용하는 데이터베이스를 의미함.전통적인 디스크 기반 데이터베이스가 디스크 I/O에 의존하는 것과 달리, 인메모리 DB는 대부분 또는 전부의 데이터를 메인 메모리에 상주시킴으로써 훨씬 빠른 읽기/쓰기 성능을 제공함.최근에는 메모리 용량과 비용의 변화, 고성능 컴퓨팅(HPC)과 실시간 분석에 대한 요구 등으로 인메모리 DB 기술이 빠르게 발전하고 있으며, 다양한 상용·오픈소스 솔루션들이 시장에서 활발히 사용되고 있음. 인메모리 데이터베이스의 정의와 배경1. 정의인메모리 데이터베이스(In-Memory Database, IMDB)는 모든(또는 주요) 데이터를 휘발성 메모리(RAM)에 ..

Database/Redis

[Redis] 레디스 클러스터

레디스 클러스터Redis Cluster는 여러 개의 Redis 노드로 이루어진 분산 구성(distributed setup)임.자동 샤딩(Sharding)과 고가용성(High Availability)을 제공하는 기술임.단일 인스턴스에서 처리할 수 있는 데이터나 트래픽 규모를 넘어서는 상황에서, 여러 노드로 부하를 분산하고 노드 장애 시 빠르게 복구할 수 있도록 설계됨.즉, 확장성과 가용성이라는 Redis의 핵심 요구 사항을 충족하기 위한 솔루션이라고 할 수 있음. 레디스 클러스터의 주요 개념1. 샤딩(Sharding)Redis Cluster는 키(key) 기반으로 데이터를 여러 노드에 분산하여 저장함.Hash Slot: Redis Cluster는 키를 0부터 16383까지의 해시 슬롯(Hash Slot)에..

Database/Redis

[Redis] 레디스의 보안

레디스의 보안Redis(레디스)는 기본적으로 빠른 인메모리 데이터 처리에 초점을 맞춘 소프트웨어이임.최근에는 엔터프라이즈급 사용 사례가 늘어나면서 보안(Security) 요구사항도 크게 중요해졌음.Redis 자체가 초기 버전에는 간단한 패스워드 인증만 제공했으나, 버전 6.0 이후로는 ACL(Access Control List) 같은 고급 기능을 도입하여 보안 수준을 한층 높임.그럼에도 불구하고 운영 환경에서 Redis를 안전하게 사용하기 위해서는, Redis 자체 설정뿐만 아니라 네트워크 및 시스템 레벨에서의 여러 보안 전략이 필요함. 기본 보안 전제: 레디스는 신뢰할 수 없는 네트워크에 직접 노출하지 않아야 함Redis 공식 문서에서는 기본적으로 ‘Redis를 퍼블릭 인터넷에 직접 노출하지 말라’고 ..

Database/Redis

[Redis] 메세지 브로커

메세지 브로커메시지 브로커(Message Broker)는 분산된 애플리케이션 간 데이터를 교환(통신)하기 위한 중간 매개체 역할을 하는 소프트웨어 시스템임.메시지를 송신하려는 프로듀서(Producer)와 메시지를 수신하려는 컨슈머(Consumer) 사이에서 메시지를 안정적으로 주고받을 수 있도록 관리하고, 메시지를 큐(Queue), 토픽(Topic), 스트림(Stream) 형태로 전달/보관/라우팅해줌. 메세지 브로커의 필요성1. 애플리케이션 간 결합도(Dependency) 감소메시지 브로커를 사용하면, 애플리케이션들이 서로 직접 통신하는 대신 브로커를 통해 간접적으로 통신함.이를 통해 애플리케이션 간의 결합도를 낮추고, 각 애플리케이션을 독립적으로 배포·확장·변경할 수 있는 유연성을 확보할 수 있음. 2..

Database/Redis

[Redis] 레디스의 장점

레디스의 장점Redis(REmote DIctionary Server)는 인메모리(In-Memory) 데이터 구조 저장소임.주로 캐시, 메시지 브로커, 세션 저장소, 실시간 분석 등의 다양한 용도로 활용되는 오픈 소스 소프트웨어임.높은 성능과 다양한 자료구조를 지원하는 특징 덕분에 전 세계적으로 널리 사용되고 있음. 인메모리 기반의 높은 성능1. 초당 수십~수백만 건의 요청 처리Redis는 모든 데이터를 메모리에 상주시키고, 네트워크 IO와 CPU 효율을 극대화한 아키텍처를 통해 매우 빠른 응답 속도를 제공함.대부분의 명령에 대해 O(1) 혹은 O(log n) 정도의 시간 복잡도를 갖도록 자료구조를 최적화함.이로 인해 초당 수십~수백만 건의 요청(QPS, TPS)을 처리할 수 있으며, 특히 낮은 지연 시간..

Programming Language/Java

[Java] MVC 패턴

MVC 패턴MVC(Model-View-Controller) 패턴은 대규모 애플리케이션의 복잡성을 줄이고 유지보수성을 향상하기 위해 사용되는 대표적인 소프트웨어 아키텍처 패턴임.“모델(Model)”, “뷰(View)”, “컨트롤러(Controller)”의 세 가지 구성요소를 분리하여 역할을 명확히 함으로써, 코드의 응집도를 높이고 결합도를 낮추는 효과를 얻을 수 있음. MVC 패턴의 기본 개념1-1. Model(모델)애플리케이션의 핵심 비즈니스 로직과 데이터를 관리함.데이터의 상태를 표현하거나, 이를 조작(저장, 수정, 삭제, 조회)하는 메서드를 포함함.DB 연동(DAO, Repository)이나 비즈니스 규칙(도메인 로직)을 담당하는 Service 계층 등도 모델에 속한다고 볼 수 있음. 1-2. Vie..

Operating System/Computer

[Computer] 로드밸런서

로드밸런서로드 밸런서(Load Balancer)는 네트워크나 애플리케이션 레벨에서 들어오는 트래픽(요청)을 여러 서버(또는 서비스 노드)로 효율적으로 분산하여, 전체적인 성능과 가용성을 높이고 장애나 과부하를 방지하는 핵심 인프라 컴포넌트임.서버나 서비스 노드가 여러 대일 때, 단일 서버에만 부하가 집중되지 않도록 트래픽을 자동으로 분산함으로써 서비스 안정성과 확장성을 확보하는 것이 주된 목적임. 로드 밸런싱의 필요성1. 가용성(Availability) 보장하나의 서버에 장애가 발생하더라도, 로드 밸런서는 나머지 서버로 트래픽을 자동으로 우회시켜서 서비스 다운타임을 최소화함.시스템 전체의 고가용성(High Availability, HA)을 위해 필수적인 구성 요소임. 2. 확장성(Scalability)트..

Operating System/Computer

[Computer] 프로세스의 문맥 교환

프로세스의 문맥 교환프로세스의 문맥 교환(context switch)은 운영체제(Operating System)에서 프로세스(또는 스레드) 간 CPU 사용권을 전환하는 핵심 메커니즘임.여러 프로세스가 동시에 존재하고, 제한된 수의 CPU 코어(또는 실제로 단 하나의 CPU 코어만)가 있을 때 운영체제는 시간 분할(time-sharing) 기법이나 우선순위 기반 스케줄링, 멀티태스킹 환경을 제공하기 위해 문맥 교환을 수행함. 문맥 이란?문맥(context)이란 현재 수행 중인 프로세스(또는 스레드)의 상태를 의미함.구체적으로는 다음과 같은 정보가 포함됨. 1. CPU 레지스터 상태(Register set)일반 레지스터(General-purpose registers): EAX, EBX, ECX ... (x8..