본문 바로가기
IT 공부/이슈

AI는 정말로 개발자를 대체할까? 취준생인 나의 생각..

by exdus3156 2023. 12. 9.

0. 서론: 논의를 어떻게 풀어나갈 것인가

개발자가 되기 위해 공부하는 취준생으로서 인공지능에 대한 이슈는 이제 거부할 수 없는 것 같다. 어떻게든 나름의 정리가 필요하다. 지금도 수많은 개발자와 인공지능 전문가들이 이 주제에 대해 갑론을박을 이어가고 있다.

지금까지 논의된 바에 의하면, 적어도 "현재로서는" 인공지능이 개발자를 대체할 수는 없다고 보는 것이 주류다. 문제는 이 주제 자체가 현재를 논하는 것이 아니라 미래를 논하기 위한 것임을 고려하면, 아직은 대체 못한다는 이 결론은 솔직히 맥이 빠지는 결론이다. 우리가 관심을 가지는 대상은 현재가 아니라 미래다.

개발자가 되고 싶은 나이기에, 사실 인공지능에 대한 말할 수 없는 거부감이 드는 것도 사실이다. 일종의 방어기제다. 근거를 제시하지도 않고 무작정 인공지능은 개발자를 절대! Never! 대체할 수 없다고 강하게 주장하는 개발자는 어느 정도 방어기제가 무의식에 깔려 있다고 나는 생각한다.

또한 이 논의가 항상 "단순 코더들만 대체될 것이다!"라는 식의 결론으로 돌진하기 십상인데, 개인적으로 이런 결론도 나는 좋아하지 않는다. 왜냐하면 이 주장의 배후에는 AI의 발전 방향이 단순 노동이 아니라 AGI(범 인공지능) 개발을 향해서 가고 있다는 점을 무시하기 때문이다.

인공지능 자체는 단순 코더를 대체하기 위한 목적으로 개발되고 있는 것이 아니다. 단순 노동을 겨냥하는 것이 아니라 인간의 능력을 갖춘 AI를 만들려고 하는 것이다. 따라서 '단순 코더만 대체할 것이므로 상관 없다'는 것은 틀린 주장이라기보다는 주제 회피다.

만약 단순 노동을 대체하기 위해 AI를 개발하고 있다면 단순 코더를 대체하는 순간 목적은 완료한 것이다. 하지만 이것은 사실이 아니다. 코더를 대체한들, 어차피 AI의 개발은 아랑곳하지 않고 가속화될 것이다. 따라서 단순 코더를 대체하고 끝날 것이라는 결론은 의미가 없다.

또한이 주장은 인공지능으로 인해 개발 업무 자체가 크게 달라질 수 있다는 점을 종합적으로 고려하지도 않는다. AI의 발전은 개발 업무 자체의 성격을 변화시킬 수도 있다. 그래서 단순 코더와 단순 코더가 아닌 개발자를 가르는 현재의 기준이 그대로 유지될지도 의문이다. 

(그리고 이건 여담이지만 코더니 몽키니 뭐니 하면서 갈라치는 표현을 남발하며 우월 의식을 형성하는 것도 괜시리 불필요한 감정 싸움만 일으킬 뿐이다. 개인적으로 이런 표현들은 지양해야 한다고 생각한다.)

그래서 되도록 객관적인 관점에서 솔직한 마음으로 인공지능에 대해, 그리고 개발자의 미래에 대해 정리하고 싶었다. 물론 개발 실무를 해본 적이 없기 때문에 나의 생각에 대해 실무 개발자 입장에서는 허공을 답보하는 듯한 느낌을 받을 수 있다.

미리 결론을 말하자면, 나는 인공지능이 인간만큼 개발할 수 있다고 해도, 그것이 모든 개발자를 대체할 것인가 여부와 전혀 상관이 없을 것이라는 생각이다. 요약하자면 나는 AI가 개발자를 대체하지 못한다고 본다.

여기서 주의할 점은 나는 인간을 넘어서는 AI 구현 자체는 가능하다고 본다. 물론 내가 AI에 대해 아는 것이 별로 없기 때문에 이 근거는 다소 여론과 경향을 따르고 있다. 하지만 사람들은 AGI의 기술적 실현 여부에만 집중하는 경향이 있다.  AGI가 실현되면 그대로 IT 산업이 끝장난다는 논리다.

그러나 그 AI도 도구일 뿐이다. 스스로 무언가를 하는 것은 아니기 때문에 개발자라는 직업의 대체 여부는 AI의 기술 실현 가능성과 100% 이어지진 않는다. 

 

1. 명령을 정확하게 내리는 능력

