분류 전체보기 174

크롬 디버거로 JavaScript OOM 문제 해결하기

JavaScript 애플리케이션에서 Out Of Memory(OOM) 문제가 발생하면, 그 원인을 파악하고 해결하기 위해서는 메모리 상태를 자세히 분석해야 합니다.이 글에서는 크롬 개발자 도구(DevTools)를 사용하여 OOM 발생 전후의 Heap Snapshot을 비교하고 문제를 분석한 경험을 공유합니다. 👩🏻‍💻 OOM 분석 준비: Heap Snapshot 수집먼저 OOM 원인을 분석하려면 OOM 발생 전후의 Heap Snapshot이 필요합니다.Heap Snapshot은 JavaScript 메모리 상태를 저장한 파일로, 메모리 사용량과 객체 할당 상태를 분석하는데 유용합니다. 크롬 개발자 도구(DevTools)에서 Heap Snapshot 비교하기OOM 문제를 해결하기 위해 저는 크롬 개발자..

개발끄적 2024.11.15

CQRS 패턴: 데이터 읽기와 쓰기를 분리하여 성능과 확장성 극대화하기

복잡한 애플리케이션은 데이터 읽기와 쓰기를 분리해야 하는 경우가 생깁니다. 최근에 수많은 조회와 데이터 변경 요청이 발생하며, 트래픽과 확장성 측면에서 읽기와 쓰기를 분리할 필요가 생기면서 CQRS에 대해 알게 되었는데요! 🫠CQRS는 전통적인 애플리케이션 구조와는 다르게, 명령(Command)과 조회(Query)의 책임을 구분하여 각기 다른 모델로 설계함으로써 성능, 확장성, 보안성을 향상하는 데 초점을 맞추는 디자인 패턴입니다. 이 글에서는 CQRS 패턴에 대해 정리해보겠습니다!👀 CQRS 패턴이란?CQRS는 Command Query Responsibility Segregation의 약자이며 명령과 조회를 분리하여 처리하는 패턴입니다.데이터 읽기와 쓰기를 작업을 분리함으로써 성능, 확장성, 데이터..

[디자인 패턴] 도메인 모델 패턴 vs 트랜잭션 스크립트 패턴

애플리케이션에서 비즈니스 로직을 어떻게 설계하느냐에 따라 성능이나 유지보수성, 확장성에 큰 영향을 줍니다.그중 도메인 모델 패턴(Domain Model Pattern)과 트랜잭션 스크립트 패턴(Transaction Script Pattern)은 비즈니스 로직을 애플리케이션에서 처리하는 두 가지 대표적인 방식입니다. 이 글에서는 두 패턴의 대해서 그리고 각 패턴을 언제 사용하는 것이 좋을지 정리해 보겠습니다.🙂 도메인 모델 패턴이란?도메인 모델 패턴은 도메인 주도 설계(DDD)에서 많이 사용하는 방식입니다.비즈니스 로직을 도메인 객체 안에 포함하여 객체 지향적으로 관리합니다.복잡한 비즈니스 로직이 포함된 시스템에서 코드가 실제 비즈니스 개념에 맞게 동작하도록 설계하는 것이 목표입니다.객체 중심 설계도메인..

JavaScript heap out of memory 에러 해결하기

JavaScript 애플리케이션의 개발 및 배포 후 Out of Memory (OOM) 오류가 발생했다...😥이 글에서는 OOM 오류의 원인과 이를 해결하기 위한 접근 방법을 중심으로 정리해 보겠습니다. JavaScript Heap Out of Memory 오류란?JavaScript Heap은 애플리케이션이 동적으로 생성하는 객체들이 저장되는 메모리 공간을 의미합니다.JavaScript 애플리케이션의 힙 메모리는 고정된 크기를 가지고 있으며, 이 크기를 초과하면 Heap Out of Memory 오류가 발생하게 됩니다.이 오류는 일반적으로 다음과 같은 상황에서 발생합니다.데이터가 지나치게 많이 로드될 때반복문 안에서 대규모 객체를 생성하고 해제하지 않을 때메모리 누수가 발생할 때 오류 발생 및 문제 파..

Backend/TypeScript 2024.11.12

[Spring]고성능 비동기 웹 개발의 시작: Spring WebFlux 알아보기

최근 고성능 비동기 API를 구현해야 할 필요가 생기면서 기존의 Spring MVC로는 처리 성능에 한계가 있음을 느꼈다..🤔더 많은 요청을 효율적으로 처리할 방법을 찾던 중, Spring이 기존 MVC 외에 논블로킹 비동기 웹 애플리케이션을 지원하는 Spring WebFlux를 제공한다는 것을 알게 되었습니다. 이글에서는 Spring WebFlux의 개념에 대해 알아보겠습니다. Spring WebFlux 개요Spring WebFlux는 비동기 및 논블로킹 I/O를 기반으로 한 웹 프레임워크입니다.전통적인 Spring MVC의 동기적 구조와 달리 WebFlux는 Reactive Streams API를 기반으로 논블로킹 방식의 고성능 비동기 웹 애플리케이션을 구축할 수 있습니다. 전통적인 Servlet ..

Backend/Spring 2024.11.11

효율적인 프로그래밍을 위한 동기/비동기와 블로킹/논블로킹 이해하기

