연구자의 Claude Code 활용기: IRB 변경 보고서 초안 자동 정리

소개

연구를 진행하면서 연구 계획 변경에 대해 IRB(연구윤리위원회)에 변경 사항을 보고해야 하는데요. 17개 설문의 수백 개 질문을 하나하나 비교해서 "문구 수정/추가/삭제"를 정리해야 하는 상황이어서 claude code를 활용해보았습니다.

구글 드라이브에 v1 설문 폴더와 v2 설문 폴더를 각각 정리해두고, Google Forms API 연동부터 엑셀파일로 문항을 비교한 파일을 생성하고, 검토한 후 IRB 보고서(docx)작성까지 전체 파이프라인을 만들 수 있었습니다.

진행 방법

전체 워크플로우

Google Forms (v1, v2)

    ↓ Forms API 추출

v1/v2 설문문항 정리.xlsx (설문별 시트)

    ↓ 수작업 검토 & 수정

    ↓ difflib 기반 자동 비교

v1_v2_비교.xlsx (변경사항 색상 코딩)

    ↓ 자동 요약

IRB_survey_diff.docx (보고서)

Step 1: Google Forms에서 질문 추출

가장 먼저 한 일은 Google Drive의 설문지를 읽을 수 있는 환경을 만드는 것입니다. 아래와 같이 간단하게 프롬프트를 입력했더니 Claude Code가 Google Cloud Console 설정, OAuth 인증, API 활성화까지 단계별로 안내해줬습니다. 인증 모듈(`utils/auth.py`)을 공통으로 만들어서 이후 모든 스크립트가 재사용 할 수 있게 작업을 진행했습니다.

구글 드라이브 폴더에 있는 설문지 내용을 비교분석하려고 해.
개인 계정의 드라이브인데 접근해서 분석하려면 어떻게 해야하는지 확인해줘.

설문 추출 요청은 구글 드라이브 폴더 링크를 먼저 알려준 후 아래 프롬프트로 진행했습니다.

[v1] 폴더의 설문들은 'v1 설문문항 정리.xlsx' 파일에 정리하고
[v2] 폴더의 설문들은 'v2 설문문항 정리.xlsx' 파일에 정리해.
하나의 설문은 하나의 시트로 만들고, 시트에 A열은 섹션 헤더, B열은 질문 텍스트를 넣어줘.

추출 결과를 반드시 원본 Google Forms와 대조해야 합니다. 다중 응답 질문(체크박스, 그리드)이 하위 항목별로 분리되는 문제가 있었고, 섹션 헤더가 누락되는 경우도 있었습니다.

Step 2: v1 vs v2 자동 비교 — 시행착오의 연속

비교 로직은 3번의 큰 수정을 거쳤습니다.

  • 시행착오 1: 섹션+순서 기반 매칭의 한계

처음 접근:

v1과 v2를 비교해서 비교 엑셀을 만들어줘. 질문 별로 '문구 수정/추가/삭제' 표시해. 변경내용이 없는 경우 '-'로 표시해.

첫 버전은 같은 섹션 내에서 질문 순서대로 1:1 매칭했습니다. 문제는 v1에서 질문 하나가 삭제되면 이후 모든 질문이 한 칸씩 밀려서 잘못 대응된다는 것입니다.

→ 해결: difflib.SequenceMatcher로 전체 질문 시퀀스를 비교하도록 변경. 삭제/추가/이동을 자동 감지합니다.

  • 시행착오 2: "말소리" → "발음" 단어 하나 교체의 경우 '문구 수정' 표시 누락

IRB 보고에서는 "말소리 문제"를 "발음 문제"로 바꾼 것도 "문구 수정"으로 보고해야 합니다. 그런데 질문 위치가 변경되면서 difflib이 삭제+추가로 분리해버리는 문제가 있었습니다.

→ 해결: 2단계 매칭을 추가했습니다.

: 1차 - difflib으로 시퀀스 비교

: 2차 - 1차에서 "삭제"와 "추가"로 분류된 항목끼리 유사도를 다시 계산 → 0.4 이상이면 "문구 수정"으로 재분류

# 2차 매칭 핵심 로직

for di, dr in deleted:

    for ai, ar in added:

        ratio = difflib.SequenceMatcher(None, dr["v1 질문"], ar["v2 질문"]).ratio()

        if ratio >= 0.4:

            pairs.append((ratio, di, ai, dr, ar))

# 유사도 높은 순으로 1:1 매칭 → "문구 수정"으로 재분류

  • 시행착오 3: replace 블록 내 순서 매칭

유사도 기반 최적 매칭으로 바꾸니 정확도는 올랐지만, 결과 엑셀에서 질문 번호 순서가 뒤죽박죽이 되었습니다. 유사도가 가장 높은 쌍부터 매칭하다 보니 출력 순서가 유사도 순이 된 것입니다.

→ 해결: 매칭 결과를 v2 질문 번호(v2 no) 순서로 재정렬.

# 삭제(v1 only) 먼저, 그 다음 v2 순서대로 (매칭 + 추가)

for vi, vq1 in block_v1:

    if vi not in matched_v1:

        result.append(...)  # 삭제

for vj, vq2 in block_v2:

    if vj in match_map:

        result.append(...)  # 문구 수정 (v2 순서)

    else:

        result.append(...)  # 추가 (v2 순서)

Step 3: IRB 보고서 자동 생성

비교 엑셀의 통계를 자동 집계하여 IRB 양식의 Word 문서를 생성합니다.

지금까지 비교한 내용을 정리해서 documents 폴더에 IRB_survey_diff.docx 문서로 결과를 저장해. 마지막에 설문별로 v2 변경사항을 쉽게 파악할 수있도록 '문구 변경(N문항) / 추가(N문항) / 삭제(N문항)' 현황을 표로 정리해.

결과와 배운 점

1. 추출 → 검토 → 비교 → 검토, 단계별로 진행하는 것이 좋습니다. 한 번에 모든 것을 요청하면 중간 오류를 놓치게 되는 것 같아요. 특히 추출 결과를 반드시 원본과 대조하는 것이 필요합니다.

2. 문제를 발견하면 스크린샷과 행 번호로 구체적으로 알려주세요. "행 30~35에서 섹션이 섞여"처럼 말하면 Claude가 정확히 원인을 찾아서 계획을 수정합니다. 스크린샷도 함께 제공하는 것이 맥락 파악에 도움이 되는 것 같습니다.

3. 자동 결과는 반드시 검토해야 합니다. 질문이나 설문 구조 변경에 대해서 동일한 오류를 반복적으로 발생하는 구간이 있었는데, 결국은 수작업으로 수정하였습니다. 두 가지 지시사항을 주었는데 지시사항 간의 논리적 오류가 있었던 것 같습니다.

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요