만약 소프트웨어를 척척 만들어내는 인공지능이 개발된다면 개발자가 아닌 일반인도 자신이 원하는 것을 척척 만들어낼 수 있을 것이라고 상상한다. 그러나 나는 이 주장은 다소 설득력이 없다고 생각한다.

왜냐하면 소프트웨어를 만드는 인공지능이 개발된다고 해도, 그것에게 명령을 내리는 주체는 반드시 인간이어야 하기 때문이다.

소프트웨어 개발이란 것이 꼭 구현만 말하는 것이 아니다. 물론 개발자의 주된 업무가 코딩인 것은 사실이다. 그러나 그 코딩의 위험(비용)을 줄이기 위해서라도 반드시 필요한 업무가 바로 문제를 정확하게 정의하고 요구사항을 컴퓨팅 관점으로 해석하는 것이다.

명령을 내리는 주체인 인간이 명령을 정확하고 명백하게 풀어쓰지 않으면 인공지능이 아무리 강력해봤자 만들어낼 수 있는 것은 아주 간단한 프로그램이 전부일 것이다. 극단적으로 말해, 예를 들어 "재밌는 게임 만들어줘"라는 질문에 대해 인공지능이 도대체 무엇을 만들어야 하는 것일까?

자연어를 써서 코딩할 수 있다는 것을 마치 컴퓨터에 대해 아무것도 모르는 일반인도 유튜브와 같은 소프트웨어를 만들어낼 수 있다고 생각해서는 안 될 것이다. <유튜브>의 기능과 명세에 대해 정확하게 자연어로 기술할 수 있을까? 쉽지 않다. 기껏해야 유튜브의 겉모양 및 몇 가지 기능이 전부일 것이다.

소프트웨어는 컴퓨터를 잘 모르는 일반인이 쉽게 이해하고 쓸 수 있도록 디자인된다. 즉, 설계 상의 수많은 복잡한 기능을 사용자 인터페이스(UI) 뒤로 숨긴다. 사용자가 이해하는 언어는 UI다. UI를 통해 원하는 기능을 생각하는 것도 힘들지만(유튜브 사례에서 봤듯이), 애초에 UI 뒤에 숨은 본질적인 기능들(네트워크 통신, 암호, 사용자 인증, 보안, 메모리나 CPU 같은 컴퓨팅 자원 사용의 효율 등...) 마저 떠올릴 수 있어야 비로소 소프트웨어를 만들 수 있다.

물론 이것을 자연어로 작성하는 것도 가능하다. 그런데 애초에 이런 요구 사항들을 자연어로 기술할 수 있는 사람이라면..? 그 사람은 애초에 개발자가 아니겠는가!

게다가 이미 프로그래밍 언어는 인간의 언어에 흡사하게 발전해왔다. 프로그래밍 언어의 역사는 사실상 컴파일러의 역사다. 컴파일러가 발전하면서 사람들은 점점 더 인간에게 친숙한 언어로 컴퓨터에게 명령을 내릴 수 있게 되었다. 어셈블리어와 파이썬, 자바스크립트를 비교하면 체감이 된다.

그런데도 왜 개발이 어려운가? 컴파일러가 충분히 발전하지 못해서? 아니다. 완전히 인간의 언어로 코딩하기에는 컴퓨터 공학, 소프트웨어 공학 개념이 극단적인 추상화를 방해하기 때문이다. 쓰레드, 네트워크, 객체, 변수, API, 모듈, ... 등 공학적인 개념은 소프트웨어 제품을 만들기 위해서는 반드시 숙지해야 하는 개념들이다. 

이 개념들은 사라지는 것이 아니다. 이것을 어떻게 일상 언어로 기술할 수 있는가? 오히려 더 불편할 것이다. 

프로그래밍 언어와 컴파일러는 자연어의 친숙함을 자신에게 끌어당겨 코드의 가독성과 편리함을 발전시켰지만, 절대 자연어를 지향한 것은 아니었다. 왜냐하면 (그것이 어려운 것도 있겠지만) 코드는 자연어가 아니라 자연어의 친숙함을 바탕으로 컴퓨터 개념을 정확하게 기술하기 위한 목적으로 발전했기 때문이다.

이미 프로그래밍 언어는 자연어를 지향하는 것이 아니라 컴퓨터에게 명령을 정확하게 내리기 위해 발전해왔다. 아무리 프로그래밍 언어가 자연어에 가깝게 친숙해진다고 하더라도 어느 시점부터는 일상 언어로 기술하기에는 한계가 있다.

큰 규모가 있는 소프트웨어라면 일반인이 컴퓨터 및 소프트웨어 공학 개념을 무시한 채 자연어로만 명령을 구성할 수는 없다고 본다.

 

2. 코드가 사라질 수는 없을 것이다.

