호환이 깨지는 변경

업데이트 후 기능 절반이 멈출 때의 정체예요. 새로 온 것이 불량인 게 아니라, 보내는 쪽이 규격을 바꿨는데 받는 쪽이 아직 옛 규격에 맞춰져 있는 거예요.

쉽게 말하면

오래 거래한 납품업체가 이번 주부터 상자 규격을 바꿨어요. 상자 자체는 더 튼튼하고 좋아요. 그런데 우리 가게 선반 칸 폭이 옛 상자에 맞춰 짜여 있어서 새 상자가 들어가지 않아요. 진열이 멈추고 창고 대차도 못 들어가요. 호환이 깨지는 변경이 정확히 이거예요. 새 물건이 불량인 게 아니라, 받는 쪽이 옛 규격에 맞춰 만들어져 있다는 것이 문제예요.

그래서 증상이 늘 비슷해요. 어제까지 되던 화면 몇 개가 오늘 한꺼번에 안 돼요. 손님 신고는 "사이트가 이상해요" 한 줄로 들어와요.

사장님이 잘못 누른 것도, 손님 인터넷이 느린 것도 아니에요. 무엇이 언제 바뀌었는지 찾는 일이 수리의 절반이에요.

호환을 깨는 변경
주소를 두 칸으로 쪼개고, 옛 한 칸 방식은 그날 없앰

받는 쪽을 같이 고치지 않으면 그날부터 주소가 빈 전표가 나와요. 멈추는 날이 반드시 하루 생겨요.

호환을 지키는 변경
새 두 칸 방식을 추가하고, 옛 한 칸 방식도 한동안 같이 받음

받는 쪽은 준비되는 대로 옮기면 돼요. 멈추는 날이 없고, 옮기는 비용도 각자 형편에 맞춰 쓰게 돼요.

이 변경은 어디서 날아오나

사장님 코드를 아무도 안 건드려도 서비스는 멈출 수 있어요. 규격을 바꾸는 쪽이 대부분 가게 밖이에요.

어디서 오나무엇이 바뀌나내 화면에서 보이는 모습
남이 만든 부품앞자리가 올라간 새 판이 깔리면서 옛 기능 이름이 사라져요. 남이 만든 부품배포가 갑자기 실패하거나, 특정 화면만 빈 화면으로 뜸
AI 모델쓰던 모델이 폐기 예고를 거쳐 종료되고, 새 모델은 답 모양이 달라요. AI 모델챗봇이 답을 못 하거나, 형식이 어긋난 답을 냄
결제사와 외부 창구옛 규격의 창구가 문을 닫고 새 규격만 받아요. 가게끼리 주고받는 창구결제 단계에서만 실패, 나머지 화면은 정상
폰 운영체제와 스토어새 규격을 안 맞추면 심사에서 막히거나 기능 권한이 끊겨요. 스토어 심사사진 첨부나 알림처럼 한 기능만 죽음
브라우저오래된 방식의 지원이 끊겨요. 브라우저특정 브라우저에서만 깨지고 내 폰에서는 잘 됨
내 서비스 자신내가 규격을 바꿨는데 손님 앱과 연동 업체는 옛 규격을 쓰고 있어요내 화면은 멀쩡한데 연동한 쪽에서 오류가 쏟아짐

"우리는 아무것도 안 바꿨는데요"

이 말이 사실이어도 멈출 수 있어요. 부품 판 번호를 고정해 두지 않으면 배포할 때마다 밖의 새 판을 같이 받아 와요. 고정해 두는 장치가 잠금 파일이고, 이게 있으면 "어제 되던 배포가 오늘 깨지는" 종류의 사고가 크게 줄어요.

표기 한 줄로 미리 읽는 위험

다행히 대부분의 부품은 미리 알려 줘요. 번호 앞자리가 그 신호예요. 번호를 읽는 법은 버전 번호 규칙 편에 있고, 여기서는 설정 파일에 적힌 받는 범위 표기를 봐요. 이 한 줄이 앞자리가 예고 없이 들어올지 말지를 정해요.

