(225)

[SK네트웍스 Family 엔코아AI캠퍼스] AI 오케스트레이션 캠프 1기_10월 4주차 회고

이번 주 학습 요약이번 주에는 AI 에이전트와 워크플로우를 단순히 구현하는 것을 넘어, 실제 서비스로 운영하기 위해 필요한 기술들을 집중적으로 학습했다.지금까지는 LLM을 연결하고 n8n으로 여러 작업을 자동화하는 방법을 주로 배웠다면, 이번 주에는 서비스가 실패했을 때 어떻게 복구할 것인지, 개인정보를 어떻게 보호할 것인지, 배포 전 품질을 어떻게 검증할 것인지, 운영 비용은 어떻게 관리할 것인지에 초점이 맞춰졌다.또한 Electron을 활용한 데스크톱 애플리케이션 개발, AI 코딩 에이전트와 바이브 코딩, 프론트엔드와 백엔드의 아키텍처 등 개발 전반에 관한 내용도 함께 살펴봤다.이번 주의 핵심은 AI가 정상적으로 동작하는 것과 실제 운영할 수 있는 서비스를 만드는 것은 다르다는 점이었다.1. 인상 깊..

76일차 회고|n8n 오류 처리·재시도·멱등성과 DLQ|AI 오케스트레이션 개발자 국비지원

오늘 배운 내용오늘은 AI 오케스트레이션 시스템을 운영할 때 발생할 수 있는 **오류 처리, 재시도(Retry), 멱등성(Idempotency), DLQ(Dead Letter Queue)**에 대해 학습했다.지금까지는 n8n으로 워크플로우를 연결하고 LLM과 외부 API를 호출하는 방법을 주로 배웠다면, 오늘은 그 과정에서 오류가 발생했을 때 시스템을 어떻게 안전하게 운영할 수 있는지에 집중했다.특히 고객 문의를 여러 건씩 처리하는 배치(Batch) 워크플로우를 예시로, 일부 요청만 성공했는데도 전체가 실패한 것처럼 보이는 문제와 재시도로 인해 같은 문의가 중복 접수되는 문제를 살펴봤다.1. 오류가 발생했다고 무조건 재시도하면 될까?오류 유형에 따른 대응 방법API 호출에 실패했다고 해서 모든 요청을 다..

75일차 회고|FinOps·LLM 비용 최적화·서비스 아키텍처|AI 오케스트레이션 개발자 국비지원

오늘 배운 내용오늘은 AI 서비스를 개발하는 것에서 한 단계 더 나아가, 실제 서비스로 운영할 때 고려해야 할 비용과 시스템 자원, 모니터링, 아키텍처에 대해 학습했다.LLM을 활용한 기능을 구현하는 것만으로는 충분하지 않다. 서비스가 늘어나고 사용자가 많아지면 API 호출 비용과 서버 자원 사용량도 함께 증가한다.따라서 오늘 수업에서는 FinOps를 통한 비용 관리, LLM 사용량 최적화, Docker 기반 모니터링, 프론트엔드와 백엔드의 역할 분리를 중심으로 AI 서비스 운영에 필요한 내용을 살펴봤다.FinOps와 클라우드 비용 관리가장 먼저 살펴본 개념은 FinOps(Financial Operations)였다.FinOps는 단순히 클라우드 비용을 줄이는 활동이 아니라, 기술·재무·비즈니스 관점에서 ..

74일차 회고|릴리스 검증·AI 코딩 에이전트·기업형 AI 프로젝트|AI 오케스트레이션 개발자 국비지원

오늘 배운 내용오늘은 AI 서비스를 개발하는 과정에서 코드와 워크플로를 어떻게 관리하고 검증할지 살펴보고, 팀 프로젝트에서 해결할 문제를 어떻게 정의할지 논의했다. 단순히 AI가 코드를 작성하거나 답변을 생성하는 것에서 끝나는 것이 아니라, 변경 사항을 추적하고 결과를 검증하며 실제 배포와 운영까지 통제하는 과정이 중요하다는 점을 중심으로 정리할 수 있다.또한 AI 코딩 에이전트의 활용 방식과 개발 환경의 차이를 살펴보고, 기업형 기술 지원 자동화라는 방향 안에서 실제 프로젝트 주제를 탐색했다.1. 릴리스 관리와 품질 검증LLM 기반 서비스를 운영할 때는 프롬프트나 모델을 변경하는 것만으로도 결과가 달라질 수 있다. 따라서 변경 사항을 적용한 뒤에는 기존 결과와 비교하고, 품질 기준을 통과했는지 확인하는..

73일차 회고|보안 가드레일·바이브 코딩·웹 아키텍처|AI 오케스트레이션 개발자 국비지원

1. 오늘 배운 내용73일차에는 AI 에이전트의 보안 강화부터 바이브 코딩을 활용한 도구 개발, 그리고 웹 애플리케이션의 프론트엔드와 백엔드가 분리된 배경까지 폭넓게 살펴봤다.앞부분에서는 LLM이 생성한 답변에 개인정보나 내부 정보가 포함되지 않도록 검증하는 방법을 다뤘다. 이후에는 개발자가 직접 필요한 도구를 기획하고 구현하는 실습으로 이어졌다. 마지막에는 바이브 코딩으로 무언가를 만드는 것에서 그치지 않고, 실제 사용자를 찾고 제품을 운영하는 과정까지 생각해 봤다.2. 핵심 개념 정리2-1. LLM 워크플로우의 최종 출력 필터AI 에이전트가 질문에 적절한 답변을 생성하더라도, 그 답변에 개인정보나 내부 정보가 포함되어 있다면 그대로 사용자에게 전달해서는 안 된다.이를 방지하기 위해 최종 응답이 외부로..

72일차 회고|장애 대응·Electron·바이브 코딩|AI 오케스트레이션 개발자 국비지원

오늘 배운 내용72일차에는 안정적인 AI 워크플로를 설계하는 방법부터 Electron을 활용한 데스크톱 앱 개발, 성능을 측정하는 벤치마크 도구 설계까지 살펴봤다. 마지막에는 바이브 코딩으로 실제 서비스를 만든 사례를 통해 AI를 활용하는 개발 방식에 대해서도 생각해 볼 수 있었다.오늘 수업을 관통하는 주제는 단순히 기능을 구현하는 것이 아니라, 문제가 발생했을 때 대응할 수 있도록 설계하고, 구현 결과를 측정하며, 요구사항에 맞게 개선하는 것이었다.1. 장애가 발생해도 동작하는 워크플로 설계앞부분에서는 AI 에이전트와 워크플로가 외부 API나 LLM의 장애에 어떻게 대응해야 하는지 살펴봤다.서비스를 운영하다 보면 API 응답이 늦어지거나, 외부 서비스가 일시적으로 중단되거나, 특정 작업만 실패하는 상황..

[SK네트웍스 Family 엔코아AI캠퍼스] AI 오케스트레이션 캠프 1기_10월 4주차 회고

AI 오케스트레이션 캠프/주간 회고 2026. 10. 31. 20:07
728x90

이번 주 학습 요약

이번 주에는 AI 에이전트와 워크플로우를 단순히 구현하는 것을 넘어, 실제 서비스로 운영하기 위해 필요한 기술들을 집중적으로 학습했다.

지금까지는 LLM을 연결하고 n8n으로 여러 작업을 자동화하는 방법을 주로 배웠다면, 이번 주에는 서비스가 실패했을 때 어떻게 복구할 것인지, 개인정보를 어떻게 보호할 것인지, 배포 전 품질을 어떻게 검증할 것인지, 운영 비용은 어떻게 관리할 것인지에 초점이 맞춰졌다.

또한 Electron을 활용한 데스크톱 애플리케이션 개발, AI 코딩 에이전트와 바이브 코딩, 프론트엔드와 백엔드의 아키텍처 등 개발 전반에 관한 내용도 함께 살펴봤다.

이번 주의 핵심은 AI가 정상적으로 동작하는 것과 실제 운영할 수 있는 서비스를 만드는 것은 다르다는 점이었다.

1. 인상 깊었던 배움

1-1. 오류가 발생해도 서비스를 유지하는 설계

가장 중요하게 다룬 내용 중 하나는 장애 대응과 오류 처리였다.

AI 서비스를 운영하다 보면 LLM 응답이 늦어지거나, 외부 API가 중단되거나, 여러 작업 중 일부만 실패하는 상황이 발생할 수 있다.

이러한 상황에 대비하기 위해 다음 개념을 학습했다.

  • Timeout: 응답을 무한정 기다리지 않도록 제한 시간을 설정한다.
  • Retry: 일시적인 오류가 발생하면 정해진 조건에 따라 다시 시도한다.
  • Backoff: 재시도 사이에 대기 시간을 두어 서버 부하를 줄인다.
  • Fallback: 기존 처리 방식이 실패했을 때 대체 경로를 사용한다.
  • DLQ(Dead Letter Queue): 정상적으로 처리하지 못한 작업을 별도로 보관해 나중에 확인하거나 재처리한다.

특히 재시도 기능이 항상 좋은 해결책은 아니라는 점이 인상 깊었다.

예를 들어 고객 문의를 접수하는 API에서 서버가 요청을 정상적으로 처리했지만 응답을 전달하지 못했다고 가정해 보자.

이때 클라이언트가 무조건 다시 요청하면 같은 고객 문의가 두 번 접수될 수 있다.

이를 방지하기 위해 학습한 개념이 **멱등성(Idempotency)**이다.

멱등성은 같은 요청을 여러 번 실행하더라도 최종 결과가 중복되지 않도록 만드는 성질이다.

또한 여러 작업을 묶어 처리하는 배치 워크플로우에서는 전체 요청을 무조건 다시 실행하는 대신 성공한 작업과 실패한 작업을 구분해야 한다는 점도 배웠다.

단순히 오류를 잡는 것보다 오류가 발생했을 때 데이터와 처리 결과를 안전하게 유지하는 설계가 중요하다는 것을 확인할 수 있었다.

1-2. AI 에이전트의 보안과 가드레일

AI가 생성한 답변을 사용자에게 그대로 전달하는 것이 항상 안전한 것은 아니다.

답변에 개인정보나 API 키, 내부 시스템 정보가 포함될 수 있기 때문이다.

이번 주에는 이러한 문제를 방지하기 위한 출력 필터와 보안 가드레일을 학습했다.

출력 필터는 AI가 생성한 최종 답변을 사용자에게 전달하기 전에 민감한 정보가 포함되어 있는지 검사하는 장치다.

예를 들어 전화번호나 이메일 주소를 마스킹하거나, API 키가 노출되는 경우 응답을 차단하도록 설계할 수 있다.

또한 보안 검사 자체에 문제가 발생했을 때 요청을 어떻게 처리할 것인지도 중요하다.

  • Fail-Open: 보안 검사가 실패해도 요청을 통과시킨다.
  • Fail-Closed: 보안 검사가 실패하면 요청을 차단한다.

보안이 중요한 서비스에서는 검사가 정상적으로 이루어지지 않았다는 이유로 위험한 요청을 통과시키지 않도록 설계할 필요가 있다.

이와 연결해 개발자가 Git에 코드를 올리기 전에 민감한 정보를 검사하는 T-Scan 도구의 요구사항도 살펴봤다.

여기서는 API 키나 개인정보를 탐지하는 기능뿐 아니라 정상적인 데이터까지 잘못 차단하지 않도록 오탐과 미탐을 줄이는 과정도 중요하게 다뤘다.

1-3. AI 서비스의 품질 검증과 릴리스 관리

LLM 기반 서비스는 코드를 수정하지 않더라도 모델이나 프롬프트가 바뀌면 응답 결과가 달라질 수 있다.

