[MyBatis] Invalid bound statement (not found) 에러 완벽 해결법

2026. 3. 27. 12:28·Backend - Java & Spring
반응형

Spring Boot와 MyBatis를 연동할 때 개발자를 가장 당혹스럽게 만드는 에러가 바로 BindingException: Invalid bound statement (not found)입니다. 프로젝트 빌드는 잘 되었는데, 막상 DB를 호출하는 시점에 발생하는 이 에러! 오늘은 가장 빈번한 원인 4가지와 확실한 해결책을 정리해 드립니다.


1. 에러의 핵심 원인: "연결 고리가 끊겼다"

이 에러는 쉽게 말해 "자바 인터페이스(Mapper)와 실행할 SQL이 담긴 XML 파일이 서로 매칭되지 않을 때" 발생합니다. 스프링이 "이 메서드를 실행하려는데 실행할 쿼리가 어디 있지?"라며 길을 잃은 상태라고 보시면 됩니다.


2. 해결 방법 1: namespace와 인터페이스 경로 일치 (가장 중요!)

가장 흔한 실수입니다. XML 파일 상단의 namespace 값은 반드시 Mapper 인터페이스의 전체 경로(Full Package Name)와 토씨 하나 틀리지 않고 일치해야 합니다.

✅ 체크포인트:

  • 잘못된 예: <mapper namespace="UserMapper">
  • 올바른 예: <mapper namespace="com.sunny.project.mapper.UserMapper">

3. 해결 방법 2: 메서드 ID와 XML id 일치 여부

Mapper 인터페이스에 정의한 메서드 이름과 XML 파일 안의 SQL 태그 id가 정확히 일치하는지 확인하세요.

// UserMapper.java (인터페이스)
public interface UserMapper {
    User selectUserInfo(String userId); // 메서드명: selectUserInfo
}
<select id="selectUserInfo" resultType="com.sunny.project.model.User">
    SELECT * FROM users WHERE user_id = #{userId}
</select>
  • 대소문자 오타가 없는지, 마침표나 공백이 들어가지 않았는지 꼭 확인해야 합니다.

4. 해결 방법 3: application.properties 경로 설정

스프링 부트가 XML 파일들을 어디서 찾아야 할지 모르는 경우입니다. application.properties (또는 .yml) 파일의 설정을 점검하세요.

# application.properties
mybatis.mapper-locations=classpath:mappers/**/*.xml
  • 주의: src/main/resources 하위 경로와 실제 XML 파일이 위치한 경로가 위 설정과 일치하는지 확인하세요. (예: resources/mappers/UserMapper.xml)

5. 해결 방법 4: 빌드(Build) 결과 확인 (IntelliJ/Eclipse)

간혹 코드는 맞는데 빌드 도구의 문제로 XML 파일이 target 혹은 out 폴더(배포 경로)로 복사되지 않는 경우가 있습니다.

  1. 프로젝트를 Clean 후 다시 Build 해보세요.
  2. src/main/java 패키지 안에 XML을 두었다면, 빌드 시 XML이 누락될 수 있습니다. 가급적 XML은 src/main/resources 하위로 옮기는 것을 권장합니다.

마무리하며

Invalid bound statement (not found) 에러는 결국 '이름표 매칭'의 문제입니다.

  1. Namespace 경로가 정확한가?
  2. Method ID가 일치하는가?
  3. XML 파일 위치를 스프링이 알고 있는가?

이 세 가지만 확인하면 99% 해결됩니다. 오늘 포스팅이 여러분의 '칼퇴'에 도움이 되었기를 바랍니다!


반응형
저작자표시 비영리 변경금지 (새창열림)
'Backend - Java & Spring' 카테고리의 다른 글
  • [Spring Boot] Whitelabel Error Page 404 원인과 해결 방법 (MyBatis 연동 시)
  • ChatGPT 활용 끝판왕: Notion·Excel·Zapier와 함께 쓰는 법
  • 신입 개발자 자기소개서 작성 팁: 합격률을 높이는 실전 전략
  • 개발자 블로그 시작하기: 네이버 vs 티스토리 vs 벨로그 비교
개발병아리
개발병아리
웹 개발과 IT 기술을 중심으로, 다양한 프로젝트 경험을 공유하며 일상에서 유용한 꿀팁도 소개하는 블로그입니다. 개발에 대한 깊은 고민부터, 일상에서 필요한 작은 팁까지 함께 나누고 싶어요! 취미로 야구 컨텐츠 관련해서 올리기도 하고 맛집도 공유해요!
  • 개발병아리
    개발 병아리의 코딩 & 맛집 일지
    개발병아리
  • 전체
    오늘
    어제
    • 분류 전체보기 (45)
      • Backend - Java & Spring (23)
      • Project (7)
      • CS & Interview (3)
      • 새로운 소식 및 꿀팁 (5)
      • Daily (7)
  • 블로그 메뉴

    • 홈
  • 인기 글

  • 태그

    개발블로그
    springboot
    20L대용량기저귀쓰레기통
    초보개발자
    개발자면접
    API
    java개발
    Spring
    java
    백엔드에러
    네이버특가기저귀쓰레기통
    MapperScan
    restapi
    SpringBootMyBatis
    다룸자동센서기저귀쓰레기통
    초보개발자팁
    사이드프로젝트
    springframework
    MySQL
    프로그래밍
    반려동물배변패드휴지통
    프로젝트
    버전관리
    정처기
    경매사이트
    웹개발기초
    스프링부트오류
    웹개발
    IT블로그
    야구
    신입개발자
    MyBatis오류
    개발자블로그
    MVC패턴
    백엔드기초
    회원가입
    백준추천문제
    DTO
    WhitelabelErrorPage
    개발자취업
    백엔드개발
    블로그성장
    취업준비
    JPA
    신입개발자준비
    InvalidBoundStatement
    backend개발
    MyBatis
    종량제호환기저귀쓰레기통
    다룸20L종량제호환휴지통
  • 최근 댓글

  • 최근 글

  • 05-16 04:08
    반응형
  • hELLO· Designed By정상우.v4.10.4
개발병아리
[MyBatis] Invalid bound statement (not found) 에러 완벽 해결법
상단으로

티스토리툴바