Rain Lag

단일 파일 놀이터: “제대로 된” 프로젝트 셋업 없이도 놀랍도록 유용한 도구 만들기

잘 만든 스크립트 하나가 복잡한 워크플로우를 대체하고, 프로토타이핑을 빠르게 도와주며, 풀셋 프로젝트 없이도 가벼운 툴킷으로 자라날 수 있는 방법을 다룹니다.

단일 파일 놀이터: “제대로 된” 프로젝트 셋업 없이도 놀랍도록 유용한 도구 만들기

많은 팀에서 자주 벌어지는 일이 있다.

  • 모두가 불평하는 지루한 작업이 하나 있다.
  • 누군가 말한다. “이거 진짜 자동화해야 하는데.”
  • 티켓이 만들어진다: X를 처리하는 도구를 만들 것.
  • 몇 주가 지나도 백로그에 그대로 있다. 이유는 항상 같다. “제대로 된 프로젝트를 셋업할 시간이 없어서….”

그 사이에도 사람들은 여전히 그 지루한 일을 손으로 하고 있다.

항상 “제대로 된 프로젝트”가 필요한 건 아니다. 가끔은 잘 만든 파일 하나면 충분하다. 레포 안에, 데스크톱에, 팀의 공유 폴더 어딘가에 있는 스크립트 하나가, 풀스택 시스템이 해줄 일의 80%를 조용히 대신해 줄 수 있다.

이게 바로 **단일 파일 놀이터(single-file playground)**다. 인프라를 기다리거나, 승인 절차를 거치거나, 완벽한 아키텍처를 고민할 필요 없이, 놀랍게 강력한 도구를 빠르게 만들 수 있는 공간이다.


왜 단일 파일이 ‘클릭 몇 번’보다 나을 때가 많은가

많은 워크플로우는 작은 단계들이 이어지며 자연스럽게 이렇게 자라난다:

  1. 시스템 A에서 CSV를 내보낸다.
  2. 스프레드시트에서 데이터를 손본다.
  3. 셸 명령어를 한두 번 실행한다.
  4. 결과를 시스템 B에 붙여 넣는다.

각 단계는 작고 “쉬워” 보이지만, 전체 체인은 매우 취약하다.

  • CSV 포맷이 바뀌면, 누군가는 다시 정제 방법을 배워야 한다.
  • 한 단계를 빼먹으면 결과가 틀어진다.
  • “이거 다시 어떻게 돌렸더라?”가 단골 질문이 된다.

잘 만든 스크립트나 단일 노드 하나면 이런 체인을 통째로 대체할 때가 많다. 예를 들어, Python 스크립트 하나로 다음을 모두 할 수 있다.

  • API에서 데이터 내려받기
  • 검증 로직을 넣어 데이터 정제 및 변환하기
  • 리포트를 생성하거나 결과를 업로드하기

길고 취약한 위키 문서 대신, 이런 걸 쓰게 되는 것이다:

python sync_reports.py --from yesterday --to today

파일 하나, 진입점 하나, 머릿속에 떠올릴 모델도 하나.

이 단순함이 다음과 같은 효과를 만든다.

  • 유지보수성 – 무언가 바뀌면 고쳐야 할 곳이 한 군데뿐이다.
  • 온보딩 – 신입은 복잡한 절차를 외우는 대신 명령 한 줄만 실행하면 된다.
  • 신뢰성 – 사람 머릿속에 있던 절차 대신, 코드로 한 번만 정확히 정의해두면 된다.

“작은” 스크립트에 담긴 진짜 코드의 힘

GUI 자동화 도구, 로우코드 플랫폼, “노코드” 빌더들은 복잡성을 없애주겠다고 약속한다. 하지만 조금만 비슷하지만 애매하게 다른 요구가 나오면 곧 한계에 부딪힌다.

  • “이 필드가 저 패턴과 맞을 때만, 단 예외적으로 ….”
  • “API에서 나오는 모든 페이지를 다 처리할 때까지 계속 돌려줘…”
  • “이 규칙을 통과한 데이터만 깨끗이 정리해서 반영해줘…”

이걸 시각적 블록이나 잘게 쪼개진 유틸리티 체인으로만 구현하려고 하면 금방 엉망이 된다. 결국 이렇게 된다.

  • 수십 개의 깨지기 쉬운 컴포넌트
  • 여기저기 중복된 로직들
  • 동굴 탐험 같은 디버깅 세션

반면, Python, Node.js, Ruby, Go 등 진짜 프로그래밍 언어로 된 스크립트 하나는 다음을 자연스럽게 제공한다.

  • 루프(loops): 코드 블럭 하나로 수백 개의 아이템을 처리한다.
  • 조건문(conditionals): 복잡한 분기 로직을 읽기 쉽게 표현한다.
  • 함수(functions): 동작을 캡슐화하고 재사용한다.
  • 정규식/파싱(regex & parsing): 텍스트와 데이터를 안정적으로 정리한다.

예를 들어, 로그 라인을 필터링하기 위해 비주얼 툴에서 10단계를 쌓는 대신, 스크립트는 이렇게 끝난다.

