Data Base/스프링 DB
-
스프링 DB - DB락 조회Data Base/스프링 DB 2023. 11. 24. 15:46
DB락 - 조회 일반적인 조회는 락을 사용하지 않는다. 데이터베이스마다 다르지만, 보통 데이터를 조회할 때는 락을 획득하지 않고 바로 데이터를 조회할 수 있다. 예를 들어 서 세션1이 락을 획득하고 데이터를 변경하고 있어도, 세션2에서 데이터를 조회 할 수 있다. 물론 세션2에서 조회가 아니라 데이터를 변경하려면 락이 필요하기 때문에 락이 돌아 올 때 까지 대기해야 한다. 조회와 락 데이터를 조회할 때도 락을 획득하고 싶을 때가 있다. 이럴 때는 select for update 구문을 사용하면 된다. 이렇게 하면 세션1이 조회 시점에 락을 가져가 버리기 때문에 다른 세션에서 해당 데이터를 변경할 수 없다. 물론 이경우도 커밋 명령어를 통해 트랜잭션을 끝내고 락을 반납한다. 조회 시점에 락이 필요한 경우는..
-
스프링 DB - DB락 개념 이해&실습Data Base/스프링 DB 2023. 11. 24. 14:31
DB락 - 개념 이해 세션1이 트랜잭션을 시작하고 데이터를 수정하는 동안 아직 커밋을 수행하지 않았는데, 세션2에서 동시에 같은 데이터를 수정하게 되면 여러가지 문제가 발생한다. 바로 트랜잭션의 원자성이 깨지는 것이다. 여기에 더해 세션1이 중간에 롤백을 하게 되면 세션2는 잘못된 데이터를 수정하는 문제가 발생한다. 이런 문제를 방지하려면 세션이 트랜잭션을 시작하고 데이터를 수정하는 동안에는 밋이나 롤백 전까지 다른 세션에서 해당 데이터를 수정할 수 없게 막아야한다. 기본 데이터 이력 - SQL set autocommit true; delete from member; insert into member(member_id, money) values('memberA',10000); 락0 세션1은 memberA..
-
스프링 DB - 트랜잭션 DB 예제(트랜잭션 실습)Data Base/스프링 DB 2023. 11. 24. 13:00
트랜잭션 - DB 예제(트랜잭션 실습) 1. 기본 데이터 입력 지금까지 설명한 예시를 직접 확인해보자. 먼저 H2 데이터베이스 웹 콘솔 창을 2개 열러두자. ❗주의 H2 데이터베이스 앱 콘솔 창을 2개 열때는 기존 URL을 복사하면 안된다. http://localhost:8002를 직접 입력해서 완전히 새로운 세션에서 연결하도록 하자. URL을 복사하면 같은 세션(jsessionId)에서 실행되어서 원하는 결과가 나오지 않을 수 있다. 예: http://localhost:8082 에 접근했을 때 다음과 같이 jessionid 값이 서로 달라야 한다. jsession값이 같으면 같은 세션에 접근하게 된다. 먼저 기본 데이터를 다음과 같이 맞추어 둔다. 데이터 초기화 SQL -- 데이터 초기화 set aut..
-
스프링 DB - 트랜잭션 DB 예제2(자동커밋, 수동커밋)Data Base/스프링 DB 2023. 11. 23. 16:46
트랜잭션 - DB예제 2 - 자동커밋, 수동 커밋 이전에 설명한 예제를 돌려보기 전에 먼저 자동 커밋, 수동 커밋에 대해 알아보자 예제에 사용되는 스키마는 다음과 같다. drop table member if exists cascade; create table member( member_id varchar(10), money integer not null default 0, primary key (member_id) ); 자동 커밋 트랜재션을 사용하려면 먼저 자동 커밋과 수동 커밋을 이해해야한다. 자동 커밋으로 설정하면 각각의 쿼리 실행 직후에 자동으로 커밋을 호출한다. 따라서 커밋이나 롤백을 직접 호출하지 않아도 되는 편리함이 있다. 하지만 쿼리를 하나하나 실행할 대 마다 자동으로 커밋이 되어버리기 때문..
-
스프링 DB - 데이터 페이스 연결 구조와 DB세션Data Base/스프링 DB 2023. 11. 23. 16:11
데이터베이스 연결 구조와 DB 세션 트랜잭션을 더 자세히 이해하기 위해 데이터베이스 서버 연결 구조와 DB세션에 대해 알아보자 데이터베이스 연결 구조1 사용자는 웹 어플리케이션 서버(WAS)나 DB접근 툴 같은 클라이언트를 사용해서 데이터베이스 서버에 접근할 수 있다. 클라이언트는 데이터베이스 서버에 연결을 요청하고 커넥션을 맺게 된다. 이때 데이터베이스 서버는 내부에 세션이라는 것을 만든다. 그리고 앞으로 해당 커넥션을 통한 요청은 이 세션을 통해서 실행하게 된다. 쉽게 이야기해서 개발자가 클라이언트를 통해 SQL을 전달하면 현재 커넥션에 연결된 세션이 SQL을 실행한다. 세션은 트랜잭션을 시작하고, 커밋 또는 롤백을 통해 트랜잭션을 종료한다. 그리고 이후에 새로운 트랜잭션을 다시 시작할 수 있다. 사..
-
스프링 DB - 트랜잭션 이해Data Base/스프링 DB 2023. 11. 23. 14:33
트랜잭션 - 개념 이해 데이터를 저장할 때 단순히 파일에 저장해도 되는데, 데이터베이스에 저장하는 이유는 무엇일까? 여러가지 이유가 있지만, 가장 대표적인 이유는 바로 데이터베이스는 트랜잭션이라는 개념을 지원하기 때문이다. 트랜잭션을 이름 그래로 번역하면 거래라는 뜻이다. 이것을 쉽게 풀어서 이야기하면, 데이터베이스에서 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해주는 것을 뜻한다. 그런데 한의 거래를 안전하게 터리하려면 생각보다 고려해야 할 점이 많다. 예를 들어서 A의 5000원을 B에게 계좌이체한다고 생각해보자. A의 잔고를 5000원 감하고, B의 잔고를 5000원 증가해야한다. 5000원 계좌이체 A의 잔고를 5000원 감소 B의 잔고를 5000원 증가 계좌이체라는 거래는 이렇게 2가지 작..
-
스프링 DB - DataSource 예제2 - 커넥션 풀Data Base/스프링 DB 2023. 11. 23. 11:50
DataSource 예제2 - 커넥션 풀 DataSource를 통해 커넥션 풀을 사용하는 예제를 알아보자 ConnectionTest 데이터소스 커넥션 풀 추가 @Test void dataSourceConnectionPool() throws SQLException, InterruptedException { //Spring에서 JDBC사용하면 자동으로 임포트된다. //커넥션 풀링 HikariDataSource dataSource = new HikariDataSource(); dataSource.setJdbcUrl(URL); dataSource.setUsername(USERNAME); dataSource.setPassword(PASSWORD); dataSource.setMaximumPoolSize(10); d..
-
스프링 DB - DataSource 예제1 - DriverManagerData Base/스프링 DB 2023. 11. 23. 09:57
DataSource 예제 1 - DriverMnager 예제를 통해 DataSource를 알아보자 과거 스프링 DB 게시물에서 개발했던 DriverManager를 통해 터넥션을 획득하는 방법을 확인해보자 Connection Test - 드라이버 매니저 package hello.jdbc.connection; import lombok.extern.slf4j.Slf4j; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import static hello.jdbc.connection.ConnectionConst.*; @Slf4j public class DBConnectionUtil { void driv..