작년 10월 이후로 회사에서 프로젝트가 본격적으로 시작되면서 벨로그에 글을 거의 남기지 못했다.
프로젝트 진행하면서 벨로그에 가끔씩 들어와 트러블슈팅 조각들을 남겨두긴 했지만 글을 발행할 정도로 정리가 된 글들을 아닌 것 같아 임시글로만 잔뜩 쌓여 있다.
그러던 중 2024년이 되고... 정신없이 프로젝트가 진행되는 와중에 부족함을 많이 느껴서 자연스럽게 몇 가지 공부 목표들을 세워가는 중이다. 첫째, 프론트엔드 이해를 쌓기 위해 리액트 공부 + 개인 프로젝트 진행하기, 둘째, 데이터베이스 OR 인프라 공부하기. 셋째, 컴퓨터 구조와 운영체제 공부하기.
특히 두 번째 목표의 경우 데이터베이스 쪽으로는 SQLP를, 인프라 쪽으로는 AWS 자격증을 염두에 두고 조금씩 시작해보려고 한다. 먼저 SQLP 준비 겸 '친절한 SQL'이라는 책이 평이 좋길래 틈틈히 읽으면서 벨로그에 정리를 할 예정이다.
SQL: Structured Query Language → '구조적 질의 언어'의 줄임말
⇒ 구조적(SQL의 원래 이름인 SEQUEL(Structured English Query Language)에서 온 말. SQL 문법이 영어와 구조적으로 같다는 의미.
SQL is a set-based, declarative query language, not an imperative language such as C or BASIC (= SQL은 C나 BASIC과 같은 명령형 언어가 아닌 집합적, 선언적인 질의 언어다.) (출처: 위키피디아)
⇒ 원하는 결과를 데이터베이스에 질의(Query)하면 결과 집합(set-based)으로 주기 때문.
⇒ SQL은 어떻게 수행할지(= imperative, 명령형 프로그래밍)가 아니라 어떤 것이 필요한지(= declarative, 선언적으로) 정의하기 때문.
하지만, 원하는 결과집합을 만드는 과정은 절차적일 수밖에 없는데 (= 프로시저가 필요한데) 이를 DBMS 내부 엔진인 옵티마이저가 대신 프로그래밍해줌.
[SQL 최적화 과정]
- SQL 파싱 (by. SQL 파서)
- 파싱 트리 생성: SQL 문의 개별 구성요소를 분석해서 트리 구조 생성
- Syntax 체크: 문법적 오류가 없는지 확인
- Semantic 체크: 의미상 오류가 없는지 확인 (존재하지 않는 테이블, 컬럼 사용 여부, 권한 여부 확인)
- SQL 최적화 (by. 옵티마이저)
- 미리 수집한 시스템 및 오브젝트 통계정보를 바탕으로 다양한 실행경로를 생성해서 비교한 후 가장 효율적인 하나를 선택함.
- 로우 소스 생성 (by. 로우 소스 생성기)
- 옵티마이저가 선택한 실행경로를 실제 실행 가능한 코드 또는 프로시저 형태로 포맷팅.
[옵티마이저의 최적화 단계]
- 쿼리를 수행하는 데 후보군이 될만한 실행계획들을 찾아냄
- 데이터 딕셔너리에 수집해둔 오브젝트 통계 및 시스템 통계쩡보를 이용해 예상비용 산정
- 최저 비용의 실행계획 선택
# 실행계획 보는 명령어
EXPLAIN PLAN
# AutoTrace 활성화 명령어
set autotrace traceonly exp;
-- 오라클 기준
/*+ 힌트 명령어 */ 와 같이 작성. (주석 시작 부분에 + 추가)
정리가 잘되어있어 내용 확인하기가 좋네요ㅎㅎ