AI 시대의 소프트웨어 공학
- 2025-04-25
소프트웨어 공학은 1) 소프트웨어 개발은 인간이 하는데, 2) 인력과 시간은 비싼 자원이고, 3) 인간의 지적 활동에는 여러 특수성이 있다는 점을 명시적/암묵적으로 전제하고 있다. 하지만 에이전트 기반 코딩이 발전함에 따라 이 가정들을 상당히 수정할 때가 된 것 같다.
전제
조만간 상황이 아래와 같이 바뀔 것으로 가정해보자.
- 소프트웨어 제작 및 운영 전과정의 비용이 0에 수렴한다.
- AI 에이전트가 소프트웨어 제작 및 운영 과정의 주요 행위자가 된다. 인간은 여러 역할(법적/윤리적 책임자, 감독관, 의사결정권자, 사용자/소비자 등)을 하는 이해당사자로 관여한다.
예상
설계:
- 애자일 방법론 관점에서 과도한 선행 설계란 잘 모르는 상황에서 큰 비용을 들였지만 아직 실제 가치(작동하는 제품)로 변환되지 않았으며 곧 폐기될 가능성이 높은 재고다. 그런데 설계 비용이 0에 수렴한다면? 과도한 선행 설계를 해버리고, 새로운 정보가 생기거나 세상이 변하면 설계를 매번 갱신하면 된다. 물론 당분간은 인간이 설계를 검토하는 비용을 고려해야하겠으나 앞으로는 설계 같은 사소한 일은 굳이 검토할 필요가 없게 될 것.
코드 품질:
- 단기적으로는 AI가 인간을 모방하고 있는 상황이기 때문에 인간이 잘 다루는 코드를 AI도 잘 다룰 것이기 때문에 코드 품질이 중요할 것. (Welcome to the Era of Experience의 구분에 따르면 아직은 “인간 데이터의 시대”이기 때문)
- 장기적으로는 AI가 굳이 인간을 모방할 필요가 없으니 인간 기준의 “품질 좋은 코드”가 어떤 면에선 의미 없을 수 있다. 아예 기계어로 직접 코딩을 해도 이상하지 않다. 굳이 텍스트 기반의 “소스 코드”를 만들고 컴파일 또는 어셈블을 하는 건 기계 관점에선 이상하다. 하지만 이런 상황이 되더라도 여전히 품질 좋은 코드는 중요할텐데, 두 가지 이유가 있다.
- 첫째, 재귀적 분해와 조합, 모듈 간 격리 등의 특성은 인간의 이해가능성과 무관하게 그 자체로 좋은 속성이다. 이건 추측인데 인간의 마음이 재귀적 분해와 조합에 익숙하게끔 진화한 이유도 애초에 세상과 의미있는 상호작용을 하려면 그런 능력이 필요하기 때문일 것. 즉, 재귀적 분해와 조립은 인간 마음에 국한된 특성이 아니라고 생각한다.
- 둘째, 어차피 미래에도 인간이 (AI의 도움을 받아) 소프트웨어 감사를 하긴 해야할텐데(법적/윤리적 책임 관점에서) 이를 위해서는 인간이 이해가능한 코드가 여전히 필요하다. 다만 “품질”의 세세한 기준은 바뀔 수 있겠다. 예를 들면 “읽기가 얼마나 용이한가”가 “수정이 얼마나 용이한가”에 비해 (지금보다 훨씬 더) 중요해진다거나.
소프트웨어 공학과 직접적 관련은 없으나 예상해볼 수 있는 변화들:
- 접근성: 윤리적 의미를 완전히 빼놓고 비즈니스적인 측면만 보면, 소프트웨어 접근성 향상은 롱테일 마켓을 공략할 수단이다. 다만 지금까지는 소프트웨어 개발 비용이 커서 무시했을 뿐. 비용이 0에 수렴하면 이 좋은 시장을 무시할 이유가 없다. 기업이 착해지거나 법이 강화되어서가 아니라 돈이 되니까 세상이 좋아질 것.
- 보안 및 프라이버시: 사건의 기대값은 사건 발생 확률에 해당 사건이 발생했을 때의 가치(혹은 비용)을 곱해서 구해지는데, 한국의 경우 제법 빈번하게 사고가 발생하지만 지불할 비용이 워낙 낮았기 때문에 보안이나 프라이버시 문제를 등한시 했다. 하지만 개발 비용이 0에 수렴하면 이 작은 리스크도 놔둘 이유가 굳이 없겠다. 돈이 되니까 세상이 좋아질 것.