부트캠프 7일차 수업 내용입니다.
오늘은 데이터 베이스의 View와 Index부터 시작하였습니다.
View
정의
테이블의 형태를 띄지만 실제로 저장하진 않는다. ★
여러 테이블로 잘려있는 정보를 쉽게 보여주기 위해 미리 만들어진 것.
딱히 성능을 개선하기 위해 쓰는 건 아니다.
장점과 단점
특정 사용자에게 테이블 전체가 아닌 필요한 부분만을 보여주는 것이 가능(보안)
복잡한 쿼리를 단순화
쿼리의 재사용 가능
단점
삽입, 삭제, 수정 작업에 제한이 있다.
인덱스를 사용할 수 없다.
실제로 많이 쓸 일은 없을 것이다. 있다는 것만 알아두자.
#각 사원의 부서와 급여를 조회하는 sql
create view employees_info as
select employees.emp_no, employees.first_name,employees.last_name,departments.dept_name, emp_salary.salary
from employees
LEFT OUTER join dept_emp on employees.emp_no = dept_emp.emp_no
LEFT OUTER join departments on dept_emp.dept_no = departments.dept_no
LEFT OUTER join (select emp_no, max(salary) as salary
from salaries
GROUP BY emp_no) emp_salary on employees.emp_no = emp_salary.emp_no
;
select *
from employees_info;
#테이블이 수정되면 view에도 변경사항이 반영된다.
보안 문제에서 가장 많이 당하는 것은 SQL injection 공격이다.
클라이언트의 입력을 검증해야한다.
2교시 다음은 Index
데이터가 1억 건 있는데 Index 없이 조회를 한다면 1억건을 전부 찾아야 겠지만
index를 추가하면 원하는 데이터를 더 빨리 찾을 수 있다. Like 사전.
select * from salaries
where salary>80000
;
CREATE INDEX salaries_high on salaries(salary);
SHOW inDex from salaries;
약 3백만 데이터가 있는 salaries 테이블에 index를 추가하면
약 0.5 초의 성능 개선을 볼 수 있었다.
하지만 너무 많이 만들면 용량을 잡아 먹으니 조심하자.
그리고 index도 많이 안 쓰는데 그 이유가
검색용 nosql 서버가 따로 있기 때문에, 검색 서비스를 제공한다면
실무에선 elastic search 를 쓴다.
그리고 캐시나 세션 등등 휘발성 데이터는 redis.
대용량, 비정형 데이터는 Mogo.
최종 프로젝트 단계에서는 mysql 말고 1개 정도 추가해보는 것도 좋은 것 같다.
난 redis 해봐야지.
3교시 SQL - dcl data controll laugaue
우리가 써 본 Grant가 dcl 중 하나이다. 이제 제대로 알고 써보자.
GRANT 권한이름 ON 데이터베이스이름.테이블이름 TO 사용자정보
권한의 종류는 지금까지 우리가 배운 모든 것이 가능하다.
select,insert, update, delete (DML 명령어들)
CREATE, DROP, ALTER (DDL)
옵션으로 GRANT와 REVOKE 권한도 함께 줄 수 있다.
WITH [GRANT, REVOKE (DCL)] OPTION
현재 DB 사용자 정보 확인 방법.
select * from mysql.user\G
select user , host from mysql.user\G
사용자의 권한 확인 방법
SHOW GRANTS FOR 'kty'@'%';
권한을 회수할 때, 그 사람이 나눠준 권한까지 회수할 수 있는 CASECADE 옵션이 있다. (mysql8 버전은 없다. )
만약 GRANT 권한을 가진 사람이 'A'에게 GRANT 권한을 준 뒤,
A가 B에게 권한을 주었다.
그럼 A에게 권한을 뺏는다면 B에게 권한이 남아 있을까?
물리 설계를 위한 Repulication 설정(링크)을 배우며 오늘 수업이 마무리 되었다.
안되었던 내용이 master server를 설정하는 명령어에 host를 빼먹는 실수를 했었다. 그리고 계정을 다루는 일이 많으니 다시 한 번 복습하는 것이 좋겠다.
점점 디테일하게 배우는 것이 많아지고 있다. 철저한 복습으로 내 껄로 만들어가자.