문제 상황
1. controller.java에서 MyBatisSystemException 발생 (UncategorizedDataAccessException을 상속 받고 있음.)
점검 사항
1. mapper.java와 mapper.xml 연동은 이루어진 상태 (확인방법 : mapper.xml의 id값을 비울 임의로 삭제할 경우 'id불일치 예외' 발생)
2. mapper.xml의 쿼리문 문제 없음
3. 버전 연계 문제 없음 (스프링부트 3.3.3 자바17 mybatis 3.0.3)
4. user의 db 권한 확인
5. 로그에 HickariCP까지 뜸
===> SQLSession 문제라고 판단
해결 방법
SQL세션 관리하는 MyBatisConfig를 살펴보고 웹에서 찾은 것과 다른 점들을 발견해 수정하니 해결됐다.
이 과정에서 MybatisConfig에서 관리하는 내용이 application.properties의 내용과 동일해서 없어도 될 것 같아 파일을 삭제했다. 결과는 문제없음.
아래는 application.properties다. 내 경우 오타가 있었다.
spring.datasource.url=jdbc:mysql://호스트주소:3306/데이터베이스이름
spring.datasource.username=데이터베이스계정이름
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
데이터베이스이름 & 데이터베이스계정이름
데이터베이스이름은 Database Name이고
데이터베이스계정이름은 Database Username이다.
영어로 적으면 이해가 쉬운데;; 번역하니까 햇갈리더라.
데이터베이스는 하나의 큰 서버 안에 여러개가 있을 수 있고 이 각각의 데이터베이스는 별도의 스키마를 가진 채 테이블과 데이터를 소유하고 있다.
데이터베이스이름(Database Name)은 서버 내에서 데이터베이스를 식별하는 이름을 말한다.
계정이름(Username)은 데이터베이스 서버에 접근할 때 사용하는 사용자 계정의 이름이다.
이 계정들에는 권한이 설정되며 이 권한에 따라 특정 DB에 접근하고 조작할 수 있게 된다.
Azure DB서버에서 확인하기
데이터베이스이름(Database Name) ▼
이 때 cine-db가 '데이터서버이름'이 된다.
데이터베이스 계정이름 (Database Username) ▼
예외 설명
UncategorizedDataAccessException은 API가 Spring에서 제공하는 것보다 더 구체적으로 예외를 분류할 수 없는 경우 발생되는 예외다.
spring docs에 정의된 내용
Normal superclass when we can't distinguish anything more specific than "something went wrong with the underlying resource": for example, an SQLException from JDBC we can't pinpoint more precisely.
"기본 리소스에 문제가 발생했습니다"보다 더 구체적인 것을 구별할 수 없는 경우에 사용되는 슈퍼클래스입니다. 예를 들어 JDBC의 SQLException은 이보다 더 정확하게 찾아낼 수 없습니다.
아래처럼 '미분류'로 분류되는 예외이기 떄문에 해결에 정말 골치가 아프다 ㄱ=
예외 클래스 설명
CannotAcquireLockException update 과정에서 lock에 실패
CannotSerializeTransactionException update 충돌로 serialized 모드의 트랜젝션 실패
CleanupFailureDataAccessException CRUD 오퍼레이션은 성공했으나, DB 리소스 회수에 실패한 경우(예: Connection close 실패)
ConcurrencyFailureException 동시 접근 제어 실패
DataAccessResourceFailureException DB 연결 불능과 같은 DB 리소스 문제
DataIntegrityViolationException 데이터 무결성 규칙에 위배되는 insert/update를 시도
DataRetrievalFailureException 아무 데이터도 추출하지 못함
DeadlockLoserDataAccessException Dead-lock 문제로 트랜젝션 무효화
EmptyResultDataAccessException 하나 이상의 결과가 나와야 하는 상황에서 결과가 없음
IncorrectResultSizeDataAccessException 예상되는 결과와 다른 수의 데이터가 반환
IncorrectUpdateSemanticsDataAccessException update과정에서 예기치 못한 일 발생. 잘못된 트랜젝션 Roll-back 안됨.
InvalidDataAccessApiUsageException 기반 API를 잘못 사용
InvalidDataAccessResourceUsageException SQL 문법 오류와 같은 DB 리소스 오용
OptimisticLockingFailureException optimistic locking 위반. DBMS가 아닌 ORM이나 DAO 구현에서 throw
PermissionDeniedDataAccessException 접근 권한 오류
PessimisticLockingFailureException DBMS에서 포착한 pessimistic locking 위반.
TypeMismatchDataAccessException 자바 타입과 데이터 타입 불일치
UncategorizedDataAccessException 미분류
출처: https://murimi.tistory.com/entry/Spring-Exception [무리미의삽질러스:티스토리]
예상할 수 있는 원인은 아래와 같다.
- SQL 구문 오류
- 데이터베이스 연결 문제 // 내 경우 이것이었다.
- 권한이 부족하거나 인증에 실패
- 교착 상태 또는 리소스 부족과 같은 내부 데이터베이스 오류
- 기본 데이터 액세스와 관련된 기타 문제
참고
'┝ DB > ┝ RDBMS' 카테고리의 다른 글
[spring boot] mariaDB, JPA 적용 (0) | 2025.01.23 |
---|---|
[spring boot] 셋업 - JPA와 Driver의 차이 (0) | 2025.01.22 |
[mySQL] auto increment된 키 값 바로 받아오는 세가지 방법 (param, vo, map) (1) | 2024.10.16 |
[postgre] (0) | 2023.08.29 |
database와 relation (0) | 2023.07.07 |