따라서 단순히 프로그램이 실행되는지만 확인해서는 서비스의 품질을 보장하기 어렵다.

이번 주에는 릴리스별 검증과 품질 게이트(Quality Gate)를 학습했다.

품질 게이트는 미리 정한 기준을 충족한 버전만 다음 단계로 진행할 수 있도록 하는 검증 절차다.

예를 들어 새로운 버전의 AI 워크플로우를 배포하기 전에 동일한 테스트 질문을 실행하고, 답변 정확도와 응답 시간 등을 이전 버전과 비교할 수 있다.

또한 AI 코딩 에이전트가 워크플로우를 수정할 때 변경 이력을 기록하고 이전 버전과 비교하는 방법도 살펴봤다.

AI가 빠르게 코드를 작성해 주더라도 변경 사항을 이해하고 검증하는 책임은 여전히 개발자에게 있다는 점을 생각하게 하는 내용이었다.

1-4. FinOps와 LLM 운영 비용 관리

이번 주에는 AI 서비스의 운영 비용을 관리하는 FinOps(Financial Operations)도 학습했다.

FinOps는 클라우드 자원의 사용량과 비용을 측정하고 최적화해 효율적으로 운영하는 방식이다.

기본적인 흐름은 다음과 같다.

  1. Measure: 현재 비용과 사용량을 측정한다.
  2. Optimize: 불필요한 비용이 발생하는 부분을 찾아 개선한다.
  3. Operate: 개선된 상태를 지속적으로 관리한다.

특히 LLM 서비스는 API 호출 횟수와 토큰 사용량에 따라 비용이 달라지기 때문에 요청 단위로 비용을 추적하는 것이 중요하다.

하나의 워크플로우 안에서도 문서 분석, 정보 검색, 답변 생성 등 여러 단계에서 LLM을 호출할 수 있다.

따라서 전체 비용만 확인하는 것보다 어떤 단계에서 얼마나 많은 토큰을 사용하는지 파악해야 최적화할 수 있다.

또한 Docker 기반 모니터링과 서버 자원 사용량도 함께 살펴보면서 LLM API 비용뿐 아니라 CPU, 메모리, 스토리지 등 전체 시스템 운영 비용을 고려해야 한다는 점을 배웠다.

2. AI 코딩 에이전트와 개발 방식의 확장

이번 주에는 서비스 운영에 관한 내용 외에도 AI를 활용한 개발 방식에 대해 살펴봤다.

Electron과 데스크톱 애플리케이션

Electron은 HTML, CSS, JavaScript와 같은 웹 기술을 활용해 데스크톱 애플리케이션을 개발할 수 있는 프레임워크다.

웹 개발 기술을 활용할 수 있다는 장점이 있지만 메모리 사용량이나 배포 파일 크기 등도 고려해야 한다.

Qt, GTK, Flutter 등 다른 UI 기술과 비교하면서 개발 목적과 환경에 따라 적절한 도구를 선택하는 것이 중요하다는 점을 배웠다.

바이브 코딩과 AI 코딩 에이전트

AI 코딩 에이전트를 활용하는 개발 방식도 계속해서 다뤘다.

단순히 AI에게 코드를 작성해 달라고 요청하는 것이 아니라, 프로젝트 규칙과 요구사항을 먼저 정리하고 명세서와 실행 계획을 바탕으로 개발을 진행하는 방식이다.

특히 AGENTS.md와 같은 파일에 프로젝트 규칙을 정의하면 AI 에이전트가 작업할 때 참고할 수 있다.

AI가 코드를 빠르게 생성하는 것은 분명 장점이지만, 요구사항이 불명확하거나 결과를 검증하지 않으면 오히려 수정할 부분이 늘어날 수 있다.

결국 AI를 잘 활용하기 위해서는 코드를 생성하는 능력뿐 아니라 문제를 정의하고, 작업을 나누고, 결과를 검토하는 능력이 중요하다는 점을 다시 확인했다.

3. 팀 프로젝트와 연결되는 부분

이번 주에는 기업형 AI 프로젝트를 어떤 방향으로 설계할 것인지도 논의했다.

프로젝트 주제를 선정할 때는 단순히 AI를 활용할 수 있는지보다 실제로 해결할 문제가 있는지를 먼저 살펴봐야 한다.

주제를 검토하는 기준으로는 필요성, 데이터 확보 가능성, 구현 난이도, 결과물의 직관성, 팀원들의 관심도 등을 고려했다.

POS, 콘텐츠, 공공데이터, 쇼핑몰 고객 상담, 대학교 수업 관리 등 여러 도메인을 후보로 살펴봤다.

특히 고객 상담 자동화는 이번 주에 학습한 운영 기술과 연결할 수 있는 주제다.

예를 들어 쇼핑몰 고객 상담 시스템을 개발한다고 가정하면 다음과 같은 문제를 함께 고려해야 한다.

  • 고객의 개인정보가 AI 응답에 노출되지 않도록 필터링한다.
  • 외부 API 호출이 실패하면 재시도하거나 상담원 연결로 전환한다.
  • 동일한 고객 문의가 중복 접수되지 않도록 처리한다.
  • AI 답변의 정확도를 테스트하고 배포 기준을 마련한다.
  • 상담 요청별 LLM 사용량과 운영 비용을 측정한다.

이렇게 생각해 보면 이번 주에 배운 내용들이 서로 독립적인 기술이 아니라 하나의 서비스를 안정적으로 운영하기 위해 연결되는 요소라는 것을 알 수 있다.

4. 어려웠던 부분과 앞으로 해결할 과제

이번 주에는 개별 기술의 사용법보다 여러 기술을 함께 고려해야 하는 부분이 어려운 학습 과제로 남았다.

예를 들어 재시도 기능만 놓고 보면 실패한 작업을 다시 실행하는 단순한 기능처럼 보인다.

하지만 실제 서비스에서는 재시도로 인해 중복 데이터가 발생할 수 있고, LLM 호출 비용이 증가할 수도 있으며, 외부 API에 과도한 요청이 몰릴 수도 있다.

따라서 재시도 횟수와 대기 시간, 멱등성, DLQ, 비용 관리까지 함께 고려해야 한다.

보안과 품질 검증도 마찬가지다.

개념을 이해하는 것과 실제 워크플로우에서 예외 상황을 설계하고 검증하는 것은 별개의 문제이기 때문에 앞으로 직접 구현하며 확인할 필요가 있다.

이번 주에 학습한 개념들을 단순히 암기하는 것보다 실제 프로젝트의 어느 부분에 적용해야 하는지 연결해서 복습하는 것이 중요할 것 같다.

5. 새롭게 이해한 점

이번 주 학습을 통해 AI 서비스 개발에서 중요하게 생각해야 할 범위가 더 넓어졌다.

처음에는 LLM을 연결하고 원하는 답변을 생성하는 것 자체가 주요 목표였다면, 이제는 그 결과를 얼마나 안정적이고 안전하게 제공할 수 있는지까지 고려해야 한다.

특히 다음 세 가지가 서로 연결된다는 점이 중요했다.

첫째, 안정성이다. 오류가 발생해도 전체 서비스가 중단되지 않도록 설계해야 한다.

둘째, 신뢰성이다. 개인정보를 보호하고 AI의 출력 결과를 검증할 수 있어야 한다.

셋째, 운영 효율성이다. 품질을 유지하면서도 비용과 자원을 적절하게 관리해야 한다.

이러한 요소들이 갖춰져야 AI 워크플로우가 단순한 실습 결과물을 넘어 실제 서비스로 발전할 수 있다.

6. 현재 할 수 있는 것과 부족한 부분

이번 주에 학습한 내용을 기준으로 현재 이해한 부분과 앞으로 보완할 부분을 구분해 봤다.

현재 이해한 부분

  • 타임아웃, 재시도, 백오프, 폴백의 역할과 차이
  • 멱등성과 DLQ가 필요한 이유
  • 개인정보 출력 필터와 Fail-Closed의 개념
  • 릴리스 검증과 품질 게이트의 필요성
  • FinOps와 LLM 토큰 사용량 추적의 기본 구조
  • AI 코딩 에이전트를 활용한 명세 중심 개발 방식

추가 학습이 필요한 부분

  • n8n에서 오류 처리 워크플로우를 실제로 구성하고 검증하기
  • 멱등성 키와 중복 요청 방지 로직 구현하기
  • DLQ에 저장된 실패 작업의 재처리 흐름 만들기
  • AI 응답의 품질을 정량적으로 평가하는 기준 설정하기
  • 요청별 LLM 비용과 시스템 자원을 모니터링하기

개념을 설명할 수 있는 수준에서 나아가 실제 코드와 워크플로우로 구현하는 연습이 필요하다.

7. 다음 주 학습 계획

다음 주에는 이번 주에 학습한 운영 개념을 팀 프로젝트와 연결해 보는 것이 목표다.

특히 고객 상담 자동화와 같은 서비스를 가정하고 정상적인 처리 과정뿐 아니라 오류가 발생했을 때의 흐름까지 함께 설계해 보고 싶다.

우선 구현할 기능과 데이터 구조를 명확히 정의하고, 이후 오류 처리와 보안, 검증 기준을 단계적으로 추가하는 방향으로 접근할 계획이다.

또한 AI 코딩 에이전트를 사용할 때도 요구사항을 충분히 정리하고 생성된 코드를 검토하는 습관을 유지하려고 한다.

8. 이번 주 KPT 회고

Keep — 유지할 점

  • 새로운 개념을 단순히 외우지 않고 실제 서비스 사례와 연결해 이해하기
  • AI 코딩 에이전트의 결과를 그대로 받아들이기보다 요구사항과 비교하기
  • 팀 프로젝트 주제를 선정할 때 기술보다 해결할 문제와 데이터 확보 가능성을 먼저 고려하기

Problem — 개선할 점

  • 운영 관련 개념이 많아지면서 기술 간 관계를 한 번에 이해하기 어려운 부분이 있음
  • 개념 학습과 실제 구현 사이의 차이를 줄일 필요가 있음
  • 프로젝트에 적용할 기능의 범위를 구체적으로 정리할 필요가 있음

Try — 다음에 시도할 점

  • n8n으로 재시도와 오류 분기 워크플로우를 직접 구성해 보기
  • 멱등성과 DLQ를 간단한 고객 문의 처리 예제로 구현해 보기
  • AI 응답 품질과 비용을 확인할 수 있는 기본적인 평가 항목 정의하기
  • 팀 프로젝트 요구사항과 역할을 명확히 정리한 뒤 구현 범위 확정하기

9. 이번 주를 마치며

이번 주는 AI 오케스트레이션을 바라보는 관점을 확장할 수 있는 내용이 많았다.

지금까지는 여러 AI 에이전트와 외부 도구를 연결해 하나의 작업을 자동화하는 방법에 집중했다면, 이번에는 그 자동화가 실제 환경에서 안정적으로 동작하기 위해 무엇이 필요한지 살펴봤다.

특히 장애 대응, 보안, 품질 검증, 비용 관리가 별개의 문제가 아니라 서로 영향을 주고받는다는 점이 핵심이었다.

AI가 코드를 작성하고 워크플로우를 구성해 주더라도 서비스의 요구사항을 정의하고, 위험 요소를 판단하고, 결과를 검증하는 과정은 여전히 중요하다.

앞으로는 단순히 기능이 동작하는 프로젝트를 만드는 것에서 한 단계 더 나아가 실패 상황까지 고려하고, 운영할 수 있는 AI 서비스를 설계하는 개발자가 되는 것을 목표로 학습을 이어가려고 한다.

랩보다 AI 더 잘해지기

랩보다 AI 더 잘해지기

