[Java/Spring Boot] "No thread-bound request found" 에러 원인과 해결법
·
개발 (Development)/Java
이 에러는 현재 실행 중인 스레드에 웹 요청(HttpServletRequest) 정보가 바인딩되어 있지 않다는 의미입니다. 주로 비동기 작업(@Async)이나 백그라운드 스레드에서 Spring MVC의 요청 컨텍스트에 접근하려 할 때 발생합니다.🔍 에러 원인과 시스템에 미치는 영향이 에러는 스레드의 경계를 넘나드는 요청 정보 접근 때문에 발생합니다. Spring MVC는 웹 요청을 처리하는 스레드에 HttpServletRequest와 같은 데이터를 연결합니다. 하지만 @Async나 new Thread()로 새로운 스레드를 생성하면, 이 스레드는 기존의 요청 정보를 공유하지 않습니다. 따라서 새로운 스레드에서 RequestContextHolder를 사용해 요청 정보에 접근하려 할 때 에러가 발생합니다.이..
[Java/Spring Boot] JdbcTemplate으로 여러 데이터베이스 연결하기
·
개발 (Development)/Java
한 프로젝트에서 하나의 데이터베이스만 다루다가, 새로운 데이터베이스가 추가되면 기존 구조를 확장해야 합니다. 이 글에서는 JdbcTemplate를 활용해 여러 개의 데이터베이스를 연결하고 선택적으로 실행하는 과정을 정리합니다.문제 정의기본적으로 JdbcTemplate는 하나의 DataSource를 참조하여 단일 데이터베이스에 접근합니다.새로운 데이터베이스를 연결해야 할 때, 별도의 설정과 JdbcTemplate 등록이 필요합니다.SQL 실행기를 공통화하여 코드 중복을 줄이고, 대상 DB만 선택해서 실행할 수 있어야 합니다.DataSource 등록Spring Boot에서는 DataSourceProperties를 통해 손쉽게 데이터소스를 생성할 수 있습니다. 데이터베이스마다 접두어를 달리 설정하면 여러 개의..
[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..