4  AI 시대 문서 코드화

과학 연구 재현가능성 위기(Reproducibility Crisis)는 21세기 학계의 가장 심각한 도전 중 하나다. 네이처(Nature)가 2016년 실시한 설문조사에서 연구자 70%가 다른 연구자의 실험을 재현하는 데 실패했고, 50% 이상이 자신의 실험조차 재현하지 못한 경험이 있다고 답했다. 단순한 기술적 문제가 아니라 과학적 지식 생산 방식의 근본적 재검토를 요구하는 신호였다.

재현가능 과학 글쓰기는 이러한 위기에 대한 해답으로 진화해왔다. 1984년 도널드 크누스(Donald Knuth)의 문학적 프로그래밍에서 시작해, 2018년 벤 마위크(Ben Marwick), 칼 뵈티거(Carl Boettiger), 링컨 멀런(Lincoln Mullen)이 연구 재현 총서(Research Compendium)를 현대적으로 정립했고, 이제 AI 시대를 맞아 텍스트 + 코드 + 데이터 + 프롬프트 통합 패러다임으로 확장되고 있다.

그림 4.1: 재현가능 과학 글쓰기 진화

이 장에서는 재현가능 과학 글쓰기가 어떻게 진화해왔는지, AI 시대 어떤 새로운 도전과 기회가 있는지 살펴본다. 단순히 도구의 발전사가 아니라, 과학적 사고와 연구 방법론의 패러다임 변화를 이해하는 것이 목표다.

4.1 문학적 프로그래밍

문학적 프로그래밍(Literate Programming)은 코드와 설명을 하나의 문서에 통합해 인간의 논리적 사고 순서를 따라 서술하는 것이 핵심이다. 도널드 크누스(Donald Knuth)가 1984년에 제시한 WEB 시스템으로 출발한 이 철학은 “컴퓨터에게 무엇을 하라고 지시” 하기보다 “우리가 컴퓨터에 시키려는 바를 인간에게 설명”하는 데 초점을 두자는 급진적 제안이었다. WEB 시스템은 \(\TeX\)(문서)와 Pascal(코드)을 혼합한 .web 소스를 기반으로, TANGLE을 통해 컴파일 가능한 Pascal 코드를 추출하고 WEAVE로 정교하게 조판된 가독성 높은 문서를 생성한다. 크누스는 이 방식을 실제로 적용해 \(\TeX\) 조판 시스템과 글꼴 설계 시스템 METAFONT를 문학적 프로그래밍으로 개발했으며, 하나의 원본에서 코드와 문서를 동시 생성하는 이 흐름이 대규모 시스템도 잘 구성된 에세이처럼 읽히게 만들어 가독성과 검증가능성, 재사용성을 높이고 과학적 사고의 투명성을 실천하는 방법론임을 입증했다.

그림 4.2: 문학적 프로그래밍 도구 진화

문학적 프로그래밍 개념은 과학 연구 재현가능성(Reproducibility) 문제 해결의 열쇠가 되었다. 2002년 프리드리히 라이쉬(Friedrich Leisch)의 Sweave가 R과 LaTeX을 통합했고, 2012년 이휘 시에(Yihui Xie) knitr이 다언어 지원과 캐싱 시스템으로 가능성을 확장했다. 2014년 Jupyter 노트북은 실시간 실행과 시각적 통합으로 광범위하게 채택되었으며, 2022년 Quarto는 “단일 원본, 다중 형식” 패러다임을 정립했다.

4.2 연구 재현 총서

문학적 프로그래밍이 코드와 텍스트의 통합이라면, 연구 재현 총서(Research Compendium)는 전체 연구 프로젝트를 체계적으로 구조화하는 컨테이너다. 단순한 파일 모음이 아니라 데이터, 코드, 문서, 환경 설정, 메타데이터가 유기적으로 결합된 자체 완결적 연구 패키지로, 연구의 투명성과 재현가능성을 보장하는 핵심 방법론이다. 연구 재현 총서는 다른 연구자가 동일한 결과를 얻을 수 있도록 연구 과정 전과정을 문서화하고 표준화하며, 과학적 지식의 누적과 검증을 가능하게 하는 기반이다.

