개발하면서 한 번쯤은 이런 생각이 들었을 것이다.
‘자료구조랑 알고리즘, 실무에서 정말 필요할까?’
코딩 테스트 땐 열심히 공부했지만, 실제로는 잘 쓰지 않는다고들 한다.
실제로 동료 개발자들 중에는 알고리즘의 중요성을 크게 느끼지 못하거나, 전 직장에서 굳이 알고리즘을 쓰지 않아도 충분히 개발이 가능했다고 말하는 사람도 있었다.
하지만 실은 우리가 매일 쓰는 코드 속에 늘 숨겨져 있다.
이번 글에서는 실무 사례를 통해 왜 이 기본기가 중요한지 이야기해본다.
React로 리스트 렌더링할 때 map()
돌리는 거, 상태를 객체로 관리하는 거, 로그인한 사용자 정보를 Map
에 저장하는 거… 이게 다 자료구조라는 거, 알고 보면 너무 당연한데도 실감이 안 날 때가 많다.
예를 들어서,
이런 걸 일일이 구현하진 않아도, "왜 이렇게 구조가 되어 있는지" 이해하고 있는 게 정말 중요하다.
개발하면서 이런 경험 없었는가?
이런 순간에 알고리즘을 떠올리게 된다. 직접 구현까지는 안 하더라도, 어떤 방식이 더 효율적인지 감이 있는 것과 없는 건 정말 차이가 크다.
예를 들면,
sort()
가 느린지 파악할 수 없다. 사용자가 실시간으로 알림을 받는 기능을 Firebase Cloud Messaging과 함께 구현하면서, 알림이 여러 개 쌓일 경우 순서가 꼬이거나 누락되는 문제가 발생했다.
이때 클라이언트 쪽에서 큐 구조를 적용해, 받은 알림을 순차적으로 보여주도록 처리했다.
단순히 배열을 사용하는 것과 큐를 명확히 적용하는 것 사이에서 안정성 차이가 꽤 컸다.
중첩된 옵션을 가진 설정 데이터를 CMS에서 JSON으로 받아 UI로 보여줘야 하는 페이지를 만들었다.
JSON 구조를 그대로 트리 형태로 렌더링하고, 사용자 인터랙션에 따라 하위 옵션이 열리고 닫히는 구조가 필요했다.
이 과정에서 트리 탐색(DFS) 알고리즘을 활용해 렌더링과 상태 변경을 처리했다.
검색어 자동 완성 기능을 직접 구현하면서, 프론트엔드에서 사용자가 입력한 값을 기반으로 실시간으로 결과를 필터링하고 정렬해야 했다.
이를 위해 검색 리스트를 Trie 구조로 바꾸는 것을 검토했으며, 실제론 이진 탐색으로 접두어 검색을 최적화해 UX를 개선했다.
또한 정렬 로직은 정렬 알고리즘을 기반으로 사용자 클릭률 데이터를 반영하도록 구성했다.
관리자 대시보드에서 자동으로 공휴일을 계산해서 일정 관리에 활용하는 기능을 구현했다.
API에서 받은 날짜 데이터를 토대로 연도별 공휴일을 계산하고, 연속된 날짜 구간을 하나의 블록으로 묶는 처리가 필요했다.
여기서 누적합과 슬라이딩 윈도우 알고리즘을 통해 휴일 구간을 효율적으로 계산했다.
복잡한 사용자 권한 설정을 트리 형태로 보여주고 편집할 수 있는 기능을 개발했다.
트리 구조로 렌더링하고, 자식 노드를 모두 선택하거나 해제하는 기능을 구현하면서 DFS 기반 순회 알고리즘을 사용해 UX를 자연스럽게 만들 수 있었다.
실제로 모두 구현할 일은 없더라도, 어떤 구조에 어떤 알고리즘이 어울리는지 감을 익히는 것이 핵심이다.
진짜 중요한 것은, 자료구조나 알고리즘을 얼마나 '쓸 줄 아는지'보다도, 언제 어떤 걸 써야 하는지를 아는 감각이다.
회사에서 직접 그래프 알고리즘을 구현할 일은 거의 없을 수도 있다.
하지만 "이 문제는 그래프다"라고 감을 잡는 사람과, "그냥 이거 상태 하나 더 만들면 되지 않아요?"라고 말하는 사람의 차이는 크다.
자료구조와 알고리즘은 코딩 테스트용으로만 쓰는 도구가 아니다.
실무에서 의외로 자주 접하게 되고, 그 개념을 이해하고 있는 사람은 문제를 더 단순하게 해결한다.
사람들이 흔히 말하는 "개발 감각"이란 것도 결국 이런 기본기에서 비롯된다고 생각한다.
혹시 지금도 "자료구조, 알고리즘은 코테용이지"라고 생각하고 있다면,
슬쩍 주변 코드를 한 번 들여다보자.
아마 의외로 가까운 곳에서 이들의 필요함을 느낄 수 있을 것이다.
실제로 알고리즘만 많이 하고 막상 개발 공부는 열심히 하지 않았을 때는 알고리즘 열심히한 걸 후회했지만 지금와서 보니 여러 성능 개선의 핵심 기법들이 알고리즘에 기반하는 것 같아서 공감되는 글이네요!
잘 읽었습니다!