“이 세상에 같은 것은 없다.” 불교 용어 ‘무상(無常)’은 모든 것은 변하고 변한 것은 이전과 같지 않다, 이 세상에 변치 않는 건 없다는 이치를 담고 있다. 거울 속의 내가 어제의 나와 같아 보이겠지만, 그건 변화를 보지 못했을 뿐이다. 내 몸을 이루는 세포는 끊임 없이 분열하며 태어나고 죽기를 반복한다. 하루하루 지날수록 사고는 더 깊어지고 경험은 쌓인다. 그렇기에 오늘의 나는 어제의 나와 같을 수가 없다.
‘무상’의 의미를 깨닫기까지는 2년이란 시간이 걸렸다. 데브렐로 이직한 뒤 내게는 한 가지 고민이 생겼다. 데브렐의 여러 활동이 기획 의도대로 사내 개발 문화와 구성원의 성장에 실질적인 도움이 되는지 의문이 들었다. 문화는 사회의 주요 행동 양식이다. 관여나 지시가 없는 상황에서 조직이나 사회가 공통적으로 보이는 행동이다.
문화는 강제적으로 형성시킬 수도 있지만, 대체로 사회적 경험과 환경, 상호작용에 의해서 자발적으로 형성된다. 데브렐의 일은 대체로 후자에 가깝다. 조직 구성원의 인식과 생각을 바꿔 더 나은 방향으로 나아가게 하는 식이다. 그래서 변화는 더딜 수밖에 없다. 변화가 바로 보이지 않기 때문에 덧없게 느껴지기까지 한다. 하지만 지금은 안다. ‘무상’의 의미를 다시금 깨닫는 일이 계기가 됐다.
1년 전이었다. 사내 해커톤에 참가한 한 참가자가 다가와 최근 하고 있는 일과 고민을 이야기한 적이 있다. 이런 저런 업무를 이렇게 자동화할 수 있을지 의견을 구했다. 업무 효율성과 생산성을 주제로 한 사내 해커톤 참가자였다. 이후 업무상의 다른 비효율성 개선에 관심을 갖게 되었다고 했다. ‘구성원 모두가 우리 주위의 비효율성에 관심을 기울이고 개선해 모두의 생산성을 높인다’는 해커톤의 기획 의도가 공허한 문구가 아님을, 느리지만 조직에 변화를 만들어가고 있음을 확인한 순간이었다.
내게 무상의 의미를 깨닫게 한 1년 전의 그 일처럼, 2024년 9월 개최한 9oormthonRAID SUMMER1가 해커톤은 개발자만의 행사로 여기는 비 개발직군의 관심을 이끌어내고, 우리 주위 업무상 비효율성을 개선하는 데 일조했을까? 4개월 간 있었던 개개인의 변화를 듣기 위해 참가팀 중 Wall Breakers 참가팀(Aiden, Jessica, Lyght)을 만나봤다.
written by Snow, Aiden, Jessica, Lyght
edited by Snow
Q. 자기 소개 부탁해요.
Jessica(한연희)_ 구름의 콘텐츠 개발 매니저예요. 코딩 교육 콘텐츠를 제작하거나 교육 상품을 기획, 제안하는 일을 하고 있어요. 구름에 입사한지는 2년이 조금 넘었네요. (웃음) 디자인을 전공했지만, 모바일 앱 개발 교육 과정을 수료해 개발도 어느 정도 알아요. 웹 개발 연합 동아리에서 활동하기도 했죠.
가끔은 반복되는 업무에서 벗어나 다양한 도메인의 제품을 경험해 보고 싶기도 하고, 평소 협업 기회가 없던 분들과 프로젝트를 함께 하고 싶어서 해커톤에 참여했어요.
Aiden(김형준)_ 구름에서 전략기획 리드 직을 맡고 있어요. 신규 사업 기회 발굴, 기존 서비스의 수익성 분석 및 개선, 투자사 대응 업무를 담당하죠. 구름의 서비스가 시장에서 차별화된 가치를 제공하고 성장을 지속할 수 있도록 돕고 있어요.
이번 해커톤은 두 번째 참여인데요. 개발자와 직접 협업하며 더 깊이 이해하고 싶어서 해커톤에 참여했어요. 아이디어톤에 제안한 아이디어를 서비스로 구현해볼 수 있다는 말에 고민할 것도 없이 지원했죠.
Lyght(김정래)_ IDE Studio SQD에서 풀스택 엔지니어로 일하고 있어요. 기획, 경영 분야에 특화된 서비스를 만드는 것은 이번이 처음이라서 이번 해커톤이 더 기억에 남아요. 구름에서 담당하고 있는 제품과 완전히 다른 고객을 위한 서비스를 기획하고 기술 스택을 정하고 기능을 구현하며 경험의 폭을 넓힐 수 있었어요. 이번 경험이 향후 제품 개발에 큰 도움이 될 거 같아요.
Q. 어떤 서비스를 만들었나요?
Aiden_ 제안요청서(RFP, request for proposal)를 기반으로 사업제안서와 발표자료를 생성해주는 서비스예요. GPS(Goorm Proposal System)라고 이름 지었죠.
GPS는 제안요청서를 분석하고 유사한 기존 사업 제안서를 활용해 제안요청서에 알맞는 새로운 사업제안서 초안을 작성해줘요. 사업제안서를 바탕으로 발표자료까지 만들어주죠.
먼저 텍스트로 이루어진 사업제안서를 ‘검색 증강 생성2(RAG, Retrieval-Augmented Generation)’으로 학습해요. 여기에 PDF 형태의 제안요청서를 업로드하면 기존 사업제안서를 바탕으로 목차별로 내용을 생성해줘요. 이렇게 만들어진 사업 제안서는 마크다운 기반의 발표자료 제작 도구인 Marp(Markdown Presentation Ecosystem) 프레임워크로 발표자료로 만들게 구현했어요.
Q. 왜 이런 서비스를 생각했나요?
Aiden_ 구름은 B2C뿐 아니라 B2B, B2G까지 비즈니스가 다양해요. 그래서 사업제안서 작성이 빈번한데요. 제안서 작성 업무는 특정 시즌에 몰려서 업무가 가중되는 특징이 있어요. 게다가 비슷한 내용을 매번 처음부터 다시 써야 해서 시간과 힘이 많이 들어요.
제안서 작성이 익숙하지 않은 사람도 이전에 작성한 여러 제안서를 토대로 새로운 사업제안서와 발표자료의 초안을 줄 수 있다면, 사업제안서 작성의 어려움을 조금이라도 덜어줄 수 있을 거라고 봤어요. 백지에서 시작하는 것보다는 초안이 있는 게 아무래도 도움이 될 테니까요.
Q. 기획, 개발, 디자인 과정에서 어떤 점에 주안점을 두었나요? 만든 과정도 궁금해요.
Aiden_ 기획서 대신 피그마로 와이어프레임을 만들었어요. 해커톤이란 짧은 시간에 기획서, 기능명세서 등을 다 만드는 건 아무래도 힘들거든요. 피그마에서 와이어프레임과 화면의 각 기능에 설명을 달아 팀원이 쉽게 이해할 수 있게 했어요.
팀이 구성되고 만나기 전, 사실 만들 제품이 사업제안서 작성 서비스라서 팀원의 도메인 이해가 가장 걱정이었어요. 생소할 수밖에 없을 테니까요. 다행히도 팀원 모두 사업제안서를 작성해 봤더라고요.
개발은 애자일(Agile)하게 진행했어요. 시간 관계상 개발이 어려운 부분은 과감히 생략하거나 꼭 필요한 기능인 경우 추가로 기획하는 식으로 만들었어요.
생성형 AI의 환각(Hallucination)이나 제안서 내용의 품질과 정확도가 염려되어서 제안요청서만 주면 최종 결과를 내뱉게 완전히 자동화하진 않았어요. 중간 중간 사람이 개입할 수 있게 서비스 흐름을 설계했어요.
GPS에 제안요청서를 올리고, 목록에서 이 제안요청서와 유사한 사업을 선택해요. 만약 연관된 사업이 없다면 목록에 없는 사업을 업로드해 추가할 수도 있어요. 그러면 GPS는 제안요청서 내 목차를 추출해 새로운 목차를 만들어요. 목차가 없으면 사업제안서를 토대로 최적의 목차를 생성하죠. 다음 각 목차별로 세부 내용을 생성해 제안서를 완성해요. 물론 언제든 프롬프트를 수정해 결과에 개입할 수 있게 했죠.
Jessica_ 전 구름의 사업 팀 소속인데, 평소 제안서를 작성할 때 비즈니스 이해를 바탕으로 대상(초·중·고등학교 학생, 대학생 및 취업 준비생, 주니어 개발자, 일반 직장인)과 교육 도구(goormEDU, goormIDE, goormDEVTH, goormEXP)를 정한 뒤 콘텐츠 커리큘럼을 구성했어요. 이러한 과정을 떠올리며 Aiden, Lyght와 계속 논의하며 서비스를 디자인했어요.
과업 지시서를 읽고 목차를 구성한 뒤 사업 제안서를 한글 파일로 만들고, 발표 자료를 만드는 일련의 제안서 작업을 웹 인터페이스로 옮기는 것은 생각보다 쉽지 않았어요. Aiden과 계속 논의하고 고민하고, Lyght가 만든 프로토타입의 PoC(Proof of Concept)와 시안이 맞는지 체크하며 디자인을 계속 수정했어요.
UI는 구름의 GDS(Goorm Design System)3 SQD에서 만든 Vapor GDS를 사용한 덕분에 빠르게 만들 수 있었어요. 유저플로우에 맞춰 이질감이 들지 않도록 UX(사용자 경험)를 설계하는 건 쉽지 않았지만요.
Lyght_ 개발자는 저 혼자라서 프론트엔드, 백엔드, AI를 모두 구현해야 했어요. 아무래도 시간이 많이 부족했죠. 그래서 처음부터 부가 기능보다는 핵심 기능 구현에 집중하려고 노력했어요.
프론트엔드 개발은 Vapor GDS를 사용한 덕분에 빠르게 디자인을 구현할 수 있었어요. 디자인을 맡은 Jessica가 디자인 시안을 가능한 한 Vapor 컴포넌트만으로 만들어줘서 레이아웃을 만드는 데 시간이 그리 오래 걸리지 않았어요.
백엔드 개발도 간결한 개발을 기조로 삼았어요. DB는 메모리 Map 구조(키와 쌍으로 이루어진 자료구조)를 사용해 값을 저장하는 기능만 할 수 있도록 했어요. 동시에 중간 계층을 추상화해 이후 고도화할 때 실제 프로덕션 아키텍처를 적용하기 쉽게 신경썼어요. 이렇게 아낀 시간은 전부 LLM 개발에 투자했어요.
이번 프로젝트의 시스템을 구축할 때 핵심 요구사항은 두 가지였어요.
- 사업계획서를 체계적으로 생성하기
- 유사한 사업계획서의 내용을 활용해 내용 작성
우선 사업계획서가 체계적으로 생성될 수 있도록 [목차 생성] ➡ [목차별 요약 생성] ➡ [목차별 세부 사항 생성]으로 단계를 분리하고, 순차적으로 진행되도록 개발했어요.
이후 요약과 세부사항을 생성하는 과정에서 구름만의 사업계획서 문체와 기존의 사업 내용을 참고할 수 있도록 LLM을 활용한 RAG 시스템을 구축했어요.
사전에 만들어진 제안요청서와 사업제안서를 임베딩하여 벡터 스토어(Vector Store)에 담고, 새로운 제안요청서와 유사도를 분석해 검색된 사업제안서 PDF 파일을 불러오게 했어요. 불러온 내용은 이전의 목차별 내용과 함께 LLM에 전달되어 필요한 내용을 활용하죠.
이러한 설계를 통해 구름다운 ‘사업계획서’를 더 잘 작성하는 생성AI 서비스를 만들 수 있었어요.
Q. 업무에서 실제로 사용할 계획이 있나요? 향후 계획도 궁금해요.
Aiden_ 20시간 남짓의 시간 안에 모든 기능을 구현하지 못해 아쉬운 점이 있어요. 아직 프로토타입 수준이라 실무에서 쓰고 있지 않지만, 실현 가능성과 유용성을 확인했기 때문에 추후 더 고도화한다면 사내에서도 충분히 사용할 수 있을 거라 생각해요. 해커톤은 끝났지만, 틈틈이 GPS를 고도화하는 데 필요한 기술 스터디를 계속하고 있어요.
Jessica_ 콘텐츠 개발 매니저다 보니 업무상 사업제안서를 쓸 일이 종종 있어요. 분량이 많은 사업제안서를 쓸 때의 불편을 GPS로 어떻게 해결할 수 있을까는 줄곧 고민하고 있어요. 4개월이라는 짧은 시간 동안 AI 기술은 나날이 발전을 했어요. 최신 기술을 활용하면 더 나은 서비스를 만들 수 있을 것 같아요.
Lyght_ 해커톤 이후로 마음 한 켠에는 언제부터인가 GPS가 자리잡고 있어요. 사업계획서의 구조를 더 잘 이해하고 더 잘 작성하는 서비스로 고도화하고 싶은 마음은 있어요. 추가로 개발하고 싶은 기능도 많고요. 해커톤 이후 틈틈이 관련 자료나 기술을 공부하고 있는데요. 차후에 기능을 더 추가하고 개선해서 GPS2를 선보인다면 더 기쁠 거 같아요.
Q. 9oormthonRAID SUMMER가 여러분에게 남긴 것은 무엇인가요?
Aiden_ 사업제안서를 작성하면서 항상 마음 한켠에 있던 아이디어를 실현할 수 있어서 좋았어요. 무엇보다 가장 뿌듯한 건 이 시스템이 실제로 우리 회사 구성원들한테 도움이 될거라는 확신이 생겼다는 점이에요.
개인적으로는 해커톤에서 RAG(Retrieval-Augmented Generation) 기술을 실제 제품에 적용하는 과정을 직접 경험했다는 게 좋았어요. ChatGPT나 Claude와 같은 뛰어난 LLM이 있지만, 특정 목적에 맞는 자료들을 학습시켜 원하는 결과물을 도출하는 RAG를 한번쯤은 써보고 싶었거든요.
Lyght_ 개발자가 평소 접하기 어려운 게 ‘도메인’ 관련 서비스나 기능 개발이에요. 개발자는 기획 시 보통 ‘어떤 것을, 어떻게 만들까?’에 집중하는데, 이번 해커톤에서는 ‘만든 것을, 어떻게 팔 수 있을까?’에 더 많이 고민해볼 수 있는 시간이었어요. 이러한 고민이 풀스택 개발자로서 인사이트를 넓히는 데 좋은 경험이 되었어요.
Jessica_ 사내 해커톤은 이번이 세 번째였는데요. 매번 다른 경험을, 여러 가지를 배우며 성장할 수 있어서 좋았어요. 첫 해커톤에서는 구름 제품에 대해 설문조사를 했었고, 팀원들의 UI 피드백을 제품에 반영해보기도 했어요. 다른 해커톤에서는 평소 단순 반복하는 업무도 슬랙봇으로 자동화했어요. 특히 슬랙봇 개발 이후 다양한 사내 슬랙 채널이 슬랙 워크플로우와 재피어를 활용한 슬랙봇으로 자동화되는 걸 보니 뿌듯했어요.
이번 해커톤을 통해 LLM을 더 적극적으로 활용할 수 있게 되어 제안서 작업을 할 때 Claude를 활용하여 Mermaid Diagram을 만들고, MidJourney의 Parameter를 미세 조정하며 프로젝트 결과물 예시 이미지를 만드는 등 생성형 AI를 실무에 더 슬기롭게 활용하려고 계속 실험하고 노력하고 있어요.
- 9oormthonRAID SUMMER는 구름의 사내 해커톤으로, 2024년 9월 개최됐다. 해커톤을 개발자 행사로만 치부하는 비 개발 직군의 관심을 이끌어내기 위해 구성원 모두 참여할 수 있는 아이디어톤을 함께 개최했다. 구름의 임직원 누구나 자신의 업무상 비효율성을 개선하거나 생산성을 높일 수 있는 아이디어를 제출해 참여할 수 있다. 이 중 선정된 아이디어는 해커톤 참가팀이 실제로 구현한다. 아이디어 제안자를 인터뷰해 업무와 요구사항을 파악하고 해결책을 구현하는 식이다. 단순 반복하는 업무와 같은 비효율적인 업무를 기술로 개선하는 경험을 전사로 더 확대하기 위해 이렇게 구성됐다고. ↩︎
- 검색 증강 생성은 대규모 언어 모델의 출력을 최적화해 응답을 생성하기 전에 학습 데이터 소스 외부의 지식 베이스를 참고하는 프로세스다. ↩︎
- GDS는 구름의 디자인 시스템이다. 여기서 디자인 시스템은 UI 디자인에서 재사용이 가능한 컴포넌트와 패턴을 정의해 디자인 일관성을 유지하게 한 가이드라인이나 규칙을 말한다. ↩︎