연구 재현 총서의 개념적 뿌리는 1990년대 초 스탠포드 대학의 지구물리학자 존 클레어바우트(Jon Claerbout)의 SEP(Stanford Exploration Project)에서 시작되었다. 전자 문서와 make 기반 재현 연구를 추진하며 “계산 결과에 대한 논문은 광고일 뿐, 진정한 학술 연구는 그 결과를 생성한 완전한 소프트웨어 환경”이라는 통찰을 제시했다. 이러한 철학은 1995년 버크하이트와 도노호(Buckheit & Donoho)의 WaveLab 프로젝트에서 구체화되어 “논문의 모든 그림을 재현할 수 있는 완전한 코드를 함께 출판”하는 원칙으로 확립되었고, 2004년 젠틀먼과 템플 랭(Gentleman & Temple Lang)이 Bioconductor에서 패키지와 비네트 형태로 제도화하면서 현재의 연구 컴펜디움 가이드라인으로 발전했다.

그림 4.3: Make → R 패키지 - 연구 재현 총서 구조 진화

그림 4.3 에서 보듯이, 연구 재현 총서는 1990년대 Make 기반 구조에서 2000년대 R 패키지 기반 구조로 진화하면서 질적 변화를 경험했다. 클레어바우트 초기 모델은 Makefile을 통한 수동적 의존성 관리와 개별적 문서 작성에 의존했지만, 젠틀먼과 템플 랭 혁신은 DESCRIPTION 파일을 통한 자동 의존성 관리, 비네트(vignettes)를 통한 통합 문서화, 표준화된 메타데이터 시스템을 도입했다. 이러한 구조적 변화는 단순한 기술적 개선을 넘어 연구 재현성 패러다임 자체를 바꾸었으며, 수동적 스크립트 관리에서 자동화된 패키지 시스템으로, 개별적 문서에서 통합 비네트로, 환경 의존성에서 표준화된 메타데이터로의 전환을 가능하게 했다.

2018년 벤 마위크, 칼 뵈티거, 링컨 멀런(Marwick 기타, 2018)은 연구 재현 총서를 현대적으로 재정의했다. 이들은 R 패키지 구조를 활용하여 데이터, 코드, 문서, 환경 설정을 표준화된 방식으로 조직하는 방법론을 제시했고, rrtools라는 실용적 도구를 개발했다.

연구 재현 총서의 핵심은 연구의 모든 요소를 하나의 자체 완결적 패키지로 만드는 것이다. 단순히 파일들을 폴더에 넣는 것이 아니라, R 패키지의 엄격한 구조와 메타데이터 시스템을 활용하여 의존성 관리, 버전 제어, 문서화를 체계화한다.

my-research-project/
├── data/                    # 원본 및 처리된 데이터
   ├── raw_data.csv
   └── processed_data.rds
├── analysis/                # 분석 스크립트와 보고서
   ├── 01_data_prep.R
   ├── 02_analysis.Rmd
   └── paper.Rmd
├── R/                       # 재사용 가능한 함수
   ├── functions.R
   └── helpers.R
├── DESCRIPTION             # 프로젝트 메타데이터와 의존성
├── NAMESPACE               # 패키지 네임스페이스 정의
├── LICENSE                 # 라이선스 정보
├── README.md               # 프로젝트 개요와 실행 방법
└── renv.lock              # R 패키지 버전 고정

이러한 구조의 핵심 장점은 표준화재현가능성이다. DESCRIPTION 파일은 모든 R 패키지 의존성을 명시하고, renv.lock은 정확한 버전을 고정한다. 다른 연구자가 이 프로젝트를 받으면 renv::restore()로 동일한 환경을 즉시 재구성할 수 있다.

연구 재현 총서 도구 생태계는 지속적으로 진화해왔다. 벤 마위크이 2018년 개발한 rrtools는 연구 재현 총서 생성을 자동화하고 Quarto 통합과 Docker 환경 격리 지원을 통해 재현 가능성을 한층 높였다. 2020년에는 rrtools를 기반으로 더 간소화된 워크플로우를 제공하는 rcompendium이 등장했으며, GitHub Actions와 통합을 통해 지속적 통합(CI) 환경에서 재현가능성을 자동으로 검증하는 시스템이 구축되었다. 이러한 도구들의 발전은 연구자들이 복잡한 설정 없이도 표준화된 재현 가능한 연구 환경을 구축할 수 있게 만들었다.

