AI 시대의 소프트웨어 개발 주기(SDLC)와 엔지니어의 역할

AI 시대의 소프트웨어 개발 주기와 이에 대한 개인적인 고찰을 정리해 보았습니다.

소프트웨어 개발 주기 (Software Development Life-Cycle, SDLC)

image

일반적인 소프트웨어 개발은 다음의 5단계를 거칩니다.

  1. 요구사항
  2. 설계
  3. 구현
  4. 검증
  5. 유지보수

이 전통적인 주기가 AI 시대에는 어떻게 변화하고 있는지 각 단계별로 살펴보겠다.

1. 요구사항 (Requirement)

전통적인 SW 개발에서도 자연어에 의존할 수 밖에 없는 단계이다. 요구사항의 정확한 분석과 명료한 표현이 좋은 프롬프트를 유도한다.

*특히 기능적인 부분 외에도 성능, 보안 등 비기능 속성에 대한 깊은 이해가 중요해질 것이다.

2. 설계 (Design)

소프트웨어 아키텍처 (Software Architecture)

전체 시스템을 구성하는 요소를 정의하고, 해당 요소들 간의 구조적인 관계를 수립하는 과정이다.

아키텍처 설계 능력은 앞으로 소프트웨어 엔지니어에게 가장 많이 요구될 기술로 예상된다.

“에이전트가 할 일을 계획하는 데 시간을 많이 써라 / 대부분의 코드는 지루한 데이터 변환 작업이다. 시스템 설계에 초점을 맞춰라” - 피터 스타인버거(OpenClaw 개발자)

3. 구현 (Implementation)

노코드의 시대가 올 것인가?

과거에 이미 기계어에서 고차원 언어(C, Java, Python 등)로 추상화를 높인 전적이 있다.

컴퓨터보다 인간이 이해하기 더 쉬운 언어로 프로그래밍의 재료가 바뀐다는 점에서 이전에 경험해 본 추상화이다.

엄밀하지 않은 자연어를 이용해 LLM으로 프로그래밍을 한다는 점에서는 이전과 근본적으로 다른 추상화이지만, 노코드의 시대가 오더라도 이상하지 않을 것으로 예상한다.

“The hottest new programming language is English” (가장 핫한 새로운 프로그래밍 언어는 영어다) - Andrej Karpathy(전 테슬라 AI 책임자이자 OpenAI 공동 창립자)

“I ship code I don’t read” (내가 읽어보지 않은 코드도 배포한다) - 피터 스타인버거(OpenClaw 개발자)

4. 검증 (Verification)

닫힌 검증 루프는 에이전트 자동화를 위한 필수 요소이다.

자동 검증 루프가 존재하면 에이전트는 성공할 때까지 계속 시도할 수 있다.

*자동화된 검증의 역설 : Oracle Problem

  1. 테스팅은 결함의 존재를 밝힐 수는 있지만 무결함을 증명할 수 없다.
  2. 가능한 많은 입력을 이용해 테스트를 수행하려면 자동화된 오라클이 필요하다.
  3. 완전 자동화된 오라클은 주어진 입력에 대한 올바른 출력값을 알고 있어서, 실행 결과를 검증할 수 있다.
  4. 완전 자동화된 오라클이 있다면 애초에 왜 프로그램을 작성해야 하는가?

에이전트 주도의 개발에서 테스트 코드는 누가 작성하는가?

5. 유지보수 (Maintenance)

유지보수, 또는 소프트웨어의 진화(Evolution)는 장시간에 걸쳐 진행됐다.

유지보수가 중요한 이유 : 이미 개발 비용을 지불한 소프트웨어이기 때문

  • 결함을 찾을 때마다 새로 개발하는 것보다 한 번 개발한 소프트웨어를 보수해가며 운용하는 것이 더 저렴하기 때문

코드 사용 빈도에 따른 유효기간의 스펙트럼

  1. 한 두 번만 사용되는 간단한 스크립트 : 생성한 뒤 검증 없이 사용 -> 비용이 0에 가까움 -> 유지보수 x
  2. 기반 시설 운용에 사용하고 안전 필수(safety critical) 시스템 : 검증 필수 -> 비용 발생 -> 유지보수 O

만약 유지보수 비용과 새로 작성하는 비용 사이에 큰 차이가 없다면 그 의미를 생각해볼 법하지만, 아직까지는 새로 작성하는 것보다 유지보수가 중요하다고 생각한다.

결론

개발자들이 개발 기간을 확보하기 위해 사용되었던 애자일 기법은 AI로 인해 점점 의미가 없어지고 있다.

결국은 요구사항을 명확하게 정리하고 문서화하는 것이 중요해질 거라 생각한다.