□ 데이터베이스(H2)
- DB(H2) 사용 방식 3가지
- Server Mode
- 직접 엔진을 설치하여 사용하는 방식.
- 애플리케이션과 상관 없는 외부에서 DB 엔진이 구동된다.
- 데이터가 애플리케이션 외부에 저장되므로 애플리케이션을 종료해도 데이터가 사라지지 않는다.
- In-memory Mode
- 엔진을 설치하지 않고 애플리케이션 내부의 엔진을 사용하는 방식.
- build.gradle 및 application.properties 설정을 통해 실행 가능하다.
- 애플리케이션을 실행하면 DB 엔진이 함께 실행되고 애플리케이션을 종료하면 DB 엔진이 함께 종료된다.
- 데이터가 애플리케이션의 메모리에 저장되기 때문에 애플리케이션을 종료하면 데이터가 사라진다.
- 엔진을 설치하지 않고 애플리케이션 내부의 엔진을 사용하는 방식.
- Embedded Mode
- 엔진을 설치하지 않고 애플리케이션 내부의 엔진을 사용하는 방식.
- build.gradle 및 application.properties 설정을 통해 실행 가능하다.
- 애플리케이션을 실행하면 DB 엔진이 함께 실행되고 애플리케이션을 종료하면 DB 엔진이 함께 종료된다.
- 데이터가 애플리케이션 외부에 저장되므로 애플리케이션을 종료해도 데이터가 사라지지 않는다.
- 엔진을 설치하지 않고 애플리케이션 내부의 엔진을 사용하는 방식.
Mode | H2 다운로드 여부 | 실행 주체 | DB 저장 위치 | 사용 용도 |
Server Mode | O | 외부 | 로컬(파일 시스템) | 배포 용도 |
In-Memory Mode | X | 스프링 | 메모리 | 테스트 용도 |
Embedded Mode | X | 스프링 | 로컬(파일 시스템) | 개발 용도 |
□ 데이터베이스 다루기(SQL)
- 데이터 조리 시작(DDL)
- CREATE TABLE : 새로운 테이블 생성
- ALTER TABLE : 테이블 개조
- DROP TABLE : 테이블 제거
- 데이터 찾기(DML)
- SELECT : 데이터 선택
- WHERE : 데이터 조건 걸기
- ORDER BY : 데이터 정렬
- GROUP BY : 데이터 그룹화
- JOIN : 데이터 합치기
- 데이터 개조 및 제거(DML)
- INSERT INTO : 새로운 데이터 추가
- UPDATE : 기존의 데이터 새로 고침
- DELETE FROM : 불필요한 데이터 제거
□ 트랜잭션
데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위
트랜잭션중에 문제가 발생하면 그전에 했던 변경을 아무일 없었던것처럼 모두 되돌림
▷ 트랜잭션의 특징(원자성, 일관성, 독립성)
- 원자성(All or Nothing)
- 트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다.
- 트랜잭션은 사람이 설계한 논리적인 작업 단위로서, 일처리는 작업단위 별로 이루어 져야 사람이 다루는데 문제가 없다.
- 만약 트랜잭션 단위로 데이터가 처리되지 안흥면, 설계한 사람은 데이터 처리 시스템을 이해하기 힘들 뿐만 아니라, 오작동 시 원인을 찾기가 어려워진다.
- 일관성(Keeps Data Correct)
- 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다.
- 트랜잭션이 진행되는 동안에 데이터베이스가 변경되더라도 업데이트된 데이터베이스로 트랜잭션이 진행되는것이 아니라, 처음 트랜잭션을 진행하기 위해 참조된 데이터베이스로 진행된다.
- 이렇게 함으로써 각 사용자는 일관성 있는 데이터를 볼 수 있다.
- 독립성(Independent)
- 둘 이상의 트랜잭션이 동시에 실행되고 있을 경우 어떤 하나의 트랜잭션이라도, 다른 트랜잭션의 연산에 끼어들 수 없다는 점을 가리킨다.
▷ 트랜잭션 관리와 보안(DCL)
- BIGIN : 트랜잭션 시작
- COMMIT : 트랜잭션 정상 종료
- ROLLBACK : 비정상 종료 시 부분 연산된 트랜잭션 결과를 취소
'Java & Spring > Spring' 카테고리의 다른 글
JPA - JPQL사용해보기 (2) | 2024.10.02 |
---|---|
JPA - 쿼리 파일 만들기 (1) | 2024.09.27 |
테스트코드 작성에 사용되는 메서드 및 애노테이션(1) (0) | 2024.09.23 |
47일차 - Controller 테스트 (0) | 2024.09.11 |
46일차 - 테스트 코드 애노테이션 (2) | 2024.09.10 |