시작하며

나는 Apache Spark처럼 방대하고 복잡한 기술을 공부할 때, 우리는 보통 챗GPT나 클로드 같은 AI와 대화를 나눈다. 하지만 이것저것 묻다 보면 어느 순간 AI가 이전 대화와 맥락을 섞어버리거나, 엉뚱한 대답을 내놓는 경험을 해본 적이 있을 것이다.

단일 채팅창에서 "설치법 알려줘", "이론 알려줘", "코드 짜줘", "에러 고쳐줘"를 모두 시키는 것은 AI에게 너무 많은 역할을 부여하는 일이다. 그래서 나는 Spark를 보다 깊고 확실하게 파헤치기 위해, Claude의 멀티 에이전트 환경(/claude agents)을 활용하여 각자의 역할이 뚜렷한 6명의 AI 전문가 팀을 꾸렸보았다.

 

1. 에이전트를 6개로 쪼갠 이유: '에이전틱 워크플로우' 이론

이렇게 역할을 나눈 것은 단순히 멋있어 보이기 위함이 아니다. 최근 AI 업계에서 가장 중요하게 다뤄지는 '에이전틱 워크플로우' 이론 중 두 가지 핵심 패턴을 적용한 결과다.

  1. 역할 분담 (Role-Playing): AI는 '모든 것을 아는 만물상'으로 설정할 때보다, '엄격한 코드 리뷰어', '친절한 기초 선생님'처럼 좁고 명확한 페르소나를 부여할 때 훨씬 더 전문적이고 퀄리티 높은 답변을 내놓는다.
  2. 성찰과 피드백 (Reflection): 코드를 짜는 에이전트와 그것을 비판하고 검토하는 에이전트를 분리하면, AI 스스로 자신의 결과물을 테스트하고 최적화하는 강력한 피드백 루프가 형성된다.

2. Claude 멀티 에이전트 기법 : tmux 그리드 vs 에이전트 뷰

물론 예전에도 여러 터미널 창을 띄워두고(tmux 그리드 방식 등) 각각 다른 프롬프트를 쳐서 여러 claude AI를 띄워두는 분들이 있었다. 하지만 이 방식과 현재의 멀티 에이전트 환경은 '편의성' 면에서 확연이 차이가 났다.

  • 기존 방식의 '복붙 지옥': 화면만 나눠져 있을 뿐이다. 기획을 담당하는 창에서 나온 결과를 내가 직접 복사해서 코딩하는 창에 붙여넣고, 거기서 에러가 나면 또 에러 로그를 복사해서 디버깅 창에 붙여넣어야 했다. 공부보다 '메시지 나르기'에 힘이 다 빠진다.
  • 멀티 에이전트의 압도적 편의성: 반면, /claude agents 기반 환경에서는 에이전트들이 서로의 맥락을 유기적으로 넘겨받을 수 있다. 나는 그저 "Tutor 에이전트가 만든 코드를 Review 에이전트가 검토해 줘"라고 지휘만 하면 된다. 중간에서 복사-붙여넣기를 할 필요 없이, 물 흐르듯 학습과 개발이 이어진다.

3. 나의 멀티 Agent 스파크 훈련소 아키텍처

각 에이전트의 역할

실제 제가 구축한 멀티 에이전트 시스템은 각자의 명확한 책임 범위와 작업 원칙을 가진 6개의 전문가 페르소나로 구성됩니다.

1. Spark 환경 구축 에이전트 (Infra Expert)

  • 나의 OS와 학습/운영 목적, 데이터 규모를 분석하여 최적의 Spark 아키텍처(Local, YARN, Kubernetes 등)를 제안합니다.
  • 단순 설치가 아니라 docker-compose.yml 및 spark-defaults.conf를 작성하며, 왜 해당 값을 설정했는지 메모리/코어 튜닝의 이유를 함께 설명해 줍니다.
  • 환경 구축이 끝나면 정상 동작을 확인하는 헬스체크 스크립트까지 제공하여 완벽한 실습 기반을 마련합니다.

 

