Database 6

스프링 DB - 예외 처리, 반복

스프링 예외 추상화 이해스프링 데이터 접근 예외 계층 스프링은 데이터 접근 게층에 대한 수십가지 예외를 정리해서 일관된 예외 계층을 제공한다.각각의 예외는 특정 기술에 종속적이지 않게 설계되어 있다. 따라서 서비스 계층에서도 스프링이 제공하는 예외를 사용하면 된다.JDBC나 JPA를 사용할 때 발생하는 예외를 스프링이 제공한느 예외로 변환해주는 역할도 스프링이 제공한다.그림 단순화를 위해 일부 계층을 생략했다. 예외의 최고 상위는 org.springframework.dao.DataAccessException 이다. 런타임 예외를 상속 받았기 때문에 스프링이 제공하는 데이터 접근 계층의 모든 예외는 런타임 예외이다. DataAccessException은 크게 2가지로 구분하는데 NonTransient 예외..

Database 2024.10.06

스프링 DB - 트랜잭션 문제 해결

문제점들애플리케이션 구조가장 단순하고, 많이 사용하는 방법은 역할에 따라 3가지 계층으로 나누는 것이다.프레젠테이션 계층UI와 관련된 처리 담당웹 요청과 응답사용자 요청을 검증주 사용 기술 : 서블릿과 HTTP 같은 웹 기술, 스프링 MVC서비스 계층비즈니스 로직을 담당주 사용 기술 : 가급적 특정 기술에 의존하지 않고, 순수 자바 코드로 작성데이터 접근 계층실제 데이터베이스에 접근하는 코드주 사용 기술 : JDBC, JPA, File, Redis, Mongo  순수한 서비스 계층가장 중요한 곳은 어디일까? 핵심 비즈니스 로직이 들어있는 서비스 계층이다. 시간이 흘러서 UI와 관련된 부분이 변하고, 데이터 저장 기술을 다른 기술로 변경해도, 비즈니스 로직은 최대한 변경 없이 유지되어야 한다. 이렇게 하려..

Database 2024.10.06

스프링 DB - 락

락세션이 트랜잭션을 시작하고, 데이터를 수정하는 동안에는 커밋이나 롤백 전까지 다른 세션에서 해당 데이터를 수정할 수 없게 막아야 한다. 락 획득세션 1을 커밋하면 세션 1이 커밋되면서 락을 반납한다. 이후에 대기하던 세션 2가 락을 획득하게 된다. 따라서 락을 획득한 세션 2의 업데이트가 반영되는 것을 확인할 수 있다. 이후 세션 2도 커밋을 호출해서 락을 반납해야 한다.    락 타임 아웃SET LOCK_TIMEOUT : 락 타임아웃 시간을 설정한다.예) SET LOCK_TIMEOUT 10000 10초, 세션 2에 설정하면 세션 2가 10초 동안 대기해도 락을 얻지 못하면 타임아웃 오류가 발생한다.      DB 락 - 조회일반적인 조회는 락을 사용하지 않는다.데이터베이스마다 다르지만, 보통 데이터..

Database 2024.10.06

스프링 DB - 트랜잭션

트랜잭션 ACID트랜잭션은 ACID라 하는 원자성(Atomicity), 일관성(Consistency),  격리성(Isolation), 지속성(Durability)을 보장해야 한다. 원자성 : 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공하거나, 모두 실패해야 한다.일관성 : 모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야 한다. 예를 들어, 데이터베이스에서 정한 무결성제약 조건을 항상 만족해야 한다.격리성 : 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다. 예를 들어, 동시에 같은 데이터를 수정하지 못하도록 해야 한다. 격리성은 동시성과 관련된 성능 이슈로 인해 트랜잭션 격리 수준(Isolation Level)을 선택할 수 있다.지속성 : 트랜잭션을 ..

Database 2024.10.05

스프링 DB - 커넥션풀과 데이터 소스 이해

커넥션 풀 이해애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다.DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 물론 이 과정에서 3way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생한다.DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가 정보를 DB에 전달한다.DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성한다.DB는 커넥션 생성이 완료되었다는 응답을 보낸다.DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환한다. 커넥션을 새로 만드는 것은 과정도 복잡하고, 시간도 많이 소모되는 일이다. DB는 물론이고 애플리케이션 서버에서도 TCP/IP 커넥션을 새로 생성하기 위한 리소스를 매번 사용해야 한다. 또한, 고객이..

Database 2024.10.05

스프링 DB - JDBC

JDBC 표준 인터페이스JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다.JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다.   대표적으로 3가지 기능을 표준 인터페이스에서 정의해서 제공한다.java.sql.Connection - 연결java.sql.Statement - SQL을 담은 내용java.sql.ResultSet - SQL 요청 응답 JDBC 인터페이스를 각각의 DB 벤더(회사)에서 자신의 DB에 맞도록 구현해서 라이브러리로 제공하는데, 이를 JDBC 드라이버라 한다.      JDBC의 등장으로 다음 2가지 문제가 해결되었다.데이터베이스를 다른 종류의 데이터베이스로 변경하면 애플리케이션 서버의 데이..

Database 2024.10.05