9  AI 시대 글쓰기 진화

종이와 펜으로 글을 쓸 때 글쓰기는 주로 생각이나 정보, 감정을 언어의 형태로 표현하는 과정으로 가장 기본적이고 전통적인 글쓰기의 형태로 볼 수 있다. 저자가 머릿속에 있는 아이디어나 메시지를 구조화하여 문장과 단락으로 만드는 과정에서 문법, 어휘, 문장 구조 등 언어의 다양한 요소가 활용된다. 전통적인 글쓰기는 디지털 글쓰기에서 느끼기 어려운 독특한 느낌과 집중도가 있어 펜을 종이에 대고 쓰는 물리적인 행위 자체가 생각을 정리하고 창의성을 불러일으키는 경우가 많고 디지털 장비의 방해 없이 좀 더 몰입하여 글을 쓸 수 있다는 장점도 있다.

전통적인 글쓰기에서 문법, 어휘, 문장 구조 등 언어의 다양한 요소에 집중하는 이유 중 하나는 인쇄출판 비용 문제가 크다. 인쇄출판을 할 경우, 재료와 인력, 시간 등 다양한 비용이 발생하기 때문에, 처음부터 정확하고 명료한 표현을 사용하여 수정이나 재인쇄 필요성을 줄여 비용을 절감해야 하기 때문에 저자가 더 신중하게 글을 쓰도록 만들며, 그 결과로 문법이나 어휘 선택, 문장 구조 등에 더 많은 주의를 기울이게 된다. 인쇄된 글은 디지털 글과 달리 쉽게 수정할 수 없기 때문에, 처음부터 높은 수준의 정확성과 명료성이 요구되기 때문에 작성자로 하여금 더 깊게 생각하고 더 철저하게 검토하는 습관을 들이게 하며, 이러한 과정을 통해 더 높은 품질의 글이 탄생하게 되었다.

따라서, 글쓰기는 모든 사람이 배우는 기초적인 능력이지만, 인쇄출판의 높은 비용 때문에 실제로 글을 발표하고 널리 퍼뜨릴 수 있는 사람은 선택된 소수에 불과하기 때문에 빈익빈, 부익부 문제가 심해지고 있다. 즉, 자본과 기회가 있는 소수의 사람들만이 자신의 아이디어나 의견을 널리 알릴 수 있는 인쇄출판 플랫폼을 갖게 된 것이다. 이로 인해 정치적, 사회적, 경제적, 과학기술 격차가 더욱 심화되며, 다수의 목소리가 제대로 들리지 않는 문제가 발생한다. 이러한 상황은 인터넷과 웹의 대중화로 디지털 글쓰기가 보급됨에 따라 어느 정도 해소되고 있지만, 저작에 해당되는 디지털 글쓰기와 저작물의 인쇄출판과 유통에 대한 접근성 문제는 여전히 해결되어야 할 중요한 과제로 남아 있다.

9.1 챗GPT 등장

챗GPT 등장은 글쓰기 패러다임을 혁신적으로 바꾸고 있다. 전통적인 글쓰기는 문법, 어휘, 문장 구조 등 언어의 다양한 요소를 활용하여 아이디어나 메시지를 구조화하는 데 주력했고, 전통적인 글쓰기에서 저작은 종이와 펜, 출판은 워드 프로세서 도구로 필요한데, 디지털 도구에 익숙하지 않은 사람들에게는 글쓰기 자체가 큰 부담이 되었다.

그러나 챗GPT는 뛰어난 자연어 처리 능력 덕분에 저자는 복잡한 문법이나 어휘 없이도 자신의 생각을 쉽게 표현할 수 있을 뿐만 아니라, 챗GPT는 다양한 형태의 콘텐츠, 예를 들어 수식, 표, 그래프, 다이어그램, 코드 등을 쉽게 생성하고 편집할 수 있어, 글쓰기 범위가 전통적인 텍스트를 넘어 다양한 미디어로 확장되고 있다.

