위클리샷(WeeklyShot) 블로그 자동 포스팅 프로그램 구축 사례
트램스가 내부 프로젝트로 개발한 위클리샷(WeeklyShot)의 구축 사례입니다. 개인별 문체 저장부터 전문자료 기반 원고 작성, 네이버 블로그 게시와 발행 이력 관리까지 구현 과정을 소개합니다.
핵심 요약
1. 전문가마다 다른 문체와 콘텐츠 구성을 반영하면서 자료 준비부터 원고 작성과 게시까지 이어지는 업무를 화면으로 정리했습니다. 2. 사용자별 스타일을 SQLite에 저장하고, OpenAI API로 원고를 작성한 뒤 Playwright로 네이버 블로그에 게시하는 기능을 구현했습니다. 3. 저장한 작성 규칙의 재사용, 글과 이미지의 미리보기, 게시물 링크와 발행 이력 조회를 통해 콘텐츠 운영 과정을 관리할 수 있습니다.
프로젝트 소개
위클리샷(WeeklyShot)은 트램스가 내부 프로젝트로 개발한 블로그 자동 포스팅 프로그램입니다. 전문가의 자료와 문체를 바탕으로 콘텐츠를 작성하고 게시하는 업무를 다룹니다. 전문가 콘텐츠를 운영하는 콘텐츠 사업자·전문서비스 조직·마케팅 운영팀이 필요로 하는 작성과 발행 흐름을 구현했습니다.
개발 과정에서 풀어야 했던 문제는 분야와 사용자에 따라 글의 형식이 다르다는 점이었습니다. 같은 주제를 다뤄도 참고하는 문장, 설명 순서, 필요한 분량이 달라 하나의 스타일을 모든 사용자에게 적용하기 어려웠습니다. 이에 개인별 작성 기준을 저장하고 콘텐츠 유형에 맞춰 불러오는 구조를 마련했습니다.
개발 목표는 전문가가 읽고 납득할 수 있는 콘텐츠 생산을 지원하고, 그 과정을 사용자가 다룰 수 있는 화면으로 만드는 것이었습니다. 입력은 전문자료와 작성 규칙이며, 산출물은 문단과 이미지가 배치된 원고 및 게시 결과입니다. 자료 준비, 스타일 선택, 원고 검토, 발행 이력 확인을 각각의 작업으로 다룰 수 있게 구성했습니다.

개인화 문체 저장: 콘텐츠 유형별 스타일과 SQLite
개인화의 출발점은 사용자가 어떤 글을 원하는지 구체적으로 입력하는 과정입니다. 참고 문장과 문단 구성, 참고자료를 받아 작성 기준으로 사용합니다. 문체뿐 아니라 제목 작성 방식, 문의 안내, 피할 표현과 분량도 함께 관리해 글의 말투와 전체 구성을 연결했습니다.
입력 화면에는 화면 구성 기술인 React를 사용했습니다. 사용자는 작성할 콘텐츠 유형과 채널에 맞는 스타일을 설정하고 저장한 값을 다시 불러올 수 있습니다. 개발에서는 입력 항목을 보여주는 일과 함께, 저장한 규칙이 다시 선택했을 때 복원되는 흐름을 구현했습니다.
사용자와 콘텐츠 유형에 맞는 규칙을 다시 찾을 수 있도록, 스타일을 사용자·유형·채널별로 구분해 SQLite에 저장했습니다. SQLite는 별도의 데이터베이스 서버 프로세스 없이 파일에 데이터를 저장하는 내장형 데이터베이스입니다.
여기서 구조화한 대상은 사용자, 콘텐츠 유형, 채널과 각 작성 규칙의 관계입니다. 참고 문장과 전문자료 본문은 내용과 맥락을 가진 텍스트로 활용합니다. 이 구분을 통해 어떤 사용자에게 어떤 규칙을 적용할지 정하고, 실제 표현의 참고가 되는 문장은 원고 작성에 전달하도록 구성했습니다.
저장된 스타일을 선택하면 문체와 구성 규칙을 확인하고 다음 원고에 다시 활용할 수 있습니다. 작성 단계에서는 스타일의 저장값과 해당 원고에 적용한 버전을 연결합니다. 이 연결은 원고를 살펴볼 때 어떤 작성 기준을 사용했는지 함께 이해할 수 있는 바탕이 됩니다.
문체 개인화는 이렇게 저장한 데이터를 AI에 전달하는 작성 지시에 반영하는 방식으로 구현했습니다. 사용자마다 별도의 모델을 재학습시키는 파인튜닝을 수행하는 구조는 아닙니다. 개인별 규칙을 관리하고 필요한 유형으로 확장할 수 있도록 한 것이 이 기능의 핵심입니다.

