1.1.2 AI 기반 소프트웨어 개발(Software 2.0)의 부상: 데이터와 확률적 모델링
명시적인 로직(Explicit Logic)에 전적으로 의존하던 소프트웨어 1.0 체계는 검색 엔진, 자율주행, 자연어 처리(NLP; Natural Language Processing), 복잡한 패턴 인식 등 인지적이고 비정형적인 요구사항이 폭발적으로 증가함에 따라 근본적인 한계에 직면했다. 이러한 상황을 타개하기 위해 등장한 개념이 바로 프로그래머 안드레이 카파시(Andrej Karpathy)가 주창한 구도인 ’소프트웨어 2.0(Software 2.0)’이다. 이 새로운 개발 패러다임에서 문제 해결의 중심축은 개발자의 머릿속에서 도출된 하향식(Top-Down) 알고리즘 설계에서, 대규모 데이터와 수학적 최적화에 기반한 상향식(Bottom-Up) 확률적 모델링(Probabilistic Modeling)으로 이동한다.
1. 데이터 주도 접근법(Data-Driven Approach)의 본질
소프트웨어 2.0 시스템에서는 개발자가 명시적으로 프로그램의 동작 방식을 행 단위(Line-by-Line)로 코딩하지 않는다. 그 대신, 문제의 목적 함수(Objective Function)를 정의하고, 해당 문제를 해결하기 위해 필수적인 ’이상적인 동작(Ideal Behavior)’을 대규모 데이터 집합(Dataset)의 형태로 나열한다. 시스템은 이 데이터를 훈련(Training)하여 입력과 출력 간의 잠재적 관계를 스스로 근사(Approximate)해 낸다.
예를 들어, “사진 속에 고양이가 있는지 판별하라“는 요구사항을 소프트웨어 1.0 방식으로 구현하려면 귀의 모양, 솜털의 텍스처, 눈의 형태 등을 검사하는 수만 개의 코너 케이스(Corner Case)를 조건문으로 작성해야 하지만, 이는 결코 완벽할 수 없다. 반면 소프트웨어 2.0 방식에서는 수백만 장의 고양이 사진과 고양이가 아닌 사진을 머신러닝 알고리즘에 제공(Feed)한다. 컴퓨터는 스스로 역전파(Backpropagation)와 경사하강법(Gradient Descent)을 통해 인공 신경망(ANN; Artificial Neural Network) 내부의 수많은 가중치(Weights) 매트릭스를 업데이트하며 최적의 분류 임계값을 도출해낸다.
이 과정에서 소프트웨어의 소스 코드(Source Code)는 더 이상 인간이 읽을 수 있는 제어 논리(Control Logic)가 아니라, 수십억 개의 부동 소수점(Floating-Point Numbers)으로 이루어진 모델 파라미터(Model Parameters)로 그 형태가 완전히 대체된다.
2. 확률적 모델링(Probabilistic Modeling)과 통계적 추론
이러한 데이터 기반 학습 구조는 본질적으로 소프트웨어의 동작을 결정론(Determinism)에서 확률론(Probabilism)의 영역으로 진입시킨다. 모델의 가중치는 데이터 속에 숨어있는 패턴의 통계적 분포를 반영하고 있을 뿐이며, 절대로 절대적인 수학적 참/거짓 판단을 보장하지 않기 때문이다.
소프트웨어 2.0 시스템 체제 하에서, 대형 언어 모델(LLM; Large Language Model)에 프롬프트를 입력하면 다음과 같은 확률적 텍스트 생성 파이프라인(Probabilistic Text Generation Pipeline)을 거친다.
graph TD
A[입력 텍스트 Prompt] --> B[토크나이저 Tokenizer]
B --> C[토큰 임베딩 Token Embedding & Position Encoding]
C --> D[트랜스포머 어텐션 레이어 Transformer Attention Layers]
D --> E[소프트맥스 함수 Softmax Function 적용]
E --> F{다음 토큰에 대한 확률 분포 Probabilistic Distribution}
F -- 샘플링 Top-P / Temperature --> G[선택된 다음 토큰 Selected Token]
G --> H[출력 반환 Output Generation]
style F fill:#ffe0b2,stroke:#ff9800,stroke-width:2px;
style G fill:#ffe0b2,stroke:#ff9800,stroke-width:2px;
위 도표의 ‘소프트맥스(Softmax)’ 단계 이후 도출되는 결과는 “이 다음에 와야 할 절대적으로 올바른 단어“가 아니라, 사전 학습된 방대한 코퍼스(Corpus)에 비추어보았을 때 “이 문맥에서 통계적으로 등장할 확률이 가장 높은 단어들의 분포“이다. 생성 온도(Temperature) 등의 파라미터 조정을 통해 의도적으로 무작위성을 부여하여 창의적인 답변을 도출해낼 수 있다는 점은 소프트웨어 2.0이 가진 강력한 무기 중 하나이다. 하지만 이는 동일한 입력에 대해 언제든 상이한 출력(Output)이 반환될 수 있다는 비결정성(Nondeterminism)을 태생적으로 내포하고 있음을 의미한다.
3. 예측 불가능성과 신뢰성(Reliability) 검증의 한계
학습 모델은 기존 데이터 간의 보간(Interpolation) 능력은 뛰어나지만, 한 번도 관측하지 못한 데이터나 희귀한 코너 케이스에 대해서는 심각한 외삽(Extrapolation) 오류를 일으킬 위험을 안고 있다. 특히, 모델의 규모가 커짐에 따라 인간이 설계 시점에 예측하지 못했던 창발적 능력(Emergent Abilities)이 발현되기도 하지만, 동시에 그 누구도 의도하지 않은 환각(Hallucination) 현상을 매우 확신에 찬 어조로 출력해버리는 치명적 부작용이 동반된다.
결과적으로 소프트웨어 2.0의 부상은 인간 수준의 인지 능력을 저비용으로 소프트웨어 생태계에 편입시켰다는 지대한 공로가 있음에도 불구하고, 치명적인 공학적 패러독스를 낳았다. 기존 소프트웨어 1.0 체제에서 당연하게 여겨지던 ’작성된 코드는 설계 의도대로 수행될 것이다’라는 대원칙이 붕괴된 것이다. 제어 논리가 모델 웨이트(Model Weights) 안으로 블랙박스(Black-box)화됨에 따라, 결과를 검증해야 할 논리적 근거(Rationale) 역시 함께 소실되었다.
이를 해결하기 위해서는 시스템의 품질 보증(QA) 파이프라인 역시 새로운 차원으로 진화해야 함을 시사한다. 단순히 에러 방어를 위해 입력값의 타입을 체크하던 수준을 넘어, 모델이 내뱉는 수만 가지 확률의 스펙트럼 속에서 유효한 결과만을 엄격하게 필터링하고 이를 결정론적으로 묶어두는 거시적 안전망, 즉 고도화된 소프트웨어 테스트 오라클(Software Test Oracle)의 존재가 그 어느 때보다 더 절실하게 요구되고 있다.