56회 SQLD 합격 회고

도비·2025년 4월 2일

회고

목록 보기
4/4

동기

올해 초, 사회복무요원으로 복무를 시작하며 전역하기 전에 자격증은 따두겠다는 막연한 생각으로 SQLD를 신년 계획에 넣어두었다. 그리고 막무가내로 친구들을 꼬득였다.

그리고 친구들의 급발진으로 아주 쉽게 스터디는 성사됐다.

물론 스터디에서 공부를 하지는 않았다. 그냥 같이 자격증 딸 사람을 모았을 뿐. 하지만 재밌었죠? 그 덕에 자격증을 딸 수밖에 없었다.

Timeline

  • 시작 전 상태
    SQLD를 막무가내로 써본 경험이 있다. 학부 과정에서 DB를 배운 적도 없었지만 플젝 때문에 알지도 못한채로 써본게 지식의 전부였다. SQLD를 목표로 둔 이유도 SQL을 좀 더 체계적으로 정리하고 싶어서 였다.

  • 2/1 - 책을 샀다.
    이후 친절한 SQL 튜닝이라는 책을 사서 한 100p 좀 넘게 읽었다. 내용은 되게 좋다고 생각했지만 내 능지로 흡수하기 힘든 내용이었다.

  • 2/3 시험을 접수했다.
    SQLD는 시험장이 거의 광역시밖에 없어서 시골에서 복무중인 입장에서는 당황스러웠다. 어쩔 수 없이 대구로 신청했다.

  • 2/10 드디어 SQLD 공부를 시작했다.
    SQLD 1과목SQLD 2과목을 정리했다. 하지만 10일부터 공부했다기에는 2과목을 24일에 정리했다. 사실상 이때부터 공부한거나 다름없다.

  • 2/26 노랭이 푼걸 오답정리했다.
    1과목 1장, 1과목 2장, 2과목 1장까지 정리했다. 2-1은 3월 6일에 정리했다. 굳이 오답 정리를 한 이유는 문서화하고 공유하고 싶은 욕심도 있었지만 혹시나 SQLP를 칠 때 도움이 되지 않을까 하는 생각에서였다. 2과목 2, 3장도 풀었지만 시험 전에 정리까지 하지는 못했다.

  • 3/8 시험을 쳤다.
    버스 시간 이슈로 6시쯤에 일어나서 출발했다.

    고등학생이 된 기분을 만끽하며 들어가니 9시가 채 되지 않았다. 혹시 몰라서 그간 작성한 벨로그를 출력해갔지만 ~~카톡하면서 키득거리고 있느라~~ 별 의미는 없었다. 10시에 시험은 시작됐다. 시험 내용은 생각보다 어렵다고 느꼈다. 문제를 만만하게 생각하고 천천히 풀기 시작했어서 그런지 시간도 채워서 풀었다. 다 풀고 대충 계산을 해 보니까 푼 문제는 34문제, 적당히 찍어서 푼 문제는 15문제, 감도 못잡은 문제 1문제 정도였다. 밖에서는 이번 시험이 너무 쉽게 나왔다고 떠드는 사람이 많았는데 나는 푼 문제가 맞을거라는 확신이 없으니 시험이 끝나고 나서 5월에 다시 봐야하나 걱정하고 있었다.
  • 3/28 성적 사전 공개
    안정적으로 합격 점수가 나왔다. 같이 준비한 3명도 합격이라고 한다.

결론

  1. 준비하는데 2주면 충분하다.
  2. 노랭이처럼 복잡한 SQL문은 출제되지 않는다.
  3. 개념을 모르면 유튜브에 무료로 제공하는 인강만으로 충분하다.
  4. 개념을 알고 있다면 노랭이만 풀어도 충분하다.
    • 노랭이를 한 번 풀어보면 적어도 개념은 60점 맞을 만큼 익혀지기에 개인적인 생각으로는 2회독까지 필요없다고 생각한다.
    • SQL문과 친하지 않다면 리트코드의 문제를 풀면 된다.

+ 7만원(응시료 + 노랭이) 정도 비용이 발생한다.

공부를 하고 나서 드는 생각은...

자격증 취득이라는 목적만을 갖고 공부를 한다면 배울게 별로 없는 자격증이라고 생각한다. 하지만 SQL과 DB에 대한 기초적인 내용을 담고 있고 이를 찬찬히 배워볼 수 있기에 배움에 초점을 맞춰 공부한다면 배울 부분은 분명히 있다고 생각한다. 적어도 지식도, 기준도 없이 DB를 다루던 나에게는 관련 내용을 정리해볼 수 있었던 기회가 되었다.

사족(蛇足)

올해 초에 한 활동 중 유일하게 눈에 보이는 성과인 것 같다. 모든 일이 그렇겠지만 배운 점이 있는 만큼 반대 급부로 아쉬운 점도 있었다. 가장 아쉬웠던 점은 내가 무엇을 아는지 모르는지, 아니면 잘못 아는지를 분명히 모른다는 점이었다.

자바를 공부하며 "힙 오염"이라는 개념을 접하게 되었다. 대충 자바에서 인스턴스를 저장하는 힙 영역에 제네릭을 사용하며 잘못된 타입에 저장되는 문제이다. 내가 의문이었던 오염이라고 하면 "다른 것으로 물들었다"는 뜻이라고 하는데 바뀐게 단 한 인스턴스일지도 모르는데 왜 "오염"이라는 이름을 붙이는가였다. 곰곰히 생각해본 결과 내가 내린 결론은 정작 잘못 저장된게 단 하나의 인스턴스일지라도 그것 때문에 "힙에서 안전하게 데이터를 다룰 수 있다"는 믿음이 깨졌기 때문에 잘못 저장되지 않은 인스턴스일지언정 믿고 꺼낼 수 없는 데이터가 된다는, 즉 이를테면 하나의 데이터로 말미암아 힙 영역 전체에 데이터의 불안정성이 확산되었기에 이를 오염이라고 칭한다는 결론을 내렸다.

그런데 이런 개념이라면 우리가 공부를 할 때도 "오염"이라는 표현을 적용해볼 수 있지 않을까 싶다. 문제를 풀 때 내가 아는 내용이라면 아는 지식을 기반으로 쉽게 문제를 풀 수 있다. 모르는 내용이라면 문제를 풀 수는 없겠지만 적어도 내가 풀 수 없다는 사실은 단정할 수 있다. 하지만 내가 알고있는 내용이 정확하지 않을 수 있다면, 즉 내 지식이 오염되었다면 문제를 풀었는지, 불 수 없는지조차 판단할 수 없다. 결론적으로는 모르는 것과 다르지 않은, 아니면 오히려 모르는 것만 못한 상황을 마주하게 된다.

힙 오염의 해결법은 raw type을 함부로 사용하지 않고 타입을 분명히 명시하는 것이다. 타입을 분명히 알기에 이것이 타입 안정성을 가지고 있을지 걱정할 이유가 없다. 위의 적용에 맞춰 해석해보면 지식을 습득할 때 대충 넘겨짚으며, 맞는 대로 공부할게 아니라 기본적이고 기초적인 내용부터, 차근차근 확실하게 공부해 나가야 지식의 "오염"을 피할 수 있을 것이다. 그래서 사람들이 개념의 중요성을 그렇게 강조하나보다.

profile
문과 였던 것...

0개의 댓글