본문 바로가기

AI 콘텐츠 자동화

파이썬 자동화 스크립트에 안전장치를 추가해 중복 발행을 막은 과정

안녕하세요, 파이선생입니다. 여러분은 코딩이나 매크로를 이용해 단순 반복 작업을 자동화해 본 경험이 있으신가요?

최근 저는 파이썬을 이용해 블로그 자동화 시스템을 구축하는 과정에서 정말 아찔한 경험을 했습니다. 명령어에 들어가는 작은 글자 하나, 띄어쓰기 하나를 실수로 빠뜨린 탓에 똑같은 내용의 글이 2초 간격으로 끝없이 반복해서 블로그에 등록될 뻔했던 사건이었습니다. 코딩이 가져다주는 마법 같은 편리함 이면에는, 단 한 번의 사소한 실수조차도 시스템 전체에 치명적인 영향을 미칠 수 있다는 무서운 양면성이 존재한다는 것을 뼈저리게 느낀 순간이었습니다.

이번 글에서는 제가 겪었던 이 식은땀 나는 경험을 바탕으로, 자동화 스크립트를 만들 때 왜 안전장치가 필수적인지, 그리고 구체적으로 어떻게 안전장치를 추가하여 문제의 재발을 완벽하게 막아냈는지 그 생생한 개선 과정을 여러분과 공유하고자 합니다. 이 글을 통해 이제 막 코딩 자동화에 입문하신 분들이 저와 같은 실수를 반복하지 않고, 더욱 튼튼하고 안전한 시스템을 만드는 데 작은 도움이 되기를 바랍니다.


왜 이런 아찔한 문제가 생겼을까?

문제가 발생했던 가장 근본적인 원인은 바로 '새로운 글 쓰기' 기능과 '기존에 작성된 글 고치기' 기능을 단 하나의 파이썬 파일 안에 모두 집어넣었기 때문입니다. 처음에는 단순히 코드를 관리하고 유지보수하기 편할 것이라는 생각에서 관련된 모든 기능을 한 곳에 모아두었습니다.

하지만 이는 사람의 입장에서만 편할 뿐, 컴퓨터의 입장에서는 매우 혼란스러운 구조였습니다. 사용자가 스크립트를 실행할 때, 지금 새로운 글을 쓰려고 하는 것인지 아니면 기존 글을 고치려고 하는 것인지를 명확하게 구분하기가 어려웠기 때문입니다.

스크립트를 실행할 때 명령창에 추가적인 옵션(입력값)을 정확하게 입력해야만 컴퓨터가 두 기능을 구분할 수 있는 구조였습니다. 그날도 평소처럼 기존에 작성된 글을 고치기 위해 스크립트를 실행했는데, 찰나의 실수로 필수 옵션 하나를 빼먹고 말았습니다. 그 결과, 컴퓨터는 제가 기존 글을 고치라는 명령을 내린 것이 아니라 '완전히 새로운 글을 또 쓰라'는 명령을 내린 것으로 단단히 오해해 버렸고, 그 즉시 똑같은 내용의 글을 새롭게 쏟아내기 시작했습니다.

새로운 글 쓰기 기능과 기존 글 고치기 기능이 분리된 작업 폴더 화면

해결책 1: 기능별로 파이썬 파일을 완전히 쪼개어 역할을 명확히 분리한 모습

첫 번째 해결책: 기능의 완전한 역할 분리

이러한 끔찍한 실수를 원천적으로 차단하기 위해 제가 가장 먼저 착수한 작업은, 억지로 하나로 묶여 있던 기능들을 그 성격과 목적에 맞게 두 개의 별개 파일로 완전히 쪼개는 것이었습니다.

  • 새로운 글 쓰기 전용 스크립트 파일
  • 기존 글 고치기 전용 스크립트 파일

이렇게 물리적으로 파일 자체를 두 개로 나누어 버렸습니다. 이제 기존 글의 내용을 고쳐야 할 일이 생기면, 무조건 '고치기 전용' 스크립트 파일만 열어서 실행하면 됩니다. 이 고치기 전용 스크립트 내부에는 애초에 '새로운 글 쓰기'를 수행하는 코드가 단 한 줄도 들어있지 않기 때문에, 컴퓨터가 아무리 착각을 하더라도 엉뚱하게 새로운 글을 올릴 확률을 완벽하게 차단할 수 있게 된 셈입니다.

자동화 코드를 작성할 때는 하나의 도구가 너무 많은 일을 하게 놔두지 마세요. 가위로는 종이를 자르고, 망치로는 못을 박듯, 각각의 기능이 뚜렷한 목적 하나만을 가지도록 역할을 분리하는 것이 시스템의 안정성을 높이는 가장 훌륭한 첫걸음입니다.


두 번째 해결책: 실행 전 꼼꼼한 확인 절차 추가

물론 역할을 나누었다고 해서 모든 문제가 해결된 것은 아니었습니다. 만약 고치기 전용 스크립트를 실행할 때, "정확히 어떤 번호의 글을 고칠 것인지" 알려주는 필수적인 입력값을 사용자가 또다시 실수로 빼먹는다면 어떻게 될까요? 컴퓨터는 목적지를 잃어버리고 프로그램 내부에서 길을 잃거나, 엉뚱한 데이터를 건드려 더 큰 에러를 일으킬 수도 있습니다.

그래서 스크립트가 본격적으로 인터넷에 접속하여 작업을 시작하기 전에, 아주 짧지만 강력한 문지기 역할을 하는 코드를 맨 앞에 배치했습니다. 바로 "글 번호 입력값이 제대로 들어왔는지" 먼저 깐깐하게 확인하는 안전장치를 추가한 것입니다.

