리뷰 의견 여섯 개를 수정 원고와 답변서에 빠짐없이 연결하기

리뷰 의견을 반영하며 원고를 고쳤는데 답변서에는 “수정했습니다”만 남아 있다면, 재검토자는 바뀐 곳을 다시 찾아야 해요. 이번에는 가상 리뷰 여섯 개를 받아 원고와 답변서를 함께 고쳐 볼게요. 손에 남는 것은 지적 ID, 수행한 조치, 바뀐 문장, 새 위치가 연결된 답변 기록 (ZIP: response-log.csv)이에요.

첨부 링크는 이 글의 예제 ZIP으로 연결돼요. 압축을 푼 뒤 링크에 표시된 파일을 열면 입력·코드·완성 자료를 함께 사용할 수 있어요.

의견·원고·시간 데이터는 모두 교육용 합성 자료예요. 실제 심사 의견이나 저자의 실험 경험이 아니에요. 다만 첨부 CSV의 중앙값은 제공한 코드로 계산했으며, 계산 결과와 원고가 일치하도록 만들었어요.

검토 의견을 원고 수정 위치와 답변서에 연결하는 장면
설명 삽화 1. 의견 하나에 요구가 여러 개면 나누어 기록해야 수정과 답변에서 빠뜨리지 않아요.

지적을 감정이 아니라 처리 단위로 나눠요

가상 원고 v1은 “CSV 정리 시간을 기록했다. 모든 기록을 분석에 넣었다. 작업은 빠르게 끝났다. AI가 시간을 줄이는 데 도움이 되었다”라고 적혀 있어요. 여기에는 시간 정의, 누락 처리, 비교 근거가 빠져 있어요. 가상 리뷰어는 시간의 시작·종료, 표본 수·중앙값, 누락 처리, 새 과제 두 개의 추가 실행, AI 효과 주장의 근거, 계산 원자료를 요청했어요.

의견 하나에 “중앙값을 쓰고 누락 처리도 설명하라”가 함께 있다면 두 행으로 나누세요. 한 부분만 고치고 완료 처리하는 실수를 줄일 수 있어요. 리뷰어 답변에 관한 PLOS 안내의 Rule 5·9는 모든 지점에 답하고 이전 판본 대비 변화를 분명히 하도록 설명해요. 예제의 R1.1 같은 ID는 그 원칙을 원고 위치와 연결하기 위한 표식이에요.

각 행에는 먼저 수용, 설명 추가, 추가 작업, 이견 또는 범위 제한을 적어요. 이 단계에서 중요한 것은 “좋은 의견인가”의 평가가 아니라 어떤 답을 만들려면 어떤 증거가 필요한가예요. 계산 요청은 계산으로, 정의 요청은 원고 정의로, 추가 실험 요청은 실제 실행 여부로 답해야 해요.

답변을 쓰기 전에 원고와 계산을 고쳐요

R1.1에는 시간 정의를 넣었어요. v2의 M01은 “입력 파일을 연 시점부터 결과 검사와 수정이 끝난 시점까지”를 총시간으로 삼아요. 중간에 코드를 처음 실행한 시점을 종료로 잡지 않으므로 정의와 결과를 함께 확인할 수 있어요.

R1.2와 R1.3에는 제공한 일곱 건의 합성 기록을 사용했어요. 시간은 8, 10, 11, 13, 15, 18분이고 마지막 행은 종료 시각 누락이에요. 누락 행을 원자료에서 지우지 않고 시간 요약에서만 제외했어요. 유효 여섯 값을 정렬한 가운데 두 값은 11과 13이므로 중앙값은 12분이에요. 표본 수는 7도 6도 단독으로 쓰지 않고 “합성 기록 7건 중 유효 6건”이라고 적었어요.

원자료에는 예제의 시작·종료 시각도 채웠어요. S01은 09:00→09:08이라 8분이고, S07은 시작만 있어요. 모두 설명용으로 만든 시각이며 실행 당시를 관측한 로그가 아니에요. 첨부 폴더에서 python3 summarize.py를 실행하면 시각 차이와 minutes 열을 대조한 뒤 전체 7, 유효 6, 제외 1, 중앙값 12.0을 출력해요. 코드는 누락을 0분으로 바꾸지 않으며, 음수 시간·시각과 분의 불일치·포함 상태인데 종료가 없는 행을 오류로 보고해요. 0은 기록된 유효 시간값일 수 있으므로 누락과 구분해야 해요. 분 단위의 0분이 실제 소요시간 0초를 뜻하는지는 기록 해상도를 확인해야 해요. 실행 결과 (ZIP: calculation-result.json)도 함께 제공해요.

