프로그래밍/정리

스프링 DB 1편 정리

말랑공룡 2023. 9. 13. 15:12

김영한님 강의 스프링 DB 1편 보고 정리해보기

 

1. 커넥션 풀

  • 매번 DB에 접근하기 위해 커넥션을 연결하는데는 복잡한 과정과 반복되는 시간 및 리소스 소모가 발생한다.
  • 이 문제를 해결하기 위해 커넥션 풀이라는 방법이 고안되었고 상용화되었다.

 

커넥션 풀

 

  • 미리 커넥션을 생성해두고 클라이언트가 커넥션을 요구할 때 생성해 둔 커넥션을 사용한다.
  • DB에 무한정 연결이 생성되는 것을 막아 DB를 보호하는 효과도 있다.
  • 대표적인 커넥션 풀 오픈소스는 HikariCP등이 있다.
  • springboot 프로젝트의 경우 기존 라이브러리에 포함되어 있다.
  • dependencies에 라이브러리 추가 -> properties 파일 수정 -> DBConfig 파일 생성을 통해 HikariCP를 적용할 수 있다.

 

콘솔에 보이는 HikariCP 기동 로그

 

2. 트랜잭션

  • 트랜잭션은 ACID를 보장해야 한다.
    • 원자성(Atomicity)
      • 한 트랜잭션 내의 DB 처리들은 오류로 인해 전체가 롤백되거나 정상적으로 전체가 커밋되거나 둘 중 하나
    • 일관성(Consistency)
      • 데이터베이스의 일관성을 보존
      • PK 제약이라던가 무결성 제약 조건들 뿐 아니라 자금 이체 예시에서 두 계좌 잔고의 합은 이체 전후가 같아야 한다 같은 조건들도 일관성에 포함된다.
    • 격리성(Isolation)

트랜잭션 격리레벨

 

  • 일반적으로 Read Committed가 사용된다.
  • A라는 데이터를 하나의 트랜잭션에서 수정하고 커밋되지 않은 상태에서 다른 트랜잭션이 조회했을 때 수정되기 전의 데이터가 조회된다.

 

  • 지속성(Durability):
    • 트랜잭션이 성공적으로 완료된 후에는 시스템적으로 문제가 발생하더라도 데이터베이스에 대한 변경 사항이 유지되어야 한다. 
    • 방법 중 하나는 트랜잭션 로그를 사용하는 것.
    • 실제 데이터를 변경하기 전, 별도의 트랜잭션 로그에 저장 후 실제 처리를 수행한다.
    • 이렇게 하면 오류가 발생해도 발생하기 전 상태로 데이터를 복구할 수 있다.

트랜잭션 로그

 

이러한 트랜잭션 로그는 각 DBMS에 의해 자동으로 생성되며 모든 데이터 변경 작업이 기록된다.

 

3. 자바 예외

자바 예외 계층

 

  • Checked Exception은 예외 처리를 강제한다. 즉, 잡거나 던지거나.
  • 던질 경우, 명시적으로 throws를 작성해야 한다. 하지만 이렇게 될 경우 비즈니스 로직이 해당하는 예외에 종속적이게 되어 좋지 않은 코드가 된다.
  • 그래서 일반적으로는 Runtime Exception을 상속받아 Unchecked Exception으로 변환한 커스텀 예외를 만들어서 사용한다.
  • 커스텀 예외 생성 시, 중요한 점
  • 발생한 예외를 파라미터로 전달해야 예외의 정확한 cause를 알 수 있게 된다.

 

// 커스텀 예외 생성
public class CustomException extends RuntimeException {
	public CustomException(Throwable cause){
    	super(cause);
    }
}

// 사용시
try{
	// logic
}catch(SQLException e){
	throw new CustomException(e);
}