1. 트랜잭션
1) 원자성 (All or Nothing)
- 트랜잭션이 데이터베이스에 모두 반영되거나 아니면 전혀 반영되지 않을 것
- 트랜잭션은 사람이 설계한 논리적인 작업 단위로서 일처리는 작업단위 별로 이루어져야 사람이 다루는 데에 무리가 없음
2) 일관성 (Keep Data Correct)
- 트랜잭션의 작업 처리 결과는 항상 일관적이어야 함
- 트랜잭션이 진행되는 동안에 데이터베이스가 변경 되더라도 업데이트된 데이터베이스로 트랜잭션이 진행되는 것이 아니라, 처음에 트랜잭션을 진행하기 위해 참조한 데이터베이스로 진행됨 → 일관성 있는 데이터를 볼 수 있음
3) 독립성 (Independent)
- 둘 이상의 트랜잭션이 동시에 실행되고 있을 경우 어떤 하나의 트랜잭션이라도 다른 트랜잭션의 연산에 끼어들 수 없음
4) 트랜잭션 관리와 보안 (DCL)
- BEGIN : START TRANSACTION과 동일하며 새로운 트랜잭션을 생성 및 시작하는 연산
- COMMIT
> 하나의 트랜잭션이 성공적으로 끝났고, 데이터베이스가 일관성있는 상태에 있을 때 하나의 트랜잭션이 끝났다라는 것을 알려주기 위해 사용하는 연산
> COMMIT 연산을 사용하면 수행했던 트랜잭션이 로그에 저장되며, 후에 ROLLBACK 연산을 수행했던 트랜잭션 단위로 하는 것을 도와줌
- ROLLBACK
> 하나의 트랜잭션 처리가 비정상적으로 종료되어 트랜잭션의 원자성이 깨진 경우, 트랜잭션을 처음부터 다시 시작하거나 트랜잭션의 부분적으로만 연산된 결과를 다시 취소시킴
→ 트랜잭션이 성공적으로 끝날 때 COMMIT을 발생시키게 되고 중간에 실패되면 ROLLBACK 명령어를 통해 수정했던 내용을 되돌리도록 명령어를 날림
2. 데이터베이스 데이터를 외부에서 다루기 (JDBC)
1) 데이터베이스 드라이버 : 애플리케이션과 DB간의 통신을 중개하는 역할로 드라이버가 애플리케이션의 요청을 데이터베이스가 이해할 수 있는 언어로 변환해줌
- 다양한 데이터베이스 시스템마다 호환되는 드라이버가 있으며 각 DB 제품에 맞는 특정 드라이버가 필요함
- 드라이버의 동작 방식
① 연결 초기화
- 요청 수신 : 애플리케이션은 데이터베이스 작업을 시작하기 위해 드라이버에 연결 요청
- 연결 설정 : 드라이버의 데이터베이스 서버에 로그인하고 필요한 설정을 수행하여 연결을 완료함. 이 과정을 네트워크 정보, 인증 자격 증명 등을 사용해 이뤄짐
② SQL 전송 및 실행
- SQL 명령 변환 : 애플리케이션에서 발송된 SQL 명령을 받은 드라이버는 해당 명령을 데이터베이스가 이해할 수 있는 형태로 변환
- 명령 처리 : 변환된 명령은 데이터베이스 서버로 전송되어 실행됨. 데이터베이스는 쿼리를 처리하고 요구된 데이터를 검색하거나 데이터에 변화를 줌
③ 결과 처리
- 결과 수신 : 데이터베이스에서 작업의 결과를 보내면 드라이버는 이 결과를 받아 애플리케이션에서 해석할 수 있는 형태로 변환
- 결과 전달 : 최종적으로 드라이버는 이 결과를 애플리케이션에 전달함. 애플리케이션은 이 정보를 사용자에게 표시하거나 다음 작업을 진행
④ 연결 종료
- 연결 해제 : 작업이 완료되면 드라이버는 데이터베이스 서버와의 연결을 종료하며 자원을 정리하고 다음 세션을 위해 시스템을 초기화 함
2) JDBC Driver Manager : 애플리케이션이 실행되고 있는 런타임 시점에 연결을 생성해 쿼리를 요청할 수 있는 상태를 만들어주고, 상태를 생성하여 쿼리를 요청하게 해주고, 결과셋을 생성해 쿼리 결과를 받아올 수 있게 해줌
3) Spring Boot의 JDBC 라이브러리
- spring-boot-starter-jdbc : 데이터베이스 작업을 수행하는 데 필요한 주요 의존성과 자동 구성 기능을 제공, 데이터베이스와의 연결을 쉽고 빠르게 구성할 수 있도록 도와주는 브릿지 역할을 함
- 주요 포함 내용
> JDBC API 지원 : JDBC API를 통해 SQL 데이터베이스에 접근하고 작업을 수행할 수 있음
> DataSource 구성 : 데이터 소스 연결을 위한 기본적인 설정을 자동으로 구성
> JdbcTemplate : JdbcTemplate은 Spring의 핵심 클래스 중 하나로, JDBC 작업의 많은 번거로움을 줄여줌. SQL 쿼리 실행, 결과 세트 처리, 예외 처리 등을 단순화
- 주요 장점 내용
> 간소화된 데이터베이스 연결 : DataSource 설정과 JdbcTemplate 사용을 통해 복잡한 JDBC 코드를 간소화할 수 있음
> 자동 구성 : Spring Boot의 자동 구성 기능은 개발자가 데이터베이스 연결에 필요한 대부분의 구성을 자동으로 처리할 수 있도록 함
> 효율적인 예외 처리 : Spring의 DataAccessException을 통해 JDBC에서 발생하는 예외를 Spring의 일관된 예외 체계로 변환해줌