가상 원고의 시간 정의·표본 수·효과 주장·일반화 범위를 고친 변경 대조표
그림 1. 제공 예제의 브라우저 화면이에요. ‘반영 완료’ 표시만 보여주는 대신 실제 문장과 계산 입력을 나란히 놓았어요.

할 수 없는 요청은 결론의 범위까지 함께 조정해요

R2.1은 새 과제 두 개를 추가 실행하라는 요청이에요. 예제에는 해당 기록이 없으므로 “추가 실험에서도 유사했다”고 쓸 수 없어요. 답변은 “새 과제의 자료를 수집하지 않았습니다. 따라서 다양한 분석 과제로 확장한 문장을 삭제하고 현재 자료가 CSV 정리 한 종류라는 한계를 M04에 추가했습니다”로 작성했어요.

추가 실험을 하지 않았다는 사실만으로 요청이 해결됐다고 단정하지는 않아요. 심사 목적에 그 실험이 필수라면 여전히 추가 작업이 필요해요. 지금 답변이 해낸 일은 미수행 상태를 숨기지 않고 원고의 과도한 주장을 줄인 것이에요. 편집자 판단이 필요한 사안은 별도로 요청할 수 있지만, 승인받지 않은 범위 조정을 합의로 기록하면 안 돼요.

R2.2에는 더 직접적인 수정이 필요했어요. 비교 조건이 없으므로 AI가 시간을 줄였다는 문장을 삭제했어요. 단순히 ‘도움이 될 수 있다’로 완화하면 근거가 없는 방향성은 남아요. v2 M03은 “이 자료만으로 시간 단축 효과를 판단하지 않았다”로 바뀌었어요. 삭제도 중요한 수정이므로 답변서에 바뀐 이유와 위치를 기록해요.

답변 완료 여섯 건과 요청 수행 다섯 건을 구분해요

의견 수와 답변 수가 같아도 실험을 요청한 문제가 해결됐다는 뜻은 아니에요. 완성 답변서 (ZIP: response-letter.md)는 여섯 의견 모두에 직접 답하지만, 처리 기록 (ZIP: response-log.csv)의 요청 수행 상태는 다섯 건 완료, R2.1 한 건 미수행이에요. ‘원고에서 일반화를 삭제’하는 조치는 끝났고 ‘새 과제에서 실행’하는 요청은 끝나지 않았어요. 한 행에 이 두 상태를 분리했어요.

공식 작성 안내 Rule 4·8·9는 답변에 변경 내용을 담고, 요청 범위가 지나치다고 판단하는 경우에도 사안을 설명하며, 이전판과 바뀐 내용을 분명히 하도록 안내해요. 다음 결정표는 그 원칙을 이 예제에 적용한 작성자 판단이에요.

같은 ‘추가 검토’ 요청이라도 선택할 조치 답변에서 닫을 수 있는 것
원자료로 재계산 가능 계산을 실행하고 수치·자료 위치를 제공해요. 계산 수행 여부. 해석의 타당성은 별도 검토예요.
이미 근거는 있지만 원고에서 빠짐 근거·정의를 원고에 넣고 전후 문장을 보여줘요. 설명 누락. 새 실험을 했다고 쓰지 않아요.
새 데이터가 없고 결론의 범위를 줄일 수 있음 미수행을 밝히고 일반화 문장을 삭제해요. 원고 범위 수정. 추가 실험 요청은 열어 둬요.
새 실험이 중심 결론을 판단하는 데 필수 결론을 보류하고 추가 작업 여부를 먼저 정해요. 답변을 썼다는 사실뿐이며, 제출 준비 완료로 세지 않아요.

우리 R2.1에는 세 번째 선택을 적용했어요. 반대로 원고의 중심 결론이 ‘모든 분석 과제에서 효과가 있다’였다면 한계 한 줄을 추가하는 것으로 충분하지 않아요. 주장을 철회하거나 필요한 자료를 확보해야 해요. R2.2처럼 비교 자체가 없는 경우도 표현을 약하게 만드는 것보다 근거 없는 방향성을 삭제하는 편이 맞아요.

위치 표시는 새 판본을 기준으로 마무리해요

여기서는 페이지가 바뀌어도 찾을 수 있도록 M01~M05 절 ID를 사용했어요. 학술지 양식이 페이지·줄 번호를 요구하면 최종 PDF를 만든 다음 번호를 채워야 해요. 중간 판본의 줄 번호를 그대로 가져오면 문장을 고쳤어도 답변서가 잘못된 위치를 가리킬 수 있어요.

