2 분 소요

자료구조/알고리즘/코딩테스트편

이전에는 개발자는 생각하는 기능을 구현해 내면 되는거 아닌가 했다.
선 구현 -> 후 성능…
뉴비시절 온갖 오류로 구현 자체를 못 하는데 성능이 무슨 소용..ㅎㅎ

성능이나 AWS에 서버를 올려서 최적화하는 것도 결국 사용법 문제라고 생각했다.
그래서 첫 프로젝트로 쇼핑몰을 만들면서 원했던 기능을 구현하는 데 집중을 했었다.
포폴 열심히 만들어서 취준활동을 했지만 서탈만 100개가 넘어가니 멘탈이 와사삭;

뭔가 문제가 있으니 서탈을 하는 건데 문제는 나만 문제점을 모른다는 점..
유튭을 봐도 다들 기준이 다르고 도대체 어떤 기준을 맞춰야 할지 몰라서 여러 가지 찾아보다가 원티드 백엔드 인턴십 프로그램을 알게 되어 참여하게 되었다.

해당 프로그램에서도 자료구조와 알고리즘을 중점으로 진행했는데 이 때까지만 해도 별 필요성을 느끼지 못했다.

그래서 신입에게 자료구조/알고리즘/코딩테스트가 왜 필요한가?

  • 아는 게 많아야 더 효율적이고 최적화를 잘 할 수 있다.
  • 아는 게 많아야 꼼수를 더 잘 사용할 수 있다.
  • 아는 게 많아야 코테도 잘 푼다.

당시에 팀 프로젝트로 경매사이트를 만들었는데 프론트없이 백엔드 끼리 진행을 했다. 이 때 문제가 된건 내가 맡은 결제 부분이였다.

FE가 없으니 SDK 방식으로 개발하는건 어려울 것 같아 카카오 결제(REST API) 로 개발을 했다.

하지만 그래도 문제가 발생했는데 결제를 진행할 때 FE에서 서버로 결제 및 인증을 위한 토큰 정보를 보낼 때 CORS 문제가 있었고 FE가 따로 없으니 쿠키나 세션등을 이용하는 게 어려웠다.

카카오 결제에서 ajax는 보안 때문에 사용 불가능하고 포트번호 개방 등 별에별 방법을 다 써도 프론트 부분을 만지지 않으면 해결이 안되는 부분들이 있었다.

이 때 생각해낸게 해시맵이였다.

(자료구조 공부하는데 해시맵 뭐야? 이거 내가 갖고 있는 문제 상황에 딱 적절한대?!)

당시에 사용자 인증을 JWT 토큰 방식으로 했었는데 어차피 로그인을 하면 토큰을 통해 사용자 아이디는 인식이 가능했다.

만약 자료구조에 대해 공부를 하지 않았다면 기술적으로만 문제를 해결하는 데 집중했을 것 같다.
(자료구조 배우기 전에는 리엑트랑 Axios 문서 보면서 삽질하고 있었음…)

당시 풀리퀘 정리


우선 해시맵 자료구조가 해당문제를 해결하는데 적합하다고 생각한 이유는 다음과 같다.

  • 해시맵의 키 값이 중복되지 않는다는 점
  • 시간 복잡도가 O(1)
  • 해시맵을 사용하면 굳이 토큰정보를 위해 계속 변수를 만들 필요가 없는점

  • 적합한 이유
    • 키 값을 아이디로 벨류 값을 토큰으로 저장 (아이디가 중복될 확률 매우 적음)
    • 사용자가 결제를 진행할 때 동시에 2개 이상 불가능 (따라서 결제를 할 때마다 키 값은 그대로고 벨류 값만 새로 업데이트 해주면 됨)

해시맵 자료구조를 이용하면 매번 새로운 변수로 서버나 DB 에 저장될 필요도 없고 새로운 결제가 이루어질 때 키 값이 존재할 경우 이전 토큰 벨류 값은 필요 없으므로 새로운 토큰 정보로 덮어 씌우면 된다.

만약 자료구조나 알고리즘을 공부하지 않았으면 이런 꼼수를 생각할 수 있었을까?

코딩테스트도 해당 자료구조나 알고리즘을 이해하는 데 많은 도움이 된다.
자료구조를 처음 이론적으로 접할 때 그냥 그렇구나 하지만 막상 이용하려면 어떻게 써야 할지 모를 때가 많다.

이 때 코테를 풀다 보면 이런 식으로 사용할 수도 있구나! 를 많이 접할 수 있다.
이런 게 쌓이면 쌓일수록 내가 쓸 수 있는 꼼수 카드도 늘고
개념이 탄탄할수록 응용도 쉬워진다.

따라서 경험이 없는 신입으로서 자료구조/알고리즘/코딩테스트는 필수체력이라고 생각한다.
필수체력이 약하면 결국 회사도 힘들고 나도 힘들고 주위 사람도 힘듦

댓글남기기