신입분들에게 "DB관련해서 얼마나 경험이 있으세요?" 질문을 하면, 

모두 대학시절부터 현재까지 참여한 모든 프로젝트에서 사용한 DB 종류를 나열하면서 경험이 있다고 답변을 한다.

하지만, 대게는 간단한 DML, DDL 작성하는 것을 어려워 하는 사람들이 많다.

ElasticSearch, Maria 등 최근(?)에 나온 DB에 대해 특징을 얘기하지만, 기본적으로 Insert, Update,  Delete, Select에 대해 모르는 사람도 많다..

신입분들에게 질문해보자.

1. 주민번호가 저장된 테이블에서 '2018.12.31.을 기준으로 "만 나이"를 기준으로 인원수를 추출해 보세요?

2. 항목별 소계와 전체 합계를 한꺼번에 조회하려면 어떻게 해야 하나요?

3. DB에서 통계는 무엇인가요?

4. 파티션을 왜 사용하나요?

 

예시 답안 )

1. substr(), case when then end, group by 의 키워드가 필요하다.

   7번째 값이 1,2,5,6은 1900년대생, 3,4,7,8이면 2000년대생이라는 상식이 필요하며, 

   case 문으로 생일 여부에 따라 +1를 해줘야 한다.

2. 분석함수에 대해 아는지를 묻는 답이다. group by cube(항목), group by rollup(항목). 

   실제 분석함수를 사용하는 경우는 드물지만, 존재여부를 알고 필요할 때 찾을 수 있는 지식이 있다면 

    같은 일이라도 효율적으로 일 할 수 있다.

3. CBO(Cost Based Optimizer)RBO(Rule Based Optimizer)에 대해 알고 있으며, 오라클은 CBO 기반으로 동작하기

   때문에 동일한 자료 구조를 가진 운영/테스트/개발 DB들이 모두 실행계획을 확인하면, 일부 상이할 수 있는 것은 통계정보가 다르기 때문이다. 통상 데이터 변경이 20~30% 이상이면 실행계획이 변경될 수 있는데, 특정 실행계획을 강제화 하기 위해서 오라클은 Hint라는 기술로 CBO의 부족한 것을 보완하고 있다. 그리고 모든 테이블의 건수를 파악하려면, 모든 테이블에 analyze_estimate를 수행하고,(운영시스템일지라도, 순차적으로 작업시 문제되지 않으나 모니터링). user_tables를 조회하면 통계결과 정보를 확인할 수 있다.(건수 등).

4. Log 테이블 등 기간을 기준으로 partitioning하고, 삭제 주기가 되면 해당 파티션을 drop 하는 것은 작업의 효율성을 높이고, 불필요한 archieve log 파일을 생성하지 않아 디스크 문제 역시 없기에, 날짜별 테이블은 파티션닝하는 것이 좋다. 물론 100만건 미만의 테이블은 파티션을 고려할 필요가 없다. 테이블은 5개 이하의 인덱스를 사용할 수 있는데, 실제 운영시 인덱스에 없는 조건으로 검색을 할 수도 있다. 이경우 파티션닝되어 있다면, 해당 파티션만 조회하면 되기에 검색 범위가 줄어 들 수도 있다.  

 

위의 질문에 대한 답으로 1번을 답하면 기본은 아는 구나, 2번을 답하면, 좀 해봤구나... 3번을 답하면 바로 일할 수준은 되는구나..4번을 답하면 잘 뽑았구나..라고 생각할 지 모른다.  

하지만 아직 DB에 대해 공부할 필요가 없었기에 대답을 못하는 것이지. 실력이 부족하다 섣부르게 판단하지 말자.

실제 1번~4번은 데이터 전문가 자격증 SQLD 만 공부해도 어느정도 답을 할 수 있는 내용이다. 개발자로써 SQLD 또는 SQLP만 취득했다면 RDB에 대해서는 충분히 준비가 되었다고 할 수 있다. 

 

실제 자격증은 "내가 가진 지식"을 "증명"하는 수단이다. 물론 이 수단을 취득하기 위해서 우리는 시간과 10만원의 비용을 투자해야 하지만, 자격증은 투자금 이상의 값어치를 할 것이다.

그리고 공부를 해야 자격증을 얻는 것이므로, 쓸모없다 말하며 하지 않는 사람보다는 실천하여 취득한 사람이 결국 조직에서는 인정받는 사람이 될 것이다.

 

 

 

 

 

 

Posted by 목표를 가지고 달린다
,