본문 바로가기
생각 정리

AI 시대에서 개발자로서 살아남기 위한 고찰 (feat. 문제해결력)

by NewCodes 2025. 5. 31.

 

안녕하세요! NewCodes입니다!

 

 

요새 AI의 발전이 너무 빠르다.

 

https://www.magicaiprompts.com/blog/vibe-coding-ai-programming

 

요새는 바이브 코딩이라는 새로운 패러다임이 생기기도 했다.

이젠 자연어로도 코딩할 수 있는 시대이다.

 

 

솔직히 프로그래밍을 공부하고 있는 나의 입장으로서는

이러한 발전이 신기하면서도, 

마음이 살짝은 불편하다.

 

이렇게 AI가 잘하면 내가 지금 공부하는 게 의미가 있을까?

미래에 대체될지도 모르는 직업에 괜히 시간을 쏟는 게 아닐까?

하는 생각이 스멀스멀 올라오곤 한다.

 

그럴 때마다 저만의 합리화(?)로 이 생각을 누르곤 했다.

 

이제는 조금 더 확실하게 누르려고 이 글을 써본다.

 

 

AI 시대의 개발자는 어떤 모습이어야 하는지,

어떻게 살아남을 수 있는지를 정리해보고자 한다.

 

이 글을 쓰기 위해 한 달 전부터

조금씩 자주 AI에 대한 생각을 정리하곤 했다.

 

시작해보자!

 


🚀 AI 시대의 개발자는 어떤 모습이어야 할까? 

두 가지 그림을 살펴보자. 

출처: Dall-E, 스톡셔터

 

내가 생각하는 AI 시대 개발자의 이상적인 모습은 왼쪽이다. 반면, A-Z까지 AI에게 맡기는 오른쪽 그림은 내가 생각하는 모습은 아니다. 

 

온전한 AGI가 나오지 않는 이상, 개발자에게 많은 제어권과 주도권이 주어져야 한다.

 

AI가 잘할 수 있는 분야는 한정되어 있고, 이를 어떻게 활용하는지가 관건이기 때문이다. 지금껏 대부분의 AI는 딥러닝 기반이기에 패턴화된 사고에 능하다. 즉, 학습 데이터가 많은 분야에 대해서는 인간이 한 것보다 만족스러운 결과물이 나올 때가 많다. 그것도 정말 빠르게!

 

반면에 학습 데이터가 적거나 퀄리티가 낮은 분야에 대해서는 취약하다. 또, AI는 자연어를 통해서 소통하기에 정말 구체적인 지시를 하기 어렵다. 그렇기에 중요한 결정들을 AI가 하게 되면서 내가 생각한 것과 다른 결과물이 나올 수 있다. 

 

이렇게 AI가 잘하고 못하는 일은 명확하기에
AI를 어느 상황에서 투입하고 뺄지,
무슨 성격의 AI를 투입할지,
어떤 식으로 프롬프팅할지 등은
온전히 개발자의 몫이다.

 

 

야구 감독의 역할과도 유사하다. 야구 감독은 팀 승리라는 목표를 위해 작전을 짠다. 그 작전에 맞게 선수 라인업을 구성한다. 또, 게임 중에 어떤 상황에서 투수를 교체할지, 대타를 낼지를 판단해야 한다. 

 

즉, 'AI 시대에서도 개발자는 여전히 능동적인 존재'여야 한다. 이를 확실히 기억해두자. 

 

* 참고로 내가 생각하는 온전한 AGI란 거의 모든 면에서 인간의 역량을 뛰어넘으며, 인건비보다 저렴한 비용으로 제공될 수 있는 최적화된 AI이다. 기술의 발전 속도를 고려했을 때 이는 향후 몇 십 년간은 어려울 거라고 본다. 또, 윤리적인 문제도 피할 수 없기에 아직 한참 시간이 남았을 것이다.

 


🎯 AI 시대에도 변하지 않는 개발자에게 가장 중요한 역량 

출처: Dall-E

 

이러한 모습의 개발자가 되기 위해 가장 중요한 역량은 무엇일까? 

 

바로 문제해결력이다. 

 

개발자를 한 문장으로 규정하자면 '소프트웨어를 통해 문제를 해결하는 사람'이다. 이 직업은 당연 문제해결력이 가장 중요하다.

 