전문자료 기반 원고 작성: OpenAI API와 문단 템플릿
전문자료 기반 작성에서는 글에 담을 사실과 글을 표현하는 방법을 구분하는 것이 중요했습니다. 사용자는 원고의 근거가 될 자료를 준비하고 적용할 스타일과 콘텐츠 유형을 선택합니다. 프로그램은 이 입력을 원고 작성에 필요한 사실자료, 문체 규칙, 고정 구성으로 나눠 처리합니다.
원고 생성에는 AI 모델을 호출하는 OpenAI API의 Responses API를 연결했습니다. 자체 작성 로직은 선택한 자료와 스타일, 유형별 템플릿을 조합해 모델에 전달할 작성 지시를 구성합니다. 기술의 역할은 문장 생성이며, 어떤 내용을 어떤 순서로 작성할지는 프로그램이 구성한 입력으로 안내합니다.
유형별 작성 템플릿은 원고가 따라야 할 문단의 역할과 순서를 정하는 틀입니다. 사용자의 문체를 적용하면서도 해당 콘텐츠에 필요한 구성을 유지하도록 사용했습니다. 자료에서 가져올 내용과 표현 규칙을 구분해, 문단 구성과 말투를 함께 다룰 수 있도록 했습니다.
참고 문장은 표현 방식을 보여주고, 전문자료는 글에서 설명할 내용의 근거가 됩니다. 프로그램은 두 입력의 목적을 구분해 원고 작성에 연결합니다. 이렇게 구성하면 담당자는 글을 검토할 때 자료에 맞는 설명인지와 원하는 문체인지 서로 다른 기준으로 살펴볼 수 있습니다.
로컬 AI 작성 기능에는 Codex 기반의 작성 지원도 연결했습니다. API를 통한 생성과 로컬 작성 지원은 각각의 작성 경로에서 자료와 문체 규칙, 원고 구성을 다루도록 했습니다. 콘텐츠를 준비하고 결과를 살펴보는 데 필요한 기준을 저장해 활용한다는 원칙을 적용했습니다.
작성 결과는 글과 이미지 배치, 미리보기로 이어집니다. 담당자는 요약, 소제목, 본문의 흐름을 읽고 이미지가 어느 설명과 연결되는지 함께 확인할 수 있습니다. 문장만 따로 읽을 때와 달리 게시할 콘텐츠의 구성을 살펴볼 수 있도록 원고와 배치를 연결했습니다.
생성된 문장이 자료의 사실성을 보장하는 것은 아니므로, 사실·출처·원고를 검토하는 과정도 작성 흐름에 포함했습니다. 담당자는 표현이 자연스러운지뿐 아니라 근거와 설명이 맞는지 확인합니다. 미리보기는 이 판단에 필요한 결과물을 보여주며, 원고 검토와 게시 결과 확인은 서로 다른 단계로 다룹니다.

