IT 분야에 갓 발을 들인 20~30대라면 한 번쯤 이런 경험을 해봤을 것이다. 프로그래밍 학습을 시작할 때 가장 먼저 추천받는 것이 자료구조와 알고리즘이다. 많은 입문자가 이 말을 듣고 두꺼운 전공 서적을 펼쳐들거나 인터넷 강의를 정주행하며 연결 리스트, 이진 탐색 트리, 다익스트라 알고리즘을 달달 외우기 시작한다. 하지만 정작 실제 개발 현장에서는 이런 암기가 큰 도움이 되지 않는 경우가 많다. 흔한 오해 중 하나가 “자료구조와 알고리즘을 많이 외우면 좋은 개발자가 된다”는 믿음이다. 실제로는 그 개념을 이해하고 필요할 때 떠올릴 수 있는 사고력이 더 중요하다.
비포와 애프터로 나누어 이 이야기를 풀어보자. 어떤 주니어 개발자가 있었다. 그는 입사 전부터 자료구조와 알고리즘을 열심히 공부했다. 스택, 큐, 힙, 정렬 알고리즘의 의사 코드를 줄줄 외웠고, 코딩 테스트 문제도 제법 풀 수 있었다. 그런데 입사 후 첫 실무 과제에서 그는 난관에 부딪혔다. 사용자 목록을 처리하는 기능을 맡았는데, 데이터가 몇 천 건 정도만 되어도 프로그램이 눈에 띄게 느려지는 것이었다. 그는 책에서 본 빅오 표기법을 떠올렸지만, 어떤 자료구조를 적용해야 할지 전혀 감이 오지 않았다. 결국 그는 배열에 데이터를 넣고 반복문을 중첩으로 돌려서 해결하려 했고, 결과는 처참했다.
이 사례에서 알 수 있는 점은 명확하다. 그는 자료구조를 외웠지, 자료구조를 활용하는 방법을 익히지 못했다. 단순히 개념을 암기한 수준에서는 실제 코드의 병목 지점을 찾아내고 적절한 해결책을 적용할 수 없다. 핵심 요인은 ‘문제 상황 속에서 개념을 연결 짓는 사고’가 부족했다는 점이다. 알고리즘은 문제를 해결하는 절차이고, 자료구조는 데이터를 조직하는 방식이다. 이 둘은 단순 지식이 아니라 문제 해결의 도구다. 따라서 어느 상황에서 어떤 도구를 꺼내야 하는지 판단하는 안목이 더 중요하다.
변화는 사고의 전환에서 시작된다. 그가 이후에 취한 접근 방식은 달랐다. 그는 외우는 대신, 매우 작은 규모의 정렬 문제를 직접 시각화해 보았다. 데이터가 어떻게 이동하고 비교되는지 손으로 그려보면서 이해를 쌓았다. 그리고 트리 구조를 단순히 개념으로 외우지 않고, 실제로 계층 관계를 가진 데이터(예: 조직도, 카테고리 분류)에 적용해 보았다. 이렇게 개념을 자신의 코드에 연결 짓기 시작하자, 이전에는 보이지 않던 성능 문제가 눈에 들어오기 시작했다. 같은 문제를 보고도 ‘이건 해시 맵을 쓰면 빠르게 해결되겠다’, ‘이건 스택으로 처리하면 자연스럽게 순서가 유지되겠다’는 판단이 즉각적으로 떠올랐다.
이제 IT 및 프로그래밍 학습을 어떻게 해야 하는지 구체적으로 살펴보자. 첫째, 개념을 외울 때는 반드시 ‘왜 이렇게 되는지’를 질문하라. 예를 들어 퀵 정렬이 평균적으로 빠른 이유가 무엇인지, 어떤 상황에서 오히려 느려지는지를 생각해 보라. 둘째, 직접 코드로 작성하되 단순히 베끼지 말고 변형해 보라. 정렬 알고리즘을 하나 구현했다면, 그 코드에서 변경할 수 있는 부분을 바꿔 가며 결과를 관찰하라. 셋째, 실제 데이터로 테스트하라. 백만 개의 데이터가 들어왔을 때 각 자료구조가 어떻게 동작하는지 체감하는 시간이 중요하다.
여기서 중요한 것은 자료구조와 알고리즘 공부가 반드시 거창한 프로젝트에서만 필요한 것이 아니라는 점이다. 이 개념은 단순 CRUD 기능에서도 의미를 가진다. 예를 들어 게시판 목록을 페이징 처리할 때, 전체 데이터를 매번 정렬하는 것과 인덱스를 활용하는 것의 차이는 엄청나다. 또 어떤 데이터를 자주 수정하고 삭제하는지, 아니면 조회만 주로 하는지에 따라 연결 리스트가 유리할 수도 있고 배열이 유리할 수도 있다. 이는 모두 자료구조의 특성을 이해하고 있어야 내릴 수 있는 판단이다.
여러 사례를 관찰해 보면, 실제 개발 현장에서 성능 문제를 해결하는 개발자들은 대부분 자료구조의 시간 복잡도와 공간 복잡도를 따지는 습관을 가지고 있다. 그들은 아주 작은 함수 하나에도 ‘이 작업을 여러 번 반복해야 하는데, 매번 탐색하면 비효율적이겠다’는 생각을 먼저 한다. 그래서 미리 필요한 데이터를 정리해 두거나, 캐시를 활용하거나, 더 적합한 컬렉션을 선택한다. 이는 결국 단순 암기의 산물이 아니라 지속적인 훈련의 결과다.
IT 학습에 있어 또 하나 놓치기 쉬운 부분은 SQL과 데이터베이스의 관계다. 웹 서비스에서 성능 문제가 발생하면 대부분 애플리케이션 코드보다 SQL 쿼리에서 병목이 생긴다. 이때 인덱스의 원리를 모르면 단순히 쿼리 문장만 수정하거나 테이블을 통째로 조회해 버린다. 데이터베이스에서 인덱스가 왜 빠른지, 어떤 컬럼에 인덱스를 걸어야 하는지는 사실 자료구조에서 배우는 트리 개념과 연결되어 있다. 이런 연결점을 찾아내는 것이 학습의 핵심이다.
결국 핵심은 ‘개념을 문제 해결의 맥락에서 이해하는 것’이다. 외우는 공부는 기억에서 금방 사라지지만, 직접 문제를 해결하면서 익힌 사고는 오래 남는다. IT 및 프로그래밍 학습의 목표는 시험 점수가 아니라 실무에서 유용한 도구를 손에 쥐는 것이다. 따라서 이제 이 글을 읽고 있다면, 다가오는 코드 작성에서 ‘내가 지금 이 데이터를 어떻게 다루고 있는지’를 스스로 질문해 보라. 그 질문이 반복되면 어느 순간 자료구조와 알고리즘이 단순 암기 과목이 아니라 문제 해결의 든든한 동반자로 느껴질 것이다. 남의 코드를 읽을 때도 그들의 선택이 왜 그런지 이해하기 시작한다면, 이미 성장의 문턱을 넘은 것이다.