[대규모 시스템 설계 기초] 2. 개략적인 규모 추정
·
도서 개념 정리
개략적인 규모 추정보편적으로 통용되는 성능 수치상에서 추정치를 계산설계가 요구사항에 부합하는지 확인2의 제곱수1byte = 8bitASCII 문자 하나가 차지하는 메모리 크기가 1byte이다.2^10천1KB(킬로바이트)2^20백만1MB(메가바이트)2^3010억1GB(기가바이트)2^401조1TB(테라바이트)2^501000조1PB(베타바이트)응답지연 값L1 캐시 참조0.5nsL2 캐시 참조7ns주 메모리 참조100ns메모리에서 1MB 순차적 read250ms네트워크에서 1MB 순차적 read10ms디스크에서 1MB 순차적 read30msdisk seek10ms응답 지연 값으로 본 설계점메모리는 빠르지만 디스크는 아직도 느리다디스크 탐색은 가능한 한 피하라단순한 압축 알고리즘은 빠르다데이터를 인터넷으로 전송하..
[대규모 시스템 설계 기초] 1. 사용자 수에 따른 규모 확장성
·
도서 개념 정리
단일 서버단일 서버일 경우에는 형태가 단순하다. 웹 서버 1대만 있는 형태클라이언트가 도메인 이름으로 웹사이트 접속DNS로부터 IP를 반환받음해당 IP 주소(웹 서버)로 요청 전달HTML, JSON 형태로 응답을 반환데이터베이스웹/모바일 트래픽 처리와 데이터 계층을 나눈 것으로 확장시킬 수 있다.RDBMSNoSQL40년 이상 시장에서 사용 -> 레퍼런스가 많다아주 낮은 응답 지연시간(latency)Join 가능저장하려는 데이터가 비정형일 경우 많은 데이터를 저장할 필요가 있을 때 데이터를 직렬화 & 역직렬화만 하면 될 때 수직적 규모 확장 vs 수평적 규모 확장수직적 규모 확장(Scale-up)은 서버에 고사양 자원을 추가하는 행위를 말한다.수평적 규모 확장(Scale-out)은 더 많은 서버를 추가해 ..
DataHub 기본 구조
·
DataHub
기본 Skill-SetFE : ReactBE : Spring, PythonMQ : KafkaDB : Postgre, ESBatch pipeline : Airflowclient 요청을 처리할 때DataHub는 Data Discovery Platform이다. 사용자가 메타데이터를 효율적으로 검색할 수 있도록 돕는 플랫폼.많은 양의 데이터더라도 효율적으로 검색할 수 있도록 읽기 작업을 Postgre와 ES에 나눠 진행한다.검색어/필터 기반 검색은 ES로, 정해진 객체 urn이 있다면 Postgre에서 읽어온다. Front에서 Back으로는 graphql이라는 쿼리로 통신한다.Front에서 요청하는 값을 지정해 Back으로 보내면 ES나 Postgre를 찔러서 응답 결과를 다시 graphql로 싸서 Front로..
로컬에서 Apache Airflow를 Docker Compose로 구축하기
·
Data Engineering
최근 ETL 파이프라인을 직접 설계하고, 워크플로우를 만들면서 ApacheAirflow를 로컬 개발 환경에 Docker Compose로 올려 실험할 일이 생겼습니다.이 글에서는 실제 Mac 환경에서 Airflow를 띄우며 마주친 주요 이슈, 트러블슈팅, 실무 폴더 설계를 다룹니다. 1. 환경 세팅1.1 Docker Desktop 설치Docker 공식 설치 페이지에서 Docker Desktop 설치설치 후 동작 확인docker --version# 예시 출력: Docker version 28.1.1, build 4eba3771.2 작업 폴더 구조 준비Airflow 작업용 폴더 생성mkdir -p ~/workspace/airflowcd ~/workspace/airflow 2. Airflow Docker Com..
열 지향 저장의 본질과 파일 포맷의 선택 기준
·
Data Engineering
데이터 분석이 시스템 병목의 주범이 되는 경우는 의외로 흔하다.특히, 테이블의 열이 100개가 넘는데 단 3개만 조회하는 쿼리라면? 불필요하게 전체 행을 읽는다면, 아무리 좋은 하드웨어도 병목이 발생하기 마련이다. 그래서 우리는 "행 기반 저장"보다 "열 기반 저장"을 선택한다.이번 글에서는 이 열 기반 저장 방식이 왜 유리한지 그리고 이를 파일 포맷 수준에서 어떻게 구현하는지를 정리한다. 열 지향 방식행 지향 방식은 이제껏 우리에게 친숙한 엑셀 시트에서 한 사람의 정보를 한 줄에 저장하는 방식이다.이름 나이 성별 국적--------------------------철수 25 남자 한국영희 31 여자 일본민수 22 남자 미국철수, ..
Elasicsearch는 저장소가 아니다
·
Data Engineering
DB도 있고 Redis도 있는데, 굳이 ES를 써야 해?Elasticsearch는 많은 시스템에서 당연하듯이 사용된다. 특히 로그 분석이나 검색 기능이 들어가는 시스템이라면, 대게 ES가 들어간다. 그런데 처음 ES를 마주하면 종종, "그냥 JSON을 넣을 수 있는 NoSQL 아닌가? 쿼리 기반으로 검색해야 해서 복잡한데 왜 쓰는거야?" 라고 생각한다. 나 역시 처음엔 ES를 검색도 되는 데이터 저장소정도로 이해했다. 하지만 실제로 써보면 ES는 저장소가 아니라 '질의 특화 인덱싱 엔진'에 가깝다. ES의 핵심 역할: 많은 데이터 중에서 원하는 걸 빠르게 찾게 해준다ElasticSearch는 단순한 데이터 저장소가 아니다. 수십만, 수백만 건의 데이터 중에서 필요한 정보를 조건에 맞춰 빠르게 찾고, 정렬..
Data Lake vs Data Warehouse: 저장소인가, 체계인가
·
Data Engineering
데이터를 어디에 저장하고 어떻게 꺼내쓸까S3에 던져두면 되는 걸까? 아니면 BigQuery에 테이블부터 만들어야 할까? 데이터를 처음 수집하고 분석하려 할 때 가장 고민을 많이 해야 하는 질문이다. 이 질문은 자연스레 Data Lake와 Data Warehouse의 개념으로 이어진다. 이 둘은 단순히 저장소의 종류가 아니라, 데이터를 어떻게 다루고 어떤 목적을 가지는지에 따라 달라지는 구조에 대한 선택이다. 이번 글에서는 Data Lake와 Data Warehouse가 무엇이고, 어떻게 다르고, 실무에서는 어떻게 사용하는지 정리해본다. 개념 정리1. Data Lake정형/비정형 데이터 모두 수용 가능한 Raw Storage보통은 S3, HDFS, Azure Blob, GCS 등에 저장파일 형식도 다양(J..
ETL이 지나고, ELT가 온다: 구조적 전환과 클라우드 시대의 흐름
·
Data Engineering
"피크 타임만 되면 파이프라인이 너무 느려져요"운영 중이던 데이터 파이프라인에서 자주 들렸던 말이다. 밤에는 멀쩡히 돌던 작업이 트래픽이 몰리는 시간대만 되면 속도가 급격히 떨어졌다. 하지만 어느 순간 판이 달라졌다.ETL(Extract - Transform - Load)이라는 고전적 구조에서, ELT(Extract - Load - Transform)라는 낯선 순서로의 전환이 나타난 것이다. 단순히 순서를 바꾼 것처럼 보이지만, 이는 클라우드 시대의 데이터 인프라가 어떻게 변했는지, 그리고 앞으로 무엇이 중심이 될지를 말해주는 흐름이다. ETL 구조: 데이터를 '가다듬어' 보관하자전통적인 ETL의 핵심은 다음과 같다.Extract : RDB, API, 로그 등에서 원본 데이터를 뽑고Transform : ..
병렬 처리의 함정, 그리고 최적화: DataHub 메타데이터 Ingestion 파이프라인 개선기
·
Data Engineering
🟡 들어가며운영 중인 메타데이터 플랫폼(DataHub)의 파이프라인을 개발하면서 겪었던 병목 문제와, 이를 해결하기 위한 병렬 처리 최적화 과정을 공유합니다.특히 Airflow 기반의 병렬 처리 구조를 구성하면서 실제 시스템의 한계를 마주했던 경험을 중심으로 다루며 "병렬 처리 = 무조건 빠름"이라는 고정관념이 깨지고, 시스템 자원에 맞춘 설계가 얼마나 중요한지 몸소 느낄 수 있었습니다.이 글에서는 기존 파이프라인의 구조적 한계부터 성능 이슈, 병렬 처리 최적화, 옵션 설정 개선에 이르기까지 단순한 기능 개발을 넘어 실질적인 운영 개선을 이루어낸 경험을 정리해보았습니다. 🧱 파이프라인 구조를 다시 고민하게 된 이유초기 ingestion 파이프라인은 약 5만 건의 메타데이터를 2만 건 단위로 나눠, 세..
[spring] - DI 컨테이너
·
Spring
[본 글은 김영한의 스프링 핵심 원리를 정리한 글입니다.]Springspring은 결국 객체 지향 애플리케이션을 효과적으로 개발할 수 있도록 도와주는 프레임워크이다.spring의 초기 세팅 단순화 + 내장 웹서버 + 의존성 관리 + App 상태 모니터링 + 로깅 + 보안 등의 설정을 쉽게 하도록 도와주는 오픈소스 프로젝트가 spring boot이다. 좋은 객체 지향 프로그래밍?객체 지향 프로그램은 추상화, 캡슐화, 상속, 다형성이 지켜져야 한다.모든 데이터 처리를 객체와의 관계로 해석한 것이다.객체간의 관계로 데이터를 처리해 변경에는 닫혀있고, 확장에는 열려있는(OCP) 구조를 대규모 프로젝트에서도 가능하게 한다. 역할과 구현을 분리하여 서버에 변경점이 생겨도 클라이언트에는 변경점이 생기지 않게 설계한다..