문제해결력이란 말 그대로 문제를 해결하는 능력이며, 이 능력은 여러 역량의 집합체이다. 여러 역량 중에서도 특히 프로그래밍 기본기가 가장 중요하다. 

 

문제해결력에 대해 더욱 깊게 이해하기 위해 우선 '문제'에 대해 알아보자. 

 

개발자가 만나는 문제

개발자는 어떤 문제를 만나게 될까? 작년에 네이버 부스트캠프 웹모바일 9기를 하면서 만났던 여러 문제들을 정리해보자. 주로 그룹프로젝트 때를 중심으로 적어보겠다. 

 

https://github.com/boostcampwm-2024/web10-QuizGround

 

  1. 한 게임방에 여러 인원이 있을 때, 캐릭터 이동 API latency가 너무 늦어지는 문제
  2. 분산 환경에서 세션 데이터가 불일치하는 문제
  3. 설계한 부하테스트를 실행하려 하는데 생각했던 시나리오처럼 실행되지 않는 문제

6주 만에 다양한 문제들이 있었다. 물론 더욱 작은 단위의 문제들도 많았다. 코드 문법 에러, 테스트 코드 실행이 안 되는 문제, 어떤 라이브러리를 사용할지 등등 하루에 수없이도 많은 문제들과 선택의 순간들이 있었다. 

 

그러나 특히 아래와 같은 3가지 문제는 쉽게 해결하기가 어려웠다. 그 이유는 다양했다.

 

  1. 첫 번째 문제에서는 API의 병목이 도대체 어디서 발생하는지 파악하기 어려웠다.
    즉, 무슨 문제인지 정확히 정의하기가 어려웠다. 
  2. 두 번째 문제에서는 Socket.io 앱을 부하테스트하는 양질의 자료가 없어 시행착오를 많이 겪었다. 
    즉, 문제 해결 플랜을 세우며 설계하는 게 어려웠다.
  3. 세 번째 문제에서는 Redis pub/sub 관련한 코드를 짤 때 비동기의 흐름을 파악하는 게 직관적이지 않아 기능 구현하거나 디버깅하는 게 어려웠다.
    즉, 해결 계획을 실행하는 것 자체가 어려웠다. 

이처럼 문제를 풀기 어려운 이유는 다양하다. 문제를 해결한다는 건 단순한 과정이 아니라는 걸 알 수 있다. 

 

AI가 문제를 대신 해결해 줄 수 있을까? 

위 3가지 문제의 공통점은 AI에게 온전히 문제를 맡길 수 없다는 것이다.

  1. 첫 번째 문제에서는 무슨 문제인지 정확히 정의되지도 않았는데 AI에게 모든 걸 맡길 순 없다.
  2. 두 번째 문제에서는 AI 또한 이에 대한 양질의 학습 데이터가 부족했기에 할루시네이션이 자주 등장했었다.
  3. 세 번째 문제에서는 만들고자 하는 웹서비스의 핵심 로직이었기에 온전히 맡기기엔 조심스러웠고, 디테일한 부분을 하나하나 다 텍스트로 전달하기 어려웠다. 

AI는 어디에나 쓸 수 있는 만병통치약은 아니다.

출처: 메이플스토리

 

복잡한 문제나 새로운 문제를 푸는 것, 문제를 정의하는 것에는 AI가 취약하다. 반면에 단순하고 반복적인 문제는 AI에게 맡기자. 이렇게 세이브한 시간으로 복잡한 문제, 새로운 문제를 푸는 데 더욱 집중하자.

 


🧩 문제해결력에 대한 고찰 

문제해결력은 여러 역량의 집합체

문제는 어떠한 과정으로 해결되는 걸까? 위 3가지 문제 해결 경험을 통해 나의 문제 해결 과정을 추상화해보자.

문제 해결 6단계

 

각 단계에서 어떤 역량이 필요한지 생각해보자. 

 

1, 2단계는 컴퓨터 과학 지식과 도메인 등의 배경지식이 필수적으로 필요하다.

배경지식이 있어야 무슨 문제인지를 잘 정의할 수 있다. 아까 언급했던 첫 번째 문제를 가져와보자. API의 병목이 도대체 어디서 발생하는지 파악하기 까다로워서 문제 정의를 하기 어려웠던 문제이다.

 

