김영한님 강의 스프링 DB 1편 보고 정리해보기
1. 커넥션 풀
- 매번 DB에 접근하기 위해 커넥션을 연결하는데는 복잡한 과정과 반복되는 시간 및 리소스 소모가 발생한다.
- 이 문제를 해결하기 위해 커넥션 풀이라는 방법이 고안되었고 상용화되었다.
- 미리 커넥션을 생성해두고 클라이언트가 커넥션을 요구할 때 생성해 둔 커넥션을 사용한다.
- DB에 무한정 연결이 생성되는 것을 막아 DB를 보호하는 효과도 있다.
- 대표적인 커넥션 풀 오픈소스는 HikariCP등이 있다.
- springboot 프로젝트의 경우 기존 라이브러리에 포함되어 있다.
- dependencies에 라이브러리 추가 -> properties 파일 수정 -> DBConfig 파일 생성을 통해 HikariCP를 적용할 수 있다.
2. 트랜잭션
- 트랜잭션은 ACID를 보장해야 한다.
- 원자성(Atomicity)
- 한 트랜잭션 내의 DB 처리들은 오류로 인해 전체가 롤백되거나 정상적으로 전체가 커밋되거나 둘 중 하나
- 일관성(Consistency)
- 데이터베이스의 일관성을 보존
- PK 제약이라던가 무결성 제약 조건들 뿐 아니라 자금 이체 예시에서 두 계좌 잔고의 합은 이체 전후가 같아야 한다 같은 조건들도 일관성에 포함된다.
- 격리성(Isolation)
- 원자성(Atomicity)
- 일반적으로 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);
}
'프로그래밍 > 정리' 카테고리의 다른 글
Nuxt 3 완벽 마스터 복습 항목 2 (0) | 2024.03.28 |
---|---|
Nuxt 3 완벽 마스터 복습 항목 (0) | 2024.03.26 |
Vue3 완벽 마스터 복습 필요 항목 (1) | 2024.03.25 |