완성 답변에는 직접 답변, 수행 내용, 변경된 문장 또는 간단한 인용, 위치가 있어요. 예를 들어 R1.2는 “유효 표본 수와 중앙값을 추가했습니다. v2 M02: ‘합성 기록 7건 중 종료 시각이 없는 1건을 제외한 6건 … 중앙값은 12분이었다.’ 계산은 summarize.py와 calculation-result.json에서 확인할 수 있습니다”라고 쓸 수 있어요. 실제 제출 답변은 학술지의 언어와 형식에 맞추되 연결 구조는 유지하면 돼요.

여섯 리뷰 의견의 답변·조치·새 원고 위치를 연결한 완성 기록
그림 2. 제공 예제의 브라우저 화면이에요. 추가 과제 요청은 실험 완료와 구분해 미수행·범위 제한으로 표시했어요.
답변서의 완료 주장과 실제 수정 내용을 왕복 확인하는 장면
설명 삽화 2. 답변서에 반영했다고 적기 전에 실제 원고의 위치와 내용이 맞는지 확인해요.

마지막 대조에서는 의견 여섯 개가 답변 여섯 개로 연결되는지, 각 위치에 실제 변경 문장이 있는지, 답변서가 하지 않은 일을 했다고 쓰지 않았는지를 확인해요. manuscript-v1.md (ZIP: manuscript-v1.md)와 manuscript-v2.md (ZIP: manuscript-v2.md)를 함께 보존하면 변경 이력을 다시 만들 필요도 없어요.

추가로 python3 verify-response.py를 실행하면 여섯 ID가 모두 답변서에 있고 인용한 문장이 실제 v2 위치에 존재하는지 확인해요. 결과는 답변 6건·완료된 요청 5건·미수행 1건이에요. 중앙값도 정렬한 두 값의 평균 (11+13)/2와 프로그램 출력을 따로 대조했어요.

계산 경계도 확인했어요. 제공 원자료의 누락값을 가정상 0으로 바꾸면 중앙값은 11분이 돼요. 따라서 0 대체는 ‘결과에 영향 없는 정리’가 아니에요. 경계 확인 결과 (ZIP: response-verification.json)에는 종료가 시작보다 이른 행, minutes가 시각 차이와 다른 행, included인데 종료가 없는 행을 각각 오류로 검출한 결과가 있어요. 별도로 시작과 종료가 같은 합성 행은 유효 0분으로 계산했어요. 이는 프로그램 동작 확인이며 그런 작업이 실제로 관찰됐다는 뜻은 아니에요. 시간 해상도가 분 단위인 실제 자료에서 0분을 해석하려면 기록 장치와 단위를 먼저 확인해야 해요.

2026년 10월 13일에 공개 작성 지침을 확인하고 합성 예제의 계산을 실행했어요. 이 글의 답변 방식은 재검토자가 변경을 확인하게 하는 도구이며 실제 심사의 수용이나 게재를 보장하지 않아요. 공동 편집자의 요구 자체가 충돌하는 상황은 내부 결정 기록에서 따로 다뤄요.

예제 파일을 한 번에 받아 다시 확인해요

이 글의 입력·코드·완성 자료 ZIP을 새 폴더에 풀면 R06/README.txt, replay.py, assets 폴더가 함께 생겨요. 개별 코드 파일만 저장하면 보조 모듈이나 입력이 빠질 수 있으므로 처음에는 이 묶음을 사용하세요. R06 폴더에서 다음 명령을 실행하면 본문에 사용한 검사를 순서대로 수행해요.

python3 replay.py

확인할 결과는 유효6건의 중앙값12분, 추가실험 미수행 상태 보존예요. 명령이 성공해도 이 값과 본문의 적용 범위를 함께 대조하세요. 실행 안내 (ZIP: README.txt)에 필요한 파일과 개별 명령을 적었어요. 실행 코드는 summarize.py (ZIP: summarize.py) · verify-response.py (ZIP: verify-response.py)에서 직접 볼 수 있어요. Python3.12의 표준 라이브러리를 사용하며, 명령이 실패하면 ZIP의 폴더 구조와 오류에 나온 파일부터 확인해요. 실제 앱 실행에 필요한 프로그램은 원래 설명을 따르세요.

작성·확인: Codex가 공개 원문 또는 공식 문서를 확인하고 예제와 초안을 작성했어요. 사람을 대상으로 한 사용성 검증은 수행하지 않았어요.

설명 삽화 2장은 GPT로 생성한 개념 설명이에요. 실제 예제의 작업 화면과 실행 결과는 기존 그림·첨부 자료에서 따로 확인할 수 있어요.