이때 내가 병목을 파악하기 어려웠던 이유는 컴퓨터 과학 지식이 부족했기 때문이다. Network I/O의 동작과정과 오버헤드에 대해 잘 모르고 있었다. Network I/O는 컨텍스트 스위칭, 커널로의 데이터 복사로 인해 비용이 비싼 작업이다. 이를 제대로 이해하고 인지하고 있었다면 병목의 원인을 더욱 빠르게 찾을 수 있었을 것이다. 

 

이걸 잘 모르고 있었기 때문에 해당 API 시스템에서 사용 중인 Redis, NginX, Node.js의 libuv, 클라우드 서버의 Network 대역폭 등에 대해서 하나하나 다 의심해봐야 했다. 마치 나침반도 없이 목적지로 가려고 했던 것과도 같다. 

 

컴퓨터 과학 지식은 이렇듯 문제 정의, 원인 추정에서 나침반과 같은 역할을 한다. 이걸 알아야 AI에게 뭘 질문할지도 알 수 있다. 나는 그 당시에 어떤 부분이 병목일지 감도 안 왔기에 AI에게 좋은 질문을 하지 못했고, 그로 인해 답변 또한 시원찮았던 기억이 있다. 

 

이 문제 해결 경험 이후 나는 Network I/O에 대해서 깊게 공부해보기도 했다. 

 

 

1초에 80,000번 Network I/O를 하면 생기는 병목을 분석해보자!

안녕하세요! NewCodes입니다! 저번 글에서 실시간 퀴즈 게임 프로젝트에 대해부하테스트와 성능최적화 글을 다루었습니다. Artillery를 통한 Socket.io 게임 서버 부하테스트 경험기실시간 게임 서버

newcodes.tistory.com

 

그러나 문제 정의는 꼭 컴퓨터 과학 지식으로만 해결되는 건 아니다. 내가 제시한 케이스는 정말 하나의 사례일 뿐이다. 때로는 도메인 지식이 더 중요할 수 있고, 사용자 입장에서 생각하는 게 문제 정의의 키 포인트일 수도 있다. 

 

 

3, 4단계는 지식에 대한 이해를 바탕으로 한 활용 능력, 사고력, 협업 능력이 강조된다. 

설계 단계에서는 알고 있는 지식을 활용할 줄 아는 게 조금 더 강조된다. 아까 언급했던 두 번째 문제를 가져와보자. Socket.io 앱을 부하테스트하는 양질의 자료가 없어 풀이 설계에 어려움을 많이 겪은 문제였다. 부하테스트에서의 시나리오, 도구, 메트릭 등에 대해서 모르는 상태에서 출발하다보니 많은 시행착오가 있었다. 그래서 풀이를 하면서도 자꾸 설계를 고치는 일이 발생했었던 것이다. 부하테스트에 대한 지식과 이를 활용할 수 있는 능력이 있었다면, 나는 손쉽게 튼튼한 풀이 설계를 할 수 있었을 것이다. 

 

또, 협업 능력을 꼽은 이유는 간단하다. 비슷한 문제를 이미 해결한 사람이 있을 수도 있고, 타인은 문제를 다른 각도에서 바라보기에 새로운 인사이트가 나올 수 있기 때문이다. 그리고 누구나 조금 더 잘 알고 있는 분야가 있기 마련이다. 해결 설계에서부터 주변 사람이나 팀원에게 적극적으로 물어보는 것이 좋다. 

 

 

5단계는 코드를 읽고 쓸 줄 아는 능력이 필요하다. 

본격적으로 개발자가 문제를 해결하기 위해서는 코드를 만져야 한다. 세 번째 문제를 가져와보자. Redis pub/sub 관련한 코드를 짤 때 비동기의 흐름을 파악하는 게 직관적이지 않아 코드 작성 전 설계에 어려움을 겪었던 문제이다. 비동기, 논블로킹이란 개념에 대해서 알고는 있었지만 이를 제대로 활용할 줄 아는 능력은 조금 부족했었다. 기존에 있던 코드를 읽고 그림으로 시각화를 하면서 흐름을 파악하고 코드를 머리 굴리며 작성해서 극복했던 경험이 있다. 

 

 

이처럼 문제해결력은 생각보다 복잡한 능력이다.

문제해결력

 

