Database/Spring DB 접근 1 4

4. 스프링과 문제해결 - 스프링 트랜잭션 처리

1. 비지니스(서비스) 계층에서 트랜잭션 처리하기가 생각보다 쉽지 않다 앞서 3장에서(https://hongod.tistory.com/25?category=1063676) 트랜잭션을 시작하고 종료하는 계층을 비지니스 계층이라고 했었다. 이 비지니스 계층의 코드를 작성할 때 가장 중요한 원칙이 하나 있는데 바로 최대한 의존성을 버리고 순수한 자바코드로 작성해야한다는 것이다. 프렌젠테이션 계층은 웹, 서블릿 HTTP 와 같은 기술에 의존하고, 데이터 접근 계층은 JDBC, JPA와 같은 구체적인 DB 접근 기술에 의존하기 때문에 차후 기술 발전에 따른 코드 수정은 불가피하지만, 서비스 계층만은 핵심 비지니스 로직이 바뀌기 전에는 수정하지 않도록 순수한 자바 코드로 격리해놔야 유지보수와 테스트가 용이한 애플리..

3. 트랜잭션 이해

1. 거래(영어 : Transaction) 한 건의 완성 A에게서 B에게로 5000원을 송금하는 과정은 아래의 두 가지 동작으로 나눌 수 있다. 1) A의 잔고에서 5000원을 차감 2) B의 잔고에서 5000원을 증가 만약에 1)의 과정만 수행되고 2)의 과정이 수행되기 전에 오류로 인해 DB 커넥션이 끊어져버리면 어떻게될까? 거래가 제대로 수행되지 않고 A의 잔고에서 5000원이 증발해버린 상황이 펼처지게된다. 회계로 따지면 차/대가 불일치하는 상황(?)이 펼쳐지게 되는 것이다. 이렇게, 작게 봤을 때에는 부분으로 나뉘어지지만 전체적으로 하나의 과정으로 처리돼야하는 DB 통신 과정은 DB에서 제공하는 트랜잭션이라는 기능을 이용하면 각 파트들이 모두 다 함께 수행되거나, 그렇지 않으면 모두 수행 되지 ..

2. Connection Pool 과 DataSource 의 이해

private void close(Connection con, Statement stmt, ResultSet rs) { JdbcUtils.closeResultSet(rs); JdbcUtils.closeStatement(stmt); JdbcUtils.closeConnection(con); } 1. DB 커넥션을 얻는 대가 DB 커넥션을 얻는 코드는 짧지만 생각보다 코스트가 비싼 행위이다. 애플리케이션 밑바닥의 TCP/IP 3-way handshake 과정부터 시작해서 ID, PW 를 보내 인증과정까지 거쳐야 비로소 커넥션 객체가 DB 드라이버로 부터 돌아오기 때문에 DB 연결이 필요한 시점 마다 DriverManger를 통해 커넥션 요청부터 시작하면 쿼리 수행 시간에 연결 요청 시간이 추가되기 때문에 성능..

1. JDBC 이해

- 일반적으로 애플리케이션 서버와 DB 서버간의 통신은 1. 커넥션 연결 (애플리케이션 -> DB 서버) 2. SQL 전달 (애플리케이션 -> DB 서버) 3. 처리 결과 응답 (DB 서버 -> 애플리케이션 서버) 의 큰 세 가지 축으로 이루어진다. - 애플리케이션 개발자 입자에서 고역인 것은 이런 애플레케이션 DB 간 통신 방식이 DB 벤더에 따라 모두 다르다는 것이다. 즉 서로 다른 언어, 비유하자면 MySql은 한국어, Oracle은 영어, PostgresSQL은 독일어 등등... 서로 다른 언어로 통신하기 때문에 아~주먼 과거의 개발자들은 DB를 바꾸게 되면 애플리케이션 코드에서도 위 세 가지 통신을 위한 코드들을 모두 새로 배워서 바꿔야했다(한국어 쓰다가 독일어 배워서 쓰고...). - 위와 같..