순수 AI만으로 소스 생성기를 이용한 라이브러리 만들어봤습니다...

일단 결과부터…

Visual Studio 2022 + GitHub Copilot을 이용해 대략 3시간 만에 만듦

앞 전에 소스 생성기를 이용해 만들고 싶던게 있었어요.

… 검색이 잘 안되네요. 찾으면 수정하는 것으로 하고,

소스 생성기를 통해 구현하고 싶었던 기능이 뭐냐면, EF Core를 이용해서 질의를 했을 때 반환하는 값이 SELECT에 의해 무명 클래스의 목록이 될 수 있어요. 이것을 메소드 외부로 던질 수 없기 때문에 불편했는데요, 이를 소스 생성기를 이용해서 자동 생성해서 쓰고자 했지만 그 당시 어려워서 중도에 포기했던 것으로 기억해요.

그런데 오늘 아침에 (그것도 7시30분에!) 띠용 하고 GitHub Copilot을 이용해 만들어보자고 생각한 후 대략 3시간 만에 위의 라이브러리가 만들어졌습니다. LLM 및 GitHub Copilot Agent의 막강한 성능과 (또 약간의 한계와) 프롬프트를 찰떡같이 알아먹어서 테스트 코드와 예제 코드까지 만들어내면서 결국에 원하는 형태를 만들어내는 것을 보며 약간의 전율과 함께 약간의 슬픔도 T_T

자세한 구현 형태는 위 GitHub 프로젝트를 참고해주세요.

16개의 좋아요

컨퍼런스 발표 각이군요 ㅎㅎㅎ

4개의 좋아요

2탄: SumTube

코딩하지 않고 AI로만 만든 두번째 프로그램입니다. 유튜브 url을 넣으면 스크립트를 요약해 출력해줍니다.
유튜브 스크립트를 가져오는 yt-dlp와 스크립트를 요약할 때 쓰는 LLM을 ollama 및 exaone3.5:7.8b모델을 실시간 때 내려받아 실행합니다.

이번에 테스트하고 싶었던 것은 내 의도를 정확히 인지해 런타임에 특정 프로그램을 다운로드 받아 구성해 통합된 프로그램으로 잘 동작하게 만들어주는가입니다. 결과적으로 흡족합니다.

노력 대비 결과는 아주 훌륭합니다. 그리고 인공지능이 생성해주는 코드는 일반적으로 프로그래머가 너무 귀찮아 전개하기 싫은 코드를 곧잘 잘 구현해줍니다.
단점도 있습니다. 구현 스타일이 저랑 안맞습니다. 뭐랄까 너무 장황해요. 저는 깔끔한 코드를 선호하는데 그 근처도 가지 못해 좀 많이 아쉽습니다. 그리고 쓸데없는 주석 및 출력 텍스트와 방어 코드를 많이 만듭니다. 이것은 프롬프트 및 정책을 얼마나 잘 전개하느냐에 따라 달라지면 좋겠군요.

뭐랄까… 프롬프트 엔지니어링이라고 하는데 옛날 옛적 어셈블리 못하면 개발자 아니라던 시대가 영원히 되돌아 오지 않은 것 처럼, 프롬프트 엔지니어링 (요즘에는 컨텍스트 엔지니어링이라고 하더군요)으로 개발하는 시대가 열린것인지도 모르겠습니다.

5개의 좋아요

하다보니 슬로그가 되는군요 ^^; 카테고리를 바꿔야 겠습니다.

다음 도전하고 싶은 것은

WinFsp를 이용해서 가상의 스토리지 드라이버를 매핑하는 기능을 구현하는 것입니다. 인력으로 하기 귀찮은 작업이 많거든요. 예외처리도 많이 해줘야 하고… 이럴 때 AI로 코딩하는것이 얼마나 효율적인지를 확인하고자 합니다.

가제 : Shadow Drivers

목적지 컴퓨터의 특정 드라이버를 공유하면 WinFsp를 이용해서 그 드라이버가 마치 내 컴퓨터의 드라이버 처럼 쓸 수 있게 해주는 것입니다.

2개의 좋아요

Copilot 은 c# 코드가 잘되나 보군요 claudia 나 manus 는 .NET 은 잘 안맞는것 같드라고요

2개의 좋아요

Agent모드 쓰시는거면, context7이나 MS Docs 와 같은 MCP 연결해서 쓰시면 어떨까요?
제가 체감하기엔 조금 더 깔끔한 결과를 보이는 것 같더라고요.
음… 만약 쓰셨는데도 그렇게 느끼신 거면
아무리 좋은 모델이라도 기본 바탕이 되는 학습 지식 차이가 아닐까 싶긴 하네요…