딱 한 가지로 규정되기 쉽지 않고, 여러 역량이 복합적으로 작용되어 발휘되는 능력이다. 컴퓨터 과학, 도메인, 협업, 코드를 읽고 쓰는 능력 등이 있다. 여기서 언급되진 않았지만 각 문제 상황마다 크리티컬하게 적용되는 역량도 있을 것이다. 

 

결국은 기본기

문제해결력을 위한 여러 역량이 있지만, 그중에서도 가장 중요한 건 프로그래밍 기본기이다. 내가 생각하는 기본기란 컴퓨터 과학 지식을 이해하고, 이를 바탕으로 사고할 수 있고, 최종적으로 코드를 읽고 쓸 줄 아는 능력이다. 

  • Computer Science를 이해하고 적용할 수 있는 능력
  • Programming Language를 읽고 쓸 수 있는 능력

이 기본기가 잘 닦아져 있지 않다면, 문제를 해결하기까지 시간이 굉장히 오래 걸리거나, 문제를 엉뚱한 방향으로 해결하게 될 수 있다. 내가 많이 그랬었기 때문이다 ㅎㅎ 

 

물론, 급변하는 AI 시대 속에서 기본기에 집중하기 어려울 수 있다. 당장 나보다 컴퓨터를 잘 알고 코드를 잘 쓰는 AI가 있는데도 작은 단계부터 하나하나 배워나간다는 건 심리적으로 힘들 수 있다. 하지만 그럼에도 거쳐야 하는 과정이다. 위에서 살펴봤듯이 AI는 만병통치약이 아니라는 걸 잘 기억하자. 

 

특히, 문제 정의 

앞에서 언급했던 문제 해결 절차 중 AI에게 가장 도움을 받기 힘든 단계는 몇 단계일까? 바로 1단계이다.

 

왜 1단계일까? 우리가 만나는 문제는 친절하지 않다. 현실 세계의 문제는 알고리즘 문제처럼 구체적이지 않다. 이러한 문제를 정확히 정의하기 위해서는 여러 맥락이 필요하다. 사용자의 입장에서 생각해봐야 하고, 함께 개발하는 사람과 소통도 필요하다. 이와 함께 컴퓨터 과학 지식과 도메인에 대한 이해가 필요하다. 때로는 전체 시스템에 대한 이해가 필요할 수도 있다. 

 

AI가 문제 정의를 위한 이러한 모든 맥락을 고려하긴 힘들다. 그렇기에 문제를 잘 정의하는 능력은 AI 시대에서 상대적으로 더욱 중요해졌다. 문제 해결을 하는 시간 자체는 AI 덕분에 비약적으로 빨라지기도 했기에 이제는 어떤 문제에 포커스를 두는지가 관건이다. 

 

또한, 1단계가 중요한 이유는 하나가 더 있다. 문제를 잘못 정의했을 때, 2~6단계에서 중간에 알아채면 그걸 고치는 비용이 너무 커진다. 그래서 빠르고 효과적인 문제 해결을 위해서는 초반에 어떤 문제인지 정의하기 위해 시간을 충분하게 투자할 필요가 있다. 

 

그러면 문제 정의를 잘하기 위해서는 어떻게 무엇을 해야 할까? 

  • 모호한 요구사항을 구체적으로 뽑아내기
  • 배경지식(컴퓨터 및 도메인 등), 맥락 꼼꼼히 쌓아두기
  • 동료와 함께 소통하기 
  • 관점을 바꿔 사용자 입장에서 생각하기
  • 이게 왜 문제이며 왜 해결해야 하는지 설명하기
  • 고정관념에서 벗어나기
  • Why? 질문하며 깊게 파고들어 진짜 문제를 찾기 
  • 문제 상황을 구조화, 시각화하여 정리하기 

내가 생각하기에는 이 정도가 있다. 문제 정의를 하는 것 또한 단순한 일은 아니라는 걸 알 수 있다. 공을 많이 들여야 하는 영역임을 인지하고, 시간을 많이 투자하자. 

 


💁🏻‍♂️ 그래서 앞으로 나의 방향은?

내가 하고 있는 것, 할 것

