기간 | 230626 - 230630 |
배운 내용 | DB |
◎ DBMS
: DataBase Management System. 데이터를 만들고 저장하고 관리하는 기술
- DBMS가 없다면?
1. 직접 파일 열어서 읽어서 조회, 저장해야 함
2. 공유가 어려움
3. 공유가 어려우니까 데이터 중복해서 갖고 있게 됨
4. 중복 저장하다 보니 일관성이 깨짐
5. 무결성 관리 어려움 (무결성=결함 없이 데이터 유지하는 성질)
6. 보안관리 어려움 (권한 있는 사람만 접근하도록 직접 만들어야 함)
◎ 트랜잭션
: all or nothing으로 처리되어야 하는 논리적인 작업 단위
1. 논리적인 작업 단위
: 전부 수행되거나 아무것도 수행되면 안 되는 작업들
ex1) 계좌이체 시
a = a - 10000
b = b + 10000
db에선 각각의 일이지만 업무에선 하나의 일. 둘 다 실행되거나 하나만 안 될 거면 되는 거는 롤백되어야 함
ex2) 쇼핑몰에서 주문 시
하나의 주문 발생 시 업데이트되어야 하는 테이블 여러 개
2. 트랜잭션 관리
트랜잭션 시작
a = a-10000 UPDATE
b = b+10000 UPDATE
COMMIT
-------------------------2개의 일 하나의 트랜잭션으로 묶임
DBMS가 커밋되지 않은 일은 롤백해 줌(트랜잭션 전체 취소)
3. 트랜잭션의 특성 (ACID)
1) Atomicity(원자성) = 트랜잭션이 DB에 모두 반영되거나, 혹은 전혀 반영되지 않아야 함
2) Consistency(일관성) = 트랜잭션의 작업 처리 결과는 항상 일관성 있어야 함
ex) 계좌이체 전후 은행 돈 총액 같아야 함. 작업의 중간(만원 보낸 직후)이 다른 세션에서 보이면 안 됨
3) Isolation(고립성) = 둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 때, 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없음
ex)
서울역 ATM기 | 인천역 ATM기 |
a=a-10000 -> b에게 1만원 송금 b=b+10000 |
c=c-10000 -> b에게 1만원 송금 b=b+10000 |
서울역 ATM기에서 a가 b에게 1만 원을 계좌이체 하는 상황.
b 계좌에는 10만 원이 있었음.
a한테서 만원을 받아서 11만 원이 되면 인천역 ATM기에서 c의 작업이 수행되어야 하는데,
작업 중간에 c가 값을 읽으면 둘 다 11만 원으로 업데이트되므로 문제가 생김.
=> 작업 중간엔 락을 걸어서 다른 작업이 읽어가지 못하도록 함.
4) Durability(지속성) = 트랜잭션이 성공적으로 완료되었으면, 결과는 영구적으로 반영되어야 함. 커밋되면(작업 완료되면) 데이터 사라지면 안 됨
+ 트랜잭션으로 묶을 필요 없는 업무 다 묶어놓으면 Lock 걸리는 시간 많아져서 시스템 느려짐.
4. DW와 OLTP 차이
DW | OLTP |
분석용 DB 배치. 한번에 많은 데이터를 읽어서 통계내는 업무 처리 실시간 아닐 수 있음 한 번에 대량의 데이터를 조회 |
쇼핑몰 온라인 업무/트랜잭션 상품등록/삭제..주문.. 온라인 상에서 실시간으로 일어나는 업무 처리하는 db 작은 데이터가 갱신, 저장, 조회 (작은데이터 중심) |
◎ NoSQL / RDB
NoSQL | SQL DB(RDB) |
많은 데이터 처리가 중요하고, 일관성 양보 가능한 업무에 사용 (예를들어 SNS, 게임, IoT) 정규화 안함. 하나의 테이블에 거의 모든 데이터 담을 수 있음. 따라서 조인 필요 없는 경우 많음. |
트랜잭션 관리 (백그라운드 프로세스[락 걸기, 데드락 모니터링..] 많음 -> 대량의 데이터를 처리하기 부담) 전통적 업무도메인(금융업무..)에 잘맞는 db 일관성 유지, 정규화, 스키마 고정 여러테이블 조인 -> 조회 속도 느림 |
- 비교
수평적 확장 = 스토리지 개수 늘리기(NoSQL) 한계 없음
수직적 확장 = 스토리지 용량 키우기(RDB) 한계 있음
◎ 쿼리
1. SQL 언어의 종류
1) DDL - CREATE, DROP, ALTER
2) DCL - GRANT, REVOKE, DENY(권한 관련)
3) DML - INsert, update, delete, select
2. 기타
WHERE 절은 행을 선택. 이를 가리키는 용어가 SELECTION 연산
SELECT 절에서 특정 칼럼만 갖고 오는 거는 projection 연산
별칭 주려면 AS 칼럼명 as "별칭"
as는 생략가능 컴마 안 찍고 "" 쓰면 됨
SELECT @@Autocommit; 으로 확인하면 자동커밋되는지 확인가능(1이면 자동커밋)
IN(A, B, C)는 A OR B OR C과 같은 결과
LIMIT 2,10; 하면 3번째부터 10개
inner join = 조인조건에 만족하지 않으면 안 나옴
outer join = 조인조건에 만족하지 않아도 나옴. left outer join 하면 왼쪽 무조건 나옴
self join = 레코드의 짝이 같은 테이블에 있을 때. 같은 테이블이 두 개 있다고 생각
CREATE TABLE aaaa1 SELECT NAME, addr FROM usertbl;
-> SELECT 한 결괏값 복사해서 테이블 aaaa1에 넣어라
집계함수 또는 Group By 절 사용할 때 select 절에 올 수 있는 칼럼
1) group by에 나열된(언급된) 칼럼
2) sum(), count() 같은 집계함수(Aggregation function)로 한정된다.
테이블 만들 때 제약조건 이름 명시가능. 명시하지 않으면 자동 생성
1:n 일 땐 관계 테이블은 n 쪽에 생성. n:m 일 땐 따로 생성
delete - rollback 가능
truncate - rollback 불가
drop - rollback 불가
'클라우드 스쿨 > 강의 정리' 카테고리의 다른 글
10주차 - Spring Boot, AWS (0) | 2023.11.28 |
---|---|
9주차 - 프로시저, 트리거, 스프링 (0) | 2023.11.27 |
7주차 - JAVA (0) | 2023.11.23 |
6주차 - JAVA (0) | 2023.11.22 |
5주차 - React (0) | 2023.11.21 |