본문으로 건너뛰기

슬랙봇을 활용한 기술 블로그 배포 자동화 이야기

Jeff
· 약 21분

IT 기업의 기술 블로그는 단순히 기술 지식과 정보를 나누는 통로에만 그치지 않습니다. 이는 기업의 기술력과 개발 문화를 대외로 드러내는 창구이기도 한데요.

양질의 콘텐츠가 있는 기술 블로그는 잠재 고객에게 신뢰를 얻는 데 도움이 되고요. 나아가 기술 인재의 관심을 해당 기업으로 끌어들일 수도 있습니다. 기술 블로그를 잘 운영하면 기업의 브랜드 이미지도 향상할 수 있고요.

이에 기술 블로그를 관리할 때는 시장 또는 독자 기대치를 충족하는 콘텐츠를 기획하고요. 콘텐츠를 성의 있게 제작하고, 이를 신속하게 배포해야 합니다. 그러면 기술 블로그에 양질의 콘텐츠를 더 자주 발행할 수 있고요. 이로써 기업 홈페이지로 트래픽을 더 많이 유도할 수도 있죠.

인포그랩에서는 그동안 기술 블로그에 글을 수동으로 올리고 관리했습니다. 그렇다 보니 기술 블로그 제작, 배포 과정에서 단순 반복 업무가 많았는데요. 콘텐츠를 제작, 리뷰, 수정, 편집, 배포하는 데 시간이 오래 걸렸죠. 이는 전반적인 테크니컬 라이팅 업무의 효율성을 떨어뜨렸습니다.

그러나 지난해 기술 블로그에 콘텐츠를 자동 배포하는 슬랙봇을 직접 개발해 문제를 개선했습니다. 이 도구는 콘텐츠 제작, 배포 과정에서 불필요한 단순 반복 업무를 줄여줬죠. 그 결과, 기술 블로그 제작에서 배포까지 걸리는 시간을 단축했고요. 이로써 테크니컬 라이팅 업무의 효율성과 생산성까지 향상할 수 있었습니다. 이 글에서는 기술 블로그 배포용 슬랙봇의 개발 배경과 과정, 작동 방식, 도입 결과를 자세히 살펴보겠습니다.

개발 배경

입사 초��기 다양한 질문을 하셨습니다. :) | 인포그랩 GitLab
입사 초기 다양한 질문을 하셨습니다. :)

슬랙봇 개발 배경을 이야기하려면 먼저 인포그랩의 기술 블로그 업무 수행 방식을 짚고 가야 하는데요. 인포그랩에서는 테크니컬 라이터인 Grace가 회사 전체 기술 문서의 품질을 관리합니다. 기술 블로그를 제작, 리뷰, 수정, 편집, 배포하는 업무도 그중 하나인데요. Grace는 글에 맥락이 충분히 설명되지 않았거나 어휘가 잘못 사용된 걸 발견하면 이를 피드백하고, 수정하며 콘텐츠의 질을 높이는 데 기여하죠.

입사 초반에 Grace는 사내 기존 테크니컬 라이팅 업무 수행 방식, 그중에서도 마크다운 문법을 사용한 문서 작성 방식과 GitLab을 활용한 버전 관리 방식에 적응하는 데 어려움을 겪었습니다. 그는 문법/파이프라인 오류, GitLab 이슈/Merge Request(MR) 만들기, 마크다운 문법, 리뷰/승인 절차를 자주 문의했는데요. 위 메시지만 봐도 Grace가 사내 업무 매뉴얼과 정책을 파악하기 위해 얼마나 많은 질문을 자주 던졌는지 확인할 수 있죠.

특히 인포그랩은 노션에서 기술 블로그 콘텐츠를 작성해 마크다운 형식에 맞추어 GitLab에 배포하는데요. 이 과정은 번거로웠습니다. 사내 매뉴얼에 맞춰 이미지 이름을 손수 바꾸고, 프론트엔드에서 요구하는 여러 메타데이터를 수동으로 입력해야 했죠. 마크다운 문법과 GitLab을 사용해 본 경험이 없는 데다 사내 테크니컬 라이팅 정책을 모르는 신규 입사자가 여기에 익숙해지려면 시간이 필요합니다.