하지만 AI 시대에는 이 구조가 확장되어야 한다. 프롬프트, AI 응답 캐시, 품질 관리 시스템이 추가적으로 필요하기 때문이다. 30년 이상 진화해온 연구 재현 총서는 이제 AI와의 협업을 포함하는 새로운 차원으로 발전하고 있다.

4.3 AI 시대 새로운 패러다임

연구 재현 총서에서 데이터는 항상 핵심 구성 요소였지만, 전통적으로는 분석의 대상에 머물렀다. 그런데 AI 시대에 들어서면서 데이터의 역할에 중요한 변화가 일어났다. 데이터는 이제 AI 모델 맥락 정보 제공자이자 프롬프트 설계 핵심 입력으로 그 역할이 확장되었다. 데이터의 구조와 품질이 AI 생성 결과의 정확도와 관련성을 직접적으로 좌우하게 되면서, 프롬프트 엔지니어링 과정에서 데이터에 대한 깊은 이해가 필수 요건이 되었다. 이러한 변화는 데이터를 텍스트, 코드, 프롬프트와 동등하게 독립적으로 관리하고 버전을 추적해야 하는 일급 구성요소로 재정의할 필요성을 제기한다.

2022년 ChatGPT 등장 이후 연구에서 AI 활용이 급속히 확산되면서 새로운 문제가 대두되었다. 기존 텍스트 + 코드 패러다임에서 데이터프롬프트가 일급 시민으로 격상되면서 문학적 프로그래밍 정의가 확장되었다.

그림 4.4: AI 시대 문학적 프로그래밍 - 텍스트 + 코드 + 데이터 + 프롬프트

전통적인 문학적 프로그래밍에서는 연구자가 직접 코드를 작성하고 결과를 해석했지만, AI 시대에는 데이터를 프롬프트 컨텍스트로 제공하고 AI와 협업하여 분석과 해석을 수행한다. 이제 데이터와 프롬프트 모두 코드와 동등한 지위를 가져야 한다.

# 전통적 방식: 인간이 직접 분석과 해석
data <- read.csv("research_data.csv")
summary_stats <- data %>%
  group_by(category) %>%
  summarise(mean_value = mean(value))

# 결과: 카테고리 간 유의한 차이를 보여준다...

R 생태계에서 ellmer 패키지는 AI와 데이터 분석을 통합하는 가장 세련된 접근 방식을 제공한다. 단순한 텍스트 프롬프트를 넘어, chat_structured() 함수를 통해 AI 응답을 사전 정의된 타입 구조로 받을 수 있으며, interpolate_file() 함수로 프롬프트 템플릿과 데이터를 깔끔하게 결합할 수 있다. 이러한 접근은 AI 출력을 즉시 R 객체로 활용할 수 있게 하여, 전통적인 통계 분석 워크플로우에 AI를 자연스럽게 통합한다.

# AI 통합 방식: ellmer의 고급 기능 활용
library(ellmer)
library(tidyverse)

data <- read.csv("research_data.csv")
summary_stats <- data %>%
  group_by(category) %>%
  summarise(mean_value = mean(value))

# ellmer를 통한 체계적 AI 분석
chat <- chat_openai(
  system_prompt = readr::read_file("prompts/statistical-expert.txt"),
  temperature = 0.3
)

# 구조화된 응답 타입 정의
analysis_type <- type_object(
  statistical_interpretation = type_string("통계적 해석"),
  practical_implications = type_array(type_string(), "실무적 함의"),
  confidence_level = type_number("신뢰수준"),
  limitations = type_array(type_string(), "분석의 한계")
)

# 프롬프트 템플릿과 데이터 결합
prompt <- ellmer::interpolate_file(
  "prompts/data-analysis-template.md",
  data = list(
    structure = capture.output(str(data)),
    summary = capture.output(print(summary_stats)),
    n_obs = nrow(data),
    n_groups = n_distinct(data$category)
  )
)

# 구조화된 AI 분석 수행
ai_interpretation <- chat$chat_structured(
  prompt = prompt,
  type = analysis_type
)

# 결과를 R 객체로 직접 활용 가능

