본문 바로가기

SQL - Mysql & Oracle/SQL 실전 코딩 테스트

SQL 코딩 테스트 오답노트 작성 요령(합격률 올리는 꿀팁!)

반응형

이번 포스팅에서는 SQL 코딩테스트에서 어떻게 문제 풀이를 하고, 공부를 해야 하는지 꿀팁을 공유하려고 한다. 초반에는 SQL 실전 테스트에서 어려움을 겪기도 했는데, 오답노트 및 예상 질문들을 예상하면서 준비를 했더니 효율적으로 극복할 수 있었다. 

 

목차

1. 실전 문제 풀이 방법 3 단계

2. 오답노트 작성 꿀팁

3. 라이브 코딩 테스트 대비하기

 

1. 실전 문제 풀이 방법 3 단계

 

🔎어떻게 문제를 풀어야 합격률이 올라갈 수 있을까요?

 

개인적으로 가장 중요하다고 생각하는 것은 SQL 코딩 테스트를 풀 때 문제의 요구사항을 정리하고, 문제 풀이 계획을 먼저 생각하고 풀어야 한다. 왜냐하면 무작정 코드부터 써나가기 시작하다가 막히면, 아예 문제를 처음부터 풀어야 하는 상황이 생겨 시간을 낭비하게 되기 때문이다. 그리고 중간에 막혔을 때 내가 어디서부터 어떻게 막혔는지 한눈에 보이지 않고 말리는 상황이 발생하기 쉬운데, 문제 풀이 계획이 있으면 이러한 상황을 예방할 수 있었다. 지금부터 문제풀이를 할 때 어떤 방식으로 계획을 구성하고, 어떻게 문제에 접근하는지 개인적인 팁을 공유하고자 한다. 

 

Step1. 문제에서 요구하는 사항을 사전에 확실히 정리하자.

문제에는 필수적인 정보만 있을 수 있지만, 난이도가 올라감에 따라서 일부로 필요 없는 정보도 제공하는 경우가 있다. 문제 풀이에 필요 없거나 방해가 되는 정보를 사전에 확실히 인지하고, 내가 정말 집중해야 하는 정보가 무엇인지 정리하고 문제 풀이 계획을 수립해야 한다. 

 

 

Step2. 문제 풀이 계획을 먼저 정리하고, 코드 작성에 들어가자

문제의 요구사항을 파악했다면 이제는 문제 풀이 공략을 생각하는 단계이다. 이 단계에서 어떤 방식으로 어떻게 풀어나갈 것인지 큰 그림을 잡고 가는 것이 너무나도 중요하다. 왜냐하면 문제 풀이를 하다가 막혔을 때 자기가 어디서 막혔는지, 어디서부터 다시 시작해야 할지 바로 찾을 수 있기 때문이다.

 

예를 들어, 문제에서 User Table과 Sales Table이 있고, User ID별로 2번째 구매한 상품을 반환하라는 상황이라고 가정해보겠다. 그럼 문제 풀이 계획을 아래와 같이 구성해 볼 수 있다.

  • 첫 번째. User Table과 Sales Table을 User ID를 기준으로 Join하기
  • 두 번째. User별로 시간 순서에 따라 row_number()를 부여하고, subquery로 말아두기
  • 세 번째. subquery에서 where절을 통해 2번째 상품을 반환하기

이렇게 계획을 써두면, 코드를 구성할 때도 훨씬 빠르게 구성할 수 있고, 중간에 실수가 나더라도 내가 어디서 어떻게 잘못했는지 시간 낭비 없이 한눈에 파악할 수 있는 장점이 있다.

 

 

 

Step3. 위의 모든 과정을 주석으로 작성해 두자. 

이것은 사실 채점자 및 면접관들을 위한 장치라고 생각한다. 사람들은 코드만 보고 이 사람이 어떤 생각과 실력을 갖고 있는지 구체적으로 이해하기 어려울 수 있다. 만약 주석에 내가 생각했던 방식을 먼저 정리하여 답안을 제출하면, 단순히 답을 맞히는 것에 그치지 않고, 내가 갖고 있는 논리와 실력을 온전히 보여줄 수 있는 장점이 있다고 생각한다. 

 

 

 

2. 오답노트 작성 꿀팁

 

코딩테스트 오답노트 예제
코딩테스트 오답노트 예제

 

문제를 풀 때 단순히 문제만 풀어보고 답안만 외우면 전혀 의미가 없다고 생각한다. 똑같은 문제라도 내가 풀어낼 수 있는 방법이 많아지고, 함수들을 큰 생각 없이 바로바로 쓸 수 있도록 체득하는 것이 오답노트의 작성 목표이다. 

 

