Claude Opus 5.5와 Sonnet 5.5로 가계부 앱을 수정하게 하고 비교한 테스트 결과
요약
본 기사는 Claude Opus 5.5와 Sonnet 5.5를 비교하며, 가계부 앱의 버그 수정 및 기능 추가 테스트 결과를 다룹니다. 두 모델 모두 공개되지 않은 추가 테스트에서 완벽하게 합격하여 무승부를 기록했습니다. 특히 비용 효율성 측면에서는 Sonnet 5.5가 Opus 5.5보다 훨씬 유리한 것으로 나타났습니다.
핵심 포인트
- 두 모델 모두 가계부 앱 수정 테스트를 통과하며 성능 면에서 동등함을 입증했습니다.
- Opus 5.5는 Sonnet 5.5 대비 약 2배의 비용이 발생합니다.
- 실제 코딩 작업 시, 두 모델 모두 중복 데이터 처리 등 핵심 로직을 정확히 구현했습니다.
이 글은 Claude의 Opus 5.5와 Sonnet 5.5를 동일한 주제로 비교하는 시리즈의 네 번째 글입니다. 이번에는 앱 수정을 통해 작은 가계부 앱의 버그 수정, 기능 추가, 그리고 다른 은행 명세서 가져오기를 요청하고, AI가 보지 못한 테스트에서 채점했습니다.
이 기사는 영상으로 보여준 결과를 표와 코드로 자세히 볼 수 있도록 정리한 것입니다. 두 모델이 실제로 수정한 부분을 차이점(diff)과 함께 그대로 담았습니다.
결과 요약
세 가지 모두, 어느 쪽도 공개하지 않은 테스트 8개에 모두 합격하여 무승부였습니다.
| 주제 | Opus 5.5 | Sonnet 5.5 | 승패 |
|---|---|---|---|
| 버그 수정 | 8/8・19초・$0.16 | 8/8・12초・$0.06 | 무승부 |
| ... |
세 가지 합계는 Opus 5.5가 약 110초・$0.67, Sonnet 5.5가 약 54초・$0.24였습니다. 애초에 있던(공개된) 테스트 5개 역시 두 모델 모두 전부 통과했습니다.
두 모델
| Opus 5.5 | Sonnet 5.5 | |
|---|---|---|
| 공개일: 2026년 9월 22일[1] | 2026년 9월 28일[2] | |
| 요금 (100만 토큰당, 입력/출력): $4 / $20 | $2 / $10[3] | |
| Claude Code의 effort 표준: medium | medium[4] |
요금은 Opus 5.5가 Sonnet 5.5의 2배입니다.[3:1]
비교 방법
- Claude Code의 헤드리스 실행(
claude -p --model claude-opus-5-5
와claude-sonnet-5-5
)
을 사용하여 동일한 지시를 한 번씩 내렸습니다. effort는 둘 다 표준인 medium입니다. - 다른 실험과 동시에 실행하지 않고, 하나씩 순서대로 실행하여 걸린 시간을 측정했습니다. 비용은 Claude Code가 표시하는 API 요금으로 환산했습니다. - 소재는 직접 만든 가계부 앱(Python, 파일 약 10개, 명령어로 작동)입니다. 애초에 테스트가 5개 있습니다.
- 채점에서는 AI가 보여준 테스트를 수정했더라도 원래대로 되돌린 후, AI가 보지 못한 테스트 8개를 추가하여 실행했습니다. 승패는 보지 못한 테스트의 합격 수로 결정합니다.
요청하는 것은 사용자로부터 온 보고나 짧은 부탁뿐입니다. 버그 수정 지시는 다음과 같습니다.
이 폴더는 명령줄 가계부 앱(kakeibo)입니다. 사용법은 README.md에 있습니다.
사용자로부터 다음 두 가지 보고가 도착했습니다. 원인을 조사하여 고쳐주세요.
1.
만들어 있었습니다 (Opus 5.5의 차이점).
@@ -10,5 +10,5 @@
def in_month(transactions: list[Transaction], year: int, month: int) -> list[Transaction]:
start, end = month_range(year, month)
...
재가져오기 중복 문제는 어느 쪽 모두 '이미 가져온 거래 ID'를 모아서 건너뛰는 방식으로 수정했습니다. 수동으로 입력한 거래(source가 bank가 아닌 것)는 확인하지 않았으므로, 함정 테스트에도 합격했습니다.
Opus 5.5:
@@ -21,7 +21,12 @@
def import_bank_csv(data: dict, path: Path) -> int:
- """가져온 건수를 반환합니다."""
...
Sonnet 5.5:
@@ -22,6 +22,11 @@
def import_bank_csv(data: dict, path: Path) -> int:
"""가져온 건수를 반환합니다."""
...
### 달랐던 점은 작업 방식
| 각 모델의 보고에서 | |
|---|---|
| Opus 5.5 | "추가한 테스트 2건을 포함하여 총 7건 모두 통과했습니다". 게다가 "이 수정 전에 두 번 가져온 데이터는 현재 저장된 데이터에 중복으로 남아있으므로, 수동으로 지워야 합니다"라고 했습니다. |
| Sonnet 5.5 | "이번의 2가지 결함을 재현하는 테스트는 추가하지 않았습니다" |
Opus 5.5는 요청받지 않은 재현 테스트를 2개 추가했고, 이미 저장된 데이터에 대한 주의점까지 작성했습니다.
Opus 5.5가 추가한 테스트:
@@ -40,2 +40,16 @@
ts = storage.transactions(storage.load())
assert ts[0].category == "食費" and ts[0].amount == 1200
...
## 실험② 기능 추가
카테고리별로 월 예산을 정하고, 초과하면 알 수 있게 해달라고 요청했습니다. 세부적인 부분은 '이 앱의 다른 부분에 맞춰서 결정해 주세요'라고만 덧붙였습니다.
보여주지 않은 테스트에서는 앱의 다른 부분과 같은 규칙을 지키는지 확인합니다. 카테고리 이름의 전각/반각이나 공백을 통일하는지, 환급(마이너스 금액)을 빼는지 등입니다.
def test_category_names_are_normalized(capsys):
이 앱은 카테고리 이름의 전각・반각이나 공백을 구별하지 않습니다
main(["budget", "set", " FOOD ", "1000"])
...
둘 다 8개 모두에 합격하여 동점입니다. 구현 방식에서는 Opus 5.5가 예산 처리를 새로운 파일(`budget.py`)로 분리했고, Sonnet 5.5는 기존 파일들(`cli.py`・`report.py`・`storage.py`)에 추가했습니다. 이 기능 추가에서는 둘 다 예산 테스트를 추가하고 README 사용법도 작성했습니다.
## 실험③ B은행 명세 가져오기
지금은 A은행 명세만 가져올 수 있는 앱에, B은행 명세도 가져올 수 있게 했습니다. B은행 명세는 형식이 상당히 다릅니다.
A은행 명세:
거래ID,날짜,금액,요약
B1001,2026/10/01,1280,슈퍼마루야
B1002,2026/10/02,450,편의점역전점
B은행 명세 (AI에게 전달한 예):
날짜,거래내용,지불금액,예치금액,잔고
2026년10월1일,슈퍼마루야,"1,280",,98720
R8.10.2,편의점역전점,¥450,,98270
...
열 이름이 다르고, 날짜에 일본식 연도가 섞여 있으며, 금액은 전각이고, 입금액은 다른 열에 있습니다. 게다가 거래 ID가 없습니다. 10월 2일에는 같은 가게에서 같은 금액의 쇼핑이 두 번 있습니다.
거래 ID가 없기 때문에, 재가져오기에서는 중복으로 계산하지 않고, 같은 날 같은 쇼핑이 두 번 있다면 두 건 모두 남긴다는 구분이 필요합니다. 보여주지 않은 테스트에도 이를 넣었습니다.
def test_same_rows_in_one_file_are_both_kept(tmp_path):
# B은행에는 거래 ID가 없다. 같은 날・같은 가게・같은 금액의 결제가 2번 있다면, 두 건 모두 남긴다 (재취합해도 2건 그대로).
rows = ["2026년10월2일,편의점역전점,450,,1000", "2026년10월2일,편의점역전점,450,,550"]
...
### 거래 ID 대체 방안
두 모델 모두 8가지 항목에 합격했습니다. 둘 다 날짜・내용・금액・잔고를 조합하여 거래 ID 대용으로 사용하고 있었습니다. 같은 날의 같은 쇼핑이라도 잔고가 다르기 때문에 구분할 수 있습니다.
Opus 5.5:
def _bbank_rows(rows: list[dict]) -> list[Transaction]:
out = []
seen: Counter = Counter()
...
Sonnet 5.5:
def _read_bbank(rows) -> list[Transaction]:
out = []
for row in rows:
...
Opus 5.5는 잔고까지 같은 행이 나열되었을 때를 대비하여, 출력된 순서 번호도 추가하고 있습니다.
## 활용 팁 (앱 개수)
이번 세 가지 실험을 통해 얻은 모델별 활용 팁입니다.
- 이 정도 규모의 개수는 Sonnet 5.5로 충분했습니다. 시간은 세 모델 중 약 54초, 비용은 Opus 5.5의 약 3분의 1입니다.
- Opus 5.5는 요청하지 않아도 테스트를 추가하고, 주의할 점까지 알려주었습니다. 테스트나 주의점까지 맡길 것이라면 Opus 5.5가 안심됩니다.
지금까지의 성적은 Opus 5.5가 2승, Sonnet 5.5가 0승, 무승부가 2회입니다 (비교① 계산은 무승부, 비교② 3DCG와 비교③ Web의 3D는 Opus 5.5 승).
## 시리즈
Opus 5.5와 Sonnet 5.5를 10가지 분야에서 비교하고 있습니다.
- 계산
- 3DCG
- Web의 3D
- 앱 개수 (본 기사)
- 게임 제작
- 슬라이드 제작
- 작곡
- SVG
- CSS 애니메이션
- 직접 대결
이 기사의 정보는 2026년 10월을 기준으로 합니다.
-
https://platform.claude.com/docs/en/models/opus-5-5/overview (2026-09-30 조회) ↩︎
-
https://platform.claude.com/docs/en/models/sonnet-5-5/overview (2026-09-30 조회) ↩︎
-
https://platform.claude.com/docs/en/about-claude/pricing (2026-09-30 조회) ↩︎ ↩︎
-
https://code.claude.com/docs/en/model-config (2026-09-30 조회) ↩︎
### Discussion
AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기