JASN OK / 제이슨 옥 RAPPER / Programmer

76일차 회고|n8n 오류 처리·재시도·멱등성과 DLQ|AI 오케스트레이션 개발자 국비지원

AI 오케스트레이션 캠프/일차별 회고 2026. 10. 31. 20:03
728x90

오늘 배운 내용

오늘은 AI 오케스트레이션 시스템을 운영할 때 발생할 수 있는 **오류 처리, 재시도(Retry), 멱등성(Idempotency), DLQ(Dead Letter Queue)**에 대해 학습했다.

지금까지는 n8n으로 워크플로우를 연결하고 LLM과 외부 API를 호출하는 방법을 주로 배웠다면, 오늘은 그 과정에서 오류가 발생했을 때 시스템을 어떻게 안전하게 운영할 수 있는지에 집중했다.

특히 고객 문의를 여러 건씩 처리하는 배치(Batch) 워크플로우를 예시로, 일부 요청만 성공했는데도 전체가 실패한 것처럼 보이는 문제와 재시도로 인해 같은 문의가 중복 접수되는 문제를 살펴봤다.

1. 오류가 발생했다고 무조건 재시도하면 될까?

오류 유형에 따른 대응 방법

API 호출에 실패했다고 해서 모든 요청을 다시 보내는 것은 좋은 방법이 아니다.

오류의 원인에 따라 재시도가 도움이 될 수도 있고, 오히려 서버 부하만 증가시킬 수도 있기 때문이다.

오류 유형예시대응 방법
영구적 오류 잘못된 입력값, 권한 없음 입력값 수정 또는 요청 거절
일시적 오류 네트워크 불안정, 서버 과부하 일정 시간 후 재시도
장기 장애 외부 서비스 중단 DLQ에 보관 후 재처리
예상하지 못한 오류 프로그램 버그, API 형식 변경 원인 확인 및 사람의 검토

HTTP 상태 코드도 함께 복습했다.

  • 400: 잘못된 요청
  • 401: 인증 실패
  • 403: 접근 권한 없음
  • 404: 요청한 리소스를 찾을 수 없음
  • 429: 요청 횟수 제한
  • 500번대: 서버 측 오류

여기서 주의할 점은 500번대 오류가 발생했다고 해서 서버가 아무 작업도 하지 않았다는 뜻은 아니라는 것이다.

서버가 이미 작업을 처리했지만 응답을 전달하는 과정에서 문제가 발생했을 수도 있다.

재시도 전략과 재시도 폭풍

재시도를 구현할 때는 최대 시도 횟수와 대기 시간을 정해야 한다.

대표적인 방법으로 지수 백오프(Exponential Backoff)가 있다.

처음에는 1초 기다리고, 이후 2초, 4초, 8초처럼 대기 시간을 늘리는 방식이다.

또한 여러 요청이 동시에 재시도하는 상황을 피하기 위해 지터(Jitter)라는 무작위 대기 시간을 추가할 수 있다.

재시도 기능이 여러 계층에 중복으로 적용되면 호출 횟수가 크게 증가하는 **재시도 폭풍(Retry Storm)**이 발생할 수 있다는 점도 배웠다.

특히 LLM API는 호출할 때마다 비용이 발생할 수 있으므로 재시도 횟수뿐 아니라 비용과 전체 대기 시간까지 고려해야 한다.

n8n에서는 다음 설정을 활용할 수 있다.

  • Retry On Fail: 실패 시 재시도
  • Max Tries: 최대 시도 횟수
  • Wait Between Tries: 재시도 사이 대기 시간

2. 타임아웃은 실패가 아니라 결과를 모르는 상태

오늘 가장 중요하게 다룬 개념 중 하나는 타임아웃(Timeout)이었다.

예를 들어 식당에서 음식을 주문했는데 40분이 지나도 음식이 나오지 않는 상황을 생각해 볼 수 있다.

이때 가능한 상황은 세 가지다.

  1. 주문이 주방에 전달되지 않았다.
  2. 주방에서 아직 음식을 만들고 있다.
  3. 음식은 완성됐지만 손님에게 전달되지 않았다.

음식이 나오지 않았다고 해서 무조건 주문이 실패한 것은 아니다.

API도 마찬가지다.

요청을 보낸 뒤 응답이 오지 않는다고 해서 서버가 작업을 처리하지 않았다고 단정할 수 없다.

이 상태에서 같은 요청을 다시 보내면 결제나 주문, 고객 문의가 중복으로 생성될 수 있다.

따라서 타임아웃 이후에는 단순히 다시 요청하는 것뿐 아니라 이전 요청이 처리되었는지 확인할 방법이 필요하다.

3. 멱등성(Idempotency)으로 중복 처리 방지하기

멱등성이란?

멱등성은 같은 작업을 여러 번 수행해도 한 번 수행했을 때와 최종 효과가 같도록 하는 성질이다.

예를 들어 쇼핑몰에서 결제 버튼을 눌렀는데 응답이 늦어 버튼을 세 번 눌렀다고 가정해 보자.

멱등성이 보장되지 않으면 결제가 세 번 이루어질 수도 있다.

하지만 멱등성을 적용하면 같은 결제 요청인지 확인하여 중복 결제를 방지할 수 있다.

HTTP 메서드와 멱등성

HTTP 메서드역할멱등성
GET 데이터 조회 보장
PUT 데이터 교체 보장
DELETE 데이터 삭제 보장
POST 데이터 생성 기본적으로 보장되지 않음

예를 들어 POST 요청으로 고객 문의를 접수할 때 같은 요청을 세 번 보내면 문의가 세 건 생성될 수 있다.

이 문제를 해결하기 위해 **멱등성 키(Idempotency Key)**를 사용한다.

멱등성 키의 동작 방식

POST /tickets
Idempotency-Key: R101

처음 R101이라는 키로 요청이 들어오면 서버는 티켓을 생성하고 처리 결과를 기억한다.

이후 같은 키와 같은 내용으로 다시 요청이 들어오면 새로운 티켓을 생성하지 않고 기존 결과를 반환한다.

여기서 중요한 점은 같은 요청을 재시도할 때 같은 키를 사용해야 한다는 것이다.

재시도할 때마다 현재 시각이나 새로운 UUID를 생성하면 서버는 이전 요청과 같은 작업인지 구분할 수 없다.

또한 같은 키로 서로 다른 요청 내용이 들어오면 오류로 처리하도록 설계해야 한다.

4. n8n 배치 처리 오류와 중복 접수 문제

오늘 강사님은 고객 문의를 여러 건씩 접수하는 Batch Intake 워크플로우를 이용해 오류 상황을 재현했다.

일부만 성공했는데 전체가 실패하는 문제

먼저 정상 문의 3건을 접수한 뒤, 다음 배치에서는 문의 3건 중 하나의 내용을 비워 오류를 발생시켰다.

문제는 일부 문의가 이미 접수되었는데도 전체 응답이 HTTP 500으로 반환되는 상황이었다.

요청을 보낸 쪽에서는 어떤 문의가 성공했고 어떤 문의가 실패했는지 알기 어려웠다.

이후 기존에 성공했던 요청을 다시 전송하자 티켓이 중복 생성되는 현상도 확인했다.

이처럼 배치 처리에서는 단순히 성공 또는 실패만 반환하는 것이 아니라 각 항목의 처리 결과를 구분하는 것이 중요하다.

항목별 처리 결과로 개선하기

강사님은 기준 워크플로우를 복사한 뒤 다음 기능을 추가하는 과정을 시연했다.

  • 요청 목록과 필수값 검증
  • 잘못된 항목은 rejected 처리
  • 티켓 생성 API에 타임아웃과 재시도 설정
  • 요청 ID를 이용한 멱등성 처리
  • 성공·실패 결과를 Merge로 병합
  • 항목별 처리 상태를 응답에 포함

예를 들어 결과를 다음과 같이 구분할 수 있다.

[
  {
    "id": "R101",
    "status": "created"
  },
  {
    "id": "R102",
    "status": "rejected",
    "reason": "missing text"
  },
  {
    "id": "R103",
    "status": "duplicate"
  }
]

위 코드는 개념을 설명하기 위해 재구성한 예시다.

이렇게 하면 요청을 보낸 쪽에서도 어떤 항목이 새로 접수되었고, 어떤 항목이 거절되었으며, 어떤 항목이 중복 요청인지 구분할 수 있다.

강사님은 수정한 워크플로우를 대상으로 테스트를 실행하고 기존 오류가 개선되는 결과를 확인했다.

5. LLM이 멈춰도 핵심 기능은 유지하기

우아한 성능 저하(Graceful Degradation)

우아한 성능 저하는 일부 기능이 고장 나더라도 핵심 서비스는 계속 제공하는 설계 방식이다.

강사님은 편의점 카드 단말기가 고장 났을 때 현금 결제만 받으면서 영업을 계속하는 상황에 비유했다.

AI 고객 문의 시스템에서도 같은 개념을 적용할 수 있다.

정상적인 상황에서는 LLM이 고객 문의를 분석하여 카테고리와 우선순위를 분류한다.

하지만 LLM이 중단되었다고 해서 문의 접수 자체를 중단할 필요는 없다.

이번 Challenge 1에서는 LLM이 실패하면 다음과 같이 대체값을 사용하도록 하는 과제를 다뤘다.

{
  "category": "미분류",
  "priority": "보통"
}

이렇게 하면 자동 분류 기능은 일시적으로 사용할 수 없더라도 문의 접수는 계속할 수 있다.

또한 대체 처리된 사실을 기록해 두면 나중에 사람이 확인해야 할 문의를 구분할 수 있다.

6. 잘못된 요청은 입구에서 차단하기

Challenge 2에서는 LLM이나 외부 API를 호출하기 전에 요청을 검증하는 방법을 다뤘다.

예를 들어 다음과 같은 규칙을 적용한다.

  • 요청 데이터가 목록이 아니면 HTTP 400 반환
  • 한 번에 10건을 초과하면 전체 요청 거절
  • 같은 배치에 동일한 요청 ID가 있으면 중복 항목 거절
  • 정상적인 요청만 다음 처리 단계로 전달

이러한 검증이 필요한 이유는 잘못된 요청에 비싼 LLM API를 호출할 필요가 없기 때문이다.

강사님은 수정 전 Challenge 2 테스트에서 4개 중 1개만 통과하는 것을 확인한 뒤, 입력 검증 로직을 추가하여 4개 테스트가 모두 통과하는 과정을 보여주었다.

또한 새로운 기능을 추가한 뒤 기존 기능이 정상적으로 작동하는지 확인하는 **회귀 테스트(Regression Test)**의 중요성도 강조했다.

7. DLQ로 실패한 작업을 보관하기

DLQ(Dead Letter Queue)란?

DLQ는 정상적으로 처리하지 못한 메시지를 버리지 않고 별도로 보관하는 공간이다.

예를 들어 고객센터에 문의했는데 시스템 장애로 접수하지 못한 상황을 생각해 보자.

상담원이 고객의 이름과 문의 내용을 기록하지 않으면 고객은 나중에 같은 내용을 다시 설명해야 한다.

하지만 실패한 문의를 별도로 저장해 두면 장애가 해결된 뒤 다시 처리할 수 있다.

AI 워크플로우에서도 동일하다.

실패 결과를 사용자에게 반환하는 것과 실패한 작업을 시스템에 보관하는 것은 서로 다른 문제다.

DLQ에 저장할 정보

강의에서는 다음과 같은 정보를 저장해야 한다고 설명했다.

  • 원본 요청 데이터
  • 실패 원인
  • 오류가 발생한 워크플로우 또는 처리 단계
  • 재시도 횟수
  • 실패 발생 시각

