[Java] MyBatis와 JPA 속도 비교: 어떤 상황에 어떤 선택이 더 나을까?
·
개발 (Development)/Java
Java 백엔드 개발에서 가장 많이 사용되는 ORM 프레임워크인 JPA와, SQL 매핑 프레임워크인 MyBatis는 각기 다른 장점을 지니고 있습니다. 저 역시 프로젝트를 진행하면서 "어떤 상황에 어떤 것이 더 빠를까?"라는 질문을 갖고 두 프레임워크를 비교해 보게 되었습니다.이번 글에서는 MyBatis와 JPA의 속도와 성능 측면에서의 차이를 중심으로, 실제 사용 시 고려할 점들을 정리해보았습니다.1. MyBatis와 JPA는 어떤 프레임워크인가요?MyBatis는 SQL을 직접 작성하여 사용하는 SQL 매퍼 프레임워크입니다. 개발자가 SQL을 전적으로 통제할 수 있어 성능 최적화에 유리합니다.JPA는 객체지향 프로그래밍과 데이터베이스를 매핑하는 ORM 프레임워크입니다. SQL 작성을 최소화하고 생산성을..
[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에서..
[Java] ISO 8601 형식의 시간 출력하기 (현재 시간과 과거 시간 구하기)
·
개발 (Development)/Java
Java를 사용하여 현재 시간과 과거 시간을 ISO 8601 형식(예: 2025-07-13T15:00:00Z)으로 출력하는 방법에 대해 정리해보았습니다. 특히, UTC 기준으로 현재 시간과 3시간 전 시간을 구하는 예제를 중심으로 설명드리겠습니다.1. 문제 상황로그나 데이터 처리, 외부 API와의 연동 시 국제 표준 시간 형식인 ISO 8601을 사용하는 경우가 많습니다.예를 들어, 2025-07-13T15:00:00Z와 같은 형식은 UTC(협정 세계시)를 기준으로 한 ISO 포맷입니다.이 글에서는 현재 시간과 현재로부터 3시간 전 시간을 자바 코드로 계산하고, 이를 ISO 8601 형식으로 출력하는 방법을 알아봅니다.2. 해결 방법사용 도구java.time.Instantjava.time.temporal..
[Java] MyBatis foreach에서 빈 배열이 들어올 경우 예외를 방지하는 방법
·
개발 (Development)/Java
Java에서 MyBatis를 사용할 때, foreach 구문에 빈 배열이나 리스트가 들어오는 상황은 종종 발생합니다. 이때 적절한 처리를 하지 않으면 SQL 문법 오류나 의도치 않은 전체 조회와 같은 문제가 생길 수 있습니다.저는 최근 IN 절을 동적으로 구성하기 위해 태그를 사용하던 중, 전달받은 리스트가 빈 배열일 경우 SQL 오류가 발생하는 문제를 겪었습니다. 이 문제를 해결하기 위해 어떤 방식들이 있는지 조사하고, 실제로 적용해 보면서 가장 적합한 해결 방법을 찾게 되었습니다.문제 상황: 빈 배열이 들어오면 SQL 오류 발생예를 들어 아래와 같이 idList라는 리스트를 기반으로 사용자 정보를 조회하는 SQL을 구성한다고 가정합니다. SELECT * FROM users WHERE id IN ..
[Java/SpringBoot] 서버 간 API 호출 오류: Connection reset 에러 분석 및 해결 방법
·
개발 (Development)/Java
1. 에러 개요다음과 같은 에러 메시지가 로그에 출력되었습니다.org.springframework.web.client.ResourceAccessException: I/O error on POST request for [내부 서버 주소]: Connection reset이는 시스템 A에서 내부 시스템 B의 인증 API를 호출하려 했지만, 상대방 서버 측에서 연결을 강제로 종료시켜 발생한 네트워크 오류입니다.2. 에러의 의미Connection reset은 클라이언트가 요청을 보냈지만, 상대 서버가 응답을 주지 않고 연결을 끊어버린 상황을 의미합니다.보통 이는 응답 처리 중 문제가 발생했거나, 서버가 아예 요청을 수신하지 못한 경우에도 발생할 수 있습니다.3. 발생 가능한 원인다음과 같은 원인들이 있을 수 있습..