이러한 접근 방식의 핵심은 AI 출력을 문자열이 아닌 구조화된 R 객체로 직접 받는다는 점이다. type_object() 함수로 사전 정의한 스키마에 따라 AI 응답이 즉시 활용 가능한 데이터 구조로 변환되며, interpolate_file() 함수는 프롬프트 템플릿과 데이터를 명확하게 분리하여 관리할 수 있게 한다. 이러한 구조화된 접근은 AI 출력의 일관성을 보장하고, 후속 분석에서 타입 오류를 방지하며, 연구 워크플로우의 재현가능성을 크게 향상시킨다.

ellmer 패키지는 이러한 구조화된 접근을 연구 재현 총서 구조와 완벽하게 통합한다. interpolate_file() 함수는 prompts/ 폴더의 YAML이나 마크다운 템플릿을 읽어 데이터와 결합하고, 생성된 AI 응답은 cache/ai_responses/ 폴더에 RDS 형식으로 자동 저장되어 재현가능성을 보장한다. config/.ai-config.yml에 정의된 설정에 따라 ellmer는 temperature, 모델 버전 등을 일관되게 유지한다.

그림 4.5 는 연구 재현 총서가 AI 시대를 맞아 어떻게 진화했는지 보여준다. 왼쪽의 전통적 구조는 벤 마위크(Ben Marwick)의 rrtools가 제시한 표준화된 R 패키지 기반 접근으로, data/, analysis/, R/ 폴더를 통해 데이터와 코드를 체계적으로 관리한다. 구조는 DESCRIPTION 파일로 의존성을 명시하고 renv.lock으로 패키지 버전을 고정하여 재현가능성을 보장한다.

오른쪽 AI 확장 구조는 전통적 구조의 장점을 계승하면서도 AI 시대 새로운 요구사항을 반영한다. 가장 주목할 변화는 prompts/ 폴더 추가로, ellmer의 interpolate_file() 함수가 사용하는 YAML 및 마크다운 템플릿을 버전 관리한다. cache/ 폴더는 ellmer가 생성한 AI 응답을 RDS 형식으로 저장하여, chat_structured()의 결과를 재사용할 수 있게 한다. config/ 폴더는 AI 모델 설정과 API 키를 안전하게 관리하고, logs/ 폴더는 AI 사용 내역과 품질 검토 결과를 추적하여 연구의 투명성을 높인다.

이러한 확장은 단순한 폴더 추가가 아니라 연구 패러다임의 근본적 변화를 반영한다. 데이터는 이제 분석 대상을 넘어 AI와 대화 컨텍스트로 활용되며, 프롬프트는 일급 시민으로서 독립적으로 관리되고, AI 응답은 캐싱을 통해 재현가능성을 보장받는다. 전통적 연구 재현 총서의 엄격한 구조와 AI 시대의 유연한 협업이 결합된 이 새로운 구조는 완전한 재현 가능 연구 생태계를 구현한다.

그림 4.5: 연구 재현 총서 - 전통적 구조 vs AI 확장 구조

4.4 재현가능성 새로운 도전

전통적 과학 연구의 결정론적 재현성과 달리, AI 시대는 비결정론적 특성으로 인해 새로운 접근이 필요하다. 그림 4.6 는 AI 시대 재현가능성이 직면한 근본적 도전을 보여준다. 전통적인 “동일한 데이터 + 동일한 코드 = 동일한 결과”라는 공식이 더 이상 성립하지 않는 상황에서, 연구 커뮤니티는 근본적 패러다임 변화에 직면했다.

가장 근본적인 문제는 모델 진화의 딜레마다. AI 모델은 주 혹은 월 단위로 지속적으로 업데이트되며, 예를 들어, GPT-4 2024년 1월 버전과 8월 버전은 동일한 프롬프트에도 다른 응답을 생성한다. 이는 모델 개선의 긍정적 측면이지만, 장기 연구 프로젝트의 일관성과 신뢰성을 근본적으로 위협한다.

그림 4.6: AI 시대 재현성 도전과 해결방안

AI 모델의 블랙박스 특성 또한 심각한 도전이다. 학습 데이터셋은 비공개되고 내부 작동 메커니즘은 불투명하여, 결과 예측이 불가능하고 오류 원인 추적이 불가능하다. 이는 과학적 검증과 디버깅 메커니즘의 작동을 근본적으로 불가능하게 만든다.