이 정보를 바탕으로 장애가 해결된 뒤 자동 또는 수동으로 재처리할 수 있다.

DLQ도 관리가 필요하다

DLQ에 실패한 작업을 저장한다고 해서 문제가 자동으로 해결되는 것은 아니다.

따라서 다음 사항을 관리해야 한다.

  • DLQ에 쌓인 메시지 수
  • 가장 오래된 메시지의 경과 시간
  • 메시지 보관 기간
  • 재처리 기능
  • 실패 원인별 발생 건수
  • 개인정보 접근 권한 및 보관 정책

특히 원본 요청에 개인정보가 포함되어 있다면 DLQ에도 개인정보가 저장될 수 있으므로 보안 관리가 필요하다.

강의에서는 Amazon SQS, RabbitMQ, Apache Kafka, Azure Service Bus 등의 메시징 기술도 함께 소개했다.

이번 시간에는 DLQ의 개념과 운영 원칙을 중심으로 학습했으며, 실제 재처리 과정은 이후 단계에서 다룰 내용으로 안내되었다.

8. 새롭게 이해한 점과 복습할 부분

오늘 수업에서 가장 중요한 개념은 요청이 실패한 것처럼 보여도 실제로는 일부 작업이 처리되었을 수 있다는 점이었다.

기존에는 API 호출에 실패하면 다시 호출하는 방식부터 생각하기 쉬웠지만, 오늘 배운 내용을 기준으로 보면 재시도 전에 확인해야 할 사항이 많다.

요청이 서버에 도착했는지, 이미 처리된 작업인지, 다시 시도해도 되는 오류인지, 중복 처리될 가능성은 없는지 등을 고려해야 한다.

또한 워크플로우를 만들 때 정상적으로 동작하는 과정만 생각하는 것이 아니라, 실패한 요청이 사라지지 않도록 관리하는 구조까지 필요하다는 점을 배웠다.

앞으로 복습할 부분은 다음과 같다.

  1. n8n의 Retry On Fail 설정과 직접 구현하는 재시도 로직의 차이
  2. 멱등성 키를 실제 API 요청과 데이터베이스에 적용하는 방법
  3. 배치 처리에서 성공·실패·중복 항목을 각각 관리하는 방법
  4. LLM 장애 발생 시 대체 처리 경로 구성
  5. DLQ에 저장된 작업을 다시 실행하는 재처리 워크플로우

9. 오늘의 회고

오늘은 AI 에이전트가 정상적으로 작동하는 상황보다 예상하지 못한 문제가 발생했을 때 어떻게 대응해야 하는지를 중점적으로 배운 시간이었다.

단순히 오류가 나면 다시 실행하도록 만드는 것만으로는 충분하지 않았다. 재시도가 오히려 중복 접수나 추가 비용을 발생시킬 수 있고, 일부 작업이 성공했더라도 전체 응답은 실패로 나타날 수 있기 때문이다.

특히 멱등성과 DLQ는 실제 서비스를 운영할 때 중요한 개념이라고 생각한다. 멱등성은 같은 요청이 여러 번 처리되는 문제를 방지하고, DLQ는 실패한 작업을 잃어버리지 않고 나중에 다시 처리할 수 있도록 도와준다.

오늘 배운 내용은 단순히 n8n의 기능을 익히는 것을 넘어, AI 워크플로우를 실제 서비스로 운영하기 위해 어떤 부분까지 고려해야 하는지 이해하는 데 필요한 내용이었다.

앞으로 프로젝트를 진행할 때도 정상적인 실행 결과뿐 아니라 오류 처리, 중복 방지, 실패 기록, 재처리까지 함께 고려해야겠다.

랩보다 AI 더 잘해지기

랩보다 AI 더 잘해지기

JASN OK / 제이슨 옥 RAPPER / Programmer

75일차 회고|FinOps·LLM 비용 최적화·서비스 아키텍처|AI 오케스트레이션 개발자 국비지원

AI 오케스트레이션 캠프/일차별 회고 2026. 10. 30. 18:36
728x90

오늘 배운 내용

오늘은 AI 서비스를 개발하는 것에서 한 단계 더 나아가, 실제 서비스로 운영할 때 고려해야 할 비용과 시스템 자원, 모니터링, 아키텍처에 대해 학습했다.

LLM을 활용한 기능을 구현하는 것만으로는 충분하지 않다. 서비스가 늘어나고 사용자가 많아지면 API 호출 비용과 서버 자원 사용량도 함께 증가한다.

따라서 오늘 수업에서는 FinOps를 통한 비용 관리, LLM 사용량 최적화, Docker 기반 모니터링, 프론트엔드와 백엔드의 역할 분리를 중심으로 AI 서비스 운영에 필요한 내용을 살펴봤다.

FinOps와 클라우드 비용 관리

가장 먼저 살펴본 개념은 FinOps(Financial Operations)였다.

FinOps는 단순히 클라우드 비용을 줄이는 활동이 아니라, 기술·재무·비즈니스 관점에서 클라우드 자원 사용량과 비용을 측정하고 최적화해 비즈니스 가치를 높이는 운영 방식이다.

수업에서는 다음 세 가지 흐름을 중심으로 설명했다.

  • Measure: 현재 사용량과 비용을 측정한다.

  • Optimize: 비용이 발생하는 원인을 분석하고 최적화한다.

  • Operate: 최적화된 상태를 지속적으로 관리한다.

비용을 줄이기 위해서는 먼저 어디에서 얼마나 비용이 발생하는지 알아야 한다.

특히 LLM 서비스는 단순히 서버 비용만으로 운영 비용을 판단하기 어렵다. 입력 토큰과 출력 토큰, 사용하는 모델, API 호출 횟수에 따라 비용이 달라지기 때문이다.

예를 들어 하나의 워크플로에서도 문서 분석, 검색, 답변 생성 등 여러 단계에서 LLM을 호출한다면 각각의 사용량을 구분해서 측정해야 한다.

또한 n8n 자체도 워크플로 실행과 데이터 처리, 동시 실행, 로그 저장 등에 CPU와 메모리를 사용한다. LLM 연산을 외부 API에서 처리한다고 해서 로컬 서버의 자원 사용량이 사라지는 것은 아니다.

결국 AI 서비스의 운영 비용은 API 비용과 서버·스토리지·네트워크 비용을 함께 살펴봐야 한다.

LLM 사용량 추적과 비용 최적화

오늘 수업에서 중요하게 다룬 부분 중 하나는 LLM 호출 비용을 구체적으로 추적하는 방법이었다.

단순히 월별 API 사용 금액만 확인하는 것이 아니라, 요청 단위로 사용량을 기록해야 한다.

예를 들어 다음과 같은 정보를 기록할 수 있다.

  • 요청 ID와 사용자

  • 실행된 워크플로 단계

  • 사용한 모델

  • 입력 토큰과 출력 토큰

  • 요청별 비용

이 데이터를 집계하면 사용자별, 모델별, 워크플로 단계별로 비용을 분석할 수 있다.

LLM 비용을 줄이는 방법도 여러 가지로 나눠 살펴봤다.

1. 불필요한 컨텍스트 줄이기

LLM에 전달하는 시스템 프롬프트와 대화 이력, 참고 문서가 길어질수록 입력 토큰이 증가한다.

따라서 현재 작업에 필요하지 않은 문서나 오래된 대화 기록, 중복된 지침을 제거해야 한다.

특히 RAG를 사용하면 전체 문서를 전달하는 대신 필요한 문서 조각만 검색해 전달할 수 있다. 다만 임베딩과 검색 과정에도 비용이 발생하기 때문에 전체 운영 비용을 기준으로 판단해야 한다.

2. 적절한 모델 선택과 라우팅

모든 작업에 가장 비싼 모델을 사용할 필요는 없다.

단순한 분류나 짧은 응답은 상대적으로 저렴한 모델에 맡기고, 복잡한 분석이나 높은 정확도가 필요한 작업은 더 높은 성능의 모델로 전달하는 방식이 가능하다.

이때 중요한 것은 단순히 저렴한 모델로 바꾸는 것이 아니라, 결과의 품질이 유지되는지 함께 평가하는 것이다.

3. 불필요한 API 호출 줄이기

같은 요청을 반복해서 처리하거나 코드로 해결할 수 있는 작업까지 LLM에 맡기면 호출 횟수가 증가한다.

규칙 기반 처리, 중복 노드 제거, 캐싱 등을 활용하면 불필요한 호출을 줄일 수 있다.

4. 입력 크기와 사용량 제한

과도하게 큰 입력이 들어오거나 특정 사용자가 API를 반복 호출하면 예상하지 못한 비용이 발생할 수 있다.

이를 방지하기 위해 입력 크기 제한, 사용자별 예산, 요청 횟수 제한 등을 적용할 수 있다.

이러한 정책은 단순한 비용 절감뿐 아니라 서비스의 안정적인 운영에도 필요하다.

Docker 기반 자원 관리와 모니터링

LLM API 비용을 최적화하더라도 서버 자체의 자원 관리가 제대로 이루어지지 않으면 서비스 운영에 문제가 생길 수 있다.

수업에서는 CPU, 메모리, 디스크 사용량과 Docker 컨테이너의 자원 제한을 함께 살펴봤다.

특히 n8n처럼 여러 워크플로가 동시에 실행되는 환경에서는 동시 실행 수를 무제한으로 늘리는 것이 좋은 방법은 아니다.

동시 실행이 많아지면 메모리 사용량이 증가하고, 실행 기록과 로그가 쌓이면 디스크 공간도 부족해질 수 있다.

이를 관리하기 위한 방법으로 다음과 같은 내용을 학습했다.

  • 워크플로 동시 실행 수 제한

  • 대기열을 활용한 요청 처리

  • 로그 보존 기간과 실행 기록 관리

  • Docker 컨테이너별 CPU·메모리 제한

  • 디스크 사용량 모니터링

  • 요청 제한 초과 시 HTTP 429 응답

Prometheus, InfluxDB, Grafana

모니터링 도구들의 역할도 구분해서 살펴봤다.

  • Prometheus는 시스템과 서비스의 메트릭을 수집하는 도구다.

  • InfluxDB는 시간에 따른 수치 데이터를 저장하는 시계열 데이터베이스다.

  • Grafana는 수집·저장된 데이터를 대시보드로 시각화한다.

강사님은 WSL2 환경에서 Docker Compose를 이용해 모니터링 환경을 구성하는 과정을 시연했다.

Grafana 대시보드에서는 시스템 자원과 컨테이너의 CPU·메모리 사용량, n8n 관련 실행 정보를 확인할 수 있었다.

특히 이 구조를 확장하면 n8n 워크플로에서 발생하는 LLM 토큰 사용량과 비용도 수집해 시스템 자원과 함께 확인할 수 있다는 점이 인상적이었다.

AI 서비스의 비용과 서버 상태를 별도로 관리하는 것이 아니라 하나의 운영 지표로 연결할 수 있기 때문이다.

사용자별 예산과 호출 횟수 제한

비용 최적화는 전체 서비스 차원뿐 아니라 사용자별 정책으로도 적용할 수 있다.

수업에서 다룬 Lab 3에서는 사용자별 일일 예산과 최근 요청 횟수를 기준으로 LLM 호출을 제한하는 구조를 살펴봤다.

예를 들어 사용자가 설정된 일일 예산을 초과했다면 LLM을 호출하지 않고 FAQ나 대체 안내를 반환할 수 있다.

또한 일정 시간 동안 허용된 요청 횟수를 초과하면 HTTP 429 응답을 반환하고, 다시 요청할 수 있는 시간을 안내할 수 있다.