설령 일반인이 대충 자연어로 작성한 요구 사항을 AI가 그 사람의 내면까지 척척 파악해서 완전한 소프트웨어를 만들 수 있다고 가정하자. 그럼에도 불구하고 AI라는 인터페이스 뒤로 구현 코드까지 사라진다고 볼 수는 없다.

아무리 AI가 소프트웨어를 척척 만들어준다고 해도, 소프트웨어의 본질은 그림이나 음악과는 다르다. 그림이나 음악과 같은 콘텐츠는 결과를 향유하지만, 소프트웨어는 동작을 담당하기 때문에 내부적으로 무슨 일을 하고 있는 것인지 알아야 한다. 즉, 무슨 일을 어떻게 하고 있는 것인지 알려주는 코드와 문서가 사실 소프트웨어다.

AI에게 자연어로 명령을 내려 어떤 일을 시킬 수 있다면, 그것은 소프트웨어가 아니라 그냥 AI가 일을 해주는 것이다. 즉, 사람들이 AI에게 쉽게 명령을 내려 원하는 기능을 갖춘 프로그램을 얻을 수 있다면, 소프트웨어 제작 개념에서 기능 요청 개념으로 이동한다.

비유하자면, 음악을 만들어달라는 것과 악보를 만들어달라는 것의 차이라 할 수 있겠다. 음악에 대해 모르는 사용자도 AI에게 음악을 만들어달라고 요청할 수 있다. 모차르트 스타일로 최신 아이돌 음악의 오케스트라 버전을 들려 달라거나, 좋아하는 아티스트가 커버한 스타일로 불러달라는 식으로 말이다.

즉, 기능에서 요청 개념으로 이동한다는 것은 무엇(WHAT)을 원하는지 AI에게 요청한다는 것이지, 어떻게(HOW)를 AI에게 요청하는 것이 아니다.

핵심은 어느 규모에 이르면 무엇(WHAT)과 어떻게(HOW)가 완벽하게 분리되지 않는다는 점에 있다. 

객체지향 설계에서 객체는 인터페이스를 통해 서비스를 제공한다. 인터페이스는 충분히 추상화되어 외부 객체가 내부 구현 사항에 일일이 간섭하지 않는 것이 원칙이다. 하지만 객체지향의 이런 설계가 가능한 이유는 객체의 인터페이스는 명확하고 단순하고 작은 규모의 계약에 기반하기 때문이다.

그러나 규모가 커서 복잡한 상황에 대해서는 단순한 인터페이스를 유지할 수 없다. 단 하나의 단순 기능이나 알고리즘이라면 가능하지만, 복잡한 기능들이 종합된 대규모 시스템이라면 불가능에 가깝다. 기계가 못한다는 것이 아니라, 그 기계에게 명령을 내리는 인간에게 불가능하다는 뜻이다.

AI가 아무리 발전해봤자 결국 인간과 상호작용을 해야 한다. (만약 AI가 인간을 매개하지 않고 스스로 무언가 행동을 한다면 개발자의 위기가 아니라 인류 전체가 위험하지 않을까..?) 완전히 새롭고 창의적이고 복잡한 규모의 무언가를 개발해야 하는 비즈니스 상황에서 WHAT은 HOW를 통제해야 달성 가능한 것이다.

물론 인간이 자신이 원하는 것이 무엇인지 정확하게 파악할 필요가 없다면 적당한 콘텐츠, 적당한 코드 정도로 충분할 것이다. 그러나 개발자라는 직업은 근본이 비즈니스이며, 따라서 사용자에게 제공할 기술이 무엇인지 아주 정확하고 세밀하게 파악해야 한다.

일반 사용자가 자급자족을 위해 그림이든 음악이든 소프트웨어든 무언가를 요청하는 상황에서는 직감적이고 추상적인 표현으로 AI에게 콘텐츠를 요청해도 충분할 것이다. 애초에 일반인이 혼자서 AI를 통해 요청하기 원하는 것은 그렇게 복잡하고 심각한 무언가가 아니다.

실제로 나는 그림 AI를 써본 적이 있었는데, 손흥민이 레알 마드리드 유니폼 입는 것을 그리라고 했었다. 실제로 완벽하진 않았지만 꽤 만족할만한 그림이 나왔다. 하지만 나는 디테일한 부분에는 관심이 없었다. 레알의 유니폼이 어떻게 생겨야 하는지, 정확히 어떤 상황인지, 경기 중인지 아닌지, 그런 것은 관심이 없었다. 그럼에도 그림의 퀄리티에 적당히 만족했다. 

하지만 비즈니스를 해야 하는 사람이라면? 겨우 "적당함" 수준으로 비즈니스가 될까? 