확률적 생성 메커니즘의 문제도 간과할 수 없다. 트랜스포머 아키텍처의 확률적 토큰 샘플링 과정으로 인해 temperature=0.0 으로 설정해도 완전한 결정론적 출력을 보장할 수 없으며, 동일한 실험을 반복했을 때 서로 다른 결과가 나올 수 있어 재현성을 훼손한다.

마지막으로 환각(hallucination) 위험은 연구 신뢰성에 치명적 위협이 된다. AI 패턴 매칭 기반 생성 방식과 사실 검증 메커니즘의 부재로 인해, AI는 그럴듯하지만 허위인 논문 인용이나 존재하지 않는 통계를 생성할 수 있어 학술적 무결성을 근본적으로 위협한다.

이러한 도전은 연구 생태계 전반에 파급 효과를 미친다. 연구 방법론의 혼란으로 전통적 동료 검토 시스템 한계가 노출되고, 연구 결과 검증과 추적을 위한 새로운 방법론이 부재한 상황이다. 또한 협업 연구의 동기화 실패로 연구팀 간 결과 공유와 재현이 불가능해지고, 다기관 협업 프로젝트에서 동기화 문제가 발생하며, 표준화된 AI 활용 가이드라인이 부재한 상황이다.

결론적으로, 이는 결정론적 재현성에서 확률적 재현성으로의 패러다임 전환을 의미한다. 완벽한 재현 대신 ‘충분한 재현성(Sufficient Reproducibility)’ 개념을 도입하고, 투명성과 추적가능성, 체계적 관리를 새로운 연구 신뢰성의 기준으로 삼아야 한다.

4.5 프롬프트 코드화

프롬프트가 연구 결과를 좌우하는 핵심 변수로 부상하면서, 이를 체계적으로 관리하는 것이 연구 재현성의 새로운 과제가 되었다. 동일한 데이터셋에 서로 다른 프롬프트를 적용하면 완전히 다른 분석 결과가 나올 수 있기 때문에, 프롬프트 버전 관리는 선택이 아닌 필수가 되었다. 특히 장기 연구 프로젝트에서는 프롬프트의 점진적 개선 과정을 추적할 수 있어야 하며, 어떤 버전이 어떤 결과를 생성했는지 명확히 기록해야 한다. Git 기반 버전 관리 시스템은 이러한 요구를 충족하는 가장 검증된 방법론이다.

그림 4.7: Git 기반 프롬프트 버전 관리 워크플로우

그림 4.7 에서 보듯이, 체계적인 프롬프트 관리는 브랜치 전략을 통한 실험적 개발과 메인 브랜치의 안정성을 동시에 보장한다. 각 프롬프트는 YAML 메타데이터 블록을 통해 버전, 목적, AI 파라미터를 명확히 정의하고, 템플릿 섹션에서는 변수 치환을 통한 유연한 프롬프트 구성을 가능하게 한다. 이러한 구조화된 접근은 단순한 텍스트 파일 관리를 넘어, 프롬프트의 의도와 맥락을 명시적으로 문서화하여 다른 연구자가 쉽게 이해하고 재사용할 수 있게 만든다.

# prompts/data-interpretation-v2.1.yml
metadata:
  name: "통계 분석 결과 해석"
  version: "2.1.0"
  purpose: "데이터 분석 결과를 학술적으로 해석"

template: |
  다음 통계 분석 결과를 해석해주세요:
  {analysis_result}

  해석 시 다음 관점을 포함해주세요:
  1. 통계적 유의성과 효과 크기
  2. 실무적 의미와 시사점
  3. 연구 방법론의 한계점

ai_parameters:
  model: "gpt-4-turbo-2024-04-09"
  temperature: 0.3
  max_tokens: 1500

프롬프트 코드화의 핵심은 A/B 테스팅을 통한 체계적인 품질 개선에 있다. Git 브랜치를 활용하여 서로 다른 프롬프트 접근 방식을 병렬로 실험하고, 동일한 데이터셋에 대한 결과를 정량적으로 비교할 수 있다. 예를 들어, feature/detailed-context 브랜치에서는 더 구체적인 맥락 정보를 제공하는 프롬프트를, feature/concise-output 브랜치에서는 간결한 출력을 유도하는 프롬프트를 동시에 개발하여 성능을 비교한다. 이러한 실험적 접근은 프롬프트 엔지니어링을 경험적 추측에서 데이터 기반 최적화로 전환시킨다.

