[태그:] 개발용어

  • 스키마(Schema) — 데이터베이스와 머릿속이 같은 단어를 쓰는 이유

    요약 — 먼저 결론

    스키마는 “데이터가 어떤 모양이어야 하는지 미리 정해둔 틀”이다. 데이터베이스에선 테이블 설계도를, 심리학에선 머릿속 지식의 틀을 가리킨다.

    같은 단어를 쓰는 건 우연이 아니다. 둘 다 핵심이 같다 — 틀이 먼저 있어야, 새로 들어오는 것이 자리를 잡는다.

    개발할 땐 스키마가 쓰레기 데이터를 막고, 공부할 땐 스키마가 새 지식을 붙잡는다.

    은행 신청서 양식을 떠올리면 된다

    은행 신청서엔 칸마다 규칙이 있다. 이름 칸엔 글자, 생년월일 칸엔 숫자 8자리, 서명은 필수.

    이렇게 칸의 종류·형식·필수 여부를 미리 정해둔 약속이 스키마다. 내용물이 아니라 틀이다. 누가 써넣든 양식은 같다.

    개발에서 — 데이터의 설계도

    개발에서 스키마는 “이 데이터는 이 모양이어야 한다”는 선언이다. 쓰이는 곳마다 뜻이 같다.

    맥락 스키마가 정하는 것
    DB 스키마 어떤 테이블에 어떤 컬럼(이름·타입·필수)이 있나
    API 스키마 요청·응답에 어떤 필드가 와야 하나
    폼·설정 스키마 입력값이 어떤 형식이어야 하나

    스키마의 힘은 들어오는 순간 거른다는 데 있다. 나이 칸에 “abc”가 오면 저장 전에 거부된다. 스키마가 없으면 틀린 데이터가 조용히 쌓이다가 몇 달 뒤에 터진다.

    심리학에서 — 머릿속 지식의 틀

    1932년 심리학자 바틀릿(Bartlett)이 유명한 실험을 했다. 영국 학생들에게 낯선 북미 원주민 설화 “유령들의 전쟁”을 들려주고 시간이 지난 뒤 다시 말하게 했다.

    사람들은 이야기를 그대로 기억하지 못했다. 자기에게 익숙한 틀에 맞게 바꿔서 기억했다. 낯선 카누는 익숙한 배로, 낯선 의식은 익숙한 사냥으로.

    머릿속에 이미 있는 지식의 틀 — 이게 심리학의 스키마다. 우리는 새 정보를 원본 그대로 저장하지 않는다. 기존 틀에 끼워 넣으며 저장한다. “식당 스키마”가 있으면 처음 가는 식당에서도 헤매지 않는 것처럼 — 들어가고, 앉고, 주문하고, 계산한다.

    왜 같은 단어인가

    어원은 그리스어 skhēma(형태·모양). 두 분야가 같은 단어를 고른 건 같은 일을 하기 때문이다.

    DB 스키마 머릿속 스키마
    테이블·컬럼 기존 지식 구조
    새 데이터 행으로 삽입 기존 틀에 연결
    틀에 안 맞으면 거부 (에러 발생) 조용히 왜곡되거나 잊힘

    마지막 줄이 무섭다. 컴퓨터는 안 맞으면 에러라도 띄운다. 뇌는 조용히 왜곡하거나 버린다. 바틀릿의 학생들은 자기 기억이 바뀐 줄도 몰랐다.

    실전 — 공부와 개발에 그대로 쓴다

    이 개념은 책상 양쪽에서 다 쓰인다.

    공부: 새 지식이 안 외워지는 건 머리가 나빠서가 아니라 걸어둘 틀이 없어서일 때가 많다. 새 개념을 만나면 “내가 아는 것 중 무엇과 닮았나”부터 찾아라. 비유 하나가 반복 열 번보다 오래간다.

    개발: 데이터를 받기 전에 스키마부터 정하라. “일단 저장하고 나중에 정리”는 거의 항상 쓰레기 산으로 끝난다. 그리고 스키마 변경은 그 위의 데이터 전부에 영향을 주는 수술이다 — 바꾸기 전에 백업.

    한 줄 정리

    스키마 = 틀. 틀이 먼저 있어야 새것이 자리를 잡는다 — 데이터베이스에서도, 머릿속에서도.

    참고한 것

    글에 쓴 실험·용어의 출처다.

    • Frederic Bartlett, Remembering (1932) — “유령들의 전쟁” 실험, 스키마 이론의 출발
    • Jean Piaget — 아이는 동화(assimilation)·조절(accommodation)로 스키마를 키운다
    • JSON Schema — 개발 쪽 스키마 표준의 예
  • 야크 셰이빙, 멱등성, 도그푸딩, 데드맨 스위치 — 코드 밖에서도 통하는 개발 용어 4개

    개발자들이 쓰는 말 중엔 코드보다 일하는 방식을 가리키는 게 많다. 오늘 넷이 그렇다 — 곁가지에 홀리는 함정, 몇 번을 해도 안전한 반복, 내놓기 전에 내가 먼저 써보기, 내가 멈췄을 때 안전하게 멈추는 장치. 알아두면 협업할 때도 혼자 일할 때도 쓰인다.

    요약

    • 야크 셰이빙: 진짜 할 일을 하려다 곁가지가 꼬리를 물어 엉뚱한 데서 시간을 다 쓰는 것
    • 멱등성: 몇 번을 실행해도 결과가 한 번 한 것과 같은 성질 (재시도해도 안전)
    • 도그푸딩: 남에게 내놓기 전에 내가 먼저 사용자로 써보는 것
    • 데드맨 스위치: 내가 “살아있다”는 신호를 멈추면 시스템이 자동으로 안전하게 정지하는 장치
    • 넷의 공통점: 코드 용어 같지만 실은 집중·안전·정직·대비라는 일의 태도
    용어 한 줄 뜻 일에서는
    야크 셰이빙 곁가지가 꼬리를 물어 본질을 잃음 집중
    멱등성 여러 번 해도 결과가 한 번과 같음 안전한 반복
    도그푸딩 내놓기 전 내가 먼저 써봄 정직한 검증
    데드맨 스위치 내가 멈추면 시스템이 안전하게 정지 실패 대비

    1. 야크 셰이빙 (Yak Shaving)

    차를 닦으려는데 호스가 없다. 호스를 사려니 마트 회원카드가 만료됐고, 갱신하려니 옆집이 빌려간 책을 돌려줘야 하고… 정신을 차려보니 동물원에서 야크 털을 깎고 있다. 정작 차는 그대로다.

    이렇게 진짜 목표를 위해 시작한 곁가지 작업이 꼬리에 꼬리를 물어, 원래 일과 상관없어 보이는 데서 시간을 다 쓰는 것이 야크 셰이빙이다. MIT에서 나온 표현이라고 알려져 있다.

    개발에서 흔하다. “버그 하나 고치자” → “그러려면 라이브러리 업데이트” → “그러려면 빌드 도구 교체” → 반나절째 환경 설정 중. 일상도 똑같다 — 글 하나 쓰려다 블로그 테마부터 손보고 있는 것.

    빠져나오는 법: “지금 이게 원래 하려던 일에 정말 필요한가?”를 한 번 묻는다. 아니면 곁가지는 메모만 남기고 본 작업으로 돌아온다.

    2. 멱등성 (Idempotency)

    엘리베이터 버튼을 열 번 눌러도 한 번 누른 것과 똑같이 온다. 이게 멱등성이다 — 같은 동작을 여러 번 해도 결과가 한 번 한 것과 같은 성질.

    원래 수학 용어(f(f(x)) = f(x))인데, 개발에선 특히 재시도 안전에서 중요하다. 결제 요청을 보냈는데 응답이 안 와 다시 보냈다고 하자. 멱등하지 않으면 두 번 결제된다. 멱등하면 같은 요청은 한 번만 처리된다 — 요청마다 붙이는 “멱등 키”로 구분한다.

    구분도 쉽다. “삭제”는 멱등이다(이미 지운 걸 또 눌러도 여전히 지워진 상태). “1개 추가”는 멱등이 아니다(누를 때마다 늘어남).

    왜 알면 좋나: 자동화·재시도가 들어가는 모든 곳(결제·알림·동기화)에서 “이게 두 번 실행되면 사고가 나나?”를 판단하는 기준이 된다.

    3. 도그푸딩 (Dogfooding)

    “자기 개밥 자기가 먹기(eat your own dog food).” 개사료 회사가 자기 개에게 그 사료를 먹이며 품질을 증명했다는 데서 나왔고, 1988년 마이크로소프트가 “우리 소프트웨어를 우리가 먼저 쓰자”는 뜻으로 퍼뜨렸다고 알려져 있다.

    뜻은 단순하다 — 남에게 팔거나 내놓기 전에, 내가 먼저 사용자로 써보는 것. 직접 써봐야 버그도 잡고, 사용자가 어디서 불편한지 몸으로 안다.

    핵심은 정직이다. 내가 안 쓰는 도구를 남에게 권하긴 어렵다. 반대로 내가 매일 쓰는 도구는 빠르게 좋아진다 — 불편하면 내가 제일 먼저 아프니까.

    한 칸 더 — 도그푸딩은 “내가 써보기”까지다. 그다음 칸은 모르는 남이 써보는 것이고, 진짜 시험은 거기서 시작된다.

    4. 데드맨 스위치 (Dead Man’s Switch)

    기차 기관사가 운전 중 쓰러지면 어떻게 될까. 옛 기차엔 페달이 있었다. 기관사가 페달을 계속 밟고 있어야 기차가 달리고, 발을 떼면(쓰러지면) 기차가 자동으로 멈춘다. 이 장치가 데드맨 스위치다.

    이름은 섬뜩하지만 발상은 단순하다 — 내가 멈췄을 때, 시스템이 알아서 안전하게 멈추는 것. 평소엔 “나 살아있다”는 신호를 계속 보내야 하고, 그 신호가 끊기면 최악을 가정하고 안전 쪽으로 작동한다.

    개발·자동화에서 그대로 쓴다. 자동매매 봇이 응답을 멈추면 포지션을 자동으로 정리한다(안 그러면 시장이 급변해도 무방비). 서버가 주기적 “심장박동(heartbeat)”을 못 보내면 다른 서버가 대신 깬다.

    왜 알면 좋나: 무인으로 도는 모든 것(봇·크론·자동화)에 “이게 죽으면 어떻게 안전하게 멈추지?”를 미리 심는 발상이다. 켜는 것보다 죽을 때를 설계하는 것이 진짜 안전이다.

    한 줄 정리

    세 용어는 코드가 아니라 태도를 가리킨다.

    • 야크 셰이빙 → 곁가지에 홀리지 말고 본질에 집중하라
    • 멱등성 → 반복·재시도해도 안전하게 설계하라
    • 도그푸딩 → 내놓기 전에 내가 먼저 써봐라
    • 데드맨 스위치 → 잘 돌 때가 아니라 죽을 때를 설계하라

    이름을 알면 일이 어디서 새는지 가리킬 수 있다. 개발자와 대화할 때도, 혼자 일할 때도.