티스토리 뷰

반응형

이번 글에서는 지금 근무중인 회사에서 제가 하고 있는 일과 코딩 테스트때 자주 보고 있는 알고리즘이 현재 어떤 영향이 있고, 이런 내용을 실제로도 잘 활용하고 있는지에 대해서 적어보고자 합니다. 이런 글은 사실 어느 회사에서 어떤 직무로 근무하냐가 판가름되고 있지만, 저는 주관적으로 제가 근무하면서 생각한 부분과 그 내용을 정리해서 적어보려고 합니다. 참고로 저는 현재 다니고 있는 회사가 대기업, 스타트업, 프리랜서를 통틀어 7번째 회사입니다. 이 정도면 그래도 신빙성이 있는 나름의 경험을 바탕으로 말씀드릴 수 있을 것이라 생각합니다.

 

1. 알고리즘의 유래

신규 입사자분들, 특히나 대기업을 입사과정 있으신 분들이 필히 준비하는 과정인 알고리즘 입니다. 이전에도 그렇고 요새는 사람들이 비슷한 시스템 구조로 짜여있는 비즈니스 로직이 많이 중복되는 경우가 많다보니 이런 부분에서 좀 더 효율성을 찾고 시간 복잡도를 줄이기 위해 최적의 알고리즘을 찾곤 했습니다. 번외의 얘기지만 저도 대기업에 근무하면서 빈번하게 중복된 로직을 찾는 경우가 정말 많았고, 이를 개선하면서 또 다시 반복된 소스 코드로 개발을 진행하는 제 모습을 보면서, 이런 부분은 정말 내가 아니더라도 컴퓨터가 개발가능하겠다는 소스가 굉장히 많았습니다. 

그렇기 때문에 리소스가 많이 사용되는 로직이 많고 많을수록, 시간 복잡도가 제곱수가 되는 것을 방지해서 상수화시키기 위한 노력은 이전의 객체지향적인 프로그램이 나오기 전에 제임스 고슬링 같은 자바 언어의 창시자분들 (속히 천재 개발자, 천재 프로그래머라고 불리는 사람들)이 이미 충분히 고민을 하였고, 그에 맞춰 최적화된 내용을 갖춘 언어를 만든 사람들이 이미 좋은 라이브러리를 만들었습니다. 

그래서 개발자들은 그 언어만 사용하게 되어서 점차 그에 익숙하게 되어져왔습니다. 하지만 모든 환경이 그렇듯 이전보다는 기술이 발전하는 속도가 더 빨라지게 되었습니다. 개발자들은 그것에 맞춰 더 빠르고, 더 정확하고, 더 신속하게 문제를 해결할 수 있는 방법을 꾸준히 검색하였고, 그에 해답이 알고리즘에 있다는 것을 알게 되었습니다.

그렇기 때문에 많은 양의 데이터를 일괄적으로 그리고 빈번하게 처리하는 대기업에서는 알고리즘을 중시합니다. 자주 있는 일은 아니지만 실제로 코딩 테스트에서 쓰인 질문들에 대한 답변을 응용하여 현업에 적용하는 경우가 있습니다. 시스템의 규모에 따라 다르고, 보통 큰 서비스를 운영하고 있는 회사에서는 더 많이 사용합니다.

추가로 이전에 알고리즘을 공부하는 방법에 대해 잘 기술되어 있는 글이 있어 첨부합니다. 관심이 있으신 분들이 보시면 좋을 것 같습니다.

https://careerly.co.kr/comments/67099

 

킴코더 / 알고리즘 시스템 디자인 면접 완벽 준비 팁 무료 템플... | 커리어리

알고리즘과 시스템 디자인 면접 준비는 어디서부터 어떻게 해야 할까요? 준비 체크리스트 템플릿과 함께 예전에 ...

careerly.co.kr

 

2. 코딩 테스트의 필요성

대기업이나 소프트웨어를 크게 운영하는 회사의 직원들은 굉장히 바쁩니다. 사실 그만한 이름값이 있는 회사, 덩치가 큰 회사에 다니는 것만으로 자기 프라이드가 되고 소득적으로 그리고 명성으로도 높은 부분이 있다 보니 달콤한 꿀같은 월급과 연봉을 놓칠 수 없는 것이 사실입니다. 

보통의 직원들은 회사가 발전하길 바라고 자신이 성장하길 바랍니다. 하지만 채용은 약간 다릅니다. 사람들은 채용에까지 투자할 시간이 그렇게 많지 않습니다. 채용 과정은 다들 아시다시피 대개 '면접 -> 처우 협의 -> 입사' 순서가 보통 존재합니다. 그런데 인사 담당자들은 한정되어 있고, 신규로 들어올 사람들은 많고, 그 많은 지원자들의 이력서를 볼 시간이 부족합니다.

2020년부터 소프트웨어 회사인 네이버, 카카오등의 회사들이 대규모 채용을 도입하게 된 배경을 먼저 설명해야 이해가 빠를것 같습니다. 다름아닌 코로나의 영향으로 인해 비대면으로 이루어지는 것들이 많았고, 스마트폰 보급률이 정말 높은 이 시대에서 당연히 온라인으로 이루어지는 것들이 당연히 발전하게 되었습니다. 그러면서 개발자들이 대규모 채용되고, 그만큼 더 시스템을 고도화하고 개발하기 위해 엄청난 수요가 있었던 것이 사실입니다.

그래서 덩달아 코딩 테스트가 각광을 받게 되었습니다. '개발 직군의 채용시장이 넓어진다 -> 입사를 시키기 전에 이 개발자가 들어와도 되는지 검증하고 싶다 -> 그렇다면 코딩 테스트로 면접 보기 전에 사람들을 거른다 -> 코딩 테스트에 합격한 일부의 사람들만 인사 담당자들이 면접에 참여하자'의 자연스러운 흐름이 되었습니다. 

