데이터베이스/JDBC
-
[JDBC] JDBC 템플릿데이터베이스/JDBC 2024. 11. 6. 19:04
JDBC 템플릿 선언public class Test{ private final JdbcTemplate template; public Test(DataSource dataSource){ template = new JdbcTemplate(dataSource); } } JDBC 템플릿 사용법삽입, 업데이트, 삭제template.update([sql구문], [구문에필요한 파라미터1], [구문에필요한 파라미터2] ..)조회RowMapper는 결과값을 매핑하는 용도template.update([sql구문], [RowMapper()] , [구문에필요한 파라미터2] ..)private RowMapper testRowMapper() { return (rs, rowNum) ..
-
[JDBC] 스프링 예외 변환기데이터베이스/JDBC 2024. 11. 6. 18:45
UnChecked예외 (데이터 접근)생성방법UnChecked예외를 먼저 만든다Checked -> UnChecked 예외로 변경 (변경시, 에러코드가 존재하면 해당 예외로 변경)예외처리public class DBErrorException extends RuntimeException{ ///... }public class Service{ //... try{ logic(); }catch (SQLException e){ if ( e.getErrorCode().isEqualTo(42122) ){ // 42122는 "SQL bad Grammer" 오류 코드 throw new DBErrorException(e..
-
@Transactional데이터베이스/JDBC 2024. 11. 6. 00:39
트랜잭션 프록시서비스 Logic() 과 트랜잭션의 분리를 위한 프록시작업트랜잭션 매니저 적용 버전//트랜잭션 시작TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());try { //비즈니스 로직 Logic(); transactionManager.commit(status); //성공시 커밋}catch (Exception e) { transactionManager.rollback(status); //실패시 롤백 throw new IllegalStateException(e); }트랜잭션 프록시 사용 버전서비스와 트랜잭션의 완전한 분리 (서비스계층은 비즈니스..
-
[JDBC] 트랜잭션 템플릿데이터베이스/JDBC 2024. 11. 6. 00:15
트랜잭션 매니저 코드트랜잭션 commit(), rollback() 반복 사용의 불편함//트랜잭션 시작TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());try { //비즈니스 로직 bizLogic(fromId, toId, money); transactionManager.commit(status); //성공시 커밋 } catch (Exception e) { transactionManager.rollback(status); //실패시 롤백 throw new IllegalStateException(e); } 트..
-
[JDBC] 트랜잭션 매니저데이터베이스/JDBC 2024. 11. 5. 00:40
애플리케이션 구조프레젠테이션 계층> UI 와 관련된 처리 담당> 웹 요청과 응답> 사용자 요청 검증서비스계층> 비즈니스 로직 담당데이터접근계층> 실제 데이터베이스 접근 코드 서비스계층 트랜잭션 문제점 (JDBC)public void func(String param1, String param2, int param3) throws SQLException{ // SQLEXCEPTION 예외 Connection con = dataSource.getConnection(); try{ //1. JDBC 트랜잭션 시작 con.setAutoCommit(false); bizLogic(con, param1, param2, param3); //2. JDB..
-
[JDBC] 트랜잭션데이터베이스/JDBC 2024. 11. 5. 00:39
1. 트랜잭션 ACID2. 트랜잭션 격리 수준3. DB 세션4. 트랜잭션 직접 구현 트랜잭션 ACID원자성 (Atomicity)트랜잭션 내에서 실행한 작업들은 모두 성공하거나 모두 실패일관성 (Consistency)일관성 있는 데이터베이스 상태 유지 (무결성 제약 조건을 항상 만족)격리성 (Isolation)동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않아야함지속성 (Durability)트랜잭션을 성공적으로 끝내면 그결과가 항상 기록되어야함 트랜잭션 격리 수준READ UNCOMMITED (커밋되지 않은 읽기)READ COMMITTED (커밋된 읽기)REPEATABLE READ (반복 가능한 읽기)SERIALIZABLE (직렬화 가능)일반적으로, READ COMMITED(커밋된 읽기)가 기본적으로 ..
-
[JDBC] 커넥션 풀데이터베이스/JDBC 2024. 11. 4. 23:34
1. 커넥션 풀이란?2. 커넥션 풀 구조3. 커넥션 풀 오픈소스4. 커넥션 풀 직접 구현 Connection Pool 이란?DB와 연결을 짓는 과정자체를 Connection 과정이라고 일컫는다.여기서 매번 DB와의 연결을 위해서 TCP/IP 3wayhandshake를 과정을 거치기도 하고, 인증과정도 거치게된다.이런 과정속에서 인증하고 커넥션 작업을 하는데에만 리소스를 많이 사용하게 될 수도 있기에 미리 커넥션을 맺어놓아 보관해두는 공간을 "Connection Pool"이라고 한다.위의 그림과 같은 과정을 통해 DB의 커넥션을 가지고 올 수 있다단점매번 요청시마다 커넥션을 맺는과정을 거쳐야한다. (리소스를 효율적으로 사용하지 못함)DB의 상황에따라 많은 수의 쿼리 요청을 받지 못할 가능성이 존재한다.데이..
-
[JDBC] JDBC CRUD 구축데이터베이스/JDBC 2024. 10. 31. 22:09
JDBC 연결java.sql.DriverManagerjava.sql.Connection ( Java 인터페이스 )DriverManager.getConnection( 데이터베이스 링크, 데이터베이스 사용자 아이디 , 데이터베이스 사용자 비밀번호 )/*Connection connection = DriverManager.getConnection(ConnectionConst.URL, ConnectionConst.USERNAME, ConnectionConst.PASSWORD);*/@Slf4jpublic class DBConnectionUtil { public static Connection getConnection(){ try{ Connection connection = Dr..