재현가능성을 보장하는 AI 워크플로우의 핵심은 캐싱 시스템에 있다. 프롬프트 텍스트, AI 모델, 파라미터를 조합한 해시값을 캐시 키로 사용하여, 동일한 조건에서는 API 호출 없이 저장된 결과를 재사용한다. 이는 단순한 비용 절약을 넘어, AI의 비결정론적 특성으로 인한 재현성 문제를 우회하는 실용적 해결책이다. 아래 코드는 이러한 캐싱 로직을 연구 재현 총서 구조에 통합한 예시다.

library(httr2)
library(digest)

# 연구 재현 총서 기반 AI 요청 함수
generate_ai_content <- function(prompt_file, data = NULL) {
  # 프롬프트 템플릿 로드
  prompt_config <- yaml::read_yaml(prompt_file)

  # 템플릿에 데이터 삽입
  prompt_text <- prompt_config$template
  if (!is.null(data)) {
    for (key in names(data)) {
      prompt_text <- gsub(paste0("\\{", key, "\\}"), data[[key]], prompt_text)
    }
  }

  # 캐시 키 생성 (재현성 보장)
  cache_key <- digest::digest(list(
    prompt = prompt_text,
    model = prompt_config$ai_parameters$model,
    temperature = prompt_config$ai_parameters$temperature
  ))

  cache_file <- file.path("cache/ai_responses", paste0(cache_key, ".rds"))

  # 캐시 확인 (동일한 요청 시 동일한 응답)
  if (file.exists(cache_file)) {
    return(readRDS(cache_file))
  }

  # API 호출 및 응답 캐싱
  # 실제 구현에서는 OpenAI API 호출
  result <- list(
    content = "AI 생성 응답",
    metadata = list(
      model = prompt_config$ai_parameters$model,
      temperature = prompt_config$ai_parameters$temperature,
      generated_at = Sys.time(),
      cache_key = cache_key
    )
  )

  saveRDS(result, cache_file)
  return(result)
}

프롬프트 품질 관리는 연구 신뢰성의 또 다른 핵심 축이다. 각 프롬프트 버전에 대해 표준화된 평가 메트릭을 적용하고, 인간 검토자의 피드백을 체계적으로 수집하여 지속적인 개선 사이클을 구축해야 한다. 이는 logs/quality_reviews.json에 평가 결과를 기록하고, Git 커밋 메시지에 성능 변화를 명시하는 방식으로 구현된다. 특히 중요한 것은 프롬프트 변경이 결과에 미치는 영향을 정량적으로 측정할 수 있는 벤치마크 데이터셋을 유지하는 것이다. 이러한 체계적 접근을 통해 프롬프트 엔지니어링도 소프트웨어 개발과 동일한 수준의 엄밀성을 갖출 수 있다.

4.6 Quarto 활용 AI 통합

Quarto는 AI 시대 문학적 프로그래밍에 이상적인 플랫폼을 제공한다. 단일 원본에서 다중 출력 형식을 생성하는 Quarto의 철학이 AI 협업 워크플로우와 완벽히 부합하기 때문이다. 그림 4.8 에서 보듯이, Quarto-AI 통합은 4계층 구조로 설계된다: Quarto 기반 계층에서 문서 구조, 엔진 지원, 출력 형식을 통한 견고한 토대를 제공하고, AI 통합 계층에서 프롬프트 관리, 모델 통합, 재현성 메타데이터를 통해 체계적인 AI 협업을 실현하며, 관리 계층에서 버전 관리, 데이터 거버넌스, 보안을 통해 전문적인 연구 환경을 구축하고, 출력 계층에서 다양한 형식으로 결과를 배포한다. 이러한 체계적 접근은 AI 보조 연구의 투명성과 재현가능성을 동시에 보장한다.

그림 4.8: Quarto-AI 통합 아키텍처: 4계층 구조

Quarto의 YAML 헤더 시스템은 AI 사용 내역을 체계적으로 문서화하는 핵심 도구다. 단순한 메타데이터 기록을 넘어, AI 활용 철학, 사용된 모델 정보, 인간 감독 과정을 명시적으로 선언함으로써 연구의 윤리적 투명성을 확보한다. 특히 중요한 것은 AI가 생성한 콘텐츠의 비중과 인간 검토 과정을 정량적으로 기록하는 것이다. 이러한 접근은 독자가 연구 결과를 해석할 때 AI의 역할을 정확히 이해할 수 있게 하며, 학술적 무결성을 유지하는 기반이 된다.