펜과 종이로 저작하여 종이 매체를 중심으로 인쇄출판이 주류를 이뤘던 시대를 워드 프로세서로 저작하여 웹사이트에 디지털 출판하는 시대로 바뀌었던 것에 비견될만큼 챗GPT는 디지털 글쓰기의 패러다임을 혁신적으로 바꾸고 있다. 챗GPT Text-to-X 기능은 글쓰기 가능성을 더욱 확장시켜 저자는 아이디어나 메시지를 표현하고 전달하는데 단순한 텍스트 입력을 넘어 수식, 그래프, 표, 다이어그램, 코드 등 다양한 형태의 콘텐츠를 쉽게 생성할 수 있게 됨에 따라, 글쓰기 경계를 훨씬 넓히게 되었다. 챗GPT 시대 누구나 복잡한 도구나 전문 지식 없이도 자신의 아이디어나 정보를 풍부하게 표현할 수 있게 되었다.

그림 9.1 은 글쓰기와 프로그래밍 도구가 각각 독립적으로 발전해오다가 AI 시대에 이르러 하나로 수렴되는 과정을 보여준다. 상단의 텍스트 글쓰기 진화는 WordStar(1978)에서 시작해 MS Word, LaTeX, HTML/Web을 거쳐 클라우드 기반의 Google Docs와 Notion으로 발전했고, 하단의 프로그래밍 진화는 Emacs(1976)에서 시작해 Vim, VS Code를 거쳐 RStudio와 Jupyter 같은 데이터 과학 IDE로 진화했다. 이 두 축은 2020년대 들어 ChatGPT와 쿼토(Quarto)의 등장으로 “AI 통합 플랫폼”이라는 하나의 패러다임으로 수렴되고 있다.

그림 9.1: 글쓰기 코딩의 평행진화와 AI 시대 수렴

9.2 글쓰기 도구의 3대 혁명

글쓰기 역사는 인류 문명과 밀접하게 연결되어 있으며, 크게 3번의 혁명적 변화를 거쳐 현재에 이르고 있다.

9.2.1 1차 혁명: 전통 글쓰기 시대 (고대~1900년대)

전통 글쓰기 시대는 물리적 도구를 활용한 기록과 출판의 시대였다. 고대 메소포타미아에서 점토판과 쐐기를 사용하여 기록을 시작한 인류는(3000 BC), 이집트의 파피루스(2500 BC)를 거쳐 종이와 잉크(100 AD)라는 혁신적 기록 매체를 발명했다.

구텐베르크의 인쇄기(1440) 등장은 지식의 대중화를 가능하게 했으며, 중세 필경사의 손으로 이루어지던 서적 복제 작업을 기계화했다. 근대에 들어 붓과 머루, 잉크와 깃털펜이 정교화되었고, 산업혁명과 함께 타자기(1868)와 전동타자기(1902)가 등장하여 문서 작성 속도를 획기적으로 향상시켰다.

이 시대의 특징은 높은 출판 비용으로 인해 소수만이 글을 널리 퍼뜨릴 수 있었으며, 한번 인쇄되면 수정이 어려워 정확하고 신중한 글쓰기가 요구되었다는 점이다.

9.2.2 2차 혁명: 디지털 글쓰기 시대 (1946~2020)

컴퓨터의 등장은 글쓰기 패러다임을 근본적으로 바꾸었다. 1946년 에니악 컴퓨터를 시작으로, 1964년 IBM 워드프로세서 MT/ST, 1969년 IBM 저장장치 MagCards가 등장하면서 디지털 글쓰기의 토대가 마련되었다.

학술 출판 분야에서는 1978년 TeX와 1984년 LaTeX이 수학 공식과 복잡한 문서 구조를 정확하게 조판할 수 있게 해주었다. 1983년 마이크로소프트 워드 1.0의 출시로 개인용 컴퓨터에서도 전문적인 문서 작성이 가능해졌다.

웹의 등장(1991)과 함께 HTML이 문서 구조화의 새로운 표준이 되었고, 2004년 마크다운의 등장으로 간단한 문법으로도 구조화된 문서를 작성할 수 있게 되었다. 2014년 Jupyter 노트북은 코드와 텍스트, 시각화를 하나의 문서에서 통합하여 문학적 프로그래밍(Literate Programming)(Knuth, 1984)을 실현했다.

2020년대에 들어 쿼토(Quarto)가 등장하면서 과학기술 문서 작성에 새로운 지평이 열렸다. 쿼토는 R마크다운의 경험을 바탕으로 R, 파이썬, 줄리아, 자바스크립트 등 다양한 언어를 지원하며 꾸준한 개선을 통해 기능을 확장해왔다: 2024년 1월 쿼토 1.4에서 대시보드 지원이 추가되었고, 2024년 6월 쿼토 1.5에서 Typst와 brand.yml 기능이 도입되었다.

9.2.3 3차 혁명: AI 통합 글쓰기 시대 (2022~현재)

2022년 ChatGPT의 등장은 글쓰기의 제3차 혁명을 촉발했다. 이제 AI는 단순한 도구를 넘어 글쓰기 파트너가 되었으며, 자연어 처리 능력을 통해 아이디어를 다양한 형태의 콘텐츠로 변환할 수 있게 되었다. 2023년 Claude의 등장으로 더욱 정교한 AI 글쓰기가 가능해졌다.

현재 AI 글쓰기 혁명은 두 개의 주요 트랙으로 발전하고 있다:

프로그래밍 통합: ellmer-쿼토 생태계

Posit에서 개발 중인 ellmer 패키지는 R에서 다양한 LLM 제공업체를 통합하여 사용할 수 있게 해주는 게임체인저가 되고 있다. ellmer와 쿼토의 결합으로 자연어 처리 능력을 활용하여 코드와 텍스트, 그리고 다양한 미디어 요소를 통합적으로 다룰 수 있어, 재현가능한 AI 글쓰기가 가능해졌다.

CLI 도구 혁명: 터미널에서의 AI

동시에 명령줄 인터페이스를 통한 AI 도구들이 급속히 발전하고 있다:

  • Claude Code: 터미널에서 직접 AI와 대화하며 코드를 작성하고 파일 시스템에 접근할 수 있는 도구
  • Gemini CLI: 구글의 Gemini 모델을 커맨드라인에서 활용할 수 있는 인터페이스
  • OpenAI Codex CLI: GitHub Copilot의 기반이 되는 Codex 모델을 터미널에서 직접 사용할 수 있는 도구

이러한 두 트랙은 궁극적으로 “AI 통합 글쓰기 플랫폼”으로 수렴하고 있으며, 글쓰기의 패러다임을 근본적으로 변화시키고 있다.

그림 9.2 는 통합개발환경(IDE)의 진화를 3개 트랙으로 세분화하여 보여준다. 최상단의 텍스트 편집기는 Emacs(1976)에서 시작해 VS Code(2015)까지 발전했고, 중간의 소프트웨어 IDE는 Turbo Pascal(1983)에서 IntelliJ IDEA(2001)를 거쳐 발전했으며, 하단의 데이터/분석 IDE는 SQL(1970년대)에서 시작해 RStudio(2010), Jupyter(2014), Positron(2024)으로 이어지고 있다. 이 세 트랙은 결국 AI 통합 환경으로 수렴되어, 텍스트 편집, 소프트웨어 개발, 데이터 분석이 하나의 플랫폼에서 AI의 도움을 받아 수행되는 새로운 패러다임을 형성하고 있다.

그림 9.2: 편집기부터 AI 통합환경까지 IDE 진화 - 텍스트 도구, 소프트웨어 개발, 데이터 분석 3대 축 발전과 AI 수렴
그림 9.3: 글쓰기 도구의 3대 혁명: 전통 도구(점토판~타자기)에서 디지털 도구(컴퓨터~쿼토)를 거쳐 AI 통합 플랫폼(ellmer-쿼토, CLI 도구)으로의 진화

9.3 ellmer와 쿼토 통합

Posit에서 개발 중인 ellmer 패키지는 R에서 대형 언어 모델(LLM)과 상호작용하는 방식을 혁신적으로 바꾸고 있다. ellmer는 R 사용자들에게 게임체인저가 된 패키지로, 다양한 LLM 제공업체를 통합 인터페이스로 지원하고 구조화된 데이터 추출과 함수 호출을 가능하게 한다.

9.3.1 ellmer 주요 기능

ellmer는 OpenAI, Anthropic, Google, Azure 등 다양한 LLM 제공업체를 지원하며, 단일 인터페이스로 모든 모델에 접근할 수 있다. 개발 중인 ellmer 패키지는 parallel_chat()batch_chat() 등의 고급 기능을 통해 대규모 작업 처리를 지원하며, params() 헬퍼로 모델 설정을 표준화하여 제공업체 간 일관된 사용 경험을 제공한다.

ellmer의 가장 큰 장점 중 하나는 기업 환경 통합이다. connectcreds를 통한 OAuth나 IAM 기반 인증을 자동으로 감지하며, Posit Workbench와 Posit Connect에서 관리되는 자격 증명을 지원한다. 또한 채팅 비용을 자동으로 추적하여 예산 관리를 용이하게 하고, 도구 호출(tool calling) 기능을 통해 LLM이 R 함수를 직접 실행할 수 있어 매우 강력한 워크플로우를 구축할 수 있다.

9.3.2 쿼토 문서에서 ellmer 활용

쿼토 문서 내에서 ellmer를 활용하면 AI와 함께하는 재현가능한 문서 작성이 가능하다. 다음은 기본적인 사용 예제다:

# ellmer 개발 버전 설치 (필요시)
# remotes::install_github("posit-dev/ellmer")
library(ellmer)

# LLM 채팅 객체 생성
chat <- chat_openai(
  model = "gpt-4",
  api_key = Sys.getenv("OPENAI_API_KEY")
)

# 데이터 분석 코드 생성 요청
analysis_prompt <- "
mtcars 데이터로 연비(mpg)와 마력(hp) 관계를 분석하는 
R 코드를 작성해주세요. ggplot2로 시각화도 포함해서.
"

response <- chat$chat(analysis_prompt)
cat(response$choices[[1]]$message$content)

이러한 방식으로 AI가 생성한 코드를 쿼토 문서에서 바로 실행하고, 결과를 문서에 포함시킬 수 있다. 더 나아가 생성된 코드의 품질을 검토하고 수정하는 과정까지 문서화할 수 있어, AI와의 협업 과정을 투명하게 기록할 수 있다는 것이 ellmer와 쿼토 결합의 핵심 가치다.

9.4 ellmer-쿼토 통합 작업흐름

ellmer와 쿼토를 결합한 AI 지원 글쓰기 작업흐름은 “AI 콘텐츠 생성”, “재현가능한 처리”, “다형태 출력”의 3단계로 구분할 수 있다.

첫 번째 단계인 “AI 콘텐츠 생성”에서는 ellmer를 통해 다양한 LLM에서 콘텐츠를 생성한다. 글감을 자연어 프롬프트로 전달하면 수식, 표, 그래프, R/파이썬/SQL 코드, 그림, 다이어그램 등 다양한 형태의 콘텐츠가 생성된다. ellmer의 parallel_chat() 기능으로 여러 콘텐츠를 동시에 생성할 수 있어 효율성이 크게 향상된다.

두 번째 단계인 “재현가능한 처리”에서는 쿼토의 강력한 문서 처리 엔진이 AI 생성 콘텐츠를 통합하고 실행한다. 생성된 코드는 쿼토 문서 내에서 직접 실행되어 결과가 자동으로 문서에 포함되며, 모든 과정이 Git으로 추적되어 재현가능성이 보장된다. 또한 ellmer의 비용 추적 기능으로 AI 사용량을 모니터링할 수 있다.

