이번 주 학습 요약
이번 주에는 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는 클라우드 자원의 사용량과 비용을 측정하고 최적화해 효율적으로 운영하는 방식이다.
기본적인 흐름은 다음과 같다.
- Measure: 현재 비용과 사용량을 측정한다.
- Optimize: 불필요한 비용이 발생하는 부분을 찾아 개선한다.
- 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 서비스를 설계하는 개발자가 되는 것을 목표로 학습을 이어가려고 한다.