설정 파일에 적힌 표기무슨 뜻인가호환이 깨질 위험
1.4.2정확히 이 판만 씁니다. 새 판이 나와도 저절로 안 받아요가장 낮아요. 대신 보안 수정도 저절로 안 들어와요
^1.4.2앞자리 1은 그대로 두고, 뒷자리만 올라가면 받습니다보통이에요. 부품이 번호 약속을 지키면 안전해요
~1.4.2맨 뒷자리만 올라가면 받습니다. 가운데 자리도 안 올려요낮아요. 자주 쓰는 보수적인 표기예요
>=1.0.0 <2.0.02 판이 나오기 전까지만 받습니다. 캐럿 표기를 손으로 쓴 것과 같아요보통이에요
latest 또는 *무엇이든 최신을 받습니다가장 높아요. 앞자리가 예고 없이 들어와 배포가 실패해요

약속은 예의이고 강제가 아니에요

앞자리 약속을 지키지 않는 부품도 있어요. 뒷자리 판에서 호환이 깨지는 일이 실제로 생겨요. 그래서 표기만 믿지 말고, 아래 판정 순서를 절차로 남겨 두는 편이 안전해요.

받기 전에 하는 판정 순서

새 판을 받는 결정은 감이 아니라 순서로 해요. 이 순서는 부품에도, AI 모델에도, 외부 창구에도 그대로 써요.

  1. 1왜 올리는지 한 줄로 적어요. 보안 수정, 꼭 필요한 새 기능, 지원 종료 예고 셋 중 무엇인지. 셋 다 아니면 오늘은 안 올리는 게 정답인 날도 있어요.
  2. 2올리려는 판의 변경 기록을 열어요. 제거 · 이름 변경 · 더 이상 지원하지 않음 이 세 낱말만 찾아요. 변경 기록
  3. 3그 이름을 내 서비스가 실제로 쓰는지 찾아요. 안 쓰면 앞자리가 올라가도 나에게는 아무 일도 없어요. 이 단계가 판정의 심장이에요.
  4. 4손님이 안 보는 연습 무대에서 먼저 올려 봐요. 실제 가게에서 처음 열어 보는 것과 여기서 열어 보는 것의 차이가 사고의 대부분이에요. 연습 무대
  5. 5돈이 오가는 화면, 로그인 화면, 저장되는 화면 셋을 손으로 눌러 봐요. 자동 점검이 있으면 같이 돌려요. 화면 눌러 보는 점검
  6. 6되돌릴 방법을 확인한 뒤 실제로 올려요. 되돌리기 계획이 없으면 오늘은 올리지 않아요. 되돌리기

직접 해보기

밖에서 무엇을 받아 쓰는지 목록으로 뽑아 보세요

스튜디오 대화창에 그대로 붙여 넣어 보세요. "지금 이 프로젝트가 쓰는 외부 부품과 외부 창구 목록을 표로 정리하고, 각각 판 번호가 어떤 표기로 적혀 있는지 함께 보여 주세요." 목록이 한 장으로 나오면, 앞자리 올림 소식이 들려도 나에게 해당되는 이야기인지 곧바로 판정돼요. 무엇을 받아 쓰는지 모르는 상태가 가장 위험한 상태예요.

스튜디오 열기

내가 깨는 쪽일 때

서비스가 커지면 방향이 바뀌어요. 손님 앱, 연동 업체, 손님이 만든 자동화가 내 규격을 보고 만들어져 있어요. 이때부터 규격을 바꾸는 일은 남의 가게를 멈추는 일이에요.

내가 하려는 변경그냥 하면안전하게 하는 법
칸 이름 바꾸기 (name → customerName)옛 이름을 읽던 앱이 빈칸을 받아요. 오류도 안 나고 조용히 비어요새 이름을 추가해 둘을 함께 내보내고, 옛 이름은 나중에 없애요
칸 없애기그 칸을 쓰던 화면이 죽어요없앨 날짜를 미리 공지하고, 그날까지 둘 다 유지해요
필수 입력값 추가옛 방식으로 오던 요청이 전부 거절돼요처음엔 없어도 받고, 빠진 값은 서버가 기본값으로 채워요
주소(경로) 바꾸기옛 주소를 부르던 쪽이 404를 받아요옛 주소에서 새 주소로 넘겨 주는 길을 한동안 남겨요
금액 단위 바꾸기오류 없이 조용히 틀린 금액이 오가요. 가장 늦게 발견돼요단위를 바꾸지 말고 칸을 새로 만들어요. 여기가 가장 위험해요

장면 1 · 외주 개발자가 말했다

이번 판은 앞자리가 올라가서 호환이 깨집니다. 옮기는 작업이 별도로 필요합니다.