import re error_pattern = re.compile(r"ERROR|Exception|Traceback") with open("app.log") as f: for line in f: if error_pattern.search(line): print(line, end="")

짧고, 테스트하기 쉽고, 발전시키기도 쉽다.

이런 로직을 단일 파일 안에 담는 지점이 바로 “놀이터”가 진가를 발휘하는 곳이다. 거대한 프로젝트의 중력장에 빠지지 않고도, 표현력 있는 코드를 마음껏 쓸 수 있다.


마찰을 줄이자: 셋업이 모멘텀을 죽이는 진짜 이유

자동화에서 가장 큰 숨은 비용은 코드가 아니라 셋업이다.

  • “먼저 어떤 프레임워크를 쓸지 정해야 해요.”
  • “레포 구조를 제대로 잡고 시작하는 게 좋겠죠.”
  • “배포 파이프라인도 정의해둬야 할 것 같아요.”
  • “이거 ‘진짜’로 하려면 테스트랑 CI도 있어야 하지 않을까요?”

규모가 어느 정도 되면 다 좋은 생각이다. 하지만 초반에는 정작 실제로 누군가를 도와주는 순간을 계속 뒤로 미루게 한다.

단일 파일 놀이터는 이 마찰을 잘라낸다.

  • 파일 하나만, 기존 레포나 공유 폴더에 체크인한다.
  • 빌드 시스템 없이 python script.py 또는 node tool.mjs로 바로 실행한다.
  • 파라미터는 커맨드라인 플래그나, 파일 상단의 간단한 설정으로 받는다.

이렇게 하면 다음이 가능해진다.

  • 한두 스프린트 뒤가 아니라, 오늘 첫 버전을 내놓을 수 있다.
  • “릴리즈 프로세스” 대신 몇 분 단위로 수정·실험할 수 있다.
  • 이 문제가 정말 풀 가치가 있는지, 과하게 투자하기 전에 검증할 수 있다.

사람들이 이 스크립트에 의존하기 시작한다면, 그때가 더 구조를 얹을 근거가 생긴 시점이다.


부드럽게 진화시키기: 단일 파일에서 작은 툴킷으로

단일 파일은 속도 면에서 훌륭하지만, 시간이 지나면 보통 이렇게 자란다.

  • 새로운 요구사항이 생긴다. → 함수를 하나 더 추가한다.
  • 또 다른 엣지 케이스가 생긴다. → 조건문 몇 개가 더 붙는다.
  • 다른 팀도 쓰기 시작한다. → 플래그와 모드가 늘어난다.

그러다 보면 귀엽던 script.py가 어느새 900줄짜리 중첩 로직 괴물이 되어 있다.

굳이 곧바로 거대한 프레임워크로 점프할 필요는 없다. 대신, 원래의 가벼운 정신은 유지한 채 가벼운 구조를 도입하면 된다.

  • 폴더 분리: “이제는 좀 아프다” 싶을 때 파일을 몇 개로 나눈다.
    • playground/
      • main.py
      • io_utils.py
      • data_cleaning.py
      • config.py
  • 이름 규칙: 어떤 도구가 어디 있는지 바로 알 수 있게 한다.
    • tools/report_sync.py
    • tools/log_cleanup.py
    • tools/schema_check.py
  • 최소한의 문서: 짧은 README.md 하나면 충분하다.
    • 이 툴들이 무슨 일을 하는지
    • 어떻게 실행하는지
    • 예시 명령어 몇 개

이렇게 하면 놀이터는 작은 툴킷으로 진화하고, “잡동사니 상자”가 되는 건 피할 수 있다.

여전히 규칙과 제약이 빡센 대형 레포의 오버헤드는 피하면서도, 다음과 같은 이점을 얻는다.

  • 탐색이 쉬워진다.
  • 관심사 분리가 조금 더 분명해진다.
  • 나중에 리팩터링이 필요할 때 자연스러운 출발점이 생긴다.

혼돈을 막는 팀 규칙: 이름과 레이아웃

방치된 애드혹 스크립트들은 보통 이렇게 변질되기 쉽다.

  • daves_temp_script_final_new.py
  • fix_stuff.sh
  • untitled2.py

하나하나 보면 별 문제 없어 보이지만, 모이면 유지보수 악몽이다.

간단한 규칙만 잡아도 상황은 크게 좋아진다.

1. 의미 있고, 작업 기반으로 이름 짓기

  • generate_release_notes.py
  • backfill_user_metadata.py
  • monitor_queue_depth.nu

이름은 *이게 무슨 일을 하는가?*에 답해야 한다. 누가 만들었는지언제 만들었는지를 담으려 하지 말자.

2. 도메인이나 워크플로우 기준으로 묶기

scripts/ 하나에 모조리 던져 넣는 “스크립트 무덤” 대신, 예를 들어 이렇게 나눈다.

  • scripts/data_migration/
  • scripts/monitoring/
  • scripts/dev_quality/

3. 10줄짜리 헤더 달기

각 파일 상단에 이렇게 적어 둔다.

