세션1이 트랜잭션을 시작하고 데이터를 수정하는 동안 아직 커밋을 수행하지 않았는데, 세션2에서 동시에 같은 데이터를 수정하게 되면 여러가지 문제가 발생한다. 만약 세션1이 중간에 롤백을 하게 되면 세션2는 잘못된 데이터를 수정하는 문제가 발생한다.이런 문제를 방지하려면, 세션이 트랜잭션을 시작하고 데이터를 수정하는 동안에는 커밋이나 롤백 전까지 다른 세션에서 해당 데이터를 수정할 수 없게 막아야 한다. 여기서는 데이터베이스 Lock을 이용하여 이 문제를 해결하는 방법을 알아보겠다.세션1은 memberA의 금액을 500원으로 변경하고 싶고, 세션2는 같은 memberA의 금액을 1000원으로 변경하고 싶다. 데이터베이스는 이런 문제를 해결하기 위해 락(Lock)이라는 개념을 제공한다.세션1은 트랜잭션을 시..
데이터베이스 커넥션을 획득할 때는 다음과 같은 복잡한 과정을 거친다.애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다.DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 물론 이 과정에서 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생한다.DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달한다.DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성한다.DB는 커넥션 생성이 완료되었다는 응답을 보낸다.DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환한다.이렇게 커넥션을 새로 만드는 것은 복잡하고 시간도 많이 소모되는 일이다. DB는 물론이고 애플리케이션 서버에서도 TCP/IP 커넥션을 새로 생성하기..
JDBC가 등장하게 된 이유 클라이언트가 애플리케이션 서버를 통해 데이터를 저장 또는 수정하면, 애플리케이션 서버는 아래와 같은 순서로 데이터베이스를 사용한다. 커넥션 연결 : 주로 TCP/IP를 사용해서 커넥션을 연결한다. SQL 전달 : 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다. 결과 응답 : DB는 전달된 SQL을 수행하고 그 결과를 응답한다. 애플리케이션 서버는 응답 결과를 활용한다. 과거에는 각 벤더사마다 커넥션을 연결하고, SQL을 전달 및 결과를 응답 받는 방법이 모두 다르기 때문에, 데이터베이스를 다른 벤더사로 변경하면 애플리케이션 코드도 그에 맞게 수정해줘야 하는 단점이 존재하였다. 또한 각 벤더사에 따라 커넥션 연결방법, SQL 전달방법,..
- Total
- Today
- Yesterday
- 북클럽
- 자료구조
- 노마드
- leetcode
- 리팩토링
- 노마드코더
- 알고리즘
- 파이썬
- 정렬
- Algorithm
- Spring
- MySQL
- 스프링
- Real MySQL
- webflux
- kotlin
- spring boot
- 스프링부트
- 데이터베이스
- 백준
- 인프런
- 그리디
- 김영한
- 코틀린
- 구현
- 스프링 부트
- 코테
- mysql 8.0
- 문자열
- 릿코드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |