CS/DataBase

DB관련 익셉션 변환 처리 및 트랜잭션 처리

prden 2021. 8. 5. 09:12

1. DB 관련 Exception처리

1) DB 연동 과정에서 발생 가능 한 익셉션

 Access denied for user 'example'@'localhost'~~~

org.springframework.jdbc.CannotGetJdbcConnectionException : Failed to obtain JDBC Connection
//DB연결정보가 DataSource에 있으니 DataSource를 잘못 설정하면 연결을 구할 수 없다는 익셉션이 뜨는 것

이 에러는 MySQL서버에 연결할 권한이 없을 경우에 발생 (비밀번호 잘못 입력했을 경우)

 

2) DB를 실행하지 않았거나 방화벽에 막혀서 연결할 수 없는 경우

org.springframework.jdbc.CannotGetJdbcConnectionException : Failed to obtain JDBC Connection

Communications link failure ~~

이 경우는 주로 DBMS를 실행하지 않았을 경우 발생

 

3) 잘못된 쿼리를 사용한 경우

공백문자 누락 등으로 쿼리를 잘못 사용할 경우 

org.springframework.jdbc,BadSqlGrammerException: ~~~ bad SQL grammer

MySQLSyntaxErrorException

 

2. 스프링 익셉션의 변환처리

JDBC 드라이버는 SQL 문법이 잘못된 경우 SQLException을 상속받은 MySQLSyntaxErrorException을 발생시키는데 JdbcTemplate는 이 익셉션을 DataAccessException을 상속받은 BadSqlGrammerException으로 변환한다. 

스프링은 SQLException을 DataAccessException으로 변환시키는데 그 이유는 무엇인가?

주된 이유는 연동기술(JPA, 마이 바티스 등)에 상관없이 동일하게 익셉션을 처리할 수 있도록 하기 위함이다. 

 

 

3. 트랜잭션 처리 

두 개 이상의 쿼리를 한 작업으로 실행해야 할 때 사용하는 것이 트랜잭션이다. 하나의 쿼리를 실행한 후 두 번째 쿼리를 수행하다가 오류가 발생했을 경우 쿼리 실행결과를 취소하고 DB를 기존 상태로 되돌리는 것을 롤백이라고 하며 두 쿼리 모두 잘 수행되었을 경우 실제 DB에 반영하는 것을 커밋이라고 한다. 

어노테이션은 해당 메소드에 @Transactional만 붙여주면 된다. (@EnableTransactionManagement 애노테이션은 @Transactional 애노테이션이 붙은 메서드를 트랜잭션 범위에서 실행하는 기능을 활성화한다. )

 

PlatformTransactionManager는 스프링이 제공하는 트랜잭션 매니저 인터페이스이다. 스프링은 구현 기술에 상관없이 동일한 방식으로 트랜잭션을 처리하기 위해 이 인터페이스를 사용한다. 

 

 

'CS > DataBase' 카테고리의 다른 글

Redis  (0) 2021.08.11
MySQL 인덱스(Index) & 파티션Partition & Full-Text Search  (0) 2021.08.09
정규화(Normalization)  (0) 2021.07.28
Database Design  (0) 2021.07.22
ShoppingMall ERD  (0) 2021.07.02