DesigningInTheRun

주니어 개발자들을 위한 패턴 언어 - 소스 코드 밖, 프로그램이 살아 움직이는 현장에서 직접 설계를 결정하는 법

The Story: The Editor Resident vs. The Runtime Explorer

두 명의 개발자, 민수와 하나가 복잡한 UI 레이아웃과 데이터 처리 로직을 수정하고 있다.

민수의 방식 (The Editor Resident): 민수는 오직 에디터(VS Code)만 본다. 그는 상상력을 동원하여 HTML과 CSS를 수정한다. "여기에 마진을 20px 주면 예쁘겠지?" 수정 후 저장하고, 빌드를 기다리고, 브라우저를 확인한다. 마음에 들지 않는다. 다시 에디터로 돌아간다. 민수는 소스 코드와 실행 결과 사이의 긴 강을 수십 번 왕복하며 진을 뺀다.

하나의 방식 (The Runtime Explorer): 하나는 실행 중인 브라우저 안으로 직접 들어간다. (Chrome DevTools)

  1. 현장 편집: 인스펙터를 열어 HTML 요소를 실시간으로 수정하고 CSS 값을 드래그하며 최적의 수치를 찾는다. 화면이 바뀌는 것을 즉시 확인하며 설계를 확정 짓는다.

  2. 로직 탐색: 복잡한 데이터 변환이 필요할 때는 REPL(django shell 등)을 띄워 실제 데이터를 넣어본다.

하나는 소스 코드를 고치기 전에 이미 작동하는 진실을 알고 있다. 그녀는 현장에서 결정된 내용을 소스 코드에 마지막으로 '기록'할 뿐이다.

Context

TightLoop를 유지하며 기능을 개발하고 있다. CSS 수치나 복잡한 데이터 가공 로직처럼, 소스 코드 단계에서 결과를 완벽히 예측하기 어려운 작업을 수행 중이다.

일상적인 상황:

당신은 지금 완성된 지도를 그리려 애쓰고 있지만, 실제 영토를 밟아볼 생각은 하지 않고 있다.

Problem

에디터 안에서의 상상만으로 설계를 결정하려 하면, 피드백 주기가 길어지고 실행 환경의 변수를 놓치게 된다.

Solution

소스 코드를 고치기 전에 브라우저 인스펙터, 디버거, REPL 등 "실행 중인 환경"에서 먼저 결과를 결정하라.

Christopher Alexander가 대지 위에서 말뚝을 박으며 집의 위치를 정했듯, 개발자도 프로그램이 돌아가는 현장에서 설계를 확정해야 한다.

Principle 1: Live UI Tweaking (실시간 UI 조정)

브라우저의 개발자 도구를 최대한 활용하라.

Principle 2: REPL-Driven Development (REPL 기반 개발)

데이터 가공 로직은 REPL(Read-Eval-Print Loop)에서 먼저 검증하라.

Principle 3: Debugger as an Exploration Tool (탐색 도구로서의 디버거)

디버거를 단순히 버그 잡는 용도로 쓰지 마라.

Principle 4: Shorten the Distance to Reality (현실과의 거리 좁히기)

내가 고친 것이 즉시 현실이 되게 하라.

Real Examples

Example 1: Determining HTML Structure

민수는 에디터에서 <div>를 쪼개며 고민하지만, 하나는 크롬 인스펙터에서 Edit as HTML을 눌러 구조를 바꿔본다. 화면이 무너지지 않는 것을 확인한 후에야 에디터에 코드를 옮긴다.

Example 2: API Logic in Shell

복잡한 Queryset 필터링을 짜야 할 때, 하나는 서버를 띄우는 대신 python manage.py shell을 열어 한 줄씩 명령어를 쳐본다. 데이터가 정확히 걸러지는 것을 눈으로 확인한 뒤 서비스 로직에 반영한다.

Common Pitfalls

"I forgot to save!" (저장하는 걸 깜빡했어요)

현장에서 신나게 고쳤는데 새로고침을 해서 다 날려버리는 것.

Temporary Fix vs. Permanent Code (임시 방편과 영구 코드)

인스펙터에서 대충 맞춘 코드를 그대로 가져왔을 때 구조가 나빠지는 경우.

Connection to Other Patterns

Signs of Success

The Ultimate Insight

진정한 설계는 종이 위가 아니라, 발을 딛고 있는 대지 위에서 완성된다.

컴퓨터는 당신의 머릿속이 아니라 현실의 런타임에서 숨을 쉽니다. 그 숨결을 직접 느끼며 코드를 만지십시오. 실행 중인 현장이 당신의 실험실이자 작업실이 될 때, 당신의 코드는 비로소 생명력을 얻게 될 것입니다.


CategoryPatternLanguage CategoryProgramming CategoryDesign CategoryDebugging CategoryAgile