본문 바로가기

분류 전체보기148

Elasticsearch Data Streams 시계열 데이터를 다루는 많은 엔지니어들이 직면하는 문제가 있습니다. 시간이 지남에 따라 계속 쌓이는 로그, 메트릭, 이벤트 데이터를 어떻게 효율적으로 관리할 것인가? 특히 대규모 환경에서는 이러한 데이터의 저장, 관리, 쿼리가 상당한 도전이 됩니다. Elasticsearch의 Data Streams 기능은 이런 문제를 해결하기 위한 우아한 솔루션을 제공합니다.Data Streams란 무엇인가?Elasticsearch 7.9 버전에서 정식 출시된 Data Streams는 시계열 데이터를 위한 특별한 추상화 계층입니다. 기존에 여러 개의 인덱스를 수동으로 관리하던 방식에서 벗어나, 마치 하나의 인덱스처럼 동작하는 데이터 관리 패러다임을 제공합니다.가장 중요한 점은 Data Streams가 백엔드에서 여러 인.. 2025. 3. 27.
[k8s] API Groups 란? Kubernetes API Groups: 체계적인 리소스 관리의 핵심Kubernetes는 대규모 컨테이너화된 애플리케이션을 관리하기 위한 강력한 오케스트레이션 플랫폼입니다. 이러한 복잡한 시스템을 효율적으로 관리하기 위해서는 잘 구성된 API 구조가 필요합니다. Kubernetes의 핵심 개념 중 하나인 API Groups에 대해 자세히 알아보겠습니다.API Groups란 무엇인가?API Groups는 관련된 Kubernetes 리소스를 논리적으로 그룹화한 것입니다. 이것은 Kubernetes API를 구조화하고 확장성을 제공하는 중요한 메커니즘으로, 특히 RBAC(Role-Based Access Control)와 같은 권한 관리 시스템에서 핵심적인 역할을 합니다.Kubernetes가 처음 설계되었을 때.. 2025. 3. 26.
[Database] INSERT 작업 최적화: 부하 감소를 위한 실용적인 접근법 데이터베이스는 많은 애플리케이션의 핵심 구성 요소입니다. 특히 대량의 데이터를 처리하는 서비스에서 INSERT 작업은 성능에 상당한 영향을 미칠 수 있습니다. 이 글에서는 데이터베이스 INSERT 작업 시 부하를 줄이는 다양한 방법과 실제 예시를 살펴보겠습니다.1. 효율적인 INSERT 구문 사용하기기본 INSERT vs 특수 INSERT 구문INSERT IGNORE 대신 ON DUPLICATE KEY UPDATE 사용INSERT IGNORE는 충돌이 발생할 경우 오류를 무시하고 작업을 계속합니다. 하지만 이 방식은 모든 경우에 최적이 아닙니다.-- 일반적으로 사용되는 방식INSERT IGNORE INTO users (id, name, email, created_by) VALUES (1, 'John', .. 2025. 3. 20.
[MySQL] 중복 데이터 처리하기: INSERT IGNORE, REPLACE INTO, ON DUPLICATE KEY UPDATE 가이드 개요데이터베이스 작업에서 중복 키 처리는 매우 중요한 부분입니다. MySQL은 이러한 중복 상황을 처리하기 위한 여러 방법을 제공하고 있습니다. 이 포스트에서는 INSERT IGNORE, REPLACE INTO, ON DUPLICATE KEY UPDATE 세 가지 방식에 대해 각각의 특징, 장단점, 그리고 적절한 사용 시나리오를 살펴보겠습니다.중복 키란?중복 키(Duplicate Key)는 테이블에 이미 존재하는 고유 값(UNIQUE 또는 PRIMARY KEY)과 동일한 값을 다시 삽입하려 할 때 발생합니다. 기본적으로 MySQL은 중복 키 삽입 시도 시 에러를 발생시키지만, 이를 다양한 방식으로 처리할 수 있습니다.예를 들어, 다음과 같은 users 테이블이 있다고 가정해 보겠습니다:CREATE TAB.. 2025. 3. 20.
[Mysql] pt-online-schema-change 로 서비스 중단 없이 데이터베이스 스키마 변경하기 개요이 글에서는 운영 환경에서 스키마 변경이 필요할 경우, 어떻게 무중단 변경을 수행하는지 살펴보고. 관련해서 Mysql Online DDL, pt-online-schema-change 에 대해서 알아봅니다. 상황회사에서 사용하는 프로그램에서 요청 결과를 log 형식으로 데이터베이스에 저장하고 있습니다. 시간이 흘러 데이터가 많이 쌓였고, 자연스레 쿼리 성능이 떨어지기 시작했습니다. 확인해보니 34,977,366개의 데이터가 쌓여있었고 인덱스 개선을 통해 이를 개선해보기 결정했습니다. Mysql 8.0 을 사용 중이기 때문에 Mysql Online DDL(https://mystudylab.tistory.com/207) 을 활용해도 되었지만, 테이블의 크기가 크고 DML 이 자주 일어나는 테이블에 적용하면.. 2025. 3. 17.
[Mysql] MySQL Online DDL 개요이 글에서는 Mysql Online DDL에 대해서 알아봅니다.MySQL Online DDLMySQL의 Online DDL은 테이블 구조를 변경하면서도 서비스 중단을 최소화하기 위해 설계되었습니다. 등장 전에는 스키마 변경 시, 무조건 테이블 전체 락이 걸리기 때문에 운영 환경에서 사용하기 어려움이 있었습니다.데이터가 많을 수록 중단 시간은 더 오래걸리기 때문에 다른 전략이 필요헀고, DBA들은 복잡한 우회 방법을 개발해야 했습니다:수동으로 새 테이블 생성 후 데이터 일괄 복사트리거를 사용한 변경 내용 동기화테이블 스왑 및 애플리케이션 재시작MySQL 5.6 버전부터 공식적으로 Online DDL 기능을 도입되었고. 이 기능을 통해 많은 ALTER TABLE 작업을 테이블에 대한 전체 락(lock)을.. 2025. 3. 17.
[Frontend 성능 개선] 프론트엔드 번들 크기를 최적화 주요 방법 1. 코드 분할 (Code Splitting)```javascript// 라우트 기반 분할const Dashboard = lazy(() => import('./Dashboard'));// 컴포넌트 기반 분할const HeavyComponent = lazy(() => import('./HeavyComponent'));```2. Tree Shaking 활용```javascript// Badimport _ from 'lodash'// Goodimport { map, filter } from 'lodash'// 더 좋음import map from 'lodash/map'import filter from 'lodash/filter'```3. 이미지 최적화```javascript// Next.js Image 컴포넌트.. 2025. 2. 10.
[Frontend 성능 개선] 압축 적용하여 번들 사이즈 줄이기 증상프로젝트 개발이 진행됨에 따라 번들 사이즈가 커지고 있는 상황.해결 방법https://mystudylab.tistory.com/206 에 나와있는 최적화 방법 중 압축 방법을 적용한다.압축 방식 비교1. 애플리케이션 레벨 (예: Node.js/Next.js)장점:애플리케이션 로직 내에서 세밀한 제어 가능동적 콘텐츠에 대한 즉각적인 압축 가능단점:애플리케이션 서버의 CPU 리소스 사용각 요청마다 실시간 압축 필요여러 애플리케이션이 있을 경우 각각 설정 필요2. 웹서버 레벨 (예: Nginx)장점:중앙 집중식 설정으로 관리 용이C로 작성되어 효율적인 압축 처리정적 파일 압축 결과 캐싱 가능여러 애플리케이션에 대해 일관된 압축 정책단점:동적 콘텐츠 압축은 실시간으로 해야 함세밀한 케이스별 제어가 어려울 수.. 2025. 2. 10.
WIP Jest OOM, Memory leak 증상회사에서 프로젝트의 CI/CD 테스트 단계에서 간헐적으로 별 이유 없이 테스트가 실패하는 증상이 발생. 원인은 OOM이었음.테스트 코드가 늘어나면 테스트 스크립트에 사용되는 메모리도 증가하게 됨. 이슈1. 메모리에서 완전히 해제되지 않음.https://github.com/jestjs/jest/pull/12205 jest 에서 테스트 환경 격리를 위해 vm.Script 를 사용함. (위 PR에서 다른 함수로 대체하려고 하고 있음)vm.Script 은 실행 후에 메모리에서 완전히 해제되지 않음테스트가 많을 수록 결국 메모리가 쌓이게 되는 구조 접근메모리를 과도하게 잡아먹으면 대처 방안은 2가지임불필요하게 메모리 사용하는 곳을 찾아 개선한다.허용된 메모리 이상을 사용하지 못하도록 제한한다.분석 2025. 2. 5.
Node22 마이그레이션 작업1. Docker 이미지 버전 업FROM public.ecr.aws/docker/library/node:22-alpine AS builder2. nvmrc 수정22이슈1. Cannot find module '../build/Release/canvas.node'원인canvas 이전 버전 의존성 이슈 때문에 테스트 실패 문제 발생해결방법package.json "resolutions": { "canvas": "^v3.1.0" } 2025. 2. 5.