[PostgreSQL/Java] shared memory 에러 해결: Java + MyBatis 대용량 쿼리 처리
·
개발 (Development)/PostgreSQL
최근 프로젝트에서 PostgreSQL 기반의 대용량 데이터를 한 번에 집계하려다가 shared memory segment 에러를 자주 겪었습니다. 처음 한 달 정도는 잘 동작했지만, 기간을 늘려 6개월·1년 단위로 조회하는 순간 DB 메모리 관련 에러가 발생했습니다. 운영 환경에서 서버 파라미터를 크게 건드리기도 부담스러워서, 결국 쿼리를 기간 단위로 쪼개어 조회하고 자바에서 합산하는 방식으로 우회했습니다.아래는 제가 직접 적용했던 과정과 방법들입니다.1. 문제 원인장기간 데이터를 한 번에 조회 → 정렬/집계 단계에서 메모리 과부하PostgreSQL은 공유 메모리 한도를 넘으면 바로 오류 발생DB 설정(work_mem, shared_buffers)을 조정하면 해결 가능하긴 하지만, 운영 중인 환경에서는 ..
[Java] MyBatis와 JPA 속도 비교: 어떤 상황에 어떤 선택이 더 나을까?
·
개발 (Development)/Java
Java 백엔드 개발에서 가장 많이 사용되는 ORM 프레임워크인 JPA와, SQL 매핑 프레임워크인 MyBatis는 각기 다른 장점을 지니고 있습니다. 저 역시 프로젝트를 진행하면서 "어떤 상황에 어떤 것이 더 빠를까?"라는 질문을 갖고 두 프레임워크를 비교해 보게 되었습니다.이번 글에서는 MyBatis와 JPA의 속도와 성능 측면에서의 차이를 중심으로, 실제 사용 시 고려할 점들을 정리해보았습니다.1. MyBatis와 JPA는 어떤 프레임워크인가요?MyBatis는 SQL을 직접 작성하여 사용하는 SQL 매퍼 프레임워크입니다. 개발자가 SQL을 전적으로 통제할 수 있어 성능 최적화에 유리합니다.JPA는 객체지향 프로그래밍과 데이터베이스를 매핑하는 ORM 프레임워크입니다. SQL 작성을 최소화하고 생산성을..
[Java] Spring Boot 프로젝트에서 MyBatis와 JPA를 함께 사용하는 방법과 오류 해결 과정
·
개발 (Development)/Java
Spring Boot 2.5.5, Java 11, Maven, MyBatis 기반의 프로젝트에 JPA를 추가하면서 겪은 설정 및 오류 해결 과정을 정리합니다.MyBatis와 JPA를 병행하고자 할 때 주의해야 할 설정 방식과 실제 발생했던 오류의 원인을 함께 소개합니다.프로젝트 환경Spring Boot: 2.5.5Java: 11빌드 도구: MavenORM 프레임워크: MyBatis (기존), JPA (추가)데이터베이스: PostgreSQL1. JPA 기본 설정 방법1-1. Maven 의존성 추가 org.springframework.boot spring-boot-starter-data-jpa org.postgresql postgresql runtime1-2. application.yml 설정 예시..
[Java] Spring Boot 2.x + Java 11 환경에서 JPA Native Query와 DTO 매핑 문제 해결 기록
·
개발 (Development)/Java
개요Spring Boot 2.x와 Java 11 환경에서 JPA와 MyBatis를 병행 사용하던 중, Native Query 처리 과정에서 다양한 오류가 발생했습니다. 특히 JPA 엔티티 인식 오류, Optional 처리의 불편함, 패키지 스캔 설정 문제, QueryDSL 관련 빈 생성 오류 등이 복합적으로 발생했습니다. 본 글에서는 이러한 문제들의 원인을 차례대로 분석하고 해결 방법을 정리합니다.엔티티가 Not a managed type 오류 발생서비스 클래스에서 JPA Repository를 주입하려 할 때 다음과 같은 오류가 발생했습니다.Not a managed type: class com.example.domain.entity.ScoreEntity이 오류는 Spring이 해당 엔티티 클래스를 JPA..
[Java] PostgreSQL의 timestamptz를 Java MyBatis에서 Instant로 받는 방법
·
개발 (Development)/Java
PostgreSQL에서 timestamptz는 시간대(time zone) 정보를 포함한 타임스탬프를 의미합니다. 이를 Java에서 MyBatis를 통해 받아올 때, 어떤 자료형을 사용해야 할지 고민이 생길 수 있습니다.이번 글에서는 Instant로 매핑하는 방법을 중심으로 정리하였습니다.1. timestamptz란?timestamp with time zone의 약자로, UTC 기준으로 저장되며 클라이언트의 타임존에 맞춰 자동으로 변환되는 타입입니다.예를 들어 다음과 같이 저장된 값이 있다면:2025-07-28 15:00:00+00한국 시간대(KST)에서는 2025-07-28 24:00:00으로 변환되어 표시됩니다.2. Java에서 매핑 가능한 자료형PostgreSQL의 timestamptz는 Java에서..