Devin 후기

DongYoon KangDongYoon Kang
8 min read

나는 오픈AI에서 $2000로 인공지능 개발자를 냈으면 당연히 구독했겠지만, 코그니션 AI가 만든 $500 짜리 개발자는 별로 고용하고싶지 않았다. 믿음이 안 가는 게 유일한 이유였는데, 어떤 분이 써보니까 괜찮다고 하시길래 질렀다. 70만원이 작은 돈은 아니지만… 인공지능이 잘 작동하면 그걸로 큰 돈을 벌 수도 있는 것이라고 합리화를 하며 결제를 했다.

결제하려고 들어갔다가 월 $500를 내도 무제한으로 주는 게 아니고 한달에 62.5시간의 작업만 시킬 수 있대서 그냥 말까 심각하게 고민했지만, 그래도 한번은 해보기로 했다.

결제를 하고, dudykr 깃허브 Org와 개인 슬랙을 연결했다. Devin을 컨트롤하는 방법은 크게 2가지인데, 하나는 웹앱을 쓰는 것이고 다른 건 슬랙 봇을 쓰는 것인데 웹앱은 알림이 잘 안 와서 슬랙 썼다. 내 컨펌이 필요할 때 알람이 오고 컨펌을 하기 전까지 무작정 기다리는 방식이라 알람이 안 오면 작업이 심하게 느려진다.

설정은 됐고 진짜 주니어한테 맡길만한 잡일을 일단 시켰다. 내가 사실 잡일에 약하다. 꽤 난이도가 있는 리팩토링도 1000개~2000개까진 노가다로 처리할 정도의 끈기는 있는데, 작업이 너무 쉬우면 재미가 없어서 유튜브만 본다. 근데 이게 정도가 생각보다 심해서 내가 인공지능으로 코딩하는 것에 미쳐있는 것이다. 요즘 나오는 LLM이 쉽게 해결할 정도의 문제는 진짜로 주니어인 개발자보다도 오래 걸릴 정도다.

위의 스크린샷에 Devin의 최대 강점이 나와있다. 한번에 여러개 작업 돌릴 수 있다는 것… Cline이나 커서는 이게 안 돼서 $500를 내면서까지 이것저것 찾고 있는 것이다. 다른 툴들의 문제는 코딩 속도가 인간보다 빠르다곤 해도 여전히 내가 기다리는 시간이 꽤나 있다는 점과 기다리는 동안 에디터를 점유하기 때문에 내가 다른 작업을 할 수 없다는 점이다.

Devin은 컨펌 몇번 요청하고 해결 못하겠으면 도움 요청하긴하는데 기본적으로 샌드박스에서 자기가 알아서 개발한다. 이 차이는 진짜 무시할 수 없는 차이다. 난 그동안 재밌는 주니어가 못할만한 작업을 하고 있을 수 있다.

근데 이 4개의 PR이 돈을 생각보다 많이 먹었다.

SessionCreated AtACUs Used
Balance 경고창Dec 16, 20246.58View session
결제 내역 페이지Dec 16, 202413.79View session
API 키 관리 페이지Dec 16, 202414.75View session
Verify Cloud Repo AccessDec 16, 20240.36View session
Billing Console PageDec 16, 20240.15View session

Devin 설정창에서 그대로 복사해온건데 Verify Cloud Repo Access 는 접근이 되는지 확인하라고 있는 예시였고 1 ACU가 $2니까 저 정도 잡일을 처리하는 데에 $70.54(=35.27ACU)가 든 것이다.

참고로 저것들은 Cline이나 Cursor로 처리하면 다 합쳐서 $3 이하로 끝날 작업들이다. 그래도 나는 그동안 다른 일을 했기에 크게 짜증나진 않았다. 진짜 외주맡긴다는 느낌으로 접근하면 나쁘지 않다.

못하는 일: 고오급 git 동작

여담인데 Devin 테스트하려다가 git 실수를 해서 의도치 않게 Devin 스트레스 테스트를 했다. main 브랜치에 잘못된 커밋을 넣어서 Devin이 PR을 만든 이후에 main 브랜치에 force 푸시를 해야했다.