1개의 좋아요

저는 GitHub Copilot만 써봐서 ^^; .NET C# 코드 생성 잘해주는 것 같아요

WinFsp 드라이버를 설치하고 winfsp.net 라이브러리도 참조해서 AI에게 다음과 같이 만들라고 했습니다.

이미 winfsp.net이 추가되어 있고, WinFsp 드라이버가 설치되어 있어! 메모리(8G)를 이용해 가상 드라이버로 사용하는 샘플코드를 ShadowDrivers에 구현해줘.

그런데 AI가(모델로 Claude Sonnet 4를 사용합니다) 최신의 WinFsp API 사용법을 모르는지 계속 컴파일 오류가 나고, 오류가 나니 수정하고 수정하고 수정하고 무한 반복을 하다가

본인도 답답했는지 라이브러리에서 참조할 수 있는 클래스 메소드 들을 어셈블리에서 조회하는 코드를 간단히 짠 뒤 학습을 하더라고요… 애는 참 쓰던데 그래도 컴파일 오류를 해결하지 못했어요.

그래서 차선책으로 WinFsp에서 제공하는 .NET 샘플을 문서로 포함한 뒤 이것을 가지고 구현하라고 시켰는데 다행히 한방에 잘 만들어줬습니다.

1개의 좋아요

한 번 정도의 오동작으로 명령을 더 줬고 최종적으로 문제를 수정하여 정상 동작을 했습니다.

1개의 좋아요

AI를 이용해 코딩을 시킬 때 또 장점은 단위 테스트를 빠르고 쉽게 만들 수 있다는 점입니다. 물론 다음의 문제점도 발생합니다.

  1. 의미 없는 단위 테스트를 만듦

예를 들어 클래스의 인스턴스를 생성한 후 인스턴스로 기능들을 테스트해야 하는데 클래스의 인스턴스가 정상 생성된 것으로 단위테스트가 성공했다고 하는 등의 – 의미 없는 단위 테스트도 꽤 만듭니다. 그래서 생성된 단위테스트 코드를 살핀 뒤 문제점을 다시 알려줘서 좀 더 정확한 단위테스트를 구성할 필요가 있습니다.

  1. 테스트 실패된 것을 – 테스트 성공하기 위해 원 소스를 수정해야 하는데 테스트 코드를 수정해버림
1개의 좋아요

아쉽게도 Shadow Drivers는 실패했습니다. 동작은 하지만 오동작을 합니다. 여러가지 원인이 있겠지만… AI가 WinFsp에 대한 학습이 제대로 되지 않은 것이 문제일 것 같아요. 여러분들이 접근할 수 있도록 해당 프로젝트도 GitHub에 올리도록 하겠습니다.

3개의 프로젝트를 전개하면서 다음을 알 수 있었습니다.

  • GitHub Copilot의 Agent를 이용하면 프로젝트에 구성된 소스코드의 연속성을 유지하면서 기능을 보완하거나 추가하는 것이 가능했음
  • 하지만 소스코드가 어느정도 방대해지면 분석하는 속도가 급격히 떨어지며 속도 대비 성과도 아쉽게 됨
  • 파일이 많아지고 소스코드가 커지면서 전체 구조 및 소스코드의 연속성이 깨지게 됨 (이것은 아마도 LLM이 처리할 수 있는 프롬프트 토큰의 한계와 밀접한 관련이 있을 것 같아요. Agent가 이를 보완해서 연속성을 유지하려 하지만 어쨌든 최종적으로 프롬프트의 토큰에 영향을 받을 수 밖에 없겠지요)
  • AI로 코딩을 요청하면 할 수록 문제가 좁혀지고 해결되는 것이 아니라 넓어지고 오리무중이 되는 느낌

결론)

AI로 코딩을 짜게 시키는 것은 크게 두가지 방향성으로 활용해겠다는 생각입니다.

  1. 문제를 영역별로 나눠서, 각 영역만 해결하라고 요청
    예) 테이블 스키마를 참고해서 ORM 엔티티 클래스를 만들어줘

  2. 단순작업, 반복작업을 AI를 이용해 처리
    예) 단위 테스트를 만들어, 예외 처리를 강화해, Validation 체크 구현을 해, …

이상 끝!

5개의 좋아요
1개의 좋아요

저도 단위 개발에 대한 부분을 AI에 맡기는 게 제일 편하게 느꼈습니다.
좋은 케이스 공유해주셔서 감사합니다!

1개의 좋아요