이것도 제가 보려고 아카이브에 저장해둔 내용이지만, 면접 또는 코딩 테스트를 보기 위한 분들에게 조금이나마 도움이 될까싶어 같이 글을 올려봅니다. 

https://careerly.co.kr/comments/69538?utm_campaign=user-share 

 

엄지현 / 채용 담당자의 눈을 사로잡는 개발자 이력서 작성 방법 | 커리어리

개발자 이력서는 어떻게 하면 잘 쓸 수 있을까요? 지난 7월에 이력서 관련 포스팅을 올렸었는데요, 이번에 좋...

careerly.co.kr

 

3. 코딩 테스트를 뚫기 위해

하지만 이런 무분별한 코딩 테스트는 준비가 안된 사람들이나 이제 막 코딩에 입문한 사람들이 넘기에는 턱없이 높은 장벽이었습니다. 매번 신경향의 고난이도 코딩 테스트 문제가 기출문제로 나왔었고, 카카오는 그런 코딩 테스트를 높은 난이도로 내기에 악명높은 이미지가 되어서 초반부부터 많은 지원자들이 대거 탈락하기도 하였습니다. 실제로 프로그래머스도 카카오 출신 개발자가 따로 개설한 것으로 알고 있습니다. 

그래서 이를 전문적으로 족집게 강의를 해주는 알고리즘 학원들도, 온라인 강의들도, 모의 테스트 사이트도 많이 늘어나게 되었습니다. 코딩 테스트를 합격하고 면접을 볼 때에도 내가 알고리즘을 직접 생각했는데 어떻게 이렇게 생각해서 코드를 작성하게 되었는지 질문을 할 정도로 대기업 패스용 알고리즘 테스트는 높은 벽이 되어 버렸습니다. 과연 이게 좋은 징조일까요?

물론 이런 점을 고려하고 실제로 사용하는 기본적인 테스트만 본다거나, 라이브 코딩을 하거나, 특정 과제를 내주고 이런 기준에 한해 배점을 매겨 심사를 하는 다양한 코딩 테스트 방법들도 생겼습니다. 실제로 업무에 적용하는 내용은 한정되어 있다는 뜻입니다.

 

 

4. 알고리즘은 회사 by 회사

회사는 업무를 하는 공간입니다. 개발자도 그 중 한명의 직원이고 회사에서 필요한 시스템을 구축하는 인원중에 한명입니다. 기본적으로 스타트업에서는 많은 것을 새로이 개발하는 것이 어쩔 수 없는 수순이지만, 어느 정도 규모가 갖춰진 회사에서는 기본적인 소프트웨어 개발 가이드라인이라던지 아키텍쳐, 프레임워크, 코드 컨벤션과 기존의 알고리즘들이 모두 소스 코드 안에 녹아져 있는 경우가 많습니다. 비즈니스 로직 상 이런 내용들이 당연 운영중인 서비스에 따라 차이가 있을 수 있습니다.

알고리즘을 최대한 데이터베이스에 부하가 가는것과 양분화하고, 일부 연산은 자바 소스 코드 내에 또는 배치로 데이터를 정제가공하여 뿌려주는 방법도 있듯이 알고리즘의 비중이 많이 낮아지게 되었습니다. 특히나 빅데이터가 각광을 받게 되면서 서버를 다중화하고, 서버가 온전히 연산만 가능하도록 처리해주는 MSA 방식의 서버 아키텍처를 주는 회사도 많아졌습니다. 

즉, 알고리즘은 때로는 중요할 수도 있지만 서버의 성능에 따라도 제각각이고 기계학습을 통해 자연스럽게 속도 향상이 있는 경우도 있기 때문에 기본적인 개념만 알고 입사를 해서 업무를 진행하는 것이 훨씬 효율적이라는 것이 제 생각입니다. 

하지만 알고리즘 공부를 하는 것이 손해는 절대 아닙니다. 알고리즘이 필요할 경우가 꽤나 많습니다. 준비를 해두면 떄로는 유용하게 쓰일 가능성이 있고, 개발을 진행할 때 속도가 더 나는 부분이 있어서 시간을 아낄 수 있는 이점이 있습니다. 

 

5. 결론

결론부터 얘기하자면 알고리즘이 필요한 시점을 정리하면 아래처럼 됩니다.

  1. 대기업 입사시
  2. 대규모 데이터 배치 처리를 할 때 (+사실 이 말은 데이터베이스 구조가 이상할 때가 더 맞습니다.)
  3. 기존과는 다른 방법으로 색다르게 로직을 구현하고 싶을 떄  (+내 능력을 뽐내고 싶을 때 가끔 사용합니다.)
  4. 기계학습을 할 때 (백엔드 개발은 거의 하기 힘듭니다.)

 

위의 4가지 경우 중에 필요한 케이스는 백엔드 개발자의 입장으로서는 1가지, 입사 및 이직 준비자로서도 1가지, 입사해서 다양하게 많은 것을 하고자 하는 사람에게는 4가지 전부 포함이지 않을까 합니다. 

2번의 경우는 배열 구조로 나온 데이터 파라미터를 해석하고 이를 결과에 맞게 뿌려주는 알고리즘 테스트 문제를 재해석한 케이스입니다. 

3번, 4번은 글쎄요... 그래도 내가 만든 로직으로 서비스가 운영되는 것은 정말 좋은 일입니다. 앞으로 개발에 입문하고자 하는, 그리고 주니어 개발자분들이 이 글을 읽어보시고 도움 되셨으면 좋겠습니다 :)

 

반응형
댓글
공지사항