728x90 반응형 스프링/스프링 DB 접근12 [Spring] DB Lock DB 락 - 개념 이해 세션1이 트랜잭션을 시작하고 데이터를 수정하는 동안 아직 커밋을 수행하지 않았는데, 세션2에서 동시에 같은 데이터를 수정하게 되면 여러가지 문제가 발생한다. 바로 트랜잭션의 원자성이 깨지는 것이다.여기에 더해서 세션1이 중간에 롤백을 하게 되면 세션2는 잘못된 데이터를 수정하는 문제가 발생한다. 이런 문제를 방지하려면, 세션이 트랜잭션을 시작하고 데이터를 수정하는 동안에는 커밋이나 롤백 전까지 다른 세션에 서 해당 데이터를 수정할 수 없게 막아야 한다. 세션1은 memberA 의 금액을 500원으로 변경하고 싶고, 세션2는 같은 memberA 의 금액을 1000원으로 변경하고 싶다.데이터베이스는 이런 문제를 해결하기 위해 락(Lock)이라는 개념을 제공한다.다음 예시를 통해 동시.. 2024. 12. 18. [Spring] 트랜잭션 이해 - 트랜잭션 개념 트랜잭션 - 개념 이해 데이터를 저장할 때 단순히 파일에 저장해도 되는데, 데이터베이스에 저장하는 이유는 무엇일까?여러가지 이유가 있지만, 가장 대표적인 이유는 바로 데이터베이스는 트랜잭션이라는 개념을 지원하기 때문이다. 트랜잭션을 이름 그대로 번역하면 거래라는 뜻이다. 이것을 쉽게 풀어서 이야기하면,데이터베이스에서 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해주는 것을 뜻한다.그런데 하나의 거래를 안전하게 처리하려면 생각보다 고려 해야 할 점이 많다.예를 들어서 A의 5000원을 B에게 계좌이체한다고 생각해보자. A의 잔고를 5000원 감소하고, B의 잔고를 5000원 증가해야한다. 5000원 계좌이체1. A의 잔고를 5000원 감소2. B의 잔고를 5000원 증가 계좌이체라는 거래는 이렇게 2.. 2024. 12. 17. [Spring] DataSource 적용 예제(DriverManager & HikariDataSource) ※ 이전 포스팅https://drcode-devblog.tistory.com/583 [Spring] 커넥션 풀과 데이터 소스 개념데이터베이스 커넥션을 매번 획득 데이터베이스 커넥션을 획득할 때는 다음과 같은 복잡한 과정을 거친다. 1) 애플리케이션 로직은 DB 드라입러를 통해 커넥션을 조회한다. 2) DB 드라이버는 DB와drcode-devblog.tistory.com DataSource 를 실제로 적용한 내용을 살펴보면 아래와 같다. ConnectionTest - 드라이버 매니저 package hello.jdbc.connection;import lombok.extern.slf4j.Slf4j;import org.junit.jupiter.api.Test;import java.sql.Connection;i.. 2024. 12. 17. [Spring] 커넥션 풀과 데이터 소스 개념 데이터베이스 커넥션을 매번 획득 데이터베이스 커넥션을 획득할 때는 다음과 같은 복잡한 과정을 거친다. 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 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환한다. 이렇게 커넥션을 새로 만드는 것은 과정도 복잡하고 시간도 많이 많이 .. 2024. 1. 19. [Spring] JDBC CRUD(등록, 조회, 수정, 삭제) 이번 포스팅은 JDBC를 사용해서 애플리케이션을 개발해보자. JDBC를 사용해서 회원(Member) 데이터를 데이터베이스에 관리하는 기능을 개발해본다 ※ 시작하기 전에,, H2 데이터베이스 설정 마지막에 있는 테이블과 샘플 데이터 만들기를 통해서 member 테이블을 미리 만들어두어야 한다. schema.sqldrop table member if exists cascade; create table member ( member_id varchar(10), money integer not null default 0, primary key (member_id) ); Memeberpackage hello.jdbc.domain; import lombok.Data; @Data public class Member {.. 2024. 1. 18. [Spring] JDBC의 이해와 JDBC 관련 기술 (+ H2 Database 설치), 데이터베이스 연결 프로젝트 세팅 build.gradle의 dependencies에 아래 내용 추가 //테스트에서 lombok 사용 testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok' build.gradle plugins { id 'java' id 'org.springframework.boot' version '3.2.1' id 'io.spring.dependency-management' version '1.1.4' } group = 'hello' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } configurations { compileOnly.. 2024. 1. 18. 이전 1 2 다음 728x90 반응형