주변 어른께서 통계를 배우고 싶다 하셔서 Coursera 강의를 추천해 드렸는데 나보다 훨씬 성실하게 듣고 계셨다. 바쁘신 분께서 매주 강의를 따라가며 과제도 꼬박 꼬박 하시고... 사실 난 처음 세 강 정도 듣고 말았었는데... 

Coursera 강의는 내용이 충실하고, 유료 과정도 강의 자체는 무료로 볼 수 있어서 정말 좋다. 단점은 내가 열심히 제 때 강의를 따라가지 않으면 종강이 되어 재수강을 할 수 없다는 것이다.... 처음 세 강을 들은 강의는 영원히 그 상태로 남게 되었다.

Udacity는 그런 제한이 없어서 보다 여유있게 들을 수 있다. 인터넷을 잘 뒤져보면 강의 자료도 찾을 수 있다. 팀 스터디때 따로 PPT를 만들지 않고 인터넷에서 찾은 자료를 활용했었다. 

오라클 자격증을 공부할 때도 온라인 강의를 찾아 헤메었는데 가장 괜찮은 건 의외로 유튜브에 올라온 강좌들이었다. 메모리 구조 등 단편적인 내용을 다룬 강좌뿐만 아니라 오라클 자격증의 전반적인 내용을 짚어 주는 강좌 플레이리스트들도 있어서 운동하면서 귀만 열어두고 듣곤 했다. 


그간 통계와 데이터베이스를 공부했는데, 사실 직장에 들어와 보니 당장 필요한 건 웹 프로그래밍이어서 그 쪽을 배워야 한다. 최근 생활코딩 사이트를 기반으로 스터디를 시작했다. 온라인 한국어 강의는 처음이라 오히려 낯설다.

생활코딩은 온라인 강의에 특화된 사이트라기보다는 학습 공동체 같은 느낌이이 강하다. 각각 장단점이 있는것같다. 테스트 등의 학습자 관리체계는 없지만 질답 등을 통해 직접 참여하는 데 대한 심리적 장벽이 보다 낮게 느껴진다. 오픈튜토리얼스가 비영리 법인으로 전환한다던데 잘 되었으면 좋겠다.

'기록' 카테고리의 다른 글

돈관리  (0) 2016.02.22
RDBMS/하둡/라즈베리파이  (0) 2016.02.20
AND


데이터베이스의 업데이트 내역이 데이터 파일에 영구 기록되기까지의 과정을 알아보자.


데이터베이스에서 실행한 트랜잭션(transaction)들은 커밋(commit) 명령을 실행하기 이전까지는 미확정된 내용으로, 해당 유저의 세션에만 적용된다. 이 때의 내용들은 데이터베이스 버퍼 캐쉬(Buffer Cache)에 임시적으로 저장된다.

커밋 명령이 실행되면 그 이전까지의 데이터베이스 업데이트 내역이 확정된 것으로 취급되어 모든 유저의 세션에 적용되게 된다. 그러면 트랜잭션의 기록은 우선 리두 로그(Redo Log)에 기록되고, 그 뒤 실제 데이터 파일에 기록된다. 리두 로그에 남은 기록들은 추후 데이터 파일에 손상이 가해졌을 때 복구를 위해 사용된다.

오라클 데이터베이스에서 이러한 기록 작업을 수행하는 것은 배경중의 처리, 즉 백그라운드 프로세스(Background Process)들이다. DBWn(Database Writer), LGWR(Log Writer) 등의 프로세스들은 말 그대로 데이터베이스와 로그에 기록하는 작업을 관리하며, CKPT(Checkpoint)는 로그의 내용을 정기적으로 데이터 파일에 기록하는 체크포인트 작업을 수행한다.

위의 과정을 단순하게 살펴보자면 다음 그림과 같다.


AND

서브쿼리(Subquery)와 인라인 뷰(Inline View)


1. 서브쿼리 (Subquery)

서브쿼리는 말 그대로 부(sub)쿼리 라는 뜻이다. 내부 쿼리, 혹은 하위 쿼리라고 부르기도 한다. SQL 쿼리의 내부에 액자구조로 또 다른 쿼리가 위치할 경우 내부의 쿼리를 서브쿼리라고 한다. 서브쿼리를 포함한 쿼리에서 서브쿼리를 뺀 바깥쪽 부분은 외부 쿼리(Outer Query) 혹은 상위 쿼리라고 한다. 

서브쿼리는 SELECT 문, INSERT/UPDATE/DELETE 문, 그리고 다른 서브쿼리 내부에서 사용될 수 있으며, 복합적 쿼리를 위해 사용된다는 점에서 조인과 유사하다. 같은 내용의 쿼리를 서브쿼리 방식이나 조인 방식 중 선택하여 구현할 수 있는 경우도 있다.

모든 절이 서브쿼리를 포함할 수 있는 것은 아니며, 서브쿼리가 들어갈 수 있는 위치에는 SELECT절/FROM절/WHERE절/HAVING절/ORDER BY절과 INSERT 문의 VALUES절, UPDATE문의 SET절이 있다.

서브쿼리에는 단일 행 서브쿼리, 다중 행 서브쿼리, 그리고 다중 컬럼 서브쿼리가 있다. 


1.1. 단일 행 서브쿼리(Single Row Subquery)

서브쿼리의 결과가 1행 혹은 0행인 경우를 말한다. 예를 들어 '기본키 = 101인 컬럼의 DATE값' 등의 쿼리를 생각할 수 있다. 

쿼리의 결과가 단일값이므로 외부 쿼리와 '=','<','>' 등의 연산자로 연결될 수 있다.


1.2. 다중 행 서브쿼리(Multi Row Subquery)

서브쿼리의 결과가 2개 이상일 수 있는 경우를 말한다. 예를 들어 '직위 = 과장인 모든 직원의 이름' 등을 생각할 수 있다.

쿼리의 결과가 여러개일 수 있으므로 외부 쿼리와 '='등의 연산자로 연결하면 에러가 나게 된다. 따라서 다중 행 비교 연산자를 사용해야 한다. 다중 행 비교 연산자에는 IN, ALL, ANY, SOME, EXISTS 등이 있으며, 쿼리 결과 전체 중 특정 조건을 만족하는 값이 존재하는지를 연산하게 된다.


1.3. 다중 컬럼 서브쿼리(Multi Column Subquery)

서브쿼리의 결과로 여러 컬럼이 반환되는 경우이다. 다중 행 서브쿼리에 포함된다고도 생각할 수 있다. 예를 들어 '직위 = 과장인 모든 직원의 나이 및 근속년수' 등을 생각할 수 있다.

서브쿼리의 컬럼 순서와 외부쿼리의 컬럼 순서가 서로 맞도록 주의해야 한다.



2. 인라인 뷰 (Inline View)

서브쿼리가 FROM 절 안에서 사용될 경우, 해당 서브쿼리를 '인라인 뷰'라고 일컫는다. 서브쿼리의 결과가 하나의 테이블에 대한 뷰처럼 사용되기에 이렇게 부르는 것이다. 

MSSQL에서 인라인 뷰를 사용할 때에는 서브쿼리의 결과에 대해 앨리어스(Alias), 즉 가명을 지정해 주어야 한다.


AND