2. Spark 코딩 선생님 에이전트 (Tutor)

  • '개념 설명 → 최소 동작 예제 코드 → 직접 해보는 연습 문제 → 성능 비교 실험'이라는 완벽한 교수법을 따릅니다.
  • RDD와 DataFrame의 성능 차이를 직접 체감할 수 있는 벤치마크 코드를 짜주고, Spark UI에서 DAG와 Stage의 어떤 부분을 봐야 하는지 정확히 짚어줍니다.

3. 프로젝트 기획 에이전트 (Senior Architect)

  • 코드는 단 한 줄도 짜지 않고 오직 '설계'에만 집중하는 아키텍트입니다.
  • Data Skew나 OOM(Out of Memory) 같은 예상 리스크와 대응 전략까지 미리 고민해 줍니다.

 

4. 프로젝트 코딩 에이전트 (Senior Data Engineer)

  • 기획 에이전트가 만든 PROJECT_PLAN.md를 넘겨받아 프로덕션 레벨의 PySpark/Scala 코드를 작성합니다.
  • 재실행해도 결과가 꼬이지 않는 멱등성(idempotency)을 지키고, 하드코딩 없이 설정을 분리하며, 철저한 모듈화 원칙을 지켜 코드를 구현합니다.

5. 검토/최적화 에이전트 (Reviewer - 듀얼 모드)

  • 가장 핵심적인 에이전트로, 상황에 따라 두 가지 모드로 똑똑하게 변신합니다.
  • 학습 모드(Practice 채점자): 내가 푼 연습 문제를 정답지와 비교해 채점해 줍니다. 틀린 부분의 원리를 다정하게 설명하고 한 단계 깊은 학습 팁을 얹어줍니다.
  • 실전 모드(Production 리뷰어): 코딩 에이전트가 짠 실전 코드를 매섭게 리뷰합니다. 대용량 처리 시 병목을 일으키는 collect() 남발, 파티셔닝 누락, 비효율적인 UDF 사용 등을 찾아내고 REVIEW_REPORT.md를 발행합니다.

6. 샘플 데이터 생성 에이전트 (Data Gen Expert)

  • Spark native API(spark.range, F.rand 등)를 활용해 대용량 환경에서도 빠르게 테스트 데이터를 찍어냅니다.
  • 단순한 균등 분포 데이터뿐만 아니라, 특정 키에 데이터가 90% 쏠려있는 '스큐(Skewed) 데이터', NULL과 빈 문자열이 섞인 '더티(Dirty) 데이터', 스트리밍용 시계열 데이터 등 상황에 맞는 극한의 테스트 환경을 조장해 줍니다.

마무리하며

지금까지 소개한 6-Agent 시스템은 사실 "내가 Spark를 제대로 배워보려면 이런 조력자들이 필요하겠다"라는 고민과 아이디어에서 직접 설계해 본 가설이자 실험 모델입니다.

기획자, 엔지니어, 깐깐한 리뷰어, 테스터까지 각자의 역할이 뚜렷한 완벽한 팀을 꾸린 것 같지만, 실제로 이 아키텍처가 학습 과정에서 얼마나 강력한 시너지를 낼지, 혹은 예상치 못한 한계점이나 불편함을 드러낼지는 저도 본격적으로 부딪혀봐야 알 수 있을 것 같습니다.

그래서 다음 블로그 글부터는 이 멀티 에이전트 아키텍처를 실제로 가동하여 Spark의 내부 동작 원리를 학습하고 실전 프로젝트를 진행하는 과정을 연재할 계획입니다.

그 과정에서 다루게 될 Spark의 깊이 있는 기술적 지식은 물론이고, 실제로 이렇게 에이전트를 나누어 학습해 보았을 때 얻을 수 있었던 진짜 이점과 생각대로 잘 안 되었던 부분(시행착오)까지 가감 없이 공유해 보겠습니다.

+ Recent posts