저는 DevOps 엔지니어로서 이러한 비효율적인 업무 수행 방식을 개선하고 싶었습니다. ‘기술 블로그 배포 프로세스를 자동화하고, DevOps 지표를 설정해 기술 블로그 제작 업무의 생산성 지표를 만들면 이 과정을 효율화할 수 있을 걸’로 생각했는데요. 저는 지체하지 않고 평일, 주말 밤낮을 쪼개가며 기술 블로그 배포 자동화 도구 개발에 나섰습니다.

개발 과정 1. 자동화 계획 세우기

저는 개발 과정에서 다음 세 가지 요소를 개발 원칙으로 세웠습니다. 첫째, 기술 블로그에 콘텐츠를 배포할 때 기존에 이용하던 도구를 새로운 도구에 통합하기로 했는데요. 이로써 구성원이 새 배포 시스템에 쉽고 빠르게 적응하도록 유도하려 했죠. 둘째, TypeScript 프레임워크를 사용하기로 결정했습니다. TypeScript는 널리 사용되며, 이는 정적 타입 언어라서 안정적으로 개발할 수 있는데요. 이는 새로운 배포 시스템을 쉽고 편리하게 유지보수하는 데 도움이 되죠. 셋째, 사용자 친화적인 상호작용을 지원하고자 했습니다.

제가 보기에 이러한 원칙을 모두 충족하는 도구는 슬랙봇이었는데요. 슬랙봇은 메신저 서비스인 ‘슬랙’에 기반한 봇이죠. 이 봇은 채널 또는 다이렉트 메시지(DM)에서 사용자에게 리마인더를 전달하는 등 다양한 기능을 자동으로 수행합니다. 기술 블로그에 콘텐츠를 배포하는 기능도 자동으로 실행할 수 있죠. 특히 인포그랩에서는 슬랙으로 구성원끼리 소통하는데요. 모두가 슬랙을 쓰는 데 익숙합니다. 이에 새로운 도구를 따로 사용하지 않는 게 편리한 시스템을 개발하는 데 더 도움이 됐죠.

특히 슬랙봇은 ‘Bolt’라는 프레임워크를 제공하는데요. 이는 JavaScript, Java, Python 뿐만 아니라 문서도 잘 지원합니다. 따라서 이를 참고하면 기술 블로그 배포 자동화 도구를 개발하기가 쉬웠고요. 특히 로컬 환경에서 실행해도 슬랙 애플리케이션에서 도구를 테스트할 수 있어 유용했죠. 마지막으로 슬랙은 사용자에게 보이는 화면을 ‘Block Kit’ 기능으로 설계하도록 지원하는데요. 화면 흐름을 JSON으로 설계하고 함수로 데이터를 처리하면 직관적으로 상호작용할 수 있었습니다.

정리하면, 슬랙봇을 기술 블로그 배포 자동화 도구로 사용할 때 유지보수하기가 더 편리했고요. 사용자는 더 쉽고 빠르게 상호작용할 수 있었습니다. 그게 제가 슬랙봇을 기술 블로그 배포 자동화 도구로 선택한 이유였고요.

개발 과정 2. 화면 그리기

슬랙 채널에서 ‘/ig blog’ 명령을 입력했을 때 나타나는 모달 | 인포그랩 GitLab
슬랙 채널에서 ‘/ig blog’ 명령을 입력했을 때 나타나는 모달

슬랙은 사용자와 상호작용하는 데 활용하도록 메시지와 모달을 지원합니다. 메시지는 슬랙 채널에 글을 쓰거나 답글을 다는 기능이고요. 모달은 팝업창이 뜨면서 사용자와 상호작용하는 기능이죠. 저는 기술 블로그에 콘텐츠를 배포하는 워크플로를 모달로 구현하였습니다.

