[Java] JPA에서 DTO는 Interface로 구현할까? Class로 구현할까?
·
개발 (Development)/Java
JPA를 사용할 때 DTO(Data Transfer Object)를 어떻게 정의할지 고민이 되는 경우가 많습니다. 특히 interface 기반 DTO와 class 기반 DTO 중 어떤 방식을 선택해야 할지 혼란스러울 수 있는데요, 이번 글에서는 두 방식의 차이점과 사용 목적에 따라 어떤 방식을 선택하면 좋을지 정리해보았습니다.Interface 기반 DTO예시public interface UserDto { String getName(); int getAge();}@Query("SELECT u.name as name, u.age as age FROM User u")List findUsers();장점코드가 간단하며, getter만 정의하면 JPA가 구현체를 자동으로 생성합니다.읽기 전용 DTO에 적..
[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/JPA] JPQL 파라미터 바인딩 (위치 기반)
·
개발 (Development)/Java
@Query(value="SELECT DISTINCT process FROM custom_alarm_description WHERE line IN ?1", nativeQuery = true) List findAllDistinctByProcess(List lines); 여기서 '?1'은 첫 번째 파라미터를 나타낸다. 이 코드는 첫 번째 파라미터로 전달된 List의 값을 JPQL 쿼리의 IN 절에 바인딩한다.