---
title: "AI 보조 연구 보고서"
ai_integration:
  philosophy: "AI는 인간 연구자의 사고를 보조하되, 최종 책임은 인간이 진다"
  models_used:
    - name: "gpt-4-turbo-2024-04-09"
      purpose: ["데이터 분석 해석", "문헌 검토"]
      percentage: "전체 텍스트의 약 25%"
  human_oversight:
    fact_checking: "모든 AI 생성 수치와 인용은 원본과 대조 확인"
---

문서 본문에서는 AI 생성 콘텐츠를 명시적으로 구분하여 독자가 인간의 사고와 AI의 기여를 명확히 구별할 수 있게 한다. Quarto의 div 블록(.ai-generated)을 활용하여 AI 보조로 작성된 부분을 시각적으로 표시하고, 사용된 모델과 파라미터 정보를 병기한다. 더 중요한 것은 각 AI 생성 콘텐츠 뒤에 인간 검토 과정을 반드시 기록하는 것이다. 이는 AI의 장점을 활용하면서도 인간의 최종 책임을 명확히 하는 방식이다.

::: {.ai-generated}
**AI 보조 해석**: 통계적으로 유의한 차이 (p=0.023), 중간 효과크기 (Cohen's d=0.52)
:::

**인간 검토**: 통계적 해석은 정확하나, 실무적 함의는 추가 검토 필요...

이러한 투명한 표시 방식은 AI 활용의 윤리적 기준을 충족할 뿐 아니라, 연구 품질 향상에도 기여한다. 독자는 각 주장의 출처를 명확히 파악할 수 있고, 연구자는 AI 의존도를 스스로 모니터링하여 균형잡힌 협업을 유지할 수 있다. 특히 학술 출판에서 요구하는 투명성 기준을 선제적으로 충족함으로써, AI 시대 연구 윤리의 새로운 표준을 제시한다. Quarto의 유연한 확장 시스템을 통해 이러한 표시 방식은 HTML, PDF, Word 등 모든 출력 형식에서 일관되게 적용되어, 매체에 관계없이 투명성을 보장한다.

💭 생각해볼 점

AI 시대 재현 가능성의 핵심은 “완전한 결정론”이 아니라 “투명성·추적 가능성·검증 가능성”을 통해 실질적 재현 가능 수준을 끌어올리는 데 있다. 프롬프트(시스템·유저), 모델 스냅샷, 모든 파라미터와 컨텍스트(데이터·코드·환경)를 표준화해 기록하고, 동일 조건에서는 캐시를 재사용하며, 구조화된 출력과 자동 검증(스키마/팩트체크/회귀 테스트)을 결합해야 한다.

프롬프트는 이제 코드와 동등한 1급 자산이 되었다. YAML 템플릿으로 표준화하고 Git으로 버전과 리뷰 이력을 관리하며, 변경이 성능에 미치는 영향을 벤치마크로 정량화하자. Quarto는 이러한 관행을 문서 수준에서 일관되게 담아내는 매체로, 메타데이터 공개와 인간 검토 기록을 통해 윤리·정책 요구를 충족시키고 독자가 해석에 필요한 맥락을 제공한다.

완전한 재현은 어려울 수 있지만, “메타데이터·로그·정책”과 “환경 고정·파라미터/시드·캐시 키 설계”를 함께 설계하면 품질과 신뢰성을 동시에 달성할 수 있다. 결국 중요한 것은 “어떻게 만들었는가를 증명하는 문서화”이며, 이것이 AI와 협업하는 문학적 프로그래밍의 새로운 표준이다.

다음 장에서는 본서의 다음 파트인 “문서 해부”로 넘어가 문서의 핵심 구성요소를 체계적으로 살펴본다. 바로 이어지는 장에서 제목·요약·본문·그림·표·인용·참조 등 구성 단위를 Quarto 관점에서 해부하고, 이후 글꼴·마크다운·언어·DSL까지 확장해 실전 문서 설계의 기반을 다진다.