| En

zram 메모리 압축으로 RAM 한계 극복

zram의 개념과 원리 zram(이전 명칭: compcache)은 리눅스 커널에서 제공하는 메모리 압축 기술로, RAM의 일부를 압축하여 가상 블록 장치로 사용하는 메커니즘이며, 이 기술은 2009년 Nitin Gupta에 의해 처음 개발되었고 리눅스 커널 3.14부터 정식으로 통합되어 현재까지 널리 사용되고 있다. zram의 핵심 아이디어는 디스크 기반 스왑 대신 압축된 RAM을 스왑 공간으로 활용함으로써 디스크 I/O의 부하 없이 메모리 사용량을 효과적으로 줄이는 것이며, 특히 메모리가 제한된 환경에서 시스템 성능을 크게 향상시킬 수 있다. zram 장치는 데이터를 메모리에 저장하기 전에 실시간으로 압축하고 데이터 접근 시 실시간으로 압축을 해제하며, 이 과정에서 CPU 리소스를 일부 소모하지만 디스크 I/O를 완전히 피할 수 있어 전체적인 시스템 성능 향상에 크게 기여한다. 일반적으로 zram은 LZO(Lempel-Ziv-Oberhumer), LZ4, ZSTD(Zstandard)와 같은 고속 압축 알고리즘을 사용하여 2:1에서 4:1 정도의 압축률을 달성하며, 압축 알고리즘은 시스템 요구사항에 따라 선택할 수 있고 Ubuntu 24.04에서는 기본적으로 속도와 압축률의 균형이 우수한 LZ4 알고리즘을 사용한다. ...

2025년 5월 2일 · 4 분 · 847 단어 · In-Jun

JPA N+1 쿼리 문제

N+1 문제란 N+1 문제는 ORM(Object-Relational Mapping)에서 자주 발생하는 성능 문제 중 하나로, 연관된 엔티티를 조회할 때 연관된 엔티티의 수(N)만큼 추가로 쿼리가 실행되어 결과적으로 쿼리의 수가 N+1개가 되는 문제이다. 이러한 쿼리의 수가 많아지면 데이터베이스와의 통신이 늘어나고 네트워크 왕복 시간이 증가하며 데이터베이스 커넥션 풀이 고갈될 위험이 있어 성능이 크게 저하될 수 있다. N+1 문제의 역사와 배경 N+1 문제는 ORM 프레임워크가 등장하면서 함께 나타난 고질적인 문제로, 특히 Hibernate와 JPA에서 지연 로딩(Lazy Loading) 전략을 사용할 때 자주 발생한다. ORM은 객체 지향적으로 데이터를 다루기 위해 연관된 엔티티를 필요할 때까지 로딩을 미루는 지연 로딩을 기본 전략으로 채택하고 있으며, 이는 불필요한 데이터 로딩을 방지하고 초기 로딩 속도를 개선하는 장점이 있다. 하지만 개발자가 연관 관계를 인지하지 못한 채 반복문 안에서 연관 엔티티에 접근하면 각 엔티티마다 개별 쿼리가 실행되어 N+1 문제가 발생하게 되고, 이는 Hibernate 초기 버전부터 현재까지 개발자들이 주의해야 할 핵심 성능 이슈로 남아있다. ...

2024년 6월 8일 · 6 분 · 1078 단어 · In-Jun

JPA Lazy Loading과 Eager Loading 성능 비교

로딩 전략의 역사와 필요성 ORM(Object-Relational Mapping) 프레임워크는 객체지향 프로그래밍과 관계형 데이터베이스 사이의 불일치를 해결하기 위해 등장했으며, 이 과정에서 연관관계를 가진 엔티티들을 어떻게 효율적으로 로딩할 것인가라는 문제가 중요한 과제로 대두되었다. 초기 ORM 구현체들은 모든 연관 엔티티를 즉시 로딩하는 방식을 사용했으나, 이는 불필요한 데이터까지 메모리에 적재하여 성능 저하를 일으켰고, Hibernate는 이를 해결하기 위해 프록시 기반의 지연 로딩 메커니즘을 도입했다. Hibernate는 2001년 처음 공개된 이후 로딩 전략을 지속적으로 개선해왔으며, 초기 버전에서는 단순한 지연 로딩만 지원했지만, 이후 버전에서는 fetch join, batch fetching, subselect fetching 등 다양한 최적화 기법을 추가했다. 이러한 기능들은 JPA(Java Persistence API) 1.0 표준이 2006년에 공개되면서 표준 스펙에 포함되었고, JPA 2.0(2009년)과 JPA 2.1(2013년)을 거치면서 @EntityGraph와 같은 선언적 페치 전략이 추가되어 더욱 세련된 방식으로 연관 엔티티 로딩을 제어할 수 있게 되었으며, 현재는 JPA 표준과 Hibernate 구현체가 함께 발전하며 개발자에게 다양한 선택지를 제공하고 있다. ...

2024년 6월 8일 · 7 분 · 1339 단어 · In-Jun
[email protected]