AI 시대에서 개발자로서 살아남기 위해, 구체적으로 나는 무엇을 실천할 것인가? 현재 군대에 있는 나로서 무엇을 할 수 있을까? 

  • 매일 20분 이상 글쓰기 -> CS 지식 학습 및 정리
  • 매일 20분 이상 책읽기 -> 프로그래밍 기본기 쌓기 
  • 매일 알고리즘 문제 풀기 -> 코드를 읽고 쓰는 순수 피지컬 기르기

위 세 가지는 한 달 전부터 꾸준히 하고 있다. 아마 제대하기 전까지는 계속해서 이어나가고 싶은 습관이다. 현재 읽고 있는 책은 Java Effective이다. 다음은 데이터 중심 애플리케이션 설계를 읽어볼 듯하다. 

 

아래 두 가지는 현재 잘하고 있지 못하지만, 앞으로 잘하고 싶은 것이다. 

  • 개인 프로젝트 진행 -> 문제해결력 기르기 
  • AI에 계속해서 관심을 가지고 사용하기 -> AI 적시적소 활용 능력 키우기

요새 글쓰기 스터디를 하다보니 개인 프로젝트를 할 시간이 거의 없다 ㅠㅠ 자투리 시간을 활용하면 할 수 있긴 한데 자꾸 보상심리로 쉬게 되는 것 같다. 하루 10분이라도 프로젝트를 조금이라도 우선 시작해보자. 또 프로젝트를 하면서 새로운 AI 기능을 활용해보자! 

 

지금 당장은 아니지만, 장기적으로 하고 싶은 건 아래와 같다. 

  • 함께 프로젝트 하며 협업 능력 기르기
  • 낯설고 어려운 분야에 즐기며 도전하기 
  • 인문학, 교양 등 다양한 분야 지식 쌓기 

AI 시대에 살아남기 위해서 위 3가지도 정말 중요하다. 지금은 최대한 기본기에 집중하고, 이는 군 전역 이후부터 본격적으로 해보고자 한다. 

 

+) AI를 개발 학습에 활용하는 tip

내 경험을 바탕으로 AI를 이렇게 써보니 좋았던 tip들을 요약해봤다.

  1. "너가 대신 작성해줘"가 아니라 "내가 작성한 이 코드 리뷰해줘."
  2. "이게 왜 이렇게 되는거야?"가 아니라 "내 생각은 이건 이러한 이유로 이렇게 되는데 어떻게 생각해?"
  3. "내가 학습하고 정리해본 건데 이거에 대해서 혹시틀린 내용이 있다면 알려줘."
  4. "나는 이 문제를 이렇게 풀었는데, 혹시 다른 방법도 있을까?"
  5. "이 개념은 프로젝트 할 때 어떤 상황에서 활용할 수 있을까?"

핵심은 AI를 답지처럼 쓰는 게 아니라, 나를 훈련시키는 트레이너라고 생각하고 쓰자!

 


📍 정리

3줄 요약

  1. AI 시대에도 개발자는 제어권을 가진 능동적인 모습이어야 한다. 
  2. AI로 인해 아낀 시간을 통해 더욱 복잡한 문제, 새로운 문제를 푸는 것에 집중하자. 
  3. 본질은 변하지 않는다. 문제 해결을 위해 스스로 어떤 역량을 어떻게 키울지 계속해서 고민하자. 

 

나는 AI를 이렇게 받아들이기로 했다. 

나의 생산성을 극대화해주는 친구가 생겼다. 

이 친구와 계속해서 친밀한 관계를 유지할 수 있도록 매일 관심을 가지자.

동시에 나만의 경쟁력을 키우기 위해 계속해서 노력하자. 

 

내가 개발자가 되고 싶었던 이유는 분명했다.

  1. 나의 생각이 현실이 되어가는 게 재미있었다.
  2. 기술적인 고민을 하며 몰입하여 개발하는 동안 시간 가는 줄 몰랐다.
  3. 논리적으로 설계하고 사고하여 실행하는 건 내가 잘할 수 있는 일이었다. 

AI가 2번 이유를 빼앗아가진 않을까 두렵기도 했다. 하지만, 직접 경험해보니 아직은 아니다. Not Today!! 

 

 

미래에 파일럿은 사라지게 될 거란 말에 매버릭은 이렇게 답한다. 

https://tenor.com/ko/view/top-gun-pete-mitchell-maybe-so-sir-but-not-today-top-gun-maverick-gif-25846632

 

레퍼런스

반응형