동기(Synchronous)와 비동기(Asynchronous)동기 처리동기 처리에서는 요청을 보낸 후 응답을 기다리며 작업을 순차적으로 처리합니다.즉, A작업이 끝나야 B 작업을 시작할 수 있습니다.ex) 사용자가 버튼을 클릭해 데이터를 요청하면 서버의 응답을 받을 때까지 아무 작업도 코드가 순차적으로 실행되므로 직관적입니다.응답을 기다리기 때문에 처리 시간이 길어지면 사용자 경험이 저하될 수 있습니다.비동기 처리비동기 처리에서는 요청을 보내고 응답을 기다리지 않고 다른 작업을 할 수 있습니다.요청을 보낸 후 완료될 때마다 알림을 받거나 콜백을 통해 응답을 처리합니다.ex) 사용자가 버튼을 클릭해 데이터를 요청하고 다른 작업을 수행하는 중 서버가 응답을 보내면 그때 결과를 처리합니다.대기 시간이 줄어들어..

개발끄적 2024.11.10

[Spring] 프록시 패턴(Proxy Pattern)

스프링 프레임워크에서 프록시 패턴은 다양한 기능을 제공하는 핵심 매커니즘 중 하나입니다.스프링에서는 프록시 객체를 통해 AOP(Aspect-Oriented Programming), 트랜잭션, 보안, 비동기 작업 등 다양한 부가 기능을 비즈니스 로직과 분리하여 쉽게 적용할 수 있습니다. 스프링의 프록시 패턴에 대해 알아보겠습니다. ✍️ 프록시 패턴의 개념프록시 패턴은 대리 객체(프록시)를 통해 실제 객체에 대한 접근을 제어하는 디자인 패턴입니다.클라이언트는 실제 객체를 직접 호출하지 않고, 프록시 객체를 통해 호출합니다.프록시 객체는 실제 객체에 대한 접근을 제어하며 중간에서 부가적인 작업(ex: 로깅, 권한 확인 등)을 수행할 수 있습니다.스프링에서는 이 프록시를 통해 공통 기능을 실제 객체에 투명하게 ..

Backend/Spring 2024.11.09

[Spring] @Async로 비동기 작업 최적화하기

`@Async`는 스프링에서 비동기 작업을 처리할 때 사용하는 강력한 도구입니다.비동기 작업을 통해 여러 작업을 동시에 실행하여 I/O가 오래 걸리거나 사용자 응답에 민감하지 않은 작업을 백그라운드에서 수행하게 함으로써, 시스템의 성능과 응답 속도를 향상할 수 있습니다. 이 글에서는 `@Async`와 스레드 풀 설정을 통해 비동기 작업을 어떻게 최적화할 수 있는지 알아보겠습니다.👩🏻‍💻  @Async란?`@Async`는 스프링에서 메서드를 비동기적으로 실행하도록 지정할 때 사용하는 어노테이션입니다.이 어노테이션을 적용하면 스프링은 별도의 스레드에서 해당 메서드를 실행하여 호출한 코드의 흐름이 메서드가 끝날 때까지 기다리지 않고 바로 다음 작업을 진행할 수 있습니다. @Async 어노테이션 적용 방법..

Backend/Spring 2024.11.08

[MySQL] EXPLAIN으로 쿼리 성능 분석하기

데이터베이스 쿼리의 성능은 서비스 속도와 직결되는 중요한 요소입니다!MySQL의 `EXPLAIN`은 쿼리 실행 계획을 확인하고 병목이 되는 부분을 찾아 최적화할 수 있게 도와주는 도구입니다.데이터가 많은 테이블에서 비효율적인 쿼리가 실행되면 성능이 급격히 저하되어 응답 시간이 길어지고 시스템 리소스가 낭비될 수 있습니다. 특히 고트래픽 환경에서는 작은 쿼리 최적화가 큰 차이를 만들 수 있습니다. 이 글에서는 `EXPLAIN`의 필드와 활용 방법을 알아보겠습니다. 👀  EXPLAIN 사용법 `EXPLANIN`을 사용하려면 원하는 쿼리 앞에 `EXPLANIN`을 붙이기만 하면 됩니다.EXPLAINSELECT e.employee_id, e.first_name, d.department_name FROM loc..

Data/MySQL 2024.11.07

쿠키(Cookie)와 세션(Session)

쿠키와 세션은 웹사이트에서 사용자의 상태를 유지하는데 필요한 기술입니다.이를 이해하기 쉽게 비교해서 정리해 보겠습니다!👩🏻‍💻 쿠키와 세션이란?쿠키는 웹사이트에서 사용자 정보를 클라이언트, 즉 사용자의 브라우저에 저장하는 방식입니다.예를 들어, 로그인 후 다음 방문 시 자동으로 로그인하거나 언어 설정을 기억하는 데 사용됩니다.세션은 웹사이트가 서버에 사용자 정보를 저장하는 방식입니다. 사용자마다 고유한 세션 ID가 만들어지고 서버는 이를 이용해 사용자 상태를 기억합니다.세션은 로그인 상태 유지처럼 보안이 중요한 작업에 자주 사용됩니다. 저장 위치쿠키는 클라이언트의 웹 브라우저에 저장됩니다. 브라우저의 메모리나 하드디스크에 간단한 텍스트 형식으로 보관됩니다.세션은 서버의 메모리에 저장됩니다. 서버에..

Web/HTTP 2024.11.03