마지막 단계인 “다형태 출력”에서는 쿼토의 다양한 출력 형식을 활용한다. 동일한 소스에서 HTML, PDF, 워드 문서, 슬라이드, 대시보드 등 다양한 형태로 출력할 수 있으며, 쿼토 1.6의 brand.yml 기능으로 일관된 브랜딩을 유지할 수 있다. 독자는 사람일 수도 있고, 저작자 자신일 수도 있으며, 심지어 다른 AI 시스템일 수도 있다.

graph LR

    ellmer["ellmer<br>(R에서 LLM 활용)"] --> Generation
    
    subgraph Generation["LLM 기반 생성"]
      direction LR
      Prompt["자연어<br>프롬프트"] --> Table["표 생성"]
      Prompt --> Graph["그래프 생성"]
      Prompt --> Code["R/Python/SQL<br>코드 생성"]
      Prompt --> Text["텍스트 생성"]
      Prompt --> Analysis["분석 결과"]
    end
    
    Generation --> Quarto["Quarto<br>처리 엔진"]
    
    subgraph Processing["Quarto 문서 처리"]
      direction TB
      Execute["코드 실행"] --> Validate["결과 검증"]
      Validate --> Version["Git 버전 관리"]
      Version --> Reproduce["재현성 보장"]
    end
    
    Quarto --> Processing
    
    subgraph Output["다형태 출력"]
      direction LR
      HTML["웹사이트"]
      PDF["PDF 문서"] 
      Dashboard["대시보드"]
      Slides["프레젠테이션"]
    end

    %% 수정된 부분: Processing의 마지막 단계에서 각 Output으로 직접 연결
    Processing --> Output
    
    style ellmer fill:#e8f4f8,stroke:#2980b9,stroke-width:3px
    style Quarto fill:#f8f9fa,stroke:#6c757d,stroke-width:2px

그림 9.4: ellmer-쿼토 통합 AI 글쓰기 작업흐름

9.5 ellmer 실전 활용: 이력서와 영화 시놉시스

ellmer와 쿼토를 결합하면 창의적이고 재현가능한 문서 제작이 가능하다. 두 가지 실전 사례를 통해 이러한 통합의 구체적인 활용법을 살펴보자.

9.5.1 동적 이력서 생성

ellmer를 활용하면 데이터 기반의 동적 이력서를 만들 수 있다. 기본 정보를 구조화된 데이터로 관리하고, AI가 자연스러운 문장으로 변환하는 방식이다.

library(ellmer)
library(dplyr)

# 채팅 객체 생성
chat <- chat_openai(model = "gpt-4")

# 경력 데이터 (실제로는 CSV나 데이터베이스에서 가져올 수 있음)
experience <- tibble(
  position = c("데이터 과학자", "연구원", "분석가"),
  company = c("테크회사", "대학교", "컨설팅"),
  duration = c("2020-2023", "2018-2020", "2016-2018"),
  achievements = c("매출 20% 증가 모델 개발", "논문 5편 게재", "고객만족도 향상")
)