값을 올리려는 말이 아니라 대체로 사실 보고예요. 되물을 말은 두 개예요. "올리지 않으면 언제까지 버틸 수 있나요" 와 "안 올리면 무엇이 위험해지나요". 지원 종료 예고나 보안 수정이 걸려 있으면 미루는 쪽이 더 비싸요. 그냥 새 기능 때문이라면 급한 일이 끝난 뒤로 미뤄도 돼요.

장면 2 · 연동 업체에서 온 메일

지난주부터 요청에 필수 항목이 하나 늘어서 연동이 전부 실패하고 있습니다. 사전 공지를 받지 못했습니다.

내가 깨는 쪽이 됐을 때 가장 흔한 사고예요. 필수 항목을 늘리는 변경은 코드 한 줄인데 받는 쪽 전부를 멈춰요. 없어도 받고 기본값을 채우는 방식으로 시작하면 이 메일이 오지 않아요. 그리고 바꾸기 전 공지 한 통이 수리 하루보다 훨씬 싸요.

이미 멈춘 뒤 순서

원인을 찾기 전에 손님이 쓰던 상태로 되돌리는 것이 먼저예요. 조사는 되돌린 다음에 해요. 이 순서를 바꾸면 손님이 멈춘 시간만 길어져요.

  1. 1직전 판으로 되돌려요. 원인 파악보다 먼저예요. 되돌리기
  2. 2되돌려서 정상이 되면 원인은 이번 변경 안에 있어요. 되돌려도 안 되면 원인은 밖에 있어요. 이 갈림길 하나로 조사 범위가 절반으로 줄어요.
  3. 3오늘 무엇이 바뀌었는지 목록을 뽑아요. 내 코드 변경, 부품 판 변경, 외부에서 온 공지 세 갈래를 각각 봐요.
  4. 4오류 문장 첫 줄을 그대로 붙여서 물어봐요. 호환 문제는 "없는 함수", "필수 값 누락", "지원하지 않는" 같은 말로 나와요. 오류 문장 읽기
  5. 5고친 뒤에는 같은 사고가 다시 나는지 확인하는 점검 한 줄을 남겨요. 이걸 안 남기면 몇 달 뒤 같은 자리에서 또 멈춰요. 고쳤던 게 또 고장 남

되돌리기가 안 통하는 한 가지

자료의 구조를 바꾼 공사가 같이 올라갔으면 코드만 되돌려도 안 맞아요. 그래서 구조 공사와 부품 올림은 같은 날 같이 올리지 않는 것이 규칙이에요. 둘을 갈라 두면 되돌리기가 늘 통해요. 칸을 늘릴 때

버그와 뭐가 달라요

이름이 비슷한 세 가지가 있어요. 대처가 완전히 달라서 구분해 두는 것이 값어치가 있어요.

버그
원래 되게 만든 것이 안 되는 상태

만든 쪽의 실수예요. 고쳐 달라고 요청하는 것이 맞고, 판 번호와 상관없이 아무 때나 생겨요.

호환 깨짐
만든 쪽이 약속을 바꿔서, 옛 약속에 맞춰 둔 내 쪽이 안 맞는 상태

만든 쪽 실수가 아니에요. 내 쪽을 새 약속에 맞추는 작업이 필요하고, 그 작업 비용이 견적에 잡혀요.

세 번째는 지원 종료 예고예요. 아직 동작하지만 언제 끊긴다고 미리 알려 준 상태죠. 예고 기간이 사장님에게 주어진 유일한 여유이고, 그 기간 안에 옮기면 멈추는 날이 아예 없어요.

자주 묻는 것

