이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. 데이터베이스 연결 구조와 DB 세션 사용자는 WAS, DB 접근툴을 통해 DB에 접근할 수 있다. 사용자는 DB 서버에 연결 요청을 하고, WAS는 이를 대신해서 DB와 커넥션을 연결해준다. WAS의 커넥션 / DB의 커넥션이 연결되면 DB는 세션을 하나 만들어둔다. 일단 커넥션을 통해 세션이 생성되면 WAS에서 DB로 오는 모든 요청은 DB 세션이 처리하게 된다. 사용자는 DB 세션을 통해 트랜잭션을 시작하고, 트랜잭션을 종료할 수 있다. 또한, 사용자는 DB 세션을 통해 SQL을 실행할 수 있다. 사용자가 커넥션을 닫거나, DB 관리가 세션을 강제 종료 하면 DB세션은 종료된다. 만약 사용자가 사용하던 커넥션이 커녁센 풀에서 온 것이라 커넥..
이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. 우리는 데이터 저장을 위해 트랜잭션을 쓴다 우리는 많은 데이터를 굳이 DB에 저장한다. 파일로 만들어 저장해도 되는데, 굳이 DB에 만들어 저장하는 이유는 무엇일까? 가장 큰 이유는 DB가 '트랜잭션' 개념을 지원하기 때문이다. 그렇다면 트랜잭션이 어떤 것일까? 트랜잭션이란? 트랜잭션은 '거래'를 의미한다. 트랜잭션은 하나의 '거래'를 안전하게 처리하도록 보장해준다는 것을 의미한다. DB는 '트랜잭션을 지원한다'라고 했다. 이 말을 풀어서 설명하면 'DB는 하나의 거래가 안전하게 처리하도록 보장한다'로 풀어쓸 수 있다. 다음의 예시를 생각해보자. 이 예시는 A에서 B로 5000원을 이체시키는 경우다. 이 하나의 일이 이루어지기 위해서는 크게 두..
이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. DriverManager와 DataSource DriverManager 살펴보기 Connection conn = DriverManager.getConnection(ConnectionConst.URL, ConnectionConst.USERNAME, PASSWORD); DriverManager는 커넥션을 요청할 때 마다 생성해서 전달해준다. DriverManager를 통해 커넥션을 얻을 때마다 설정값을 전달해줘야한다. (URL / Username / Password) DataSource 살펴보기 DataSource는 각 DB마다 불러오는 커넥션을 얻는 방법이 다르다는 것에 착안해서, 커넥션을 얻는 방법을 추상화한 인터페이스다. 이 인터페이스는 Co..
이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. 커넥션을 얻는 방법의 추상화 앞서서 DB와 통신을 하는데 있어서 반드시 커넥션이 필요하다는 것을 확인했다. 그리고 그 커넥션을 얻기 위해 Driver Manager를 통해서 얻는 방법, 커넥션 풀을 통해서 얻는 방법이 있는 것도 확인했다. 그리고 커넥션 풀 인터페이스를 구현한 수많은 커넥션 풀 구현체들이 있다. 이 이야기를 하는 이유는 커넥션을 얻는 방법이 너무나 다양하다는 것이다. 커넥션을 얻는 방법이 여러가지이기 때문에 각 방법마다 커넥션을 얻기 위해 다른 코드가 요구된다. 이런 경우 내가 사용하고 있는 기술이 조금만 변경될 경우, 매번 코드를 수정해야 하는 일이 발생한다. 이것을 개선하기 위해 커넥션을 얻는 방법의 추상화가 필요하다. Da..
이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. Driver Manager와 DB 커넥션 DB에 접근하기 위해서는 반드시 DB 커넥션이 필요하다. 그런데 JDBC의 DB Driver를 이용하는 경우 매번 DB Connection을 맺고 끊어야 한다는 문제점이 있다. 그렇다면 DB Connection을 맺고 끊는 것이 어떻길래 문제가 있다는 것일까? DriverManager의 DB 커넥션 획득 순서 다음은 사용자 요청이 왔을 때, DB Connection을 가져오는 방법이다. 서비스 계층, 비즈니스 로직은 DB 드라이버를 통해 Connection을 조회함. DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 이 과정에서 네트워크 연결을 위한 3 Way HandShaking 같은 네트워크 동..