조금 더 좋은 퀄리티를 위해서는 내가 원하는 것이 무엇인지 아주 정확하고 세밀하게 파악할 수 있어야 한다. 그리고 이것은 필연적으로 HOW를 통제해 WHAT의 퀄리티는 높이는 작업이다.

소프트웨어도 마찬가지라고 나는 생각한다. AI가 발전하면 일반인이 쉽게 달성할 수 있는 요구 사항 정도로는 더 이상 비즈니스가 불가능할 것이다. 작업의 복잡도와 정밀도를 높게 유지해야 가능한 제품만이 시장의 인정을 받을 것이다.

이것은 HOW를 정밀 조정하는 과정이다. 따라서 소프트웨어의 HOW를 담당하는 문서인 코드는 사라질 수 없다. 더더욱 높은 가독성과 클린 코드를 만족하는 코드를 명령할 수 있는 개발자의 능력이 훨씬 더 요구될지도 모른다.

어쩌면 자바, C#, 파이썬, 자바스크립트를 뛰어 넘는 가독성을 갖춘, AI 개발 트렌드에 맞는 멋진 프로그래밍 언어가 개발될 수도 있다. 아마 이 언어는 작성을 위한 언어가 아니라 읽기에 최적화된 언어일 것이다. 그러나 그럼에도 불구하고 이 언어도 코드다. 컴퓨터와 소프트웨어 공학 개념이 잔뜩 묻은 코드라는 말이다.

 

3. 결론

결론을 요약하겠다. 나는 인간 개발자를 뛰어 넘는 AI가 가능하다고 믿는다. 그러나 이것이 곧 인간 개발자를 대체할 것이라고 보진 않는다. 오히려 AI가 생성한 코드를 읽고 해석하고 조정할 수 있는 정확한 명령을 기술할 수 있는 개발자에 대한 수요가 높아질 것이라고 본다.

간단한 프로그램은 더 이상 개발자가 개발할 필요가 없다. 이 간단함의 범주는 미래에는 꽤 높아질 것이다. 지금 어렵다고 생각하는 프로그램도 AI가 간단히 개발할 수도 있다. 

그러나 그만큼 시장에 나오는 소프트웨어는 훨씬 더 복잡하고 규모가 상당한 프로젝트가 될 것이다.

나는 이런 이유로 AI가 꽤 희망적일 수도 있다는 생각이 든다. 개발자라면 잘 알지 않을까? 생각보다 괜찮고 멋진 소프트웨어를 개발하는데 시간과 비용이 엄청나다는 사실을 말이다.

개인적으로 나는 이 부분에 있어 상당한 믿음을 가지고 있는데, 개발자 인건비 등 개발 자체의 비용 문제로 인해 개발자들이 마음에 품은 멋진 소프트웨어들이 세상의 빛을 보지 못하고 사라지거나 바스라드는 것이 90%는 넘을 것이다.

개발자가 대체될 것이라는 관점은 한편으로는 현재의 소프트웨어가 최선이라고 여기는 관점이 깔려 있다. 그러나 아직 멋진 소프트웨어는 세상에 나오지 않은 것이 더 많다. 정말이다. 많은 개발자들이 한 때는 마음 속에 멋진 소프트웨어에 대한 구상을 해본 추억이 있을 것이다. 그리고 실제 개발을 해보면서 멋진 소프트웨어라는 것이 얼마나 시간과 비용이 많이 드는 작업인지 깨달았을 것이다.

소프트웨어는 아직 나올 것이 훨씬 더 많다. 따라서 AI가 지원해줬을 때 더 혁신적이고 뛰어난 제품이 우리를 기다리고 있을 것이다. 

 

나는 AI가 발전할수록 코딩 숙련도보다는 조금 더 개념적이고 이론적인 부분이 더 중요하다고 생각한다. 물론 이런 관점은 취업 시장에서 별로 인기가 없다는 것을 잘 안다. 취업 시장이 원하는 인재는 최신 기술을 토대로 코드를 빠르게 생산하는 사람을 원한다.

다만 이런 능력이 이제는 AI에 의해 대체될 것이다. 아마 개발자들이 단순 코더들은 대체될 것이라고 주장하는 이유가 여기에 있을 것이다. 물론 이 주장은 AI에 의한 개발자 대체의 논의 전체를 다루지 않기 때문에 내가 좋아하는 답은 아니지만...

"나는 단순 코더가 아니기 때문에 괜찮다!" 라고 주장하고 논의를 끝내는 것은 정말 위험하다고 생각한다. AI 발전이 분명히 단순 노동이 아니라 인간 전체를 향하고 있다는 점을 고려한다면, 내 직업의 미래는 어떻게 될 것인지 진지하게 생각해야 할 것이다.