BioPlayground는 어떻게 만들었을까
이 글은 코딩 튜토리얼이 아닙니다. "왜 시작했고, 어떤 벽에 부딪혔고, 어떻게 넘었는지"에 대한 이야기입니다.
코드를 한 줄도 모르던 연구자가 어떻게 바이오 도구를 만들게 되었는지 — 이 경험이 DevBench를 시작하는 여러분에게 용기가 되기를 바랍니다.
시작: "이 그래프, 매번 손으로 그려야 해?"
모든 건 반복 작업에서 시작했습니다.
매주 실험 결과를 Excel로 정리하고, 같은 형태의 그래프를 반복해서 만들고, 동료에게 이메일로 보내는 과정. "이걸 자동으로 할 수 없을까?"라는 질문이 BioPlayground의 씨앗이었습니다.
처음에는 Python 스크립트 하나였습니다:
import matplotlibmatplotlib.use("Agg")import matplotlib.pyplot as plt
data = [23.5, 45.2, 67.8, 89.1, 12.3]labels = ["Sample A", "Sample B", "Sample C", "Sample D", "Sample E"]
fig, ax = plt.subplots(figsize=(8, 5))ax.bar(labels, data, color="#2d5a3d")ax.set_ylabel("Expression Level")ax.set_title("Gene Expression Comparison")fig.savefig("expression.png", dpi=150, bbox_inches="tight")plt.close(fig)
print("차트 저장 완료: expression.png")assert len(data) == len(labels)이 스크립트 하나가 매주 30분을 절약해줬습니다. "코딩이 이렇게 쓸모있구나."
첫 번째 벽: "다른 사람도 쓸 수 있게 하려면?"
Python 스크립트는 나만 쓸 수 있었습니다. 동료에게 "Python 설치하고, 이 스크립트 실행해봐"라고 하면 돌아오는 대답은 항상 같았습니다.
"그냥 결과만 보내줘."
웹 앱이 답이었습니다. URL 하나면 누구나, 어떤 기기에서든 쓸 수 있으니까.
tech_stack = { "프론트엔드": "React (Next.js)", "스타일링": "Tailwind CSS", "백엔드": "Supabase", "배포": "Vercel", "차트": "Recharts",}
for category, tool in tech_stack.items(): print(f"{category}: {tool}")
assert len(tech_stack) == 5처음 본 기술 이름들이 외계어처럼 느껴졌습니다. 하지만 하나씩 배워가며 깨달은 것이 있습니다 — 프레임워크는 도구일 뿐, 중요한 건 풀고 싶은 문제라는 것.
두 번째 벽: "이 코드, 왜 어제는 됐는데 오늘은 안 되지?"
Git 없이 코딩하던 시절의 악몽입니다.
app_v1.pyapp_v2_final.pyapp_v2_final_진짜.pyapp_backup_20260315.py
Git을 배우고 나서 이 문제가 완전히 사라졌습니다. 모든 변경 이력이 남고, 언제든 과거로 돌아갈 수 있으니까.
git_lessons = [ "커밋은 자주, 작게", "커밋 메시지는 '왜'를 쓴다", "main 브랜치에 직접 push하지 않는다", "코드 리뷰는 내 실수를 잡아주는 안전망",]
for i, lesson in enumerate(git_lessons, 1): print(f"교훈 {i}: {lesson}")
assert len(git_lessons) == 4세 번째 벽: "데이터가 너무 커서 브라우저가 멈춰요"
바이오 데이터는 큽니다. GTEx 데이터셋 수만 행, TCGA 임상 데이터 수천 환자. 이걸 전부 브라우저에 로딩하면 탭이 죽습니다.
해결책은 서버에서 요약하고, 브라우저에는 결과만 보내는 것이었습니다:
strategies = { "서버 사이드 필터링": "전체 데이터 중 필요한 부분만 API로 전송", "페이지네이션": "한 번에 100행씩만 보여주기", "사전 계산": "통계량을 미리 계산해서 저장", "지연 로딩": "스크롤할 때 추가 데이터 로드",}
for strategy, desc in strategies.items(): print(f"- {strategy}: {desc}")
assert "서버 사이드 필터링" in strategies돌아보며: 코딩을 배운 연구자가 얻는 것
코딩을 배운다고 개발자가 되는 것은 아닙니다. 하지만 연구자로서 더 강력해집니다.
gains = { "자동화": "반복 작업에서 해방 → 연구에 집중", "재현성": "스크립트 = 완벽한 실험 노트", "소통": "개발팀과 같은 언어로 대화", "독립성": "원하는 도구를 직접 만들 수 있음", "커리어": "바이오인포매틱스, 데이터 사이언스 확장",}
for gain, desc in gains.items(): print(f"✓ {gain}: {desc}")
assert len(gains) == 5DevBench를 시작하는 당신에게
완벽하게 배우고 시작하려 하지 마세요. 불완전한 코드라도 문제를 푸는 코드가 좋은 코드입니다.
BioPlayground의 첫 커밋은 부끄러울 정도로 엉망이었습니다. 하지만 그 엉망인 코드가 오늘의 도구를 만들었습니다.
당신의 첫 print("Hello, Biology!") 가 어디로 이끌지 아무도 모릅니다.
이 글에서 다룬 도구들의 사용법은 DevBench의 다른 토픽에서 하나씩 배울 수 있습니다. 공통 기초부터 시작하세요.