본문 바로가기

전체 글

(72)
LAG 함수 사용과 쿼리 실행 계획 및 성능 검증 최근 몇 달 동안 사내에서 통계 프로젝트를 진행하면서 경험했던 문제와 해결 과정에 대해 기록하기 위한 포스팅을 작성해보려고 합니다. 이번 포스팅의 메인 주제는 DBMS의 윈도 함수(Window Function) 중 LAG 함수를 사용하게 된 이유와 효과입니다. 재밌게 읽어주세요! 프로젝트(통계 개편) 요구사항 소개프로젝트에서 담당했던 기능은 판매처별 매출 통계 구현이었습니다. 해당 기능에 대해 간단히 설명하자면 다음과 같습니다. 1. 온라인(판매처), 오프라인(매장) 통합 매출 통계를 구현한다. (매출외에 판매수량, 취소수량등과 같은 다른 값도 구현에 포함되었습니다.)2. 일간, 주간, 월간 매출 통계를 집계한다.3. 매출에 대한 전일, 전주, 전월에 대한 증감률을 구한다. (핵심) 기능 요구사항에 대한..
인덱스로 성능 개선하기 (feat. B-Tree 인덱스) 이번 포스팅은 금주에 겪었던 서비스 속도 이슈의 원인을 분석하고 그 과정을 어떻게 해결했는지에 대한 내용을 기록해보려고 합니다. 문제  발생 현재 재직 중인 회사에서는 특정 판매처(ex. 카페 24)와 서비스 간의 재고연동 기능을 지원하고 있습니다. 기능에 대한 설명을 간단히 하자면, 판매처의 재고 수량과 자사 서비스의 재고 수량을 동기화시키는 과정을 의미합니다. 해당 기능은 과거에도 지원하고 있었으며 최근에 레거시(classic asp)를 Laravel Framework로 이전하는 과정에서 속도 이슈가 발생했습니다.  기존의 코드도 재고연동 속도는 느렸지만, 현재는 그걸 감안하지 못할 정도의 수준이 되었다는 것입니다. (상품 1000건 기준 대기 시간 15분 이상) 원인을 파악하는 과정에서 알게 된 ..
Spring Cloud Eureka 이전에 작성한 마이크로서비스 아키텍처에 대한 내용에서 언급했듯이 마이크로서비스는 기존의 모놀리식 환경과는 다른 문제점들을 해결하기 위해서 몇 가지 디자인 패턴이 있다고 소개했었습니다. 자세한 내용은 아래 링크를 참고해 주세요. 마이크로서비스 아키텍처(MSA) 란?개요현재 이커머스 B2B 솔루션 서비스를 제공하고 있는 회사에 재직 중에 사내에서 기존의 레거시 시스템을 MSA로 구축을 위한 움직임을 조금씩 보이고 있는 것 같아 그 변화에 합류하기 위해 MSA jminc00.tistory.com 이번 포스팅은 '마이크로서비스 디자인 패턴' 들 중 서비스 검색(Service Discovery)이라는 주제에 대해 학습하고 실습한 내용을 공유해 볼 예정입니다.서비스 검색(Service Discovery) 란 무엇이..
Messaging System - Apache kafka 이번 포스팅은 저번 포스팅에 이어서 두 번째 주제인 Event Driven Sysmtem 중 두 번째 주제인 메시징 시스템과 kafka에 대해 정리해보려고 합니다.Event Driven SystemEvent Driven System 이란?메시징 시스템 - KafkaCQRS 패턴 이번 포스팅을 위해 많은 글과 영상 등을 보면서 중구난방 했던 정보들을 체계적으로 정리하기 위해서 많은 노력이 있었던 것 같습니다. 일반적으로 kafka가 뭐지?라는 식으로 구글링을 하면 대뜸 토픽, 소비자/생성자, 브로커, 클러스터 등 개념에 대한 설명이 난무했습니다. 저 단어들이 핵심 단어이라는 것은 나중에서야 알게 되었습니다. 그 이유는 먼저 메시징 시스템이라는 전반적인 이해가 필요했기 때문입니다. 대부분의 포스팅 글 들은 ..
프로시저(Procedure) 동작 방식과 동시성 문제 현 직장에서 가장 많이 만나는 문제 중 하나는 동시성 문제입니다. 동시성이 발생하는 이유도 가지 각색인데웹서버의 병목현상으로 인해 요청이 한 번에 처리되는 경우동시에 여러 사용자가 동일한 작업을 수행하는 경우 사용자의 작업과 스케줄러의 작업이 겹치는 경우 등등 여러 가지 이유로 인해 동시성 문제가 발생하게 되면 그때부터는 왜 그런 상황이 발생했는지 찾는 탐정놀이가 시작됩니다.최근에 발생한 동시성 문제는 좀 특이해서 다음에 비슷한 문제가 발생했을 경우를 대비해 기록하려고 합니다.  문제 발생이번에 발생한 동시성 문제의 원인은 정확히 결론 내릴 수 없었지만, 다른 가능성을 소거해 가면서 원인을 파악한 결과, 웹 서버의 병목현상으로 인해 처리 대기 중이던 요청이 한 번에 처리되어 발생한 것으로 결론 내렸습니다..
Event Driven System 이란? 이번 포스팅은 저번 포스팅에서 언급한 것처럼 두 번째 주제인 Event Driven Sysmtem에 대해 정리해보려고 합니다. Spring Reactor - 동기 vs 비동기, 블로킹 I/O와 논블로킹 I/OEvent Driven System다만 이번 주제의 내용에서 다룰 내용이 많고 복잡해서 포스팅을 세 개로 나눠서 작성하려고 합니다. Event Driven SystemEvent Driven System 이란?CQRS 패턴메시징 시스템 - Kafka 이번 포스팅은 Event에 대해 공부한 내용을 작성해보려고 합니다. 물론 Event에 대한 내용에 대해 더 알고자 교재 말고도 Designing Event-Driven Systems-Concepts and Patterns for Streaming Servi..
Spring Reactor - 동기 vs 비동기, 블로킹 I/O vs 논블로킹 I/O 이번 장의 주제는 리액티브 마이크로서비스로, 중요하게 다룰 주제는 크게 두 가지로 다음과 같습니다. Spring Reactor - 동기 vs 비동기, 블로킹 I/O와 논블로킹 I/OEvent Driven System두 주제가 모두 내용이 방대하고 난이도가 있어서 포스팅을 두 개로 나눌 예정입니다. 첫 번째 주제인 Spring Reactor - 동기 vs 비동기, 블로킹 I/O와 논블로킹 I/O 에 대해 학습한 내용을 정리해보려고 합니다.리액티브 마이크로서비스 리액티브 마이크로서비스란, 리액티브 프레임워크를 적용한 마이크로서비스를 의미합니다. 리액티브 프레임워크는 논블로킹(Non-Blocking) + 비동기 API 기술을 사용하며 사용자의 반응성을 중시하는 프레임워크를 의미합니다.  논블로킹과 비동기에 대..
동시성 문제와 해결 개요교재에서는 애플리케이션 수준에서 동시성 문제를 해결하기 위해서 @Version 어노테이션을 사용해서 문제를 해결하고자 했습니다.  @Version 어노테이션은 낙관적 락킹 방법 중 하나로, 특정 데이터에 대해서 DB에 저장된 데이터의 버전 정보와 요청에 의한 버전 정보를 비교하고 두 값이 일치하지 않았을 때 stale data로 분류하여 데이터의 수정을 방지하는 방법을 의미합니다. 각 용어에 대한 설명이 다소 부족한 것 같지만 자세한 내용은 아래에서 추후에 설명하고자 합니다. 이번 포스팅에서는 동시성 문제란 무엇이며,  낙관적 락킹 방법을 포함한 다양한 동시성 해결 방법에 대해 정리해보려고 합니다. 동시성 문제가 왜 아찔한가현재 사내에서는 여러명의 사용자가 동시에 작업을 요청하는 경우가 빈번하게 발생..

반응형