5 분 소요

무엇에 집중할 것인가

AI 덕분에 개발 생산성은 비약적으로 높아졌다. 단순한 API를 만들고, 반복적인 보일러플레이트 코드를 작성하고, 익숙한 패턴의 구현을 완성하는 데 드는 시간과 수고는 눈에 띄게 줄어들고 있다. 이제 많은 구현은 더 빠르게 만들 수 있고, 어느 정도는 더 쉽게 만들 수도 있게 되었다.

하지만 바로 그 지점에서 새로운 질문이 생긴다. 기계가 코드를 빠르게 만들어주는 시대에, 개발자는 무엇에 더 집중해야 할까?

이제 단순히 구현 속도만으로 차별화되기는 점점 어려워지고 있다. 앞으로 더 중요해지는 역량은 무엇이 진짜 문제인지 정의하고, 그것을 시스템으로 풀 수 있는 형태로 구조화하는 능력이라고 생각한다. 코드를 생산하는 능력보다, 복잡한 현실을 이해하고 문제를 올바르게 설정하는 능력. AI 시대일수록 이 역량의 가치가 더 커진다.

설계 이전에 필요한 것, 문제를 올바르게 정의하는 능력

최근 결제 시스템을 개발하며 흥미로운 경험을 했다. 시스템 설계 방향을 AI와 함께 고민해 보니, 학습된 패턴을 바탕으로 일반적으로 좋은 구조와 베스트 프랙티스에 가까운 답을 꽤 빠르게 제시해 주었다. 구현 초안을 만드는 속도도 인상적이었다.

하지만 그것을 실무에 그대로 적용할 수는 없었다. 우리 회사가 가진 레거시 시스템의 한계, 기존 데이터베이스와의 결합성, 운영 과정에서 이미 굳어진 정책, 그리고 문서만으로는 드러나지 않는 예외적인 비즈니스 제약까지 AI가 온전히 이해하고 반영하기는 어렵기 때문이다.

실무에서 더 어려운 일은 “어떻게 구현할까”보다 그보다 앞선 질문이다. 이 시스템이 실제로 해결해야 하는 문제는 무엇인가? 어디까지를 이 시스템의 책임으로 둘 것인가? 어떤 복잡성은 받아들이고, 어떤 복잡성은 제거해야 하는가?

결국 중요한 것은 정답처럼 보이는 구조를 가져오는 일이 아니라, 우리 조직의 맥락 속에서 문제를 다시 정의하는 일이었다. 같은 현상도 어떤 경우에는 데이터 모델의 문제이고, 어떤 경우에는 도메인 경계의 문제이며, 또 어떤 경우에는 운영 정책의 문제일 수 있다. 이 차이를 구분하지 못하면 설계도 흔들리고 구현도 쉽게 누더기가 된다.

AI는 답안을 빠르게 써줄 수 있다. 하지만 어떤 질문을 던져야 하는지, 무엇을 풀어야 하는지를 결정하는 일은 여전히 개발자의 몫이다.

설계는 구조를 세우는 일이고, 문제 정의는 그 출발점이다

좋은 설계는 단지 기술적으로 보기 좋은 구조를 만드는 일이 아니다. 문제를 어떤 단위로 나누고, 어떤 책임을 어디에 둘지 정하며, 시스템이 감당해야 할 복잡도의 경계를 결정하는 일에 가깝다.

이 과정에서 가장 중요한 출발점이 바로 문제 정의다. 문제를 잘못 정의하면, 그 위에 아무리 좋은 패턴과 깔끔한 코드를 쌓아도 결국 엉뚱한 방향으로 단단한 시스템을 만들게 된다. 반대로 문제를 정확히 정의하면, 설계와 구현은 훨씬 선명해진다.

개발자가 회사의 맥락에 맞게 문제를 정의하고, 도메인을 적절한 단위로 추상화하며, 탄탄한 인터페이스를 설계해 두면 그 내부를 채우는 구현은 AI가 훨씬 빠르고 효율적으로 도울 수 있다. 그래서 AI 시대에 설계 역량이 중요하다는 말은, 결국 그 앞단에 있는 문제 정의 능력이 더 중요해진다는 말과도 같다.

파편화된 코드에서 견고한 시스템으로

AI가 아무리 훌륭한 코드를 빠르게 만들어낸다고 해도, 그것들을 단순히 이어 붙인다고 해서 거대한 비즈니스를 버텨내는 견고한 시스템이 되지는 않는다. 소프트웨어는 본질적으로 복잡하며, 시간이 지날수록, 요구사항이 늘어날수록, 예외 케이스가 쌓일수록 그 복잡도는 빠르게 증가한다.

이 복잡도를 다루는 핵심 무기 중 하나가 바로 추상화다. 추상화는 단순히 구현을 감추는 기술이 아니다. 무엇이 중요한지 구분하고, 무엇을 시스템의 책임으로 삼을지 결정하며, 흩어진 규칙을 하나의 일관된 구조로 묶어내는 방식이다.

그리고 좋은 추상화는 좋은 문제 정의에서 출발한다. 무엇을 일반 규칙으로 다룰 것인지, 무엇을 예외로 남겨둘 것인지, 어떤 책임을 하나의 모듈 안에 응집시킬 것인지를 먼저 결정해야 하기 때문이다.

AI가 쏟아내는 수많은 코드 속에서 개발자는 비즈니스 도메인에 대한 이해를 바탕으로 시스템의 역할을 정의하고 모듈 간의 경계를 명확히 그어야 한다. 파편화된 로직들을 하나의 일관된 서비스로 엮어내고, 시간이 지나도 쉽게 무너지지 않는 구조를 만드는 일은 결국 인간의 추상화 역량에 달려 있다.

