본문 바로가기

# 블로그/자격시험 후기

SQLP 합격후기

공부기간

먼저 이것은 특이 케이스임을 미리 밝힙니다.

  • SQLP 취득 당시에 군인(병장, 24살)이였으며, 군부대 안에서 공부했습니다.
  • 튜닝 경험이 일절 없으며, 튜닝을 교재로만 배웠습니다.

공부기간은 6개월입니다.

  • 2017년 3월 : 24회 SQLD 합격
  • 2017년 9월 : 26회 SQLP 합격

공부동기

DB에 대해 아무것도 모른 상태에서 시작해서 다행히 SQLD 시험은 합격했지만.


높은 단계의 자격증을 따고싶다는 욕심과,

대용량 데이터를 다룰 수 있다는 매력에 홀려 SQLP 도전을 결심하게 되었다.


물론, 이 자격증의 무서움은 익히 들어서 알고있기 때문에,

결심이 서자마자 어중간한 태도는 전부 버렸는데.


혹한기나 유격같은 괴랄한 훈련이 있지않는 한, 😱

매일같이 연등하면서 공부했고,


일과시간에도 동기와 함께 생활관으로 도망친 뒤(?).

침상 위에서 책 꺼내놓고 열심히 공부했었던 기억이 난다.


지금 생각해보면 어떻게 그렇게 악착같이 공부했나 싶다.


시험장 느낌

시험 당일날 충남대학교로 시험을 보러 갔는데,

시험장 분위기가 SQLD와는 다르게 좀 무거웠다.


시험시간보다 일찍와서 공부하고 계신 분이 많았고.

학생층도 좀 있었지만, 노련해보이는 직장인분들이 더 많이 보였다.


사람들마다 사용하는 교재가 전부 달랐는데.

개인 자료집이 가장 신기했다.


커버 퀄리티로 보아 진짜 개인이 만든 것 같지는 않고,

아무래도 전문학원이나 회사에서 나눠 준 것 같은데.

그 자료집에 무엇이 적혀있는지 아직도 궁금하다. 🤔


본인은 시험장에서도 오라클 1, 2권을 가지고 공부했다.


시험 난이도

예상대로 시험 난이도는 지옥이였다.


시험지에는 사소한 오타가 넘쳐나,

정정한답시고 감독관이 여기보라고 소리치고.

객관식은 한 문제가 한 페이지를 잡아먹었으며,


주관식은 사악하게 힌트 및 실행계획 같은 부분에만 구멍이 뚫렸고,

늘 그렇듯이 서술형은 신유형으로 나왔기 때문에.

처음에 감도 안잡혀서 한참을 헤맸다.


괴랄한 난이도에 비해서 시험시간은 굉장히 빡빡한데.

72문제를 푸는데 3시간 밖에 안준다. (1문제당 평균 2.5분)


서술형 1문제당 적어도 15분은 걸린다는 것을 감안하면,

실제로는 2.5분보다 더 빠르게 풀어야 한다.


시험 팁

서술형을 먼저 풀자

객관식은 못풀면 찍을수라도 있지만,

서술형은 못풀면 탈락확정이다.


시험지 받자마자 서술형부터 풀고,

객관식을 나중에 푸는것이 정신건강에 좋다.


객관식은 소거법으로 풀자

바로 찍는 것 보다는 조금이라도 풀어보고 소거법으로 풀자.

25% 확률로 찍는것보다 훨씬 낫다.


오타정정 감독관은 적당히 무시하자

자격증 응시비용은 엄청 비싼데 검수는 제대로 안하는 모양이다.

오타정정한다고 들어오면 맞춤법이나 사소한 오타가 대부분이다.


예를 들자면 아래와 같은 상황이다.

            v
SELECT * FRON T; # 오타

SELECT * FROM T;

감독관이 오타정정한다고 들어오면, 적당히 무시하는것도 필요해 보였다.

조금만 생각하면 무시할 수 있는 오타가 대부분이며,

미어캣마냥 바라보고 있으면 시간 다 뺏긴다.


이것 때문에 항의를 받은적이 한두번이 아닌 듯 한데,

SQLP 카페에서도 오타로 하소연하는 응시생을 많이 볼 수 있었다.


합격 인증

멘탈이 쿠크다스가 된 채로 시험장에서 빠져나왔다.


발표날에도 당연히 불합격이라 생각하고 조회했는데.

이게왠걸, 기적같이 75점 턱걸이로 합격했다.


나중에 주최측에 이메일로 합격률을 물어봤는데,

당시 합격률은 10% 미만.

합격한건 천운이라고 생각한다.


어떻게 공부했나?

정말 죽은듯이 공부했다

경험이 주 목적이였지만, 당시 병장의 월급이 25만원임을 감안하면 들인돈이 너무나 많다.

돈 때문이라도 거의 매일 공부했는데, 6개월동안 매일 6시간은 공부했다.


실제로 했던 공부순서는 다음과 같다.

  1. 오라클 성능 고도화 1, 2을 겉핥기 식으로 훑어본다. (2번 이상)
  2. 대충 개관을 알았다면, 내용을 이해해가면서 정독해본다. (3번 이상)
  3. 검정교재를 풀고 오답노트를 적는다.
  4. 오답노트의 내용을 중점으로 더 자세하게 정독한다. (5번 이상)
  5. 공식교재도 읽어보면서 빠진 내용을 체크한다. (5번 이상)

처음 겉핥기가 가장 힘들었는데.


개관을 이해하기까지 2개월이 넘게 걸렸지만,

읽으면 읽을수록 1독하는데 걸리는 시간은 점점 짧아졌다.


매커니즘을 공부할 땐 큰 그림을 그리자

각각의 매커니즘은 독립적으로 분리되어있는 것 같지만,