여기서 중요한 것은 장애 상황과 예산 초과 상황을 구분하는 것이다.

  • 장애 상황: LLM 서비스 자체에 문제가 발생한 경우

  • 예산 초과: 서비스는 정상 작동하지만 사용자의 정책상 LLM 호출을 허용하지 않는 경우

두 상황은 원인이 다르기 때문에 대체 응답과 처리 정책도 구분해야 한다.

프론트엔드와 백엔드의 역할 분리

후반부에는 AI 서비스뿐 아니라 일반적인 웹 서비스의 구조를 이해하기 위한 프론트엔드와 백엔드의 역할 분리를 다뤘다.

과거에는 PHP와 같은 서버 중심 구조에서 화면을 구성하는 HTML과 비즈니스 로직, 데이터베이스 접근이 하나의 서버에 함께 들어가는 경우가 많았다.

이런 구조는 서비스가 커지고 모바일이나 다른 클라이언트가 추가될수록 유지보수와 재사용이 어려워질 수 있다.

이후 REST API와 AJAX, SPA 프레임워크 등이 발전하면서 화면을 담당하는 프론트엔드와 데이터를 처리하는 백엔드를 분리하는 구조가 보편화됐다.

각 영역의 역할은 다음과 같다.

프론트엔드

  • 화면 구성과 사용자 입력 처리

  • 기본적인 입력값 검증

  • 로딩 및 오류 상태 표시

  • 백엔드 API 호출

백엔드

  • 인증과 권한 확인

  • 비즈니스 규칙 처리

  • 입력값 재검증

  • 데이터베이스 트랜잭션

  • 외부 API 및 LLM 호출

데이터 저장소

  • 데이터 영속성 관리

  • 데이터 무결성과 제약 조건 유지

  • 인덱스 및 백업 관리

프론트엔드에서 입력값을 검증하더라도 백엔드에서 다시 검증해야 한다. 클라이언트의 검증은 사용자의 편의를 위한 것이지 보안 경계가 아니기 때문이다.

또한 프론트엔드가 데이터베이스에 직접 접근하거나 중요한 가격·권한 정책을 자체적으로 결정하도록 설계해서는 안 된다.

Streamlit, React, FastAPI, n8n의 역할

수업에서는 프로젝트를 구성할 때 선택할 수 있는 기술과 각각의 장단점도 비교했다.

Streamlit과 React

Streamlit은 Python만으로 빠르게 화면을 만들 수 있어 AI 기능을 테스트하거나 내부 대시보드, 프로토타입을 제작하는 데 유용하다.

반면 복잡한 UI와 대규모 서비스의 사용자 경험을 세밀하게 구성하려면 React나 Next.js 같은 프레임워크가 더 적합할 수 있다.

FastAPI와 Go

FastAPI는 Python 기반 백엔드 프레임워크로, 데이터 검증과 API 문서 자동 생성, AI 관련 라이브러리 활용에 강점이 있다.

Go는 컴파일된 실행 파일과 고루틴을 활용해 높은 동시성을 처리하는 데 장점이 있다.

두 기술 중 어느 하나가 무조건 더 좋은 것은 아니며, 서비스의 목적과 개발 환경에 따라 선택해야 한다.

n8n의 역할

오늘 수업에서 이해해야 할 중요한 부분은 n8n을 전체 백엔드와 동일하게 생각하지 않는 것이다.

n8n은 AI 에이전트와 RAG, 외부 API 연동 등 복잡하고 변경이 잦은 자동화 흐름을 구성하는 데 유용하다.

반면 인증·인가나 핵심 비즈니스 규칙처럼 안정성과 보안이 중요한 기능은 코드 기반 백엔드에서 관리하는 것이 적절할 수 있다.

전체적인 흐름은 다음과 같이 구성할 수 있다.

Frontend
   ↓
FastAPI
   ↓
인증 / 입력 검증 / 예산 확인
   ↓
n8n Webhook
   ↓
AI Agent / LLM / RAG
   ↓
Backend
   ↓
Frontend

이 구조에서 n8n은 백엔드가 호출하는 AI 워크플로 모듈로 볼 수 있다.

LLM 비용 사전 계산 CLI 도구

마지막으로 LLM 사용 전에 비용을 예측할 수 있는 CLI 도구 과제도 다뤘다.

핵심 요구사항은 decost 명령어를 어느 디렉터리에서든 실행할 수 있도록 만들고, 실제 API를 호출하지 않은 상태에서 입력·출력 토큰과 모델별 비용을 계산하는 것이다.

비용 계산은 다음과 같은 구조다.

예상 비용 =
(입력 토큰 수 / 1,000,000 × 입력 토큰 단가)
+
(출력 토큰 수 / 1,000,000 × 출력 토큰 단가)

OpenAI 모델의 토큰 수를 추정할 때는 tiktoken을 활용할 수 있다.

다만 토큰 수는 실제 요청에 포함되는 사용자 입력, RAG 검색 결과, 도구 호출 등에 따라 달라질 수 있다. 또한 모델과 제공 업체에 따라 토큰 계산 방식이 다르므로 추정치와 실제 사용량을 구분해야 한다.

과제 설계 과정에서는 다음과 같은 문서도 언급됐다.

  • TODO.md: 해야 할 작업 정리

  • SPEC.md: 기능 요구사항과 명세

  • IMPLEMENTATION_PLAN.md: 구현 계획

비용 계산 기능 자체에서 API를 호출하지 않는다는 점도 중요한 조건이었다.

멀티에이전트 협업과 검증

수업 후반에는 여러 AI 에이전트가 역할을 나눠 작업하는 방식도 다뤘다.

하나의 에이전트가 모든 작업을 처리하는 대신 조사, 작성, 검토, 사실 확인 등의 역할을 분리할 수 있다.

예를 들어 한 에이전트가 자료를 조사하고 다른 에이전트가 초안을 작성한 뒤, 별도의 에이전트가 내용을 검토하는 구조다.

다만 서로 다른 모델이 같은 내용을 말한다고 해서 그것이 반드시 사실이라는 의미는 아니다.

AI가 생성한 결과는 원본 자료와 비교해야 하며, 최종 방향과 결과물에 대한 책임은 사람이 가져야 한다.

프롬프트와 생성 파일, 작업 시간, 검토 및 승인 기록을 남기는 것도 협업 과정을 관리하는 데 중요하다.

오늘의 회고

오늘 수업을 통해 AI 에이전트를 만드는 것과 AI 서비스를 안정적으로 운영하는 것은 별개의 문제가 아니라는 점을 확인했다.

LLM을 호출하는 기능을 구현하는 데 집중하다 보면 토큰 비용이나 서버 자원, 로그 관리, 동시 실행 제한 같은 부분을 놓치기 쉽다.

하지만 실제 서비스에서는 이런 요소들이 서로 연결되어 있다. 호출이 많아지면 비용이 증가하고, 워크플로가 동시에 실행되면 서버 자원 사용량도 늘어난다. 사용량을 기록하고 모니터링하지 않으면 비용이 증가하는 원인을 파악하기도 어렵다.

또한 프론트엔드와 백엔드, n8n의 역할을 분리하는 이유도 조금 더 명확해졌다.

n8n을 모든 기능을 담당하는 서버로 생각하기보다는, 백엔드가 호출하는 AI 자동화 모듈로 바라보면 전체 서비스 구조를 설계하기 쉬워진다.

오늘은 여러 도구와 아키텍처를 직접 비교하고 설명을 들으며 운영 관점의 기술들을 살펴본 시간이었다. 강사 시연과 과제 안내를 통해 구성 방식을 확인했지만, 실제 환경에 적용하려면 각 도구의 설정과 실행 과정을 별도로 검증할 필요가 있다.

앞으로는 AI 기능을 구현하는 것뿐 아니라 얼마나 비용이 발생하는지, 어떤 자원을 사용하는지, 문제가 생겼을 때 어떻게 격리하고 대응할 것인지까지 고려하며 개발해야겠다.

핵심 정리

  • FinOps: 클라우드와 LLM 비용을 측정하고 최적화하는 운영 방식

  • LLM 비용 최적화: 컨텍스트 축소, 모델 라우팅, 호출 횟수 감소, 사용자별 예산 관리

  • 모니터링: Prometheus, InfluxDB, Grafana를 활용한 자원 및 사용량 관리

  • 시스템 운영: Docker Compose, 동시 실행 제한, 로그 관리, HTTP 429

  • 서비스 아키텍처: 프론트엔드, 백엔드, 데이터 저장소의 책임 분리

  • AI 오케스트레이션: FastAPI와 n8n을 조합한 AI 워크플로 구성

  • 개발 도구: LLM 비용을 사전에 추정하는 decost CLI 과제와 멀티에이전트 협업

 

랩보다 AI 더 잘해지기

랩보다 AI 더 잘해지기

JASN OK / 제이슨 옥 RAPPER / Programmer

74일차 회고|릴리스 검증·AI 코딩 에이전트·기업형 AI 프로젝트|AI 오케스트레이션 개발자 국비지원

AI 오케스트레이션 캠프/일차별 회고 2026. 10. 28. 18:12
728x90

오늘 배운 내용

오늘은 AI 서비스를 개발하는 과정에서 코드와 워크플로를 어떻게 관리하고 검증할지 살펴보고, 팀 프로젝트에서 해결할 문제를 어떻게 정의할지 논의했다. 단순히 AI가 코드를 작성하거나 답변을 생성하는 것에서 끝나는 것이 아니라, 변경 사항을 추적하고 결과를 검증하며 실제 배포와 운영까지 통제하는 과정이 중요하다는 점을 중심으로 정리할 수 있다.

또한 AI 코딩 에이전트의 활용 방식과 개발 환경의 차이를 살펴보고, 기업형 기술 지원 자동화라는 방향 안에서 실제 프로젝트 주제를 탐색했다.

1. 릴리스 관리와 품질 검증

LLM 기반 서비스를 운영할 때는 프롬프트나 모델을 변경하는 것만으로도 결과가 달라질 수 있다. 따라서 변경 사항을 적용한 뒤에는 기존 결과와 비교하고, 품질 기준을 통과했는지 확인하는 과정이 필요하다.

릴리스별 검증과 품질 게이트

릴리스 검증 워크플로는 특정 버전을 대상으로 미리 정해 둔 질문을 실행하고, 응답이 기대한 결과에 부합하는지 확인하는 방식이다.

예를 들어 릴리스 버전 1.2.0을 검증한다면 다음과 같은 과정을 거칠 수 있다.

* 검증 대상 릴리스 버전을 지정한다.
* 고정된 질문 세트를 실행한다.
* 응답의 정확성과 기대 결과 충족 여부를 확인한다.
* 검사 결과를 릴리스 버전과 함께 기록한다.
* 검증 결과에 따라 배포 가능 여부를 결정한다.

여기서 중요한 것은 단순히 워크플로가 오류 없이 실행되었다는 사실과 응답 품질이 기준을 통과했다는 사실을 구분하는 것이다.

이전 수업에서 다룬 품질 게이트, 평가 데이터, P50·P95 응답 시간 등의 개념도 이러한 검증 체계와 연결된다. 품질을 판단할 기준을 미리 정의하고, 모델이나 설정을 변경했을 때 그 기준을 만족하는지 반복적으로 확인해야 한다.

검증되지 않은 릴리스의 배포 방지

검증 절차를 개발자의 기억에만 의존하면 실수로 검사하지 않은 버전을 배포할 수 있다.

이를 방지하려면 배포 직전에 해당 버전의 검증 결과를 확인하도록 워크플로를 구성해야 한다. 검증 기록이 없거나 기준을 통과하지 못했다면 배포 단계가 진행되지 않도록 하는 것이다.