추상의 결과물 1: 당연한 것을 당연하게 지켜내는 신뢰

이러한 설계와 추상화가 빛을 발하는 첫 번째 영역은, 사용자가 너무나 당연하게 기대하는 신뢰의 영역이다.

일반 사용자나 비개발자 직군과 이야기해 보면, 거대한 이벤트로 수백만 명의 트래픽이 몰리는 상황에서도 내가 누른 결제 버튼이 오류 없이 정상적으로 처리되는 것을 당연하게 여긴다. 하지만 실제로는 수많은 요청이 동시에 들어오는 상황에서 데이터 정합성을 유지하고, 중복 처리나 누락 없이 결제를 끝까지 안전하게 처리하는 일은 결코 단순하지 않다.

여기서 중요한 것은 단순히 예외 처리를 많이 넣는 것이 아니다. 어떤 실패를 시스템 차원에서 막아야 하는지, 어떤 상태를 기준으로 정합성을 판단할지, 어떤 책임을 어느 계층이 가져가야 하는지를 먼저 정의해야 한다. 다시 말해, 신뢰할 수 있는 시스템은 결국 신뢰를 구현하기 전에 무엇을 지켜야 하는지부터 명확히 정의한 시스템이다.

단 한 번의 실패로도 서비스의 신뢰는 크게 흔들릴 수 있다. 복잡한 비즈니스 로직을 안전한 구조로 추상화하고, 그 당연함을 흔들리지 않게 지켜내는 것. 이것이 철저한 설계가 만들어내는 가장 묵직한 가치다.

추상의 결과물 2: 필터링이 필요 없는 ‘진짜’ 검색

방대한 데이터가 쏟아지는 시대에, 훌륭한 시스템 설계가 돋보이는 또 다른 영역은 정확한 탐색이다.

우리는 종종 검색 결과를 보고도 그것이 내가 진짜 원하던 정보가 맞는지 다시 판단해야 한다. 스크롤을 내리고, 페이지를 넘기고, 머릿속에서 한 번 더 필터링한다. 이런 검색은 결과를 보여주기는 하지만, 사용자의 판단 비용을 줄여주지는 못한다.

반면 잘 설계된 검색 시스템은 다르다. 단순히 많은 결과를 반환하는 것이 아니라, 사용자가 무엇을 찾고 싶어 하는지를 더 정확하게 문제로 정의한다. 사용자가 입력한 키워드 자체보다 그 뒤에 있는 의도를 어떻게 해석할 것인지, 어떤 맥락을 중요하게 보고 어떤 노이즈를 제거할 것인지가 더 중요하다.

좋은 검색은 결국 문제 정의의 품질에서 차이가 난다. 단순한 키워드 매칭 문제로 볼 것인지, 사용자의 탐색 의도를 이해하는 문제로 볼 것인지에 따라 시스템의 구조도 완전히 달라진다. 그리고 이 차이가 검색 결과를 보고 사용자가 한 번 더 필터링해야 하는 과정 자체를 줄여준다.

단순한 코드의 합이 아니라, 데이터와 사용자 의도 사이의 복잡성을 어떻게 정의하고 구조화했는지가 시스템의 수준을 결정한다.

AI 시대에 더 중요해지는 개발자의 역량

물론 구현 역량 자체가 중요하지 않다는 뜻은 아니다. 여전히 구현은 필요하고, 정확하고 안정적인 코드를 만드는 능력은 기본이다. 다만 AI가 구현 속도를 크게 끌어올리는 시대에는, 단순히 빨리 짜는 능력만으로는 차별화되기 어려워진다.

앞으로 개발자에게 더 중요해지는 역량은 다음과 같은 것들일 것이다. 주어진 요청을 그대로 코드로 옮기는 능력보다, 그 요청 뒤에 있는 실제 문제를 파악하는 능력. 표면적인 증상을 보고 바로 구현으로 뛰어드는 것이 아니라, 그것이 정책의 문제인지, 모델링의 문제인지, 시스템 경계의 문제인지 구분하는 능력. 그리고 그렇게 정의한 문제를 여러 제약 속에서도 풀 수 있도록 구조화하는 능력.

결국 좋은 개발자는 구현을 잘하는 사람에 머무르지 않는다. 문제를 더 정확하게 보고, 더 작은 단위로 나누고, 더 적절한 책임 경계를 세워서 시스템이 다룰 수 있는 형태로 바꾸는 사람이다. AI 시대일수록 이 역량은 더 본질적인 경쟁력이 된다.

마치며: 구현을 넘어서 문제를 정의하는 개발자

과거에는 코드가 사람과 기계가 함께 이해할 수 있으면 충분했다. 하지만 이제는 AI라는 새로운 협업 주체가 등장했고, 구현의 많은 부분은 점점 더 빠르게 자동화되고 있다.

이 변화 속에서 개발자의 가치가 사라지는 것은 아니다. 오히려 어디에서 가치가 드러나는지가 더 분명해지고 있다. 기술의 구현 난이도는 낮아지고 있지만, 문제를 발견하고, 그 문제를 정확히 정의하고, 복잡한 현실을 시스템으로 풀 수 있는 구조로 번역하는 일의 중요성은 더 커지고 있다.

AI가 코드를 작성하는 시대일수록, 개발자는 더 깊이 생각해야 한다. 무엇이 진짜 문제인지, 무엇을 단순화해야 하는지, 무엇을 시스템이 책임져야 하는지를 끊임없이 정의해야 한다. 앞으로 개발자가 가져야 할 핵심 역량은 단순한 구현 속도가 아니라, 문제를 올바르게 정의하는 능력이라고 생각한다.

댓글남기기