sungyup's.

becoming_a_better_programmer / 부록: 국내 개발자 8인의 이야기 / 2.1 미래 기술의 열쇠, 생성형 AI를 활용한 프로그래머

2.1미래 기술의 열쇠, 생성형 AI를 활용한 프로그래머

베어로보틱스 염재현님의 이야기

TL;DR

생성형 AI의 발전과 프로그래밍 작업의 변화

생성형 AI의 활용은 크게 두 가지다:

  • 핵심 역할: 어떤 앱을 만들어야할지, 어떤 서비스를 제공해야할지 등의 중요한 결정
  • 부가적인 작업: 시간이 걸리는 낮은 수준의 일

염재현님은 이 중 후자를 추구해야한다고 생각한다. 아이디어를 낼 때 AI의 방식을 활용해 참고할 수는 있으나, 분별없이 AI의 결정을 따라서는 하고 싶은 일을 할 수가 없다.

부가적인 작업이란 구체적으로 뭘까? 에러 메시지를 보면서 올바른 코드로 수정하고, API를 올바르게 활용하여 동작하게 하는 일 등 기계적으로 할 수 있는 일이다.

테스트 주도 개발(TDD)

요즘은 주로 생성형 AI를 활용해 구현 코드를 주면 테스트 코드를 작성해주는 솔루션이 나오지만, 이것은 거꾸로 된 것이다. 테스트 코드는 내가 원하는 것이 무엇인지, 어떻게 동작하는것이 옳은지 명시하는 것인데 작성한 코드를 보고 내가 무엇을 원하는지 정해달라고 요청하는 것은 올바른 방향이 아니다.

테스트 코드를 작성하고 그 테스트를 통과하는 구현 코드를 함께 작성하는 것이 테스트 주도 개발이다. 생성형 AI는 모호한 요구 사항에 대해서도 정교하고 복잡하게 코드를 원하는대로 잘 짜줄 수 없다. 다만, 자연어 요구 사항을 기반으로 테스트 코드를 작성하고 이를 바탕으로 구현하는 경우 AI는 충분히 할 수 있다.

테스트 주도 개발이란, 기존의 계획 주도 개발과는 달리 계획과 문서에 의존하지 않는다. 미래에 대한 예측을 차단하고, 지속적인 프로토타입의 완성을 반복하여 그때그때 소단위 요구사항(backlog)을 추가하고 기존의 문제점을 해결해 더 큰 규모의 소프트웨어를 완성하는 개발 방식이다.

소프트웨어 아키텍처와 설계

소프트웨어 서비스들이 부품처럼 활용하기 쉬워지면서, 더 큰 그림에서는 소프트웨어를 설꼐하는 것이 더 중요해진다. 예를 들어, 회원 가입과 로그인 구현은 이제 굉장히 편해졌고 서비스의 핵심에만 집중하면 된다.

다만 설계의 경우 개발하려는 서비스에 따라 다른 서비스들과 다른 점이 반드시 있을 것이고, 단순한 게시판부터 소셜 미디어들이 모두 다른 방식에 최적화되어 있어 같은 설계를 안 쓴다는 사실을 고려하면 소프트웨어 설계가 더 중요해질 것이다. 따라서 이와 관련된 스킬을 갈고 닦아야 한다.

학습과 생산성에 미치는 영향

예전처럼 맨땅에 헤딩하며 공부하던 시절과 달리 이제는 실시간으로 피드백을 받을 수 있다. 주도적이고 비판적으로 수용하며 훈련할 수 있는 환경이 되었으니 학습하기 더 좋아졌다.

맺음말

환경이 바뀌어도 기본적인 개념과 사용자에 대한 이해가 있어야 한다는 점은 변함없다. 훌륭한 프로그래머는 이런 기본을 바탕으로 변화하는 환경에 맞춰 최적의 결과를 내는 사람이 아닐까 한다.