이러한 구조는 AI 개발에서도 일반적인 소프트웨어 배포와 마찬가지로 변경 이력과 품질 검증이 중요하다는 점을 보여 준다.

2. 워크플로 버전 관리와 AI 코딩 에이전트

변경 이력을 남기는 이유

8교시에서는 AI 코딩 에이전트가 워크플로를 수정할 때 발생할 수 있는 관리 문제도 다뤘다.

에이전트가 기존 워크플로를 수정하거나 노드를 추가·삭제하면 결과물은 바뀌지만, 어떤 작업이 언제 이루어졌는지 기록하지 않으면 이전 상태와 비교하기 어려워진다.

이를 해결하기 위한 아이디어로 워크플로 파일의 버전 관리와 변경 사항 비교 기능이 제시됐다.

필요한 기능은 다음과 같이 정리할 수 있다.

* 워크플로의 이전 버전과 현재 버전을 저장한다.
* 두 버전의 차이를 비교한다.
* 노드가 추가되거나 삭제된 부분을 구분한다.
* 노드 설정이나 연결 관계가 변경된 부분을 확인한다.
* 단순히 노드의 위치만 옮긴 경우처럼 의미 없는 차이는 구분하거나 제외한다.
* 터미널에서 특정 명령어로 실행할 수 있도록 해 사용성을 높인다.

특히 시각적으로 노드가 어디에 배치되어 있는지만 비교하는 것이 아니라, 워크플로의 실제 동작에 영향을 주는 변경 사항을 식별하는 것이 중요하다.

개발 환경에 따른 차이

강의에서는 여러 코딩 에이전트와 개발 환경을 사용하는 사례가 공유됐다. 도구마다 코드 작성 방식이나 결과를 확인하는 인터페이스가 다를 수 있으며, 계획서를 먼저 제공하고 작업 범위를 제한하는 방식도 언급됐다.

또한 UI가 있는 데스크톱 환경뿐 아니라, UI 없이 터미널에서 실행할 수 있는 방식도 다뤘다.

이 내용을 통해 AI 코딩 에이전트를 사용할 때는 단순히 어떤 모델이 더 똑똑한지를 비교하는 것뿐 아니라, 다음 조건도 고려해야 한다는 점을 정리할 수 있다.

* 작업 지시와 계획을 얼마나 명확하게 전달하는가?
* 수정 범위를 제한하고 기존 구조를 보존할 수 있는가?
* 변경 사항을 검토하고 이전 버전과 비교할 수 있는가?
* 로컬 환경과 서버 환경에서 동일한 작업을 재현할 수 있는가?
* 실행 결과와 오류를 추적할 수 있는가?

강의에서 소개된 버전 비교 도구는 이러한 문제를 해결하기 위한 아이디어였으며, 사용자가 직접 완성하거나 검증했다는 사실까지는 전사문에서 확인되지 않는다.

3. 기업형 AI 프로젝트 주제 선정

이번 수업에서는 기업의 기술 지원 업무를 AI로 자동화한다는 큰 방향 아래 여러 프로젝트 후보를 논의했다.

후보별 문제와 구현 가능성

POS·결제 단말기 오류 대응

매장에서 발생하는 결제, 네트워크, 주변기기 문제 등을 분류하고 해결 방법을 안내하는 방식이다. 해결하기 어려운 문제는 담당자에게 넘길 수 있다. 다만 실제 오류 데이터의 확보가 어려울 수 있다는 점을 고려해야 한다.

쇼핑몰 고객 지원 자동화

주문, 결제, 배송, 상품 관련 문의를 자동으로 처리하고, 복잡한 사례는 사람에게 연결하는 방식이다. 단순 FAQ 응답을 넘어 사용자의 구체적인 상황을 파악하고 적절한 해결 절차를 안내하는 것이 핵심이다.

콘텐츠 제작 자동화

쇼츠, 카드 뉴스 등 콘텐츠 제작 과정에서 기획과 제작 단계를 지원하거나 자막·음성·편집 관련 문제를 해결하는 방향이다. 활용 범위가 넓은 만큼 어떤 사용자의 어떤 작업을 자동화할지 구체적으로 정해야 한다.

공공데이터 기반 시설 유지보수 지원

따릉이 고장 신고나 자동차 결함 관련 데이터 등을 활용해 문제를 분류하고 대응 방법을 안내하는 방식이다. 다만 데이터가 실제 고장 원인이나 해결 절차까지 포함하는지 확인해야 한다.

웹 서비스·학습 플랫폼 기술 지원

파일 업로드 실패, 페이지 오류, 과제 제출 문제 등 웹 서비스 사용 중 발생하는 문제를 진단하고 해결 방법을 안내하는 방향도 관련 후보로 연결할 수 있다.

이 후보들은 수업에서 논의된 아이디어이며, 이 채팅에서 확인되는 내용만으로는 최종 프로젝트 주제가 확정되었다고 볼 수 없다.

좋은 주제를 고르기 위한 기준

아이디어가 흥미롭다는 이유만으로 바로 개발을 시작하기보다는, 다음 항목을 먼저 확인해야 한다.

* 실제로 해결할 가치가 있는 문제인가?
* 주요 사용자가 누구인지 명확한가?
* 필요한 데이터와 기술을 확보할 수 있는가?
* 외부 API와 서비스의 비용은 감당할 수 있는가?
* 기존 서비스나 오픈소스와 비교해 차별점이 있는가?
* 짧은 개발 기간 안에 핵심 기능을 구현할 수 있는가?
* AI가 자동으로 처리할 부분과 사람이 판단할 부분이 구분되어 있는가?

특히 공개 데이터가 존재한다고 해서 곧바로 좋은 프로젝트가 되는 것은 아니다. 데이터의 양뿐 아니라 실제 문제를 해결하는 데 필요한 정보가 들어 있는지 살펴봐야 한다.

4. AI 개발 도구와 서비스 운영에 관한 관점

마지막에는 Claude Code로 AI 헬스 코치를 개발한 사례를 통해, 개발 도구의 진입 장벽과 서비스 운영에 관해 이야기했다.

강의에서 소개된 사례는 개발 비용이 부족하다는 이유만으로 아이디어 구현을 포기할 필요는 없다는 취지였다. 터미널 기반 코딩 에이전트와 데이터베이스·배포 서비스를 활용하면 과거보다 적은 초기 비용으로 서비스를 만들어 테스트할 수 있다.

여기서 중요한 것은 도구 자체가 아니라 도구를 이용해 실제 문제를 해결하는 과정이다.

또한 경쟁 서비스가 많다는 사실을 무조건 부정적으로 볼 필요도 없다. 경쟁자가 있다는 것은 해당 문제를 해결하려는 사용자가 존재할 가능성을 보여 준다. 반대로 경쟁 서비스가 많다면 기존 서비스가 충분히 해결하지 못하는 문제를 찾아야 한다.

따라서 프로젝트 아이디어를 평가할 때는 다음과 같은 질문이 필요하다.

* 사용자가 이미 어떤 서비스를 이용하고 있는가?
* 기존 서비스에서 불편한 점은 무엇인가?
* 특정 사용자층이나 상황에 집중하면 더 나은 경험을 제공할 수 있는가?
* 개발한 기능이 실제 사용과 지속적인 가치로 이어질 수 있는가?

강의에서 소개된 사업 사례의 구체적인 매출이나 구독 수치는 전사 과정에서 불명확한 부분이 있으므로, 확인되지 않은 숫자를 성과의 근거로 삼기보다는 이러한 사업적 관점을 중심으로 이해하는 것이 적절하다.

5. 오늘의 핵심 개념 정리

오늘 다룬 내용을 연결하면 AI 서비스를 개발하고 운영하는 과정은 크게 세 부분으로 나눌 수 있다.

* 개발: AI 코딩 에이전트를 활용해 코드와 워크플로를 만든다.
* 관리와 검증: 변경 이력을 남기고, 이전 버전과 비교하며, 품질 기준을 통과했는지 확인한다.
* 운영과 개선: 검증되지 않은 배포를 막고, 실제 사용자의 문제와 피드백을 바탕으로 서비스를 개선한다.

프로젝트 주제 선정 역시 같은 관점에서 바라볼 수 있다. 구현할 수 있는 기능을 먼저 나열하기보다는 실제 문제를 정의하고, 필요한 데이터와 도구를 검토한 뒤, 검증 가능한 범위부터 구현하는 것이 중요하다.

6. 복습할 부분

* 릴리스 버전과 검증 결과를 연결해 관리하는 방법
* 고정된 평가 질문과 품질 게이트를 활용한 회귀 테스트
* 워크플로의 노드 추가·삭제·설정 변경을 비교하는 방법
* 터미널 기반 코딩 에이전트와 UI 기반 도구의 차이
* 공개 데이터의 실제 항목과 프로젝트 활용 가능성 확인
* 기존 서비스 조사와 프로젝트 차별점 정의
* AI 자동 처리와 사람에게 넘기는 절차의 경계 설정

7. 오늘의 회고

오늘 수업은 AI를 활용해 무언가를 빠르게 만드는 것뿐 아니라, 만든 결과를 어떻게 관리하고 검증할지, 그리고 무엇을 만들 가치가 있는지 판단하는 과정까지 함께 다뤘다는 점에서 의미가 있었다.

릴리스 검증에서는 단순히 실행이 성공했는지를 넘어 결과의 품질을 확인하고, 검증하지 않은 버전이 배포되지 않도록 절차를 설계하는 것이 중요했다. 워크플로 버전 관리 논의에서는 AI 에이전트가 결과물을 수정하는 환경일수록 변경 사항을 추적하고 비교할 수 있는 장치가 필요하다는 점을 확인할 수 있었다.

프로젝트 주제 논의에서도 기술적으로 구현할 수 있다는 사실만으로는 충분하지 않았다. 실제 사용자의 문제인지, 데이터가 충분한지, 기존 서비스와 무엇이 다른지, 주어진 기간 안에 완성할 수 있는지를 함께 검토해야 했다.

다만 이번 채팅에서 확인되는 자료는 주로 강의 설명과 시연, 아이디어 논의에 해당한다. 직접 구현하거나 검증한 결과는 확인되지 않으므로, 이를 개인적인 실습 성과로 기록하지는 않는다. 다음 단계에서는 후보 주제를 실제 데이터와 기존 서비스 조사로 구체화하고, 개발 과정에서는 변경 이력과 품질 검증을 함께 고려하는 것이 중요하다.

해시태그

#AI오케스트레이션 #AI코딩에이전트 #릴리스관리 #워크플로버전관리 #품질게이트 #회귀테스트 #기업형AI #AI프로젝트기획 #RAG #멀티에이전트

랩보다 AI 더 잘해지기

랩보다 AI 더 잘해지기

JASN OK / 제이슨 옥 RAPPER / Programmer

73일차 회고|보안 가드레일·바이브 코딩·웹 아키텍처|AI 오케스트레이션 개발자 국비지원

AI 오케스트레이션 캠프/일차별 회고 2026. 10. 27. 20:26
728x90

1. 오늘 배운 내용

73일차에는 AI 에이전트의 보안 강화부터 바이브 코딩을 활용한 도구 개발, 그리고 웹 애플리케이션의 프론트엔드와 백엔드가 분리된 배경까지 폭넓게 살펴봤다.

앞부분에서는 LLM이 생성한 답변에 개인정보나 내부 정보가 포함되지 않도록 검증하는 방법을 다뤘다. 이후에는 개발자가 직접 필요한 도구를 기획하고 구현하는 실습으로 이어졌다. 마지막에는 바이브 코딩으로 무언가를 만드는 것에서 그치지 않고, 실제 사용자를 찾고 제품을 운영하는 과정까지 생각해 봤다.