근데 내가 얘한테 시켜보니까 얘 리베이스로 특정 커밋을 제외할 줄 모르고, 깃허브에 올린 PR을 리베이스해서 커밋을 제외해주고 말해주면 검사할 게 있다면서 다시 돌다가 지 로컬에 있는 브랜치로 —-force 푸시를 해버린다. 이건 선전포고 아닌가?

성능 비교

근데 돌아가는 꼴을 보고있으니까 나 혼자서도 비용이 10% 정도밖에 안 들어가는 클론을 만들 수 있을 것 같아서 오픈소스를 찾아서 시도해보기로 했다. OpenDevin을 시도해보기로 결심했는데 얘가 OpenHands로 이름이 바뀌었다. 그리고 귀찮아서 다른 건 굳이 테스트해보지 않았다.

첫번째 테스트: Devin vs OpenHands headless

Devin의 성능을 테스트하려던 것은 아니었는데 $29.5가 들 작업은 아닌 것 같아서 OpenHands 에 돌려보기로 하고 스크린샷을 찍었다. 프롬프트는 다음과 같다.

apps/dudy-apps에 API 키 관리 페이지 만들어줘.

인증은 logto로 처리하고 있고, team / user 각각 과금이 가능해.

Payer 인터페이스나 usePayer 훅 참고하고 팀 id 가 ~면 현재 로그인한 사용자가 과금되는 거라고 생각하면 돼

API는 구글 protobuf중 cloud_core 참고하고, 서버는 servers/ 폴더에 있어

프롬프트가 너무 성의 없어보이지만 데빈은 적당히 이해한 것 같았다.

PR은 잘 만들었다. 그런데 리뷰하다보니 버그가 있었다.

원래 PR에 리뷰 남기면 그 리뷰 코멘트에 :eyes: 찍고 수정하는데 수정을 안 해서 앱에 들어가서 저거 똑같이 쳐주니까 고치더라. 근데 en.json에 채워넣는 것만 하고 ko/ApiKeys.json/en/ApiKeys.json은 안 지워서 핑퐁을 한 번 더 해야했다. 그리고 버그가 하나 더 있었는데, create 직후에 하단 리스트뷰가 업데이트가 안 됐다. 새로고침하면 보였는데, 얘기하니까 queryKey를 invalidate 하려고 들기는 하는데 못 고쳤던 것으로 기억한다. 이것을 보니까 진짜 주니어 수준인 것 같았다.

OpenHands 문서를 봤다. OpenHands 문서를 보니까 GUI/CLI 모드가 있고 Github Actions에서 돌리기 위한 headless 모드가 있었다. 이때 생각이 데빈은 너무 비싸서 안 쓰게 될 것 같고 얘가 대체재가 될텐데 그럴려면 내 기기와 상관 없이 자동으로 돌아야 쓸만할테니까 Github Actions에 올렸다. Actions 구성은 굉장히 간단했는데, 사용 난이도에 신경을 굉장히 많이 쓰신 것 같았다. 구성이 끝났으니 Devin에 썼던 프롬프트를 그대로 돌려봤다. 그래서 그냥 OpenHands에도 던져줬다. 근데 돌려보니까 문제가 있었다. 우선 생각보다 너무 비용이 많이 나왔다. 나는 클로드 쓸 때 openrouter 통해서 쓰는데 그걸 감안해도 너무 비쌌다. 로그 보면서 Cline에 익숙해서 그런 것인지 아니면 headless 모드라서 모든 선택지에 yes를 누르니까 그런 것인지는 고민햐고 있었는데 작업 자체가 실패했다.

두번째 테스트: Devin한테 설계의 자유 주기

API 문서화 할 수 있게 틀을 만들어줘. /apps/dudy-apps/app/docs/ 에 mdx 파일 넣으면 문서가 되고, /apps/dudy-apps/app/api-docs 는 protobuf API들 문서화하는 게 목표야. 저 두 요구사항만 지키면 설계는 자유롭게 해도 돼.