입력값이 없으면 알아서 멈추는 실행 전 확인 절차 코드

해결책 2: 필수 입력값이 없으면 작업을 시작도 하기 전에 에러를 내며 멈추는 방어 코드 로직

위 사진의 코드에서 볼 수 있듯이, 만약 글 번호 입력값이 텅 비어있다면, 시스템은 그 즉시 진행하던 모든 작업을 강제로 멈추고 사용자에게 경고 메시지를 띄우도록 만들었습니다. 일이 벌어지고 나서 수습하는 것이 아니라, 아예 일이 시작되기 전에 차단해 버리는 것이 핵심입니다.


적용 결과: 오타에도 당황하지 않는 든든한 방어벽 구축

이렇게 기능 분리와 사전 확인 절차라는 두 가지 든든한 해결책을 적용한 후, 시스템이 얼마나 튼튼해졌는지 직접 테스트해 보았습니다. 일부러 평소에 하던 실수처럼 필수 입력값을 빼먹은 채로 대충 스크립트를 실행해 보았죠.

입력값 누락 시 실행을 차단하고 경고를 띄우는 실제 차단 화면

"기능이 분리되었습니다. 기존 글을 고치려면 반드시 글 번호를 입력해야 합니다." 라는 든든한 경고 메시지

결과는 대성공이었습니다. 프로그램은 블로그 서버에 무언가를 올리거나 요청하기도 전에, 입력 실수를 정상적으로 감지하고 터미널 화면에 붉은색 경고를 띄우며 그 즉시 멈추었습니다. 더 이상 키보드를 잘못 쳤다거나 깜빡 졸았다는 이유로 똑같은 글이 수십 개씩 도배되는 끔찍한 참사는 발생하지 않게 된 것입니다. 마음의 평화가 찾아오는 순간이었습니다.


코딩 자동화에서 반드시 지켜야 할 세 가지 안전 원칙

이번 경험을 통해 제가 스스로 세우게 된 '안전한 자동화를 위한 세 가지 원칙'을 덧붙여 봅니다.

첫째, 모든 동작은 눈에 보여야 합니다. 컴퓨터가 현재 무슨 일을 하고 있는지, 어떤 데이터를 만지고 있는지 화면에 명확하게 표시되도록 코드를 작성하세요. 보이지 않는 곳에서 조용히 일어나는 에러가 가장 무섭습니다.

둘째, 최종 실행 전에는 항상 멈춤 구간을 만드세요. 아무리 완벽하게 작성된 스크립트라도, 마지막으로 인터넷에 무언가를 올리거나 데이터를 삭제하기 직전에는 '정말 이대로 진행할까요?'라고 한 번 더 확인하는 절차가 있어야 합니다. 이 짧은 확인 절차가 수많은 참사를 막아줍니다.

셋째, 에러 메시지는 친절해야 합니다. 컴퓨터가 알아듣는 복잡한 외계어 같은 에러 메시지 대신, '글 번호가 빠졌습니다'처럼 사람이 읽고 바로 이해할 수 있는 친절한 경고창을 띄우도록 코드를 개선하세요. 친절한 에러 메시지는 당황한 사용자가 문제를 가장 빠르게 수습할 수 있는 유일한 나침반이 됩니다.

자동화는 우리의 삶을 편하게 만들어주는 훌륭한 도구지만, 그 도구를 쥐고 있는 것은 결국 사람이기에 언제든 실수를 할 수 있습니다. 부디 여러분은 저처럼 식은땀을 흘리지 마시고, 처음부터 꼼꼼한 안전장치를 마련하여 즐겁고 안전한 코딩 생활을 이어나가시길 응원합니다!

결론: 실수를 가정한 안전장치의 중요성

우리는 파이썬이나 다른 프로그래밍 언어로 코딩을 할 때 무의식적으로 "내가 짠 프로그램이 100% 정상적으로 완벽하게 작동할 때"만 상상하며 코드를 짜는 경향이 있습니다. 해피엔딩만 생각하는 것이죠. 하지만 이번의 뼈아픈 경험을 통해 제가 얻은 가장 큰 깨달음은 바로 "사람은 어떤 상황에서든 반드시 실수를 하고 만다"는 불편한 진실을 겸허히 인정해야 한다는 것입니다.

내가 피곤해서 오타를 내더라도, 혹은 다른 일에 정신이 팔려 필수적인 입력값을 깜빡 잊어버리더라도 시스템이 알아서 주인의 그 바보 같은 실수를 부드럽게 감싸 안고 차단해 주는 '실수를 가정한 든든한 안전장치'가 곳곳에 마련되어 있어야 합니다. 그래야만 비로소 에러의 공포에서 벗어나 진정으로 마음 편하고 유용한 자동화를 이룰 수 있습니다.

여러분도 나만의 자동화 코드를 멋지게 작성하실 때, 그저 목적을 달성하는 편리성 이전에 "만약 사용자가 코드를 잘못 실행한다면 시스템은 이것을 어떻게 막아낼 것인가?"를 먼저 고민해 보시길 적극 권장합니다. 그 작은 고민의 시간이 훗날 수십 시간의 복구 작업을 아껴줄 가장 큰 투자가 될 것입니다.

오늘의 길었던 개선 기록이 코딩과 자동화의 세계에 막 입문하신 분들께 작지만 의미 있는 도움이 되기를 진심으로 바랍니다. 앞으로도 좌충우돌하며 배우는 파이썬 팁들을 계속해서 공유하겠습니다. 감사합니다!