Q. 그럼 업데이트를 아예 안 하면 안전한가요?
반대예요. 안 올리면 보안 수정도 안 들어오고, 나중에 한꺼번에 올릴 때 앞자리 여러 개를 한 번에 넘어야 해요. 그게 가장 비싼 방식이에요. 안전한 습관은 작게 자주, 연습 무대를 거쳐서예요.
Q. 앞자리가 올라갔다는데 제 서비스는 아무 일도 없었어요.
정상이에요. 앞자리 올림은 "누군가는 깨진다"는 신고이지, "모두가 깨진다"는 뜻이 아니에요. 사라진 기능을 내가 안 쓰면 나에게는 해당되지 않아요. 그래서 판정 순서 3번이 가장 중요해요.
Q. 바이브캠퍼스로 만들면 이걸 제가 직접 챙겨야 하나요?
만드는 동안은 대화로 요청하면 필요한 수정을 같이 해요. 이 문서가 진짜 필요해지는 순간은 문을 연 뒤예요. 외부 창구를 붙였거나, 앱을 스토어에 올렸거나, 다른 업체가 내 규격을 보고 만들었을 때. 그때부터는 밖에서 오는 예고를 읽는 사람이 필요해요.
Q. 외부 창구를 쓰는 쪽인데, 상대가 바꾸는 걸 미리 알 방법이 있나요?
대부분의 창구는 판 번호를 주소 안에 넣어 두고, 옛 판을 언제 닫는지 공지해요. 계약서나 연동 문서에 그 공지를 어디로 보내는지 적혀 있어요. 받을 메일을 개인 이름이 아니라 대표 주소로 등록해 두는 것이 실무에서 가장 큰 차이를 만들어요. 담당자가 바뀌면 공지가 사라지니까요.
Q. 손님 앱은 제가 되돌릴 수 없는데요.
맞아요. 손님 폰에 깔린 앱은 깔린 그날의 판이에요. 그래서 앱이 걸린 서비스는 서버 쪽을 옛 앱도 받아 주는 모양으로 유지하는 것이 원칙이에요. 정말 못 받아 줄 때만 업데이트 안내로 끊어요. 앱 강제 업데이트
Q. 옛 방식을 계속 같이 유지하면 짐이 쌓이지 않나요?
쌓여요. 그 짐이 기술 부채예요. 그래서 "옛 방식은 언제까지"를 처음부터 적어 두고, 그 날짜가 오면 실제로 없애는 것까지가 한 세트예요. 겹치는 기간을 두는 것과 영원히 두는 것은 전혀 다른 이야기예요.

확인해 보세요

쓰던 부품의 새 판이 나왔고 앞자리가 1에서 2로 올라갔어요. 먼저 할 일은 무엇일까요?

하나 더

내 서비스가 다른 업체에 자료를 내보내고 있어요. 응답의 name 칸 이름을 customerName 으로 바꾸려고 해요.

더 깊이 (안 읽어도 괜찮아요)

비유가 어디까지 맞고 어디부터 다른가 · 상자 규격 비유는 "보내는 쪽이 모양을 바꿨고 받는 쪽이 옛 모양에 맞춰져 있다"까지 정확해요. 다른 점이 둘 있어요. 첫째, 상자는 눈에 보이는데 규격 변경은 올려 보는 순간에만 드러나요. 그래서 연습 무대가 상자를 미리 받아 보는 자리예요. 둘째, 가게는 받는 쪽이기만 하지만 서비스는 커지면 내보내는 쪽도 돼요. 그때부터 이 문서의 뒷부분이 필요해져요.

왜 번호 한 자리로 약속을 표현하나 · 받는 쪽이 세상에 몇 곳인지 만드는 쪽은 몰라요. 그래서 개별 연락 대신 번호 한 자리로 위험을 알려요. 앞자리가 그대로면 그냥 받아도 되고, 올라갔으면 열어 봐야 한다는 약속이죠. 이 약속의 값어치는 확인 비용을 줄이는 데 있어요. 다만 강제가 아니라서 안 지키는 부품도 있고, 그 판단이 남이 만든 부품 고르기의 절반이에요.

겹치는 기간은 얼마로 두나 · 정답은 기간이 아니라 누가 아직 옛 방식을 쓰는지 셀 수 있느냐예요. 옛 방식으로 들어오는 요청 수를 기록해 두면, 그 숫자가 0에 가까워질 때 없애면 돼요. 숫자를 안 보고 날짜만 정하면 그날 누군가는 멈춰요. 기록을 남겨 두는 습관이 여기서 값을 해요. 지켜보기

이것만 기억하세요

  • ·불량이 아니라 약속이 바뀐 거예요. 받는 쪽을 새 약속에 맞추는 작업이 필요해요
  • ·내 코드를 안 건드려도 멈출 수 있어요. 규격을 바꾸는 쪽은 대부분 가게 밖이에요
  • ·앞자리가 올라가면 변경 기록을 열고, 사라진 이름을 내가 쓰는지 봐요. 안 쓰면 나와 상관없어요
  • ·멈춘 뒤 순서는 되돌리기가 먼저, 조사는 그다음이에요
  • ·내가 바꾸는 쪽일 때는 추가하고, 겹치는 기간을 두고, 끝나는 날짜를 미리 공지해요
VibeCampusNew build