서로 긴밀하게 연결되어 있는 경우가 많다.


간단하게 로우 1줄을 읽으려고 할 때,

아래와 같이 무수히 많은 매커니즘이 고려되어야 한다.

  1. 트랜잭션이 시작되려면, Undo 세그먼트부터 확인해야 한다. (TX 슬롯을 얻기위한 매커니즘과 연결)
  2. 데이터를 읽기전에, 버퍼캐시에 캐싱되어있는지 확인해야 한다. (Disk-Read 매커니즘과 연결)
  3. 데이터를 읽기전에, 다른 트랜잭션이 사용하고 있는지 확인해야 한다. (Lock 매커니즘과 연결)
  4. 데이터를 읽기전에, 그 데이터 블럭이 클린아웃되어야 하는지 확인해야 한다. (Dealyed clean-out 매커니즘과 연결)
  5. ...

매커니즘을 배울때마다 어디서-어떻게 쓰이는지 고민해보고,

관련된 매커니즘을 한 장의 큰그림으로 합치다보면,

전체적인 아키텍쳐를 이해하는데 큰 도움이 된다.


교재의 실행계획은 전부 이해하자

군대라는 제한된 환경 상, 실습은 할 수 없었기 때문에,

쿼리튜닝 파트는 오직 책으로만 공부해야 했다.


적어도 교재에 나오는 실행계획은 전부 이해하려고 애썼으며,

힌트가 실행계획에 통계에 어떤 영향을 주는지에 중점을 두었다.


더욱 나아가 간단한 실행계획을 던져주면,

어떤 형태의 쿼리였는지 추론하면서 공부했다.

즉, 간단한 실행계획 정도는 역공학 할 수 있어야 한다.


실제로 26회 서술형 문제에서 실행계획과 프레디킷을 보고

힌트가 포함된 SQL로 역공학하는 문제가 나왔다.


오라클 고도화 해법은 꼭 사자

오라클 성능 고도화 해법을 공부하면서 나왔던 예시가 5개 정도 나왔다.

이쯤되면 오라클 성능해법이 정식교재인 듯 싶다.


SQL 전문가 가이드는 오라클 성능해법 1, 2권을 절반으로 손실압축한 느낌인데,

손실된 부분에서도 문제는 나오기때문에 고도화 해법으로 공부하는 것이 좋다.


급하다면 DAP 영역은 건너뛰자

모델링 영역에서 DAP 수준의 문제가 2개정도 나오고,

SQLP 가이드에서도 알려주지도 않은 분야에서 출제된다.


하지만 어디가 나올지도 모르고, 모델링까지 붙잡고 있기에는 효율이 너무나도 안좋다.

난이도 높은 모델링 문제는 포기하고, 다른 문제에서 만회하는 것이 낫다.

물론 과락에는 주의해야 한다.


26회 실기문제 컨셉트

1번 문제

주어진 단서

  • 튜닝 전 실행계획
  • 튜닝 후 실행계획
  • 튜닝 전 쿼리
  • 5개 정도의 테이블 ER 모델
  • 5개 정도의 테이블 인덱스 구성도

인덱스 변경이 필요하다면 변경하되, 쓸데없는 인덱스 변경이라면 감점.


대답해야 할 질문

  • 1번 : 기억이 잘 안납니다 😭 2번 문제풀이로 가기위한 징검다리 문제였습니다.
  • 2번 : 튜닝 후 실행계획을 사용하도록 쿼리를 재작성할 것.

키 포인트

다음 항목을 캐치했어야 합니다.

  • 서브쿼리 FILTER 실행계획이 SEMI JOIN으로 바뀜.
  • 병렬쿼리의 데이터 분배방식이 달라짐.
  • 테이블들의 조인방식 및 조인순서가 달라짐.
  • ...

해법

  • sq_name, unnsert, nl_sj 힌트를 사용하여 세미조인으로 유도.
  • 데이터 분배방식을 변경하는 힌트 사용.
  • leading 힌트로 조인순서 조정 및, 해당 조인방식으로 유도하는 힌트 사용.
  • 병목을 일으키는 서브쿼리 제거.
  • ...

2번 문제

주어진 단서

  • 튜닝 전 쿼리
  • 8개 정도의 테이블 ER 모델
  • 8개 정도의 테이블 인덱스 구성도
  • 8개 정도의 테이블 데이터 상황 (테이블 전체건수 및 테이블 특성)
  • 튜닝 전 쿼리에서 사용된 조인컬럼의 데이터 상황 (각 테이블당 해당 조인컬럼의 전체건수)
  • 튜닝 전 쿼리에서 사용된 조인컬럼에 A, B, C 형태의 조건절을 주었을 때, 각각의 결과 건수

대답해야 할 질문

  • 1번 : NL 조인만 사용한다고 했을 때, 최적의 NL 조인경로를 적어라.
  • 2번 : 위의 조인 경로를 활용하도록 쿼리를 재작성하라.

추가 제한사항

  • NL 조인만 사용할 것.
  • 서브쿼리 사용불가. 반드시 필요하다면 인라인뷰까지는 허용.

다만, 저는 인라인뷰를 사용하지 않고 풀었습니다.


키 포인트

다음 항목을 캐치했어야 합니다.

  • NL 조인드라이빙 테이블의 크기가 작아야 유리하지만,
  • 조건절로 필터링된 결과가 소량이라면 큰 테이블을 드라이빙으로 선택해도 문제가 없다.

문제 풀이

  • 위의 키 포인트를 바탕으로,
  • 주어진 데이터 상황과 ER 모델을 보면서 최적으로 이어나갔습니다.

사용한 시험교재

'# 블로그 > 자격시험 후기' 카테고리의 다른 글

SQLD 합격후기  (0) 2017.11.01