LLM 시대, 'Harness'로 개발 생산성을 높여보세요!
소프트웨어 3.0 시대는 LLM(Large Language Model)을 활용하여 자연어로 원하는 기능을 구현하는 패러다임으로, 코드 작성이 아닌 프롬프트(Prompt) 기반 개발로의 전환을 의미함
LLM의 한계를 극복하기 위해 'Harness' 개념을 도입, LLM을 실제 작업에 연결하는 도구와 환경의 중요성을 강조함
Claude Code는 Anthropic의 CLI 기반 코딩 에이전트로, 슬래시 명령어를 컨트롤러, 서브 에이전트를 서비스 레이어, 스킬을 도메인 컴포넌트(SRP)로 매핑하여 기존 아키텍처 패턴과의 유사성을 제시함
자동 설정(Auto-configuration)과 질의 응답(Questioning)을 통해 개발 생산성을 향상시키는 접근 방식을 제시하며, 개발 방식의 변화를 강조함
소프트웨어 3.0 시대의 도래와 개발 패러다임 변화
본문은 Andrej Karpathy의 발표를 인용하여 소프트웨어의 진화를 3단계로 구분한다. 소프트웨어 1.0은 Python, Java, C++과 같은 언어로 명시적인 로직을 작성하는 방식이며, 소프트웨어 2.0은 딥러닝(Deep Learning)을 통해 데이터 기반 모델을 학습시키는 방식이다. 현재의 소프트웨어 3.0 시대는 LLM을 활용하여 자연어로 원하는 기능을 정의하고, 프롬프트를 통해 프로그램을 생성하는 방식으로 변화하고 있다. 이러한 변화는 개발자가 코드를 직접 작성하는 대신, LLM을 통해 문제 해결(Problem Solving)에 집중하도록 한다.
LLM 기반 개발 환경에서 'Harness'의 역할
LLM은 강력한 기능을 제공하지만, 단독으로는 코드베이스(Codebase)를 읽거나, 명령을 실행하거나, 데이터베이스(Database)에 접근할 수 없다. 이러한 한계를 극복하기 위해 'Harness' 개념이 등장한다. Harness는 LLM을 실제 작업에 연결하는 도구와 환경을 의미하며, Claude Code와 같은 코딩 에이전트가 그 예시이다. Harness는 LLM의 Raw Capability를 활용하여 개발 생산성을 향상시키고, LLM이 실제 문제를 해결할 수 있도록 돕는다.
Claude Code 아키텍처 분석: 기존 아키텍처 패턴과의 유사성
Claude Code는 슬래시 명령어(Slash Command)를 컨트롤러(Controller), 서브 에이전트(Sub-agent)를 서비스 레이어(Service Layer), 스킬(Skill)을 도메인 컴포넌트(Domain-level Component)로 매핑하여 기존 아키텍처 패턴과의 유사성을 보여준다. 슬래시 명령어는 사용자 요청의 진입점 역할을 하며, 서브 에이전트는 여러 스킬을 조합하여 워크플로우를 완성한다. 스킬은 단일 책임 원칙(Single Responsibility Principle)을 준수하며, MCP(Infrastructure / Adapter)는 외부 시스템과의 연결을 관리한다. 이러한 구조는 레이어드 아키텍처(Layered Architecture)의 개념을 LLM 기반 개발 환경에 적용한 것으로 볼 수 있다.
자동 설정(Auto-configuration)과 질의 응답(Questioning)을 통한 개발 생산성 향상
본문에서는 claude-hud 플러그인의 사례를 통해 자동 설정(Auto-configuration)과 질의 응답(Questioning)을 활용하여 개발 생산성을 향상시키는 방법을 제시한다. claude-hud는 개발 환경을 자동으로 감지하고, 필요한 설정을 수행하며, 모호한 부분에 대해서만 사용자에게 질문한다. 이러한 접근 방식은 개발자가 모든 옵션을 미리 정의하는 대신, 상황에 맞는 유연한 설정(Flexible Configuration)을 가능하게 한다. 결과적으로 개발자는 반복적인 설정 작업(Repetitive Configuration)을 줄이고, 핵심적인 문제 해결에 집중할 수 있다.
소프트웨어 3.0 시대의 개발 방식 변화와 시사점
소프트웨어 3.0 시대는 코드 작성에서 조립(Assembly)과 지시(Directing)로 개발 방식이 변화하고 있다. 기존의 레이어드 아키텍처(Layered Architecture)와 유사한 구조를 활용하여 LLM 기반 개발 환경을 구축하고, 자동 설정과 질의 응답을 통해 개발 생산성을 향상시킬 수 있다. 또한, 오류 처리(Error Handling)와 예외 처리(Exception Handling)를 유연하게 처리하는 시스템을 구축하는 것이 중요하다. 개발자들은 이러한 변화에 적응하고, 새로운 기술을 기존의 엔지니어링 원칙에 맞춰 활용해야 한다.