AI와 아두이노를 이용한 바이브 코딩

Ari Mahpour
|  작성 날짜: 2025/05/30 금요일
AI와 아두이노를 활용한 바이브 코딩

바이브 코딩은 AI 분야에서 인기 있는 유행어가 되었으며 최근에는 여러 가지 다른 의미를 가지고 있습니다. 이 글에서는 실제 하드웨어를 AI 에이전트에 연결하여 바이브 코딩이 어떻게 작동하는지 보여드리겠습니다. 혼란을 피하기 위해, 바이브 코딩을 "특정한 원하는 결과를 달성하기 위해 AI 에이전트와 왕래하는 대화"로 정의하겠습니다. 보통 이것은 목소리로만 이루어지지만, 이 글의 목적을 위해 대형 언어 모델(LLM)에게 주어진 "말한" 프롬프트를 출력하겠습니다. Visual Studio Code를 Copilot의 에이전트 모드로 사용하고 컴퓨터의 USB 포트(이 경우 MacBook에 연결됨)에 Arduino Uno R4를 연결할 것입니다.

시작하기

프로젝트를 시작하는 사람처럼, AI 에이전트를 적절한 맥락으로 시작하는 것이 중요합니다. 이 스크린샷에서, 화면 중앙에 Copilot과 함께 Visual Studio Code가 실행되고 있는 것을 볼 수 있습니다.

Figure 1: Screenshot of initial discussion with Copilot Agent
그림 1: Copilot 에이전트와의 초기 토론 스크린샷

초기 프롬프트에 주목하세요: “Arduino Uno R4를 여기에MacBook에 연결했습니다. arduino-cli를 사용하여 통신하고 Arduino가 연결되어 있는지 확인해야 합니다.” 중요한 키워드를 굵게 표시했습니다. 이를 두 부분으로 나누어 보겠습니다.

Arduino Uno R4를 여기에MacBook에 연결했습니다: 먼저 LLM에게 정확히 어떤 장치를 사용하고 있는지, "여기"에 연결되어 있으며 MacBook을 사용하고 있다는 것을 알려주고 있습니다. MacOS에서 실행되고 있다는 것을 이미 알고 있을 수도 있지만, 추가적인 맥락을 제공하는 것이 해가 되지는 않습니다. 환경에서 그 맥락을 추출할 수 있더라도, 다른 조회가 필요할 수 있으며, 이는 피할 수 있습니다. 이러한 정보는 시작하는 데 중요한 부분입니다.

arduino-cli를 사용하여 통신하고 확인해야 합니다. 아두이노가 연결되어 있는지 확인해야 합니다: brew를 사용하여 설치된 arduino-cli 패키지를 사용하여 어떤 도구/명령을 사용해야 하는지 명시적인 지시를 제공합니다. 이는 적어도 (아니면 많은) 도구를 사용하기 위해 필요한 조회/호출을 피하는 지름길을 만듭니다. 도구가 전체 작업을 주어졌을 때 스스로를 올바르게 구성할 수 있는지에 대해서도 회의적이므로 아두이노와 통신할 수 있는지 확인하도록 요청합니다. 이것은 사소해 보일 수 있지만, 실제 작업에서 벗어나 이를 확인함으로써 코드 작성을 시작할 때 준비가 되었는지를 보장하는 데 매우 도움이 됩니다.

그것의 응답은 즉시 arduino-cli 명령을 실행하여(먼저 위치를 찾음으로써) 아두이노 도구와 보드와의 통신이 제대로 구성되어 있는지 확인합니다. 모든 것이 정상적으로 작동한다는 것을 확인한 후 다음 지시 사항을 제공할 준비가 되었지만, 기본 스케치를 생성하고 기본 프로그램을 장치에 업로드할 수 있는지 확인함으로써 저를 선제적으로 대응합니다:

Figure 2: Copilot attempting to create, compile, and upload a new sketch
그림 2: Copilot이 새 스케치를 생성, 컴파일, 업로드하려고 시도하는 모습

 

로그에서 볼 수 있듯이 Copilot Agent가 몇 가지 문제에 부딪힙니다. 걱정하지 마세요 - 에이전트 워크플로의 아름다운 측면 중 하나는 오류 출력을 보고 스스로를 수정하여 "자가 치유"할 수 있다는 것입니다. 결국, 그것은 성공적으로 컴파일된 스케치를 Arduino Uno R4 장치에 업로드합니다.

피드백과 함께하는 바이브 코딩