슬랙봇을 활용한 기술 블로그 배포 과정은 다음과 같습니다.

  1. 블로그 게시: 노션의 콘텐츠 페이지에서 ‘무슨 콘텐츠를 어디에 배포할지’ 선택합니다.
  2. 블로그 유효성 검사: 메타데이터와 커버 이미지 등 프론트엔드에 필요한 요소가 배포하려는 콘텐츠에 모두 있는지 확인합니다.
  3. GitLab 이슈/MR 검사: GitLab에 이슈와 MR을 생성하는 단계입니다. 이슈와 MR이 이미 있다면 해당 MR에 커밋합니다.
  4. 완료 메시지: 배포가 완료되면 노션의 콘텐츠 원본 링크와 GitLab MR 링크를 포함하는 메시지를 남깁니다.

개발 과정 3. 인포그랩 봇 설계, 제작하기

인포그랩 봇 제작 아키텍처 | 인포그랩 GitLab
인포그랩 봇 제작 아키텍처

슬랙봇은 슬랙과 상호작용하는 백엔드 애플리케이션입니다. 이에 저는 슬랙봇을 활용한 기술 블로그 배포 자동화 도구 이름을 ‘인포그랩 봇’이라고 지었죠. 이 봇 하나로 노션, GitLab 등 다른 서비스와 모두 상호작용하고자 했습니다. 특히 GitLab에 CI/CD 파이프라인을 생성해 애플리케이션을 배포하거나 인포그랩 봇을 수정할 때, 이 방식이 더 유리할 걸로 판단했습니다. 인포그랩 봇 개발에는 TypeScript 언어와 슬랙에서 지원하는 Bolt 프레임워크를 사용했습니다.

실제 제작한 폴더 구조 | 인포그랩 GitLab
실제 제작한 폴더 구조

폴더 구조에 고민이 많았는데요. 앞으로 더 많은 워크플로가 추가될 가능성을 고려하여 이를 효과적으로 관리하고 제어하는 구조를 원했습니다. 고민 끝에 위 그림과 같은 구조를 최종 채택했는데요. 구조는 NestJS에서 영감을 받았습니다. 이는 워크플로 단위로 폴더를 생성하고 파일을 관리하는 방식입니다. 각 워크플로는 다음 네 가지 파일을 포함하고요.

  • workflow.ts : 화면과 데이터 흐름을 정의하며, 모든 워크플로의 시작점입니다.
  • service.ts : 비즈니스 로직을 정의합니다.
  • model.ts : 슬랙 또는 서드파티 API와의 데이터 타입을 정의합니다.
  • modal.ts : 사용자와 상호작용하는 화면을 정의합니다.

이밖에 노션의 32가지 문법을 마크다운의 23가지 문법으로 1대 1 매핑했습니다. 예를 들어, 노션에서 paragraph, to_do, code, file, table_of contents, breadcrumb 등 문법을 마크다운의 paragraph, inline code, bold, italic, underline, table 등 문법으로 매핑했죠.

그렇게 제작한 인포그랩 봇

인포그랩 봇으로 기술 블로그에 콘텐츠를 배포한 뒤 뜨는 결과 메시지 | 인포그랩 GitLab
인포그랩 봇으로 기술 블로그에 콘텐츠를 배포한 뒤 뜨는 결과 메시지

위와 같은 개발 과정을 거쳐 인포그랩 봇이 완성됐습니다. 이 봇은 DevOps와 연동하여 효율적으로 작동하는데요. 특히 CI/CD 파이프라인과 Kubernetes를 통합해 봇은 안정적이고 유연하며, 슬랙과 원활히 상호작용하죠.

인포그랩 봇의 작동 방식은 이렇습니다. 사용자가 슬랙의 아무 채널에서 /ig blog 명령을 입력하면, 미리 설정된 워크플로가 실행되어 기술 블로그에 콘텐츠가 자동으로 배포됩니다. 내용을 더 구체적으로 살펴보죠. 슬랙에서 아무 채널에나 명령을 입력하면 인포그랩 봇이 호출되고요. 이때 노션의 콘텐츠 제목과 콘텐츠를 올릴 채널을 선택하고, ‘제출하기’ 버튼을 누르면 자동으로 필수 메타데이터 입력 여부를 검색합니다. GitLab ID, 저자 이름, md 파일명, 커버 이미지, <!--truncate--> 등이 입력해야 할 메타데이터인데요. 이 중 하나라도 빠지면 콘텐츠를 올릴 수 없죠.

