2. cs 지식 - 데이터 베이스
1. sql 인젝션이 뭐야? 머ㄴ ㅑ고.
sql 인젝션이란 공격자가 악의적인 의도를 갖는 sql 구문을 삽입해서 데이터베이스를 비정상적으로 조작하고 혼란을 주는 공격 기법
이런 짓을 왜 하는거야?;;
2. RDBMS vs NoSQL
RDBMS : 모든 데이터를 2차원 테이블 형태로 그림
장점 : 스키마에 맞춰 데이터를 관리하기 때문에 데이터의 정합성 보장 가능 별 다섯개
단점 : 시스템이 커질수록 쿼리가 복잡해지고, 성능이 저하되며 scale-out 난감 초난감 (scale- up만 가능)
tip ) 이런 경우에 써보세요 : 데이터 구조가 명확하고, 딱히 변경 될 상황도 안생길 것 같고.. 스키마가 중요한 경우중복데이터가 없어서 데이터 변경이 용이하여, 관계를 맺고 있는 데이터가 자주 변경하는 시스템에 적합
NoSQL(Not only SQL 벗 올쏘..) : RDBMS와 반대로 데이터간의 관계를 정의하지 않고, 스키마가 없어 좀 더 자유롭게 데이터를 관리할 수 있으며 컬렉션이라는 형태로 데이터를 관리함
장점 : 스키마 없이 key - value 짝꿍 형태로 데이터를 관리해 자유롭게 데이터를 관리할 수 있음 / 데이터 분산이 용이하여 성능 향상을 위한 scale - up 뿐만 아니라 scale - out 또한 가능함
단점 : 데이터 중복이 발생할 수 있고, 중복된 데이터가 변경될 경우 수정을 모든 컬렉션에서 수행해야 함 / 스키마가 존재하지 않아서 명확한 데이터 구조를 보장하기 힘들고, 데이터 구조 결정이 어려움
tip ) 이런 경우에 써보세요 : 불명확한 데이터 구조 + 데이터가 변경 / 확장될 수 있는 경우
중복된 데이터의 Update가 자주 일어나지 않는 시스템이나 막대한 데이터를 저장해서, DB를 Scale-out 해야 하는 시스템에 적합
- 스키마
데이터베이스 구조를 정의하는 규칙
* 규칙 : 데이터베이스에 어떤 테이블이 존재하고, 각 테이블에 어떤 컬럼이 있으며, 각 컬럼에는 어떤 데이터 유형을 가지는지를 정의한 규칙이자 스키마
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
name VARCHAR(255),
department VARCHAR(255),
salary DECIMAL(10,2)
);
여기서 스키마는 다음과 같음
- 테이블 이름: employees
- 열 이름: employee_id, name, department, salary
- 데이터 유형: employee_id는 INT (정수), name은 VARCHAR(255) (문자열), department는 VARCHAR(255) (문자열), salary는 DECIMAL(10,2) (실수)
- 키: employee_id는 기본키
- Scale - out
서버를 추가하여 시스템의 처리 능력을 확장하는 방법
즉, 기존 서버에 과부하가 생기면 동일한 성능의 서버를 하나 추가해서 부하를 분산시켜 처리 능력을 향상시키는 방법
다음과 같은 경우에 적합함
1. 웹 트래픽이 급증하는 웹사이트
2. 대규모 데이터 분석 작업
3. 온라인 게임
4. 클라우드 컴퓨팅 환경
- Scale - up
기존 서버의 성능을 향상시켜 시스템의 처리 능력을 확장하는 방법
즉, CPU, 메모리, 디스크 등의 하드웨어를 업그레이드하거나 더 좋은 장비로 교체하여 기존 서버의 성능을 높이는 방식
다음과 같은 경우에 적합함
1. 처리 능력 증가가 크지 않은 경우
2. 데이터양이 적은 경우
3. 간단하고 빠르게 시스템 확장을 해야 하는 경우
3. 트랜잭션이 뭔가요? 진짜 몰라요 지식인 내공 100점 걸게요
작업들을 모두 처리하거나 처리하지 못할 경우 이전 상태로 복구하여 작업의 일부만 애매하게 적영되는 현상을 방지하는 기능
한 단위의 트랜잭션은 commit(작업 완) or rollback(취소 완) 됩니다.
여기서 퀴즈..
commit과 rollback은 데이터베이스 언어 중에 어떤 것에 속하게요...?
정답은..
DCL
틀린 당신..
세금 백배 내고 가
3. DB 튜닝이란? & 튜닝의 3단계
- DB 튜닝 : DB의 구조나 DB 자체, 혹은 운영체제 등을 조정해서 DB 시스템의 전체적인 성능을 개선하는 방법을 말함
- 튜닝의 3단계 : DB 설계 튜닝 > DBMS 튜닝 > SQL 튜닝 단계로 진행
1단계) DB 설계 튜닝 (모델링 관점)
- DB 설계 단계에서 성능을 고려하여 설계
- 데이터 모델링, 인덱스 설계
- 데이터파일, 테이블 스페이스 설계
- 데이터베이스 용량 계산
- 반정규화, 분산파일배치 등을 고려
2단계) DBMS 튜닝(환경 관점)
- 성능 측면에서 메모리, 블록 크기 지정
- CPU, 메모리 I/O 관한 관점 고려
- 튜닝 사례 - Buffer 크기, 캐시 크기 따져따져
3단계) sql 튜닝 (어플리케이션 관점)
- sql 작성 시, 성능 고려
- join, indexing, SQL execution plan
- 튜닝 사례 - Hash / Join
4. 이너 조인 vs 아우터 조인 차이 설명해주세요
- inner join : aka 교집합, 서로 연관된 내용만 검색하는 join
- outer join : aka 합집합, 한 쪽에 데이터가 있고, 한 쪽엔 데이터 없는 경우 걍 데이터가 있는 거는 싹 다 출력하는 join
종류 : left outer join, right outer join, full outer join이 있다
5. delete / truncate / drop 차이 읊어줘요
delete : 데이터는 삭제 but 테이블 용량 그대로 and 원하는 데이터만 골라서 삭제 & 삭제 후 되돌릴 수도 있음 (재회 가능한 연인..같다..)
truncate : 데이터 전체& 단박에 삭제 and 테이블 용량도 줄어듦 & 인덱스 삭제 but 테이블 삭제 불가 also 삭제 후 되돌리기 금지 (확실한 손절st)
drop : every 테이블 자체를 absolutely 삭제 (공간, 인덱스, 객체 아무튼 싹다 삭제) and 삭제 후 되돌리기 당연히 금지 (화끈)