네이버 블로그 자동화: Playwright와 발행 이력 관리
네이버 블로그 자동화는 준비한 콘텐츠를 브라우저의 작성 과정으로 전달하는 방식으로 구현했습니다. 브라우저 제어에는 Playwright를 사용했습니다. Playwright는 Chromium 등 여러 브라우저 환경에서 입력과 화면 확인을 자동화할 수 있는 도구입니다.
Playwright를 연결한 이유는 게시 본문과 이미지, 링크를 웹 작성 화면에서 처리해야 했기 때문입니다. 자체 발행 로직은 이 내용을 브라우저에 전달하고 게시 동작을 수행하도록 구성했습니다. 처리 뒤에는 게시물 URL과 결과를 확인하도록 연결해 발행 후 조회로 이어지게 했습니다.
게시 과정에는 사용자의 로그인 상태를 유지하는 세션을 활용했습니다. 세션은 브라우저에서 이어지는 로그인 상태를 뜻하며, 발행 작업이 해당 사용자 환경에서 진행되도록 연결하는 역할을 합니다. 게시할 콘텐츠를 준비하는 과정과 로그인된 브라우저에서 게시하는 과정을 나눠 구성했습니다.
실행 화면에는 즉시 발행, 예약 발행, 반복 발행을 설정하는 기능을 마련했습니다. 콘텐츠를 준비하는 시점과 게시를 실행하는 시점을 구분할 수 있도록 한 구성입니다. 운영자는 필요한 발행 방식을 선택하고, 실행 이후에는 발행 이력에서 처리 결과를 확인합니다.
발행 후에는 게시물의 제목, 발행 시각, 결과와 게시물 링크를 조회할 수 있습니다. 이력 저장에는 SQLite를 사용해 게시 작업의 결과를 다시 살펴볼 수 있게 했습니다. 앞서 스타일 저장에 사용한 데이터베이스가 작성 기준을 보관했다면, 여기서는 게시 이후의 운영 기록을 보관합니다.
예외 처리에서는 실패나 결과 불명 상태를 곧바로 재게시로 연결하지 않도록 했습니다. 결과가 명확하지 않을 때는 기존 게시물을 먼저 확인하는 흐름을 두었습니다. 재시도 여부를 판단하기 전에 이미 게시된 글이 있는지 살피는 방식으로 중복 게시 위험에 대응했습니다.
운영자는 발행 이력에서 게시물 링크를 열어 실제 공개된 글을 확인할 수 있습니다. 원고 저장과 게시 완료를 구분해 기록하므로 다음에 검토하거나 발행할 글을 찾을 때도 이 기록을 활용할 수 있습니다.

성공 요소
개발 목표를 구체화한 첫 번째 판단은 개인화 스타일의 데이터 구조를 초기에 마련한 것입니다. 분야별 글 형식이 달라 같은 스타일을 일괄 적용하기 어려웠기 때문에, 사용자에게 연결되는 스타일을 저장하고 콘텐츠 유형에 따라 확장하도록 했습니다. 이를 바탕으로 작성 단계에서도 개인별 규칙을 재사용하는 흐름을 구현할 수 있었습니다.
두 번째 판단은 전문자료, 문체 규칙, 문단 구성을 각각의 입력으로 다룬 것입니다. 콘텐츠의 근거와 표현 방식을 구분한 뒤 유형별 템플릿에 연결했습니다. 그 결과 담당자는 저장한 규칙을 바탕으로 원고를 만들고, 미리보기에서 내용과 배치를 함께 검토할 수 있게 됐습니다.
세 번째 판단은 발행 결과 확인을 운영 과정에 포함한 것입니다. 게시물 링크와 이력을 남기고 결과가 불명확하면 기존 게시물을 확인하도록 구성했습니다. 작성부터 게시까지 이어지는 업무에서 다음 조치를 판단할 수 있도록, 각 단계의 산출물을 다시 조회하는 흐름을 마련했습니다.

개발 기간 · 비용 · 투입 인력
개발 기간은 2개월, 개발 비용은 4,000만 원이며 투입 인력은 2명입니다. 개인별 스타일 저장, 전문자료 기반 원고 작성, 게시와 이력 관리 등 해당 프로젝트의 구축 범위를 기준으로 한 기간과 비용입니다.
참고 자료
개발 문의
전문가별 문체와 콘텐츠 유형을 반영하는 블로그 자동 포스팅 프로그램이 필요하다면, 현재의 자료 준비 방식과 원고 검토·게시 업무를 알려주시고 트램스에 개발을 문의해 주세요.