I Tested Claude, GPT-4, and Gemini on the Same Refactoring Task

개요

Claude Opus 4, GPT-4o, Gemini 2.5 Pro를 대상으로 동일한 TypeScript 프로젝트에서 실제 NestJS 서비스의 Clean Architecture 리팩토링 작업을 수행한 결과, Claude Opus 4가 가장 뛰어난 성능을 보였다.

주요 내용

* 테스트 개요: 400라인 규모의 NestJS PaymentService를 Clean Architecture 레이어(domain, application, infrastructure)로 리팩토링하는 작업을 Claude Opus 4, GPT-4o, Gemini 2.5 Pro에 동일한 코드베이스, 프롬프트, 프로젝트 설정으로 진행했다.
* 코드베이스 이해:
* Claude Opus 4는 30초 만에 의존성 맵을 정확하게 생성하고, 잠재적 순환 의존성 위험과 비효율적인 호출을 식별하여 리팩토링 시작점을 제안했다.
* GPT-4o는 의존성을 올바르게 파악했으나 순환 위험을 놓쳤고, 후속 질문을 통해 실행 계획을 수립해야 했다.
* Gemini는 가장 상세했으나 관련성이 떨어지는 정보가 많았고, 실행 가능한 단계로 좁히기 위해 추가 프롬프트가 필요했다.
* 도메인 레이어 추출:
* Claude Opus 4는 도메인 엔티티, 값 객체, 오류 타입을 프로젝트 명명 규칙에 맞춰 정확하고 캡슐화된 형태로 추출했다.
* GPT-4o는 도메인 구조는 유사했으나, DDD 관점에서 덜 idiomatic하고 프로젝트의 kebab-case 파일 명명 규칙을 따르지 않았다.
* Gemini는 필요 이상의 추가 기능(enum, type 등)을 생성하여 범위를 넘어서는 코드를 만들었다.
* Use Case 및 Port 추출:
* Claude Opus 4는 각 Use Case에 필요한 최소한의 인터페이스만 포함하는 Port를 정의하여 불필요한 결합을 최소화했다.
* GPT-4o는 Use Case는 올바르게 추출했으나, Port 인터페이스에 불필요한 메서드를 포함시켜 과도한 결합을 야기했다.
* Gemini는 Use Case 분리가 부자연스러웠고, Port 정의 시 기존 프로젝트의 타입 정의를 중복으로 생성했다.
* 인프라스트럭처 어댑터 구현:
* Claude Opus 4는 Port 인터페이스를 정확히 구현하고 NestJS 모듈 설정을 올바르게 완료했으며, 컴파일 및 테스트 통과를 위한 경미한 수정을 선제적으로 해결했다.
* GPT-4o는 인프라 구현은 좋았으나 NestJS 모듈 설정에 오류가 있었고, 테스트 수정은 요청 후에 이루어졌다.
* Gemini는 Stripe 오류를 도메인 오류로 매핑하는 부분에서 가장 뛰어났으나, 모듈 설정 오류가 가장 많았고 순환 의존성을 도입하기도 했다.
* 최종 평가: Claude Opus 4가 코드베이스 이해, 도메인 추출, Use Case/Port 정의, 인프라 구현 등 전반적으로 가장 높은 점수를 받았으며, GPT-4o와 Gemini가 뒤를 이었다.
* 주요 차이점: 모델 간의 차이는 코딩 능력 자체보다는 컨벤션 준수, 범위 관리 능력, 선제적 문제 해결 능력, 컨텍스트 활용 능력에서 두드러졌다. Claude Opus 4는 프로젝트 컨벤션을 일관되게 따르고, 요청된 범위 내에서 작업을 수행하며, 잠재적 문제를 미리 파악하고 해결하는 데 강점을 보였다.

시사점

AI 코딩 도구의 성능은 모델 자체의 능력뿐만 아니라, 프로젝트의 구조화 정도, 명확한 컨벤션, 잘 정의된 아키텍처 경계와 같은 프로젝트 설정의 품질에 크게 좌우된다.

원문 읽기 →
원문을 불러오는 중...

댓글

GitHub Discussions