처음에 5ACU 정도 썼고, 겉으로 보기에 문제는 없었는데 테스트 해볼 방법이 없는 상태로 PR 만들었길래 테스트 문서 넣으라고 시켰다.

위는 테스트를 넣으라고 한 뒤 생긴 계획이다. 보니까 자기가 문서 적고 브라우저 돌려서 확인하기는 하는데 확인은 사람이 하는 게 나은 것 같다.

참고로 테스트를 시키면 이런 식으로 사람이 직접 볼 수 있는 링크도 준다. 이 작업이 쓴 총 ACU는 26.84ACU. 53달러 정도 쓴 셈이다. 주니어 레벨보다 살짝 위여서 그런 것인가보다.

세번쨰 테스트: 번외: OpenHands 테스트

OpenHands를 몇번 써보니까 제대로 작동 안 하고 돈만 먹었다. 아무래도 headless다보니 사람한테 피드백 요청할 때마다 클라이언트가 알아서 뭔가를 고르는데 그게 문제인 것 같았다. 그래서 이것을 로컬에서 UI가 있는 버전으로 열었다. 쓰지 않는 의존성들을 지워달라는 예시 프롬프트를 골랐다. 근데 돈은 엄청 먹고 실패해버렸다. 그리고 결정적으로, 여러 개의 작업을 동시에 돌릴 수 없었다. 창을 더 띄워도 창끼리 동기화가 되어버려서 도커 서버 자체를 여러개를 띄워야할 것 같았다.

네번째 스트레스 테스트: Cline vs Cursor Agent vs Devin

이번 테스트는 프롬프트를 좀 상세하게 지정했다. 내 의도를 오해하지 않는 상태에서 성능이 어떤지 보고싶었다. 사실 이것도 귀찮아서 그냥 말로 할 방법 없나 찾아보고 있는데

/apps/dudy-apps 에 waterflow 라는 앱을 만들어.
URL slug는 waterflow 쓰고 `rpc/webapps/v1.proto` 파일을 만들어서 API는 거기다 정의해. 저 파일 만들 때 `rpc/webtools/v1.proto` 참고하고. 서버는 `server/webapps-api/`에 패키지 하나 추가하고 작업해줘.

노코드 자동화 툴이라고 생각하면 될거야.

# DB 엔티티

## AutomationRule

자동화 룰이고, 1개의 시작 노드를 가지고 있어야 해.
n개의 `AutomationRuleNode`를 가질 수 있어.

## AutomationRuleNode

 - `AutomationRule`에 속하고, onDelete: Cascade

## InputEventKind



### 종류 (= NodeKind)
 - 시작 노드
   - inputEventKind: InputEventKind
   - 입력값 없음

 - Map 노드: 함수 한 개 받아서 입력값에 적용
   - fnRef: id (int) or builtin (enum "BuiltinFunction")
   - pure: 만약 true 면 입력값이 안 바뀐 경우 실행 X

 - Multiplex 노드: 입력 값이 n개로 복사됨.

 - Project 노드
   - 입력 값의 타입은 항상 `Map<string, VarType>`
   - propertyName: Expr

 - NthElement 노드
   - 입력 값의 타입은 항상 `VarType[]`
   - n: Expr

 - Operation 노드
   - 연산 노드
   - operation: Expr


### 필드:
 - kind: `NodeKind` (DB엔 JSONB로 저장)
 - outputType: `VarType` (DB엔 JSONB로 저장)


`NodeKind`하고 `VarType`은 zod 타입으로 정의해줘.


 - `Expr` = `Lit | UnaryExpr | BinExpr | ArrayLit | ObjectLit`.
 - `VarType` = `boolean | string | number | VarType[] | ObjectType`
 - `ObjectType` = `Map<string, VarType>`


# 작업 순서

1. protobuf 정의
2. 백엔드 구현 및 테스트
3. 프론트엔드 구현 및 유닛테스트

비고: .prompt.md 컨텍스트