웹 애플리케이션의 일반적인 vibe 코딩과 관련하여, 에이전트가 피드백을 받기가 상당히 쉽습니다. 에이전트가 명령 줄에 접근할 수 있다고 가정할 때(우리의 경우 그렇습니다), 스크립트가 완료된 후 애플리케이션이 피드백을 제공하도록 할 수 있습니다. CSV 파일을 읽어 마크다운 테이블로 변환한 다음, 내용을 .md 파일에 쓰도록 에이전트에게 요청하는 간단한 예를 들어 보겠습니다. 스크립트가 작동했는지 확인하는 몇 가지 방법이 있습니다. 가장 일반적인 접근 방식은 테스트를 작성하는 것일 것입니다(에이전트가 쉽게 할 수 있는 일) 또는 에이전트가 새 파일의 존재를 확인하고 파일의 내용을 검토할 수 있습니다. 프론트 엔드가 있는 웹 애플리케이션도 비슷한 방식으로 작동할 수 있습니다. 에이전트는 웹 페이지에 대해 curl 작업을 수행하고 HTML 내용을 읽어낼 수 있습니다. 우리가 웹 백엔드만 작성한 예에서는, 에이전트가 테스트를 작성하거나 curl 요청을 수행하고 응답 코드, 본문 텍스트 등을 확인할 수도 있습니다.

임베디드 시스템에서는 보드를 시작할 때 주로 시각적으로 또는 일련의 수동 검사를 통해 검증(특히 검증)이 이루어집니다. LED가 깜박이는지 시각적으로 확인하여 가장 원시적인 검증 방법을 고려해 보세요. ADC로 신호를 입력하고 나오는 텔레메트리를 보는 것은 보통 처음부터 자동화된 방식으로 스크립트화되지 않습니다 - 그것은 우리가 자동화된 테스트를 작성한 후에 보통 나중에 옵니다. 임베디드 시스템에 대한 에이전트 기반 워크플로우로 바이브 코딩을 할 때, 우리는 텔레메트리를 피드백 메커니즘으로 통합해야 합니다. 에이전트는 LED를 볼 수 없기 때문에(적어도 오늘날의 에이전트 기술로는) 코드가 작동하는지 알 수 없습니다. 이것이 명령 줄을 통해 읽고 검증할 수 있는 무언가를 생성하는 것이 중요한 이유입니다:

Figure 3: Request to create an example with telemetry and validation
그림 3: 텔레메트리와 검증을 포함한 예제 생성 요청

 

이 시점에서 LED를 켜는 것뿐만 아니라 “LED_ON” 및 “LED_OFF”라고 상태를 알려주는 텔레메트리를 시리얼 출력을 통해 제공하는 예제를 만듭니다. 이러한 응답을 검색하는 방법도 자동으로 알고 있습니다:

Figure 4: Telemetry over serial but with open-ended process
그림 4: 시리얼을 통한 텔레메트리지만 개방형 프로세스로

 

이러한 유형의 요청(“SSH” 명령 요청에서도 발견됨)과 관련된 일반적인 문제는 에이전트가 터미널 내에서 명령을 발행한 후 프로세스가 종료되지 않는다는 것입니다. Arduino CLI 모니터는 무한정 실행되므로, 에이전트는 영원히 멈춰 있게 됩니다. 미래의 업데이트에서 에이전트에 어떤 종류의 타임아웃이 도입될 것이라고 가정하는 것은 상당히 합리적이지만, 이 예제와 이 워크플로에서는 그러한 것이 존재하지 않습니다. 에이전트에게 그것의 터미널이 멈췄다는 것과 이를 고려해야 한다는 것을 알려야 합니다:

Figure 5: Fix for hung terminal
그림 5: 멈춘 터미널에 대한 수정

 

그리고 이로써 명령이 수정되었고 에이전트는 이제 더 정교한 코드 예제에 대해 반복 작업을 계속할 수 있습니다. 이 시점까지 우리는 에이전트가 코드가 컴파일되고 업로드되었는지에 대한 피드백뿐만 아니라 대상 장치에서 제대로 실행되었는지도 확인할 수 있는 방법을 확립했습니다.

결론

임베디드 시스템을 위한 바이브(vibe) 코딩을 시작하는 것은 직관적이지 않고 때로는 "블랙 매직"처럼 느껴질 수 있습니다. 에이전트와 임베디드 장치와의 성공적인 바이브 코딩 세션의 핵심은 에이전트가 항상 충분한 피드백을 받도록 하는 것입니다. 코드가 컴파일/업로드되는 것뿐만 아니라 대상 장치에서도 올바르게 기능하는지 알아야 합니다. 이 예시들 중 일부는 기본적인 것이었지만, 더 복잡하고 정교한 AI-인-더-루프 및 하드웨어-인-더-루프 개발을 위한 기초입니다. 이 예시들과 안내를 통해 이제 손가락 하나 까딱하지 않고 AI가 생성한 임베디드 코드를 작성하고, 컴파일하고, 실행할 수 있게 되었습니다.

작성자 정보

작성자 정보

Ari is an engineer with broad experience in designing, manufacturing, testing, and integrating electrical, mechanical, and software systems. He is passionate about bringing design, verification, and test engineers together to work as a cohesive unit.

관련 자료

홈으로 돌아가기
Thank you, you are now subscribed to updates.