# AI를 활용한 경력 설명 생성
for(i in 1:nrow(experience)) {
  prompt <- glue::glue("
    다음 경력을 전문적이고 임팩트 있게 설명해주세요:
    직책: {experience$position[i]}
    회사: {experience$company[i]}
    기간: {experience$duration[i]}
    성과: {experience$achievements[i]}
  ")
  
  response <- chat$chat(prompt)
  cat("##", experience$position[i], "\n")
  cat(response$choices[[1]]$message$content, "\n\n")
}

이렇게 생성된 이력서는 데이터가 업데이트될 때마다 자동으로 갱신되며, 쿼토의 다양한 출력 형식으로 HTML, PDF, Word 문서 등으로 변환할 수 있다.

9.5.2 창의적 영화 시놉시스 제작

ellmer의 parallel_chat() 기능을 활용하면 다양한 관점에서 영화 시놉시스를 동시에 생성하고 비교할 수 있다.

library(ellmer)

# 여러 채팅 세션 생성 (서로 다른 창작 관점)
chats <- list(
  thriller = chat_openai(model = "gpt-4"),
  romance = chat_openai(model = "gpt-4"),
  scifi = chat_openai(model = "gpt-4")
)

# 기본 설정
base_concept <- "2050년 서울, AI와 인간이 공존하는 세계"

# 장르별 시놉시스 동시 생성
prompts <- list(
  thriller = glue::glue("
    {base_concept}를 배경으로 한 스릴러 영화 시놉시스를 작성해주세요.
    긴장감과 서스펜스에 초점을 맞춰주세요.
  "),
  romance = glue::glue("
    {base_concept}를 배경으로 한 로맨스 영화 시놉시스를 작성해주세요.
    인간과 AI 간의 감정적 유대에 초점을 맞춰주세요.
  "),
  scifi = glue::glue("
    {base_concept}를 배경으로 한 SF 영화 시놉시스를 작성해주세요.
    기술과 사회 변화에 초점을 맞춰주세요.
  ")
)

# parallel_chat을 활용한 동시 생성 (개발 중인 기능)
# 실제 사용 시에는 ellmer 개발 버전 설치 필요
# remotes::install_github("posit-dev/ellmer")
results <- parallel_chat(chats, prompts)

# 결과 비교 출력
for(genre in names(results)) {
  cat("##", toupper(genre), "버전\n\n")
  cat(results[[genre]]$choices[[1]]$message$content, "\n\n")
  cat("---\n\n")
}

9.5.3 비용 모니터링과 품질 관리

ellmer의 비용 추적 기능을 활용하여 AI 사용량을 모니터링하고, 생성된 콘텐츠의 품질을 체계적으로 관리할 수 있다.

# 비용 추적 활성화
chat <- chat_openai(model = "gpt-4", track_costs = TRUE)

# 콘텐츠 생성 후 비용 확인
response <- chat$chat("한국 영화 역사를 3문단으로 요약해주세요.")
cat("생성 비용:", chat$get_cost(), "달러\n")

# 품질 검증을 위한 추가 프롬프트
quality_check <- chat$chat("
  방금 생성한 한국 영화 역사 요약의 정확성을 평가하고,
  개선이 필요한 부분이 있다면 지적해주세요.
")

이러한 ellmer-쿼토 통합 워크플로우를 통해 AI의 창의성과 쿼토의 재현가능성을 동시에 활용할 수 있으며, 모든 과정이 문서화되어 투명한 AI 협업이 가능하다.

💭 생각해볼 점

당신이 마지막으로 작성한 보고서를 떠올려보자. 데이터 분석부터 시각화, 문서 작성까지 얼마나 걸렸는가? 몇 번의 복사-붙여넣기를 반복했고, 데이터가 업데이트되면 그래프를 다시 그려야 했을 것이다. 동료가 “작년 그 분석 다시 해줄 수 있어?”라고 물으면 자신있게 대답할 수 있는가?

이제 ellmer와 쿼토가 결합된 새로운 워크플로우를 상상해보자:

# ellmer 개발 버전 설치 필요
# remotes::install_github("posit-dev/ellmer")
library(ellmer)
chat <- chat_openai()

# 데이터 분석 요청
analysis_code <- chat$chat("
  이 매출 데이터로 시계열 분석과 예측 모델 R 코드 만들어줘.
  ggplot2로 시각화도 포함해서.
")

# 결과 해석 요청  
interpretation <- chat$chat("
  이 분석 결과를 한국어로 요약하고 
  경영진에게 보고할 핵심 인사이트 3가지 추출해줘.
")

이 모든 과정이 쿼토 문서 안에서 실행되고, Git으로 추적되어 6개월 후에도 동일한 결과를 재현할 수 있다면? ellmer의 parallel_chat()로 여러 섹션을 동시에 생성하고, 비용 추적으로 예산 관리까지 가능하다면?

더 나아가 이력서를 업데이트해야 할 때, 영화 시놉시스를 써야 할 때, 연구 제안서를 작성해야 할 때도 같은 방식으로 AI와 협업할 수 있다. 당신의 워크플로우는 어떻게 변화할 것인가? 무엇이 가능해질까?