참고로 프롬프트에는 없지만 .cursorrules 와 Cline 커스텀 instruction, Devin 인스트럭션 모두 .prompt.md 파일들을 컨텍스트로 활용하라고 적어놨기에 drizzle orm을 고르는 게 정상이다. 정확한 인스트럭션은

 - Before you generate code, read files named '.prompt.md' in the directory that the file you want to write belongs to and all parent directories of that directory, and always follow the instructions in those files. Use '**/.prompt.md' as the glob to find such files.
 - Print a list of the '.prompt.md' files you read before generating or requesting code.

이다. .cursorrules 에 있는 것인데, 루트~수정 대상 파일까지의 모든 .prompt.md 파일을 읽어서 컨텍스트처럼 쓰라는 소리다. 이런 방식으로 하면 모든 폴더에 대한 컨텍스트를 한 파일에 넣을 필요가 없어서 훨씬 관리가 편해진다.

Cline은 완벽하게 해냈고,$0.3819를 썼다. Cursor Agent는 drizzle ORM 대신 prisma 파일을 뱉었다. 로그 보니까 .prompt.md를 최상단에 있는 것만 읽은 것 같더라. 아무튼 이미 커서를 결제해서 쓰고있기에 추가 비용은 없었다. Devin은 ACU 부족으로 인해 멈춰서 테스트를 제대로 하지 못했다.

근데 내가 이것을 결제한 게 3일도 안 됐는데 벌써 250 ACU가 다 떨어진 것이라면 너무 비싼 것 아닌가 싶다. 쓸만큼 쓰고 월 70만원을 낸다면 그래도 살만하지만 이건 뭐… 나는 일단 구독 취소했다. 내가 직접 개인용 버전 하나 만들어서 쓸 생각이다. 내가 작업 맡기면 임시로 vscode 서버 띄우고 Cline을 프록시하는 방식으로 갈 것 같다.

비용

개~비싸다. 간단한 PR 3개와 살짝 규모가 있는 PR 하나를 만들었는데 7만원어치 코인을 썼다. 그리고 3일도 안 돼서 ACU를 다 썼다. 근데 Cline 같은 툴에 비하면 진짜 한 일이 너무 적다.

Devin 기능별 리뷰

웹 vscode

웹 vscode 로 접속가능하고 인공지능이 삽질한 걸 직접 고칠 수 있다. 고친 뒤에 뭘 고쳤는지 채팅으로 말해줘야한다는 단점이 있지만 현재 인공지능 수준 생각하면 이게 맞는 것 같다. Cline이든 Cursor Agent든 이건 자주 하게 된다.

Knowledge

엄청 강력한 기능 같다. 이 기능은 엄청난 기능인데, 작업 중간중간에 앞으로 어떻게 할지 자기가 알아서

앞으로도 이렇게 이렇게 하면 될까요?

하고 무언가를 갖고온다. 난 이제 Devin은 안 쓸 생각이니까 Knowledge는 .prompt.md로 옮겼다.

Devin: 타임라인

작업별로 걸린x1 시간을 볼 수 있는데, 타임머신처럼 예전 과정을 골라서 어떤 방식으로 작동했는지 볼 수도 있다. 본격적으로 쓰게 된다면 한 5번~10번 정도는 과정 검증하면서 실수하는 부분 Knowledge나 프롬프트로 정리해두면 괜찮을 것 같은데 보면 알겠지만 시간이 좀 이상하다. 그래서 돈도 돈인데 PR 올라올 때까지 꽤나 걸린다.

결론

난 내가 하나 만들어서 쓰는 게 최선이라는 결론을 내렸다. 처음부터 만드는 건 아니고, vscode 서버 띄워서 웹에서 접속 가능하게 하되 Cline을 vscode 서버 API로 조작하는 방안을 생각중이다.

Devin? 이상한 데에 시간을 너무 써서 그런지 지나치게 비싸다. Devin을 쓰느니 Cline을 쓰고 쇼츠 보는 정도로 가볍게 딴 짓 하는 게 낫다는 게 내 결론이다.

3
Subscribe to my newsletter

Read articles from DongYoon Kang directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

DongYoon Kang
DongYoon Kang