Database(20)
-
[DB 접근 기술] DB 락
DB 락 - 개념 이해 세션1이 트랜잭션을 시작하고 데이터를 수정하는 동안 아직 커밋을 수행하지 않았는데, 세션2에서 동시에 같은 데이터를 수정하게 되면 여러가지 문제가 발생한다. 바로 트랜잭션의 원자성이 깨지는 것이다. 여기에 더해서 세션1이 중간에 롤백을 하게 되면 세션2는 잘못된 데이터를 수정하는 문제가 발생한다. 이런 문제를 방지하려면, 세션이 트랜잭션을 시작하고 데이터를 수정하는 동안에는 커밋이나 롤백 전까지 다른 세션에서 해당 데이터를 수정할 수 없게 막아야 한다. 데이터베이스는 이런 문제를 해결하기 위해 락(Lock)이라는 개념을 제공한다. 세션1은 트랜잭션을 시작한다. 세션1은 memberA 의 money 를 500으로 변경을 시도한다. 이때 해당 로우의 락을 먼저 획득해야 한다. 락이 남..
2022.05.27 -
[DB 접근 기술] 트랜잭션 이해
트랜잭션 - 개념 이해 데이터를 저장할 때 파일이 아니라 DB에 저장하는 이유는 무엇일까 가장 대표적인 이유로 DB는 트랜잭션이라는 개념을 지원하기 때문이다. 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해주는 것을 뜻한다. 이는 생각보다 고려해야 할 점이 많다. A가 B에게 5000원을 송금한다면, A의 잔고를 5천원 감소하고, B의 잔고를 5천원 증가해야 한다. 이 과정이 하나의 트랜잭션 안에서 이루어져야 한다. 1. A의 잔고 5천원 감소 2. B의 잔고 5천원 증가 만약 1번은 성공했는데 2번에서 시스템 문제가 발생한다면 A의 돈만 파쇄된 것이다. DB가 제공하는 트랜잭션 기능을 사용하면 1,2 둘 다 성공해야 저장하고 둘 중에 하나라도 실패하면 거래 전의 상태로 돌아갈 수 있다. 모든 작업이..
2022.05.27 -
[DB 접근 기술] 커넥션 풀과 데이터 소스 이해 - DataSource 이해
DataSource 이해 커넥션을 얻는 방법은 다양하다. JDBC DriverManager로 신규 커넥션을 생성하거나, HikariCP등의 커넥션 풀을 사용해도 된다. 만약 JDBC DriverManager를 통해 커넥션을 획득하다가, 커넥션 풀을 사용하는 방법으로 변경하려면 어떻게 해야 될까? 의존관계가 DriverManager에서 커넥션 풀로 변경되었으므로 애플리케이션 코드도 함께 변경해야 한다. 둘의 사용법이 다르기 때문이다. 하지만 자바는 커넥션을 획득하는 방법을 추상화하였다. 자바는 javax,sql.DataSource라는 표준 인터페이스를 제공한다. 이 DataSource는 커넥션을 획득하는 방법을 추상화 하는 인터페이스다. 핵심 기능은 커넥션 조회뿐이다. public interface Dat..
2022.05.25 -
[DB 접근 기술] 커넥션 풀과 데이터 소스 이해 - 커넥션 풀 이해
커넥션 풀 이해 서버에서 DB로 요청을 보낼 때, 데이터베이스 커넥션을 매번 획득해야 한다. 하지만 매번 커넥션을 획득할 때마다 다음과 같은 복잡한 과정을 거친다. 1. 애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다. 2. DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 물론 이 과정에서 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생한다. 3. DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달한다. 4. DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성한다. 5. DB는 커넥션 생성이 완료되었다는 응답을 보낸다. 6. DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환한다. 요약하자..
2022.05.25 -
[DB 접근 기술] JDBC 개발 - 수정, 삭제
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1# 스프링 DB 1편 - 데이터 접근 핵심 원리 - 인프런 | 강의 백엔드 개발에 필요한 DB 데이터 접근 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의 www.inflearn.com 김영한 강사님의 인프런 강의를 수강 후 블로그에 정리해서 포스팅합니다. 이전 포스팅의 등록, 조회에 이어 수정, 삭제를 알아본다. 먼저 수정 public void update(String memberId, int money) throws SQLException { String sql = "update..
2022.05.25 -
[DB 접근 기술] JDBC 개발 - 등록, 조회
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1# 스프링 DB 1편 - 데이터 접근 핵심 원리 - 인프런 | 강의 백엔드 개발에 필요한 DB 데이터 접근 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의 www.inflearn.com 김영한 강사님의 인프런 강의를 수강 후 블로그에 정리해서 포스팅합니다. 먼저 Member 테이블을 생성한다. create table member ( member_id varchar(10), money integer not null default 0, primary key (member_id) ); D..
2022.05.25