# Purpose: CRM에서 빌링 데이터베이스로 고객 데이터를 동기화합니다. # Usage: python sync_customers.py --start 2024-01-01 --end 2024-01-31 # Owner: data-platform@company.com # Notes: 여러 번 실행해도 안전합니다. (idemponent)

이 작은 투자로 단일 파일 도구들은 발견하기 쉽고, 안심하고 쓸 수 있는 도구가 된다.


현대 셸에서 얻는 영감: Nushell 그 너머

전통적인 셸(bash, zsh, PowerShell 등)도 이미 강력하지만, Nushell 같은 현대 셸들은 한 발 더 나아간다. 데이터를 단순 텍스트가 아닌 구조화된 테이블로 다루고, 풍부한 스크립트 가능한 파이프라인을 제공한다.

Nushell은 다음 둘 사이의 경계를 흐린다.

  • “대충 빠르게 때우는” 커맨드라인 해킹
  • “제대로 된” 스크립트와 도구

Nushell에서는 다음과 같은 일이 자연스럽게 가능하다.

  • JSON, CSV 같은 포맷을 구조를 이해하는 명령어들에 파이프로 넘긴다.
  • 셸 파이프라인처럼 짧지만, 작은 프로그램처럼 행동하는 스크립트를 쌓아 올린다.

이게 정확히 단일 파일 놀이터가 자리 잡는 지점이다.

  • 허술한 CLI 호출 더미보다 훨씬 견고하고,
  • 마이크로서비스나 웹앱처럼 무겁지도 않다.

꼭 Nushell 자체를 도입하지 않더라도, 이 아이디어는 매우 유용하다. “실험”에서 “믿고 쓰는 도구”로 넘어가는 간극을 최대한 줄이는 것이다. 그 간극을 줄이는 핵심 수단이, 종종 파일 하나짜리 스크립트다.


적당한 무게 찾기: 언제 구조를 더할 것인가

목표는 영원히 “제대로 된 프로젝트”를 피하는 게 아니다. 언제 그 단계로 넘어갈지 타이밍을 잘 잡는 것이다.

건강한 워크플로우는 보통 이렇게 흘러간다.

  1. 단일 파일에서 시작하기

    • 실제 문제 하나를 빠르게 해결한다.
    • 이 자동화가 정말 유용한지 증명한다.
    • 진짜 사용자들로부터 피드백을 모은다.
  2. 작은 툴킷으로 진화시키기

    • 폴더와 이름 규칙을 도입한다.
    • 공통 유틸리티를 헬퍼 모듈로 뽑아낸다.
    • 기본적인 문서와, 여유가 되면 간단한 테스트도 추가한다.
  3. 필요해졌을 때만 무거운 셋업 도입하기 다음과 같은 상황이 되면 “제대로 된 프로젝트”로 옮겨간다.

    • 여러 팀이 이 도구에 의존한다.
    • 버전 관리된 릴리즈나 배포가 필요하다.
    • 복잡도가 분명히 높아져, 더 엄격한 엔지니어링 관행이 필요한 단계다.

그 전까지는, 다음과 같은 것들:

  • CI/CD 파이프라인,
  • 복잡한 패키지 구조,
  • 별도의 배포 환경,

이 가져오는 오버헤드가 실제 가치보다 더 클 때가 많다.

단일 파일 놀이터는 문제에 대한 이해가 성숙해지는 동안, 팀을 민첩하게 유지시켜 준다.


마무리: 일단 스크립트부터 배포하자

팀의 일상을 눈에 띄게 개선하는 데, 거창한 프레임워크나 시스템 설계 문서, 풀 백로그가 꼭 필요한 건 아니다.

필요한 건 종종 다음 세 가지뿐이다.

  • 단일 파일 하나
  • 약간의 신경을 쓴 프로그래밍 로직
  • 자라날 때를 대비한 가벼운 구조와 이름 규칙

여기서 시작하자. 스크립트를 버전 관리에 올리고, 명확한 이름을 붙이고, 맨 위에 이게 무슨 일을 하는지와 사용 예시 몇 줄만 적어 둔다.

그 스크립트가 정말 가치 있는 도구로 자리 잡는다면, 그때는 이미 확장할 만한 튼튼한 기반을 가진 셈이다. 반대로 그 정도까지 가지 않더라도, “제대로 된 프로젝트” 셋업에 몇 주를 쓰지 않고도, 충분히 많이 배웠을 것이다.

단일 파일 놀이터는, 손으로 하는 반복 작업과 완전히 엔지니어링된 시스템 사이의 간극을 메워 준다. 이걸 잘 활용하면, 더 많은 유용한 도구를, 더 빠르게, 훨씬 덜 거창한 의식 절차로도 배포할 수 있다.

지금 눈앞에 괴롭고 반복적인 작업이 떠오른다면? 아마 지금이 새 파일을 열고 몇 줄 적어 내려가기 딱 좋은 때일 것이다.

단일 파일 놀이터: “제대로 된” 프로젝트 셋업 없이도 놀랍도록 유용한 도구 만들기 | Rain Lag