2. 핵심 개념 정리

2-1. LLM 워크플로우의 최종 출력 필터

AI 에이전트가 질문에 적절한 답변을 생성하더라도, 그 답변에 개인정보나 내부 정보가 포함되어 있다면 그대로 사용자에게 전달해서는 안 된다.

이를 방지하기 위해 최종 응답이 외부로 전달되기 직전에 한 번 더 검사하는 출력 필터를 적용할 수 있다.

  • 전화번호, 이메일, 직원 식별 정보 등 개인정보 패턴 검사

  • API 키나 내부 비밀 코드 등 민감한 정보의 노출 방지

  • 필요한 경우 민감한 문자열을 마스킹하거나 응답 차단

  • 차단한 이유와 처리 결과를 감사 로그로 기록

강의에서는 개인정보 마스킹과 필터링을 테스트하는 과정에서 일부 테스트가 실패하는 상황을 확인했다. 단순히 필터를 추가하는 것만으로 끝나는 것이 아니라, 정상적인 답변을 잘못 차단하는 오탐과 민감한 정보를 놓치는 미탐을 함께 점검해야 한다는 점이 중요하다.

2-2. Fail-Closed와 보안 테스트

보안 검사를 수행하는 구성 요소가 실패했을 때 어떻게 처리할지도 중요한 설계 요소다.

  • Fail-Open: 검사에 실패하더라도 요청을 통과시킨다.

  • Fail-Closed: 검사에 실패하면 요청을 차단한다.

보안이 중요한 워크플로우에서는 판별 모델이 공격 여부를 확실하게 판단하지 못하거나 검사 자체에 실패했을 때, 요청을 통과시키지 않는 Fail-Closed 방식을 고려할 수 있다.

또한 정상 요청과 공격 요청을 테스트 케이스로 만들어 반복 실행하고, 실패한 사례를 바탕으로 규칙과 코드를 개선해야 한다. 강의에서는 이러한 보안 테스트를 단계적으로 확장하고, 최종 출력 필터와 감사 로그를 추가하는 흐름을 살펴봤다.

2-3. 바이브 코딩으로 만드는 개발자용 보안 검사 도구

오늘 실습 주제로 제시된 도구는 T-Scan이라는 이름의 로컬 보안 검사 도구였다.

개발자가 Git 저장소에 코드를 커밋하기 전에 API 키나 개인정보가 포함되어 있는지 검사하는 것이 목적이다.

주요 요구사항은 다음과 같다.

  • 지정한 폴더와 하위 폴더를 재귀적으로 검사한다.

  • .env 파일의 API 키나 비밀번호뿐 아니라 다른 파일에 복사된 동일한 값도 탐지한다.

  • 주민등록번호, 전화번호, 이메일 등 개인정보 패턴을 검사한다.

  • 탐지된 파일명과 줄 번호를 표시한다.

  • 민감한 값 전체를 출력하지 않고 일부 문자만 남겨 마스킹한다.

  • 날짜나 주문번호처럼 비슷하게 보이는 일반적인 숫자를 과도하게 탐지하지 않는다.

  • 테스트용 가짜 키나 예외 처리 대상을 구분할 수 있도록 한다.

  • Git 커밋 전에 검사를 실행하고, 위험한 항목이 발견되면 커밋을 중단하는 방식으로 확장할 수 있다.

기존 명령어인 grep이나 ripgrep(rg)로도 문자열을 검색할 수 있지만, 이번 과제는 이를 넘어 민감 정보 유형을 구분하고, 결과를 안전하게 표시하며, 개발 과정에 연결할 수 있는 작은 도구를 직접 설계하는 데 초점이 있었다.

강의에서 강조한 점은 도구를 만드는 것뿐 아니라 요구사항을 구체적으로 정의하는 과정도 중요하다는 것이다. 무엇을 찾을지, 어떤 결과를 보여줄지, 어떤 오탐을 줄여야 할지 명확하게 정리해야 AI 코딩 에이전트가 원하는 결과에 가까운 도구를 만들 수 있다.

2-4. 바이브 코딩은 구현 이후가 더 중요하다

강의에서는 헬스장에서 복근 사진을 촬영하면 AI가 점수를 매기고 맞춤 운동 계획을 제공하는 앱 사례를 소개했다.

이 사례에서 주목할 점은 단순히 AI로 앱을 만들었다는 사실이 아니다. 아이디어를 발견하고, 초기 구현을 시도하고, 방향을 수정한 다음 실제 고객에게 도달할 방법을 찾았다는 점이다.

제품을 만들 때 고려해야 할 흐름은 다음과 같다.

  1. 문제 발견: 사람들이 실제로 불편해하거나 필요로 하는 것이 무엇인지 찾는다.

  2. 수요 검증: 본격적으로 개발하기 전에 잠재 고객의 반응을 확인한다.

  3. 제품 구현: AI 코딩 도구를 활용해 필요한 기능을 빠르게 만든다.

  4. 배포와 운영: 앱을 배포하고 사용자 관리, 데이터 저장, 결제 등의 환경을 구성한다.

  5. 고객 확보와 수익화: 목표 고객이 있는 채널을 찾고 적절한 가격 및 구독 모델을 설계한다.

강사는 앱 개발에 활용할 수 있는 데이터베이스·백엔드 서비스, 구독 결제, 분석 도구 등의 사례도 언급했다. 바이브 코딩으로 구현 비용이 낮아진 만큼, 처음 만든 결과물에 집착하기보다는 사용자 반응을 확인하고 필요하다면 방향을 수정하는 태도가 중요하다.

조회수나 다운로드 수만 보는 것이 아니라, 실제로 고객이 비용을 지불할 만큼 필요로 하는 제품인지 확인해야 한다는 점도 핵심이다.

2-5. 프론트엔드와 백엔드가 분리된 이유

후반부에는 웹 애플리케이션의 구조와 기술 발전 과정을 설명했다.

초기의 서버 중심 웹 애플리케이션에서는 화면을 표시하는 코드와 업무 규칙, 데이터베이스 접근 코드가 한 파일에 섞여 있는 경우가 많았다. 이런 구조는 기능이 늘어날수록 수정과 유지보수가 어려워지고, 여러 개발자가 같은 파일을 수정할 때 충돌이 발생하기 쉬웠다.

이러한 문제를 줄이기 위해 역할을 분리하는 구조가 발전했다.

  • 프론트엔드: 사용자가 보는 화면과 사용자 입력을 담당한다.

  • 백엔드: 업무 규칙을 처리하고 요청에 응답하며, 데이터와 외부 시스템을 다룬다.

  • 데이터 저장소: 데이터베이스 등을 통해 필요한 정보를 저장하고 조회한다.

  • API: 프론트엔드와 백엔드 등 서로 다른 구성 요소가 정해진 방식으로 데이터를 주고받도록 한다.

강의에서는 PHP 등 서버 사이드 스크립트의 역사, REST API의 등장, Node.js를 통한 서버 측 JavaScript 활용, SPA(Single Page Application)의 특징 등을 연결해 설명했다.

특히 바이브 코딩이 발전하더라도 소프트웨어의 구조를 이해하는 일이 사라지는 것은 아니다. AI가 코드를 만들어 주더라도 화면, 업무 로직, 데이터 저장소가 어떤 역할을 하는지 알아야 결과물을 검토하고 수정할 수 있다.

3. 오늘의 실습과 시연

T-Scan 보안 검사 도구

강의에서는 요구사항을 바탕으로 보안 검사 도구를 만드는 과정을 살펴봤다. 전사문에는 한 수강생이 Codex를 활용해 요구사항과 구현 명세를 먼저 정리하고, 설치형 프로그램 대신 터미널에서 실행할 수 있는 TUI(Text User Interface) 형태로 방향을 수정했다고 설명하는 부분이 있다.

또한 검사 결과에서 민감한 값을 마스킹해 표시하는 방식과 폴더를 지정해 검사하는 흐름을 시연했다. 결과를 한꺼번에 출력하는 대신 스트리밍 방식으로 중간 결과를 보여주는 개선 방향도 언급됐다.

다만 이 내용은 전사문상 강의 중 공유된 구현 사례이며, 내가 직접 동일한 도구를 구현하거나 테스트를 완료했다고 볼 근거는 없다.

사다리 타기 프로그램

시간이 남는 수강생을 위한 바이브 코딩 과제로 사다리 타기 프로그램도 제안됐다.

  • 참가자 수 입력

  • 참가자 이름 또는 번호 설정

  • 결과 항목 입력

  • 사다리 가로줄 생성

  • 시작 버튼을 눌러 이동 경로와 결과 확인

터미널에서 동작하는 TUI 방식과 Python 기반 UI, 웹 페이지 방식 등 여러 구현 방법이 언급됐다. 강의 후반에는 실제로 만든 사다리 프로그램의 화면과 동작을 공유하며, 같은 요구사항이라도 도구와 구현 방식에 따라 결과물이 달라질 수 있음을 보여줬다.

4. 프로젝트와 협업에 관해 생각해 볼 점

오늘 강의에서는 단위 프로젝트와 최종 프로젝트를 앞두고, 팀 안에서 자신의 역할을 찾는 태도도 강조됐다.

팀 프로젝트에서는 일부 인원만 구현을 맡고 나머지는 참여하지 않는 상황을 피해야 한다. 작은 기능이라도 역할을 나누고, 각자가 맡은 부분을 구현하거나 검증하는 경험을 쌓는 것이 중요하다.

또한 업무를 지시받을 때까지 기다리기보다 프로젝트에 필요한 일을 스스로 찾아 제안하는 태도가 필요하다는 이야기도 있었다.

이는 바이브 코딩을 활용할 때도 마찬가지다. AI에게 코드를 생성해 달라고 요청하는 것에서 끝나지 않고, 무엇을 만들지 정의하고 결과를 확인하며 다음 개선점을 찾아야 한다.

5. 새롭게 연결해 볼 내용

오늘 수업에서 다룬 내용은 서로 다른 주제처럼 보이지만 하나의 흐름으로 연결된다.

  • 보안: AI가 생성한 결과에 민감한 정보가 포함되지 않도록 검증한다.

  • 개발 도구: 반복적인 검사 작업을 자동화하는 도구를 직접 설계한다.

  • 제품 기획: 사용자의 문제를 발견하고 실제로 필요한 기능을 만든다.

  • 아키텍처: 구현된 기능이 프론트엔드, 백엔드, 데이터 저장소에서 어떤 역할을 하는지 이해한다.

  • 협업: 팀에서 필요한 일을 찾고 작은 단위로 나누어 함께 완성한다.

결국 AI가 코드 작성의 많은 부분을 도와주더라도, 무엇을 만들고 어떤 기준으로 검증하며 어떻게 사용자에게 전달할지는 개발자가 판단해야 한다.

6. 복습할 부분

  • Fail-Open과 Fail-Closed가 실제 워크플로우에서 어떻게 다르게 동작하는지 설명하기

  • 개인정보 마스킹과 민감 정보 탐지에서 오탐·미탐이 발생하는 이유 정리하기

  • T-Scan의 요구사항을 기능 단위로 나누고, 커밋 전 검사 흐름을 설계해 보기

  • 제품의 수요 검증과 구현, 배포, 고객 확보가 어떻게 연결되는지 정리하기

  • 프론트엔드, 백엔드, API, 데이터 저장소의 역할을 구분하고 설명하기

  • Node.js와 SPA가 기존 웹 애플리케이션 구조에서 어떤 변화를 가져왔는지 복습하기

7. 오늘의 회고