문제 풀이 할 때는 아래의 사항을 항상 기록해 두면서 작성하는 것이 핵심적이다. Column명은 자유롭게 작성해도 괜찮으나, 거기 안에 담겨 있는 내용이 가장 중요하다.

  • 회고: 처음 문제를 풀었을 때 얼마나 오래 걸렸는지, 그리고 어떤 함정이나 함수 때문에 막혔는지 기록하는 영역
  • 비고: 문제를 다시 풀었을 때, 내가 처음에 비해서 얼마나 달라져있는지 혹은 다른 답안을 생각해 냈는지 성장을 기록하는 영역
  • 유형: 내가 이 문제를 완벽하게 마스터했는지 파악하는 영역. 개인적으로는 to do → in progress → done 혹은 impossible로 나누어서 관리
  • 반복 풀이 횟수: 내가 이 문제를 얼마나 많이 풀었는지 기록하는 영역

 

이렇게 구성하게 되면, 내가 처음에 비해서 얼마나 성장했고, 내 답안을 보면서 퇴고를 진행하고 반복적으로 학습할 수 있기 때문에 학습의 과정을 최단기간으로 줄여줄 수 있었다. 

 

 

이런 방식으로 SQL 코딩 테스트를 준비하면 시험 형식의 코딩 테스트는 아주 무난하게 통과하여 다음 전형으로 갈 수 있을 것으로 본다.

 

 

3. 라이브 코딩 테스트 대비하기

 

라이브 코딩테스트는 일반적인 코딩 테스트와 문제 풀이과정, 문제 유형 등 모든 것이 다른 성격을 지니고 있다. 개인적으로 어떤 상황을 겪었고, 어떤 방식으로 대처를 했는지 경험을 공유해보고자 한다.

 

 

✅ Live Coding Test 특징1. 정답은 없어도 지원자의 논리적 사고 과정을 물어보는 경우가 많다.

 

라이브 코딩테스트에서 많은 경우 사전에 정답이 없다는 안내를 많이 받았다. 즉 숫자나 Row 하나하나가 맞는지 확인하는 것이 아니라 내가 어떤 사고 과정을 통해서 결과에 도달했는지, 그리고 문제의 요구 사항에 대해서 어떻게 대처했는지 소명하는 것이 합격의 당락을 좌우하는 Point라고 생각한다. 

 

그래서 문제를 풀 때도 단순히 정답만 내는 것이 아니라 코드의 시공간 효율성, Code의 리소스 효율성 등 많은 부분을 고려하면 작성해 나가야 한다. 왜냐하면 내 답변에 대해서 "왜 그렇게 코드를 구성했어요?" 혹은 "이런 방법이 더 효율적일 것 같은데, 왜 그렇게 작성하지 않으셨죠?"라는 대답을 받았을 때, 내 코드에 대해서 방어할 수 있는 논리가 사전에 준비가 되어있어야 하기 때문이다. 

 

 

Live Coding Test 특징2. 문제 유형이 실무에서 다루는 주제와 겹칠 수 있다.

 

라이브 코딩 테스트의 특징 중에 하나가 바로 실무에 가까운 문제 유형이 나올 수 있다는 것이다. 일반적인 코딩 테스트를 시험을 위한 문제이기 때문에 다소 실무와 거리가 먼 유형들도 많이 있는 것이 사실이다. 그러나 라이브 코딩 테스트는 정답이 없기 때문에 진짜로 회사 실무에서 다루는 주제가 나올 수도 있는 것이다. 대표적인 예시로 거의 모든 회사에서Cohort, Bounce Rate, Retention Rate 등의 지표를 관리하고 있을텐데, 이러한 유형으로 문제를 물어볼 수 있다.

 

이런 주제를 출제하는 이유는 내가 실무에서 어떤 생각을 갖고 있는지, 어떻게 지표와 마트를 관리하는지, 그리고 더 해보고 싶은 분석 주제는 없는지 직무 면접으로도 자연스럽게 흘러갈 수 있기 때문이라고 생각한다. 

 

 

 

 Live Coding Test 특징3. 코드를 작성하는 과정도 시험이다.

 

많은 경우 문제 풀이를 할 때, 면접관이 그 과정을 지켜보는 경우도 많다. 이 사람이 얼마나 SQL에 능숙한지 과정을 보면 바로 파악할 수 있기 때문에 이런 방식을 채택하는 것이라도 생각한다. 따라서 이 부분은 평소에 SQL을 많이 써보면서 대비하는 수밖에는 없는 영역이라고 생각한다. 한 가지 팁이 있다면, 주석에 내가 어떤 생각을 했는지 중요 단계별로 기록하면, 면접관에게 효과적으로 자신의 생각을 전달할 수 있을 것이다. 

 

 

반응형