본문 바로가기

Spring/Spring DB10

문제해결 - 트랜잭션 처리 코드 반복 문제 트랜잭션을 처리하기 위해서는 서비스 계층의 비즈니즈 로직에서 일일이 코드를 작성해야했다public void accountTransfer(String fromId, String toId, int money) throws SQLException { Connection connection = dataSource.getConnection(); try{ //트랜잭션 시작 connection.setAutoCommit(false); //비즈니스 로직 수행 bizLogic(connection, fromId, toId, money); //트랜잭션 종료 connection.commit(); } catch (Exception.. 2025. 7. 19.
DB Lock 개념내 트랜잭션이 아직 commit되지 않았을 때, 다른 세션의 사용자가 데이터를 변경하는 것을 막는 것예) A의 트랜잭션이 먼저 시작되었고 아직 commit이 안 됐을 때, B가 데이터를 변경하는 것을 막는다등장배경어느 학습시스템에 수료증발급 기능이 있다고 치자.수료증에는 발급번호가 부여되며, 발급번호는 순차적으로 부여되어야 한다발급번호 생성을 위해, 발급번호의 최대값을 조회한 뒤 최대값에 1을 더하는 동작을 비즈니즈 로직에서 처리한다public int createDocNo(){ int max = getMax() return max+1;}A라는 사용자가 수료증 발급번호 생성을 위해 최대값을 조회 후 max+1을 실행하는 도중에만약, B가 수료증 발급번호 생성을 시도해서 최대값을 변경하려고 하.. 2025. 7. 18.
DB Connection 아래는 SQL 처리를 위해 DB Connection 시도 시 내부에서 벌어지는 동작이다 1명의 사용자가 Connection을 시도하는 경우1. 클라이언트는 데이터베이스 서버에 연결을 요청하고 Connection을 맺는다. 2. 이때 데이터베이스 서버는 내부에 Session이라는 것을 만든다.3. 개발자가 클라이언트를 통해 SQL을 전달하면 현재 커넥션에 연결된 세션이 SQL을 실행한다. 세션은 트랜잭션을 시작하고, 커밋 또는 롤백을 통해 트랜잭션을 종료한다. 그리고 이후에 새로운 트랜잭션을 다시 시작할 수 있다.사용자가 커넥션을 닫거나, 또는 DBA(DB 관리자)가 세션을 강제로 종료하면 세션은 종료된다. N명의 사용자가 Connection을 시도하는 경우N명의 사용자가 Connection을 시도하는 .. 2025. 7. 18.
트랜잭션 개념작업의 단위 등장배경은행에서 A가 B에게 1000원을 이체하려고 할 때 아래의 작업을 거쳐야 한다1. A의 계좌에서 1000원을 뺀다2. B의 계좌에 1000원을 더한다 만약 1번 작업 처리 후, 2번 작업에서 에러가 발생하면 어떻게 될까?A의 계좌에서 1000원을 빼는 작업만 수행되고B의 계좌에는 1000원을 더하는 작업은 수행되지 않아 문제가 될 것이다 이러한 문제를 해결하기 위해서 '트랜잭션'이라는 개념이 등장하게 되었다트랜잭션은 비지니스 로직인 1, 2번 작업을 하나의 작업으로 묶어주는 기법이다 트랜잭션이 적용될 경우,예를 들어, 1번이 성공하더라도 2번 작업에서 실패하면 작업의 결과가 반영되지 않는다작업 1, 2번은 하나의 작업이기 때문에 전체가 반영되거나 반영되지 않음을 보장한다 트랜잭션의.. 2025. 7. 18.