필수 메타데이터가 모두 입력돼 있으면 ‘계속하기’ 버튼을 눌러 다음 절차로 넘어갈 수 있는데요. 이때 GitLab에 해당 콘텐츠의 이슈와 MR이 자동 생성됩니다. MR에 레이블도 자동으로 달리고요. 콘텐츠를 배포하는 파이프라인까지 자동으로 실행되죠. 파이프라인 실행이 완료되면 GitLab 리뷰 앱으로 콘텐츠 배포 상태를 미리 확인할 수 있습니다. 이는 과거에 테크니컬 라이터와 엔지니어가 GitLab에 일일이 이슈와 MR을 만들고 레이블을 달며, Visual Studio Code에서 커밋 메시지를 직접 쓰고, 손수 커밋하는 번거로운 수동 작업을 자동화했는데요. 이로써 업무 효율성이 크게 향상됩니다.

도입 결과

2023년 11월 초 인포그랩 기술 블로그 MR 통계 | 인포그랩 GitLab
2023년 11월 초 인포그랩 기술 블로그 MR 통계

인포그랩 봇을 실무에 적용한 결과, 기술 블로그 콘텐츠 배포 업무의 생산성이 크게 올랐습니다. 테크니컬 라이터와 엔지니어가 기술 블로그에 콘텐츠를 배포하기 위해 MR을 만드는 빈도는 약 30% 증가했고요. 이제 클릭 한 번으로 1분 안에 콘텐츠를 배포할 수 있죠. 그동안 콘텐츠를 배포하는 데 약 5~7분이 걸린 것과 비교하면 시간이 크게 절약됐습니다. 아울러 파이프라인 실패율이 5% 아래로 줄어들었고요.

현재 인포그랩의 테크니컬 라이터와 엔지니어는 원클릭으로 기술 블로그에 콘텐츠를 배포하고 있는데요. 그 결과, 배포 스트레스가 크게 감소해 이들은 기술 블로그를 작업할 때 콘텐츠를 제작하는 데 더 집중할 수 있게 됐습니다. 또 콘텐츠 피드백을 더 신속하고 유연하게 반영하고요. 이는 기술 블로그의 양과 질을 모두 향상하는 데 중요한 전환점이 됐죠.

맺음말

기술 블로그의 품질이 향상되면 기업의 브랜드 이미지를 진작하고, 내부 기술력을 널리 알리는 데 도움이 됩니다. 이는 잠재 고객과 기술 인재 사이에서 기업의 신뢰도를 높이는 데 중요한 역할을 하고요. 기술 블로그 배포 자동화 도구와 같은 시스템을 도입하면 업무 효율성을 높일 뿐만 아니라 구성원의 창의력과 혁신을 촉진하는 데 도움이 됩니다.

이로써 테크니컬 라이터는 기술 문서 제작과 품질 관리에 더 집중할 수 있고요. 엔지니어는 복잡한 콘텐츠 배포 프로세스에서 해방돼 핵심 개발 업무를 수행하는 데 시간과 에너지를 더 많이 투입할 수 있습니다. 그 결과, 인포그랩에서는 구성원의 업무 효율성과 만족도가 크게 향상됐고요. 이는 회사 전체의 성장과 혁신에 긍정적인 영향을 미치고 있습니다.

인포그랩은 소프트웨어 개발 라이프사이클 전반에 걸쳐 복잡하게 얽힌 문제를 DevOps로 명쾌하게 풀어냅니다. 늘 새로운 걸 탐구하고 시도하며 깨우쳐야 직성이 풀리는 엔지니어 분들! 인포그랩에 오셔서 우리와 함께 문제를 해결해봐요!

인포그랩 DevOps 엔지니어(경력) 채용 공고