오늘은 AI를 활용해 기능을 만드는 방법뿐 아니라, 만든 결과물을 어떻게 검증하고 실제로 활용할 것인지까지 생각해 볼 수 있는 시간이었다.

보안 워크플로우에서는 답변을 생성하는 것만으로 충분하지 않으며, 최종 결과에 민감한 정보가 남아 있는지 확인하고 실패 상황까지 고려해야 한다. 개발 도구를 만드는 과제에서도 단순히 문자열을 검색하는 기능보다 정확한 탐지, 안전한 출력, 오탐 감소 등 실제 사용 환경에서 필요한 조건을 구체적으로 정의하는 일이 중요했다.

바이브 코딩으로 제품을 만드는 사례에서는 구현 자체가 최종 목표가 아니라는 점도 인상적인 주제였다. 제품을 완성하더라도 실제 사용자가 필요로 하지 않거나 적절한 고객에게 도달하지 못하면 의미 있는 결과로 이어지기 어렵다.

또한 웹 아키텍처의 역사를 살펴보면서 AI가 코드를 작성하는 시대에도 기존 기술의 구조와 역할을 이해하는 것이 중요하다는 점을 확인했다. 코드가 생성되는 속도가 빨라질수록 결과물을 판단하고 검증하는 기준이 필요하기 때문이다.

앞으로 단위 프로젝트와 최종 프로젝트를 진행할 때는 단순히 주어진 기능을 구현하는 데 그치지 않고, 내가 맡을 수 있는 역할을 먼저 찾고 요구사항을 구체화하는 것부터 시작해 보고 싶다. 다만 이번 수업에서 소개된 도구와 사례를 실제로 어느 수준까지 구현하고 검증했는지는 별도로 확인하면서 학습 내용을 정리할 필요가 있다.

#AI오케스트레이션 #바이브코딩 #LLM보안 #프롬프트인젝션 #개인정보마스킹 #TUI #개발자동화 #프론트엔드 #백엔드 #국비지원개발자

랩보다 AI 더 잘해지기

랩보다 AI 더 잘해지기

JASN OK / 제이슨 옥 RAPPER / Programmer

72일차 회고|장애 대응·Electron·바이브 코딩|AI 오케스트레이션 개발자 국비지원

AI 오케스트레이션 캠프/일차별 회고 2026. 10. 26. 17:54
728x90

오늘 배운 내용

72일차에는 안정적인 AI 워크플로를 설계하는 방법부터 Electron을 활용한 데스크톱 앱 개발, 성능을 측정하는 벤치마크 도구 설계까지 살펴봤다. 마지막에는 바이브 코딩으로 실제 서비스를 만든 사례를 통해 AI를 활용하는 개발 방식에 대해서도 생각해 볼 수 있었다.

오늘 수업을 관통하는 주제는 단순히 기능을 구현하는 것이 아니라, 문제가 발생했을 때 대응할 수 있도록 설계하고, 구현 결과를 측정하며, 요구사항에 맞게 개선하는 것이었다.

1. 장애가 발생해도 동작하는 워크플로 설계

앞부분에서는 AI 에이전트와 워크플로가 외부 API나 LLM의 장애에 어떻게 대응해야 하는지 살펴봤다.

서비스를 운영하다 보면 API 응답이 늦어지거나, 외부 서비스가 일시적으로 중단되거나, 특정 작업만 실패하는 상황이 발생할 수 있다. 이때 단순히 오류가 발생했다는 사실만 확인하는 것으로는 충분하지 않다. 장애가 발생했을 때 시스템이 어떻게 반응할지 미리 설계해야 한다.

주요하게 다룬 개념은 다음과 같다.

  •  
  • 타임아웃(Timeout): 응답을 무한정 기다리지 않도록 제한 시간을 설정한다.

  • 재시도(Retry): 일시적인 오류가 발생했을 때 일정한 조건에 따라 다시 시도한다.

  • 백오프(Backoff): 재시도 사이에 대기 시간을 두어 요청이 과도하게 몰리는 것을 방지한다.

  • 폴백(Fallback): 주된 처리 방식이 실패했을 때 대체 경로를 사용한다.

  • 장애 격리: 한 작업의 실패가 다른 기능까지 연쇄적으로 중단시키지 않도록 한다.

헬프데스크를 예로 들면 LLM이 응답하지 않을 때 모든 기능을 중단하는 대신, 기존 FAQ나 정책 데이터로 안내하거나 담당자에게 연결하는 방식을 생각할 수 있다. 일부 기능이 실패하더라도 나머지 기능은 계속 사용할 수 있도록 만드는 것이다.

또한 헬스 체크와 장애 주입을 통한 테스트도 다뤘다. 시스템이 정상적으로 작동하는지만 확인하는 것이 아니라, 의도적으로 장애 상황을 만들어 대응이 설계대로 작동하는지 검증하는 접근이다.

이 내용을 통해 안정적인 서비스는 오류가 발생하지 않는 서비스가 아니라, 오류가 발생했을 때도 적절하게 대응할 수 있는 서비스라는 점을 이해할 수 있었다.

2. Electron으로 데스크톱 앱 만들기

이어서 여러 UI 개발 기술을 비교하고 Electron을 활용한 데스크톱 앱 개발 과정을 살펴봤다.

Electron은 웹 기술을 이용해 데스크톱 애플리케이션을 만들 수 있는 프레임워크다. Chromium 기반 렌더링 엔진과 Node.js를 활용하며, HTML·CSS·JavaScript 또는 TypeScript로 화면과 기능을 구현할 수 있다.

웹 개발 경험을 활용해 데스크톱 프로그램을 만들 수 있다는 장점이 있지만, 배포 파일 크기나 메모리 사용량, 초기 실행 시간 등도 함께 고려해야 한다.

이번 수업에서는 Electron뿐 아니라 Qt, GTK, Flutter 등 여러 기술의 특징을 비교하면서 개발 목적에 따라 적절한 기술을 선택해야 한다는 점을 살펴봤다.

또한 프로젝트 규칙을 AGENTS.md에 정리하고, 명세서와 실행 계획을 만든 다음 구현을 진행하는 코딩 에이전트 활용 방식도 다뤘다.

여기서 중요했던 것은 단순히 AI에게 프로그램을 만들어 달라고 요청하는 것이 아니었다. 어떤 기술을 사용하고, 어떤 구조로 개발하며, 어떤 기준으로 테스트할 것인지 먼저 정리하는 과정이 필요했다.

3. 성능을 직접 확인하는 TBench 도구 설계

8교시에는 헬프데스크의 성능 개선 여부를 직접 확인할 수 있는 작은 벤치마크 도구를 설계하는 과정을 살펴봤다.

프로그램을 수정한 뒤 빨라진 것 같다고 느끼는 것과 실제 실행 시간을 측정해 개선 여부를 확인하는 것은 다르다.

벤치마크는 일정한 조건에서 프로그램을 반복 실행하고, 실행 시간과 결과를 수집해 비교하는 방식이다. 강의에서는 반복 실행 결과와 단계별 진행 상황, 그래프 등을 확인할 수 있는 도구를 예시로 들었다.

특히 개발 과정을 다음과 같이 구조화하는 접근이 중요했다.

  1. 사용자의 요청에서 요구사항을 정리한다.

  2. 필요한 기능과 동작 방식을 명세서로 작성한다.

  3. 명세서를 바탕으로 실행 계획을 세운다.

  4. 엔진과 UI를 분리해 구현한다.

  5. 엔진을 먼저 테스트하고, 이후 UI를 연결한다.

  6. 실행 결과를 확인하면서 개선한다.

엔진은 실제 측정과 결과 수집을 담당하고, UI는 그 결과를 사용자가 이해하기 쉽게 보여준다. 두 부분을 분리하면 핵심 기능을 독립적으로 테스트할 수 있고, 화면을 변경하더라도 측정 로직을 유지하기 쉽다.

이 과정은 앞에서 배운 장애 대응 설계와도 연결된다. 안정성을 확보할 때도, 성능을 개선할 때도 먼저 확인할 기준을 정하고 결과를 검증해야 한다.

4. 바이브 코딩에서 중요한 것은 도메인 지식

마지막에는 바이브 코딩으로 지도 기반 스포츠 퀴즈 게임을 만든 사례를 소개했다.

이 사례에서 인상적인 부분은 개발자가 단순히 AI에게 게임을 만들어 달라고 요청한 것이 아니라, 자신이 좋아하고 이해하는 스포츠 분야의 지식을 바탕으로 아이디어를 구체화했다는 점이다.

아이디어를 명세서로 정리하고, 모르는 부분은 AI에게 질문하며, 구현 결과를 확인한 뒤 원하는 방향으로 수정하는 과정을 반복했다. 결과물이 예상과 다르면 화면이나 결과를 바탕으로 다시 요청하고, 요구사항이 바뀌면 명세서도 함께 수정하는 방식이었다.

이 사례를 통해 바이브 코딩을 단순히 코드를 대신 작성해 주는 기술로만 이해해서는 안 된다는 생각이 들었다.

AI는 구현 시간을 줄이는 데 도움을 줄 수 있지만, 어떤 문제를 해결할지 결정하고 결과가 적절한지 판단하는 역할까지 자동으로 해결해 주는 것은 아니다. 자신이 이해하는 분야에서 문제를 발견하고, 사용자의 반응을 확인하며, 제품을 계속 개선하는 과정이 중요하다.

AI가 코드를 만드는 능력과 내가 문제를 정의하고 결과를 판단하는 능력은 서로 다른 영역이다. 바이브 코딩을 잘 활용하려면 두 가지를 함께 발전시켜야 한다.

5. 오늘의 회고

72일차 수업을 통해 AI 에이전트 개발에서 구현 자체만큼이나 설계와 검증이 중요하다는 점을 여러 관점에서 살펴봤다.

장애 대응에서는 실패 상황을 미리 예상하고 대체 경로를 준비해야 했다. Electron 앱 개발에서는 기술의 장단점을 이해하고 요구사항에 맞는 구조를 선택해야 했다. 벤치마크 도구 설계에서는 성능을 느낌으로 판단하지 않고 실제 측정 결과를 통해 확인해야 했다.

세 가지 주제는 서로 달라 보이지만 공통점이 있었다. 문제를 구체적으로 정의하고, 해결 과정을 작은 단계로 나누며, 결과를 확인한 뒤 개선한다는 것이다.

바이브 코딩을 활용하면 구현에 필요한 시간을 줄일 수 있지만, 요구사항이 불명확하거나 결과를 검증할 기준이 없다면 원하는 프로그램을 만들기 어렵다. 결국 AI에게 무엇을 요청할지, 어떤 결과가 올바른지, 어디를 개선해야 하는지를 판단하는 능력이 필요하다.

앞으로는 새로운 기능을 구현할 때 바로 코드 생성부터 시작하기보다, 먼저 요구사항과 완료 기준을 정리하는 습관을 들이고 싶다. 그리고 구현이 끝났다는 사실만으로 만족하지 않고, 테스트와 측정을 통해 실제로 원하는 결과가 나왔는지 확인하는 과정을 중요하게 생각해야겠다.

오늘 수업에서 다룬 내용을 실제 프로젝트에 적용할 때도 이 흐름을 유지하는 것이 목표다. AI를 단순한 코드 생성 도구가 아니라, 명확한 기준 아래 함께 문제를 해결하는 개발 도구로 활용해 나가고 싶다.

#AI오케스트레이션 #바이브코딩 #멀티에이전트 #Electron #워크플로자동화 #장애대응 #벤치마크 #코딩에이전트 #소프트웨어설계 #국비지원개발자

랩보다 AI 더 잘해지기

랩보다 AI 더 잘해지기

JASN OK / 제이슨 옥 RAPPER / Programmer

방명록