기능 스위치

새 기능을 일부에게만 열어요. 문제가 나면 코드를 안 건드리고 끌 수 있어요. 올리는 날과 켜는 날을 떼어 놓으면, 사고가 나도 원상복구가 몇 초로 줄어요.

쉽게 말하면

가게 홀 조명은 벽 스위치로 켜고 꺼요. 어두워졌다고 전구를 갈아 끼우거나 배선을 다시 하지는 않죠. 기능 스위치는 서비스 안에 미리 달아 둔 그 벽 스위치예요. 새 기능을 코드에 넣어서 올리되 스위치는 내린 채로 두고, 준비가 되면 스위치만 올려요. 손님 항의가 들어오면 다시 내리면 그만이에요.

그래서 스위치가 달린 서비스는 코드를 올리는 날과 기능을 여는 날이 따로예요. 올리는 일은 손님이 적은 시간에 조용히 해 두고, 여는 일만 사장님이 원하는 시각에 해요.

값어치는 여는 쪽이 아니라 끄는 쪽에 있어요. 잘못 만든 기능을 되돌리려고 코드를 고쳐 다시 올리면 빌드와 배포를 한 바퀴 더 돌아야 해요. 스위치를 내리면 손님이 새로고침하는 순간 원래 화면으로 돌아가요.

스위치 없이 연 날
새 예약 화면을 전체 손님에게 한 번에 열었고, 되돌리려면 이전 판으로 다시 배포해야 함

문제를 확인하고 되돌리는 동안 손님은 계속 깨진 화면을 봐요. 급하게 올리는 수정은 또 다른 사고를 부르고요.

스위치를 달고 연 날
새 예약 화면을 코드에 넣어 올려 두고, 스위치는 내려 둔 채로 사장님 계정에서만 먼저 켜 봄

이상하면 스위치만 내려요. 코드는 그대로 있으니 고쳐서 다시 켜면 돼요. 배포와 사고 대응이 분리돼요.

무엇을 스위치로 달아 두나

스위치는 한 종류가 아니에요. 얼마나 오래 달아 둘 것인가로 갈라요. 이 구분을 안 해 두면 나중에 스위치 목록이 뒤엉켜서 아무도 못 지워요.

스위치 종류무엇을 켜고 끄나언제 쓰나수명
출시용아직 완성 안 된 새 기능 하나를 통째로 가려요만드는 중인데 코드는 미리 올려 두고 싶을 때다 열고 나면 지워요
대상 지정특정 계정, 특정 지역, 특정 등급에게만 보이게 해요직원과 사장님 계정에서 먼저 써 보고 싶을 때대상이 전체가 되면 지워요
비상 차단말썽 나는 기능 하나만 끄고 나머지는 살려 둬요외부 결제사나 문자 발송이 먹통일 때오래 남겨 둬요
실험용손님을 두 갈래로 나눠 서로 다른 문구나 화면을 보여줘요어느 쪽이 더 팔리는지 재고 싶을 때. 두 가지를 나눠서 재보기결과가 나오면 지워요
요금 방어돈이 나가는 기능만 잠깐 멈춰요AI 응답이나 문자 발송 비용이 예상보다 크게 튈 때오래 남겨 둬요

스위치 이름을 사람 말로 지으세요

코드에 남는 스위치 이름이 곧 나중에 읽을 목록이에요. "새 예약 화면 켜기"처럼 무엇을 켜는지 적으면 반년 뒤에도 지워도 되는지 판단할 수 있어요. "flag1", "임시" 같은 이름은 아무도 못 지워서 영원히 남아요.

여는 순서

스위치의 값어치는 순서에서 나와요. 한 번에 다 켜면 스위치를 단 의미가 없어요. 실제로 쓰는 순서는 이래요.

  1. 1코드를 올려요. 스위치는 내린 채로요. 손님 화면에는 아무 변화가 없어요. 여기까지가 자동 배포 흐름이 하는 일이에요.
  2. 2내 계정에서만 켜요. 실제 손님 자료가 있는 진짜 화면에서 눌러 봐요. 연습용 주소에서는 안 보이던 문제가 여기서 보여요.
  3. 3직원과 단골 몇 명에게 켜요. 사람이 늘면 사장님이 안 눌러 본 순서로 누르는 사람이 나와요. 오탈자와 안 눌리는 버튼이 이 단계에서 걸려요.
  4. 4손님 일부에게 켜요. 예를 들어 접속한 손님 열 명 중 한 명에게만요. 사고가 나도 피해가 그 비율 안에서 멈춰요. 일부에게 먼저 열기
  5. 5전체에게 켜요. 하루 이틀 지켜보고 조용하면 스위치를 지우고 코드에서 갈래를 걷어내요. 이 마지막 단계를 빠뜨리는 곳이 제일 많아요.

각 단계 사이에 무엇을 보고 다음으로 넘어갈지를 미리 정해 두세요. 오류 기록이 늘지 않았는지, 결제가 평소만큼 일어났는지 같은 것이요. 기준 없이 감으로 넘기면 스위치가 있어도 사고를 늦게 알아채요. 사이트 감시가 짝꿍이에요.

끄는 조건을 켜기 전에 적어 두세요

"오류가 늘면 끈다"는 막상 그 순간이 오면 판단이 안 서요. "주문 실패가 평소보다 눈에 띄게 늘면 즉시 끈다"처럼 끄는 조건과 끌 사람을 켜기 전에 한 줄로 적어 두세요. 사고 당일에는 회의할 시간이 없어요.

누구에게 먼저 열까

대상을 고르는 기준도 아무렇게나 정하면 안 돼요. 같은 손님이 갔다 왔다 하면 안 되는 것이 있어요. 장바구니에 담을 때는 새 화면, 결제할 때는 옛 화면이면 손님은 사이트가 고장 났다고 생각해요.

나누는 기준이럴 때 알맞아요주의할 점
내 계정 하나처음 켜 볼 때. 가장 안전한 첫 단계예요사장님은 이미 답을 아는 사람이라 헤매는 지점을 못 봐요
직원 계정 전체주문 처리나 관리자 화면 같은 안쪽 기능을 열 때직원이 익숙해질 시간을 주고 손님에게 여세요
손님 번호로 나눈 비율같은 손님이 늘 같은 쪽을 보게 하고 싶을 때새로고침해도 쪽이 안 바뀌어야 해요. 매번 새로 뽑으면 화면이 오락가락해요
가입한 지 얼마 안 된 손님옛 화면에 익숙한 단골이 놀라지 않게 하고 싶을 때새 손님만 보는 문제는 사장님 눈에 안 띄어요. 문의를 따로 봐야 해요
지역이나 언어특정 나라 손님에게만 먼저 열 때결제 수단과 세금 표기가 지역마다 달라요. 화면만 바꾸면 안 되는 경우가 있어요

확인해 보세요

새 결제 화면을 손님 열 명 중 한 명에게만 열었어요. 그런데 어떤 손님이 새로고침할 때마다 화면이 옛것과 새것을 오가요.

스위치가 쌓이면 생기는 빚

스위치는 공짜가 아니에요. 스위치 하나가 늘면 서비스가 지나갈 수 있는 길이 두 배로 갈라져요. 스위치 열 개가 남아 있으면 점검해야 할 조합이 감당이 안 되게 늘어나요.

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

이 기능은 스위치로 막아 뒀으니 일단 올리고 나중에 켜시죠.

합리적인 제안이에요. 다만 한 가지를 같이 물어야 해요. "이 스위치는 언제 지우나요?" 켤 날짜와 지울 날짜를 함께 적어 두지 않으면, 반년 뒤에 아무도 그 스위치가 무엇인지 몰라서 못 지워요. 못 지우는 스위치는 유지비로 돌아와요.

장면 2 · 인수인계를 받은 다른 업체가 말했다

스위치가 서른 개인데 어느 게 켜져 있는지 목록이 없습니다. 손대기가 무섭네요.

이건 값을 올리려는 말이 아니라 사실 보고일 가능성이 높아요. 확인 방법이 있어요. "지금 켜져 있는 스위치와 꺼져 있는 스위치를 목록으로 뽑아 주세요"라고 요청해 보세요. 목록이 한 장으로 안 나오면 관리되고 있지 않다는 뜻이에요. 인수인계 때 먼저 받을 자산이에요.

  1. 1스위치를 만들 때 지울 날을 같이 적어요. 달력에 적어 두면 반년 뒤의 나를 살려요.
  2. 2전체에 켠 스위치는 그 주 안에 걷어내요. 다 열린 스위치는 이미 스위치가 아니라 그냥 죽은 갈래예요.
  3. 3비상 차단용만 오래 남겨요. 이 종류는 지우면 안 돼요. 대신 목록에 이유를 한 줄 적어 둬요.

배포 되돌리기와 뭐가 달라요

셋이 자주 헷갈려요. 셋 다 사고를 막는 장치지만 되돌리는 범위와 걸리는 시간이 달라요. 하나로 다 되지 않아서 셋을 같이 써요.

장치무엇을 되돌리나손님이 느끼는 것
기능 스위치기능 하나만 꺼요. 같이 올라간 다른 수정은 그대로 살아 있어요그 기능만 사라지고 나머지는 정상이에요
배포 되돌리기이번에 올린 판 전체를 이전 판으로 되돌려요이번 판에 들어간 좋은 수정도 같이 사라져요
연습용 주소아무것도 되돌리지 않아요. 손님이 안 보는 데서 미리 봐요손님은 아무것도 못 느껴요. 사고 자체를 미리 막는 쪽이에요
일부에게 먼저 열기되돌리는 게 아니라 피해 범위를 줄여요일부 손님만 새 화면을 보고 나머지는 옛 화면을 봐요

스위치가 되돌리기를 대신하지는 못해요

스위치로 못 끄는 사고가 있어요. 자료 구조를 바꾸는 공사나 결제 흐름 자체가 어긋난 경우예요. 이럴 때는 배포 되돌리기와 자료 백업이 답이에요. 스위치는 화면과 기능을 끄지, 이미 저장된 자료를 되돌리지는 못해요.

자주 묻는 것

Q. 손님이 하루 스무 명인데 저한테도 필요한가요?
대부분은 아직 필요 없어요. 손님이 적으면 잘못 올려도 되돌리는 동안 본 사람이 몇 명 안 되니까요. 돈이나 예약이 오가는 기능을 새로 열 때만 하나 달아 두는 정도로 충분해요. 스위치를 다 다는 건 관리 대상을 늘리는 일이라 규모가 올 때 시작해도 늦지 않아요.
Q. 스위치를 끄면 그동안 쌓인 손님 자료는 어떻게 되나요?
자료는 그대로 남아요. 스위치가 끄는 건 화면과 동작이지 저장된 내용이 아니에요. 그래서 켜져 있는 동안 새 방식으로 들어간 자료가 옛 화면에서 어떻게 보이는지를 켜기 전에 확인해야 해요. 이 확인을 건너뛰면 스위치를 내린 뒤 목록에 빈칸이 생겨요.
Q. 누가 스위치를 켜고 끌 수 있게 해야 하나요?
켜는 권한과 끄는 권한을 다르게 두는 게 좋아요. 끄는 건 누구나, 켜는 건 정해진 사람만. 사고가 났을 때 담당자 연락을 기다리느라 못 끄는 상황이 제일 나빠요. 권한과 역할에서 같은 원칙을 다뤄요.
Q. 스위치를 코드에 직접 적어 두면 안 되나요?
그러면 끌 때마다 코드를 고쳐 다시 올려야 해서 스위치를 단 의미가 사라져요. 스위치 값은 코드 밖에 두고 읽어 오는 게 핵심이에요. 작게는 환경 변수에, 커지면 관리 화면에서 눌러 바꾸는 방식으로 가요.
Q. 실험용 스위치와 그냥 스위치는 같은 건가요?
장치는 같고 목적이 달라요. 출시용은 "안전하게 열기"가 목적이라 이상하면 바로 꺼요. 실험용은 "어느 쪽이 나은지 재기"가 목적이라 결과가 쌓일 때까지 양쪽을 켜 둬요. 실험을 도중에 껐다 켰다 하면 숫자가 못 쓰게 돼요. 두 가지를 나눠서 재보기
Q. 스위치가 늘면 화면이 느려지나요?
스위치를 켜고 끄는 판단 자체는 가벼워요. 문제는 스위치 값을 매번 밖에서 물어보러 갈 때예요. 그래서 값을 잠깐 손에 쥐고 쓰는 방식을 써요. 캐시와 같은 이야기예요. 다만 그러면 껐을 때 즉시 반영되지 않을 수 있어서, 비상 차단용 스위치는 반영이 빠른 쪽으로 따로 두는 게 안전해요.

하나 더

새 기능을 전체 손님에게 연 지 두 달이 지났고 아무 문제도 없어요. 그 기능을 가리던 스위치는 어떻게 할까요?

직접 해보기

내 서비스에 스위치를 하나 달아 보세요

스튜디오 대화창에 이렇게 그대로 붙여 넣어 보세요. "새로 만든 화면을 기능 스위치로 감싸 주세요. 기본값은 꺼짐이고, 관리자 계정에서만 켜져 보이게 해 주세요. 스위치 값은 코드 밖에서 바꿀 수 있게 하고, 스위치 이름은 무엇을 켜는지 알아볼 수 있게 지어 주세요." 그다음 "지금 달려 있는 스위치 목록과 켜짐 여부를 표로 정리해 주세요"라고 이어서 물어보면 관리 목록이 한 장으로 나와요.

스튜디오 열기

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

비유가 어디까지 맞고 어디부터 다른가 · 벽 스위치 비유는 "배선을 안 건드리고 켜고 끈다"까지 정확해요. 다른 점은 조명은 껐다고 흔적이 남지 않는다는 거예요. 기능 스위치는 켜져 있던 동안 손님이 만든 주문과 자료가 그대로 남아요. 그래서 끄기 전에 "켜져 있는 동안 들어온 것들은 어떻게 보이나"를 반드시 확인해요. 이것이 조명과 가장 크게 다른 지점이에요.

켜고 끄는 판단은 어디에서 일어나나 · 스위치 판단이 손님 브라우저에서 일어나는지, 서버에서 일어나는지에 따라 성격이 달라요. 브라우저 쪽에서 가리기만 하면 코드는 이미 손님에게 내려가 있어요. 아직 공개하면 안 되는 가격이나 기능 이름이 그 안에 들어 있으면 볼 사람은 봐요. 아직 비밀인 기능은 서버에서 판단해서 아예 내려보내지 않는 쪽이 맞아요. 서버에서 그리기와 브라우저에서 그리기와 같은 갈림길이에요.

스위치와 자료 구조 공사의 순서 · 새 기능이 표에 새 칸을 요구하면 순서가 정해져 있어요. 칸을 먼저 늘리고, 옛 화면이 그 칸 없이도 돌아가는 걸 확인하고, 그다음에 스위치를 켜요. 반대로 하면 스위치를 내려도 화면이 안 돌아와요. 칸 늘리기는 스위치로 못 끄는 작업이라 칸을 늘릴 때백업이 같이 붙어야 해요.

이것만 기억하세요

  • ·기능 스위치는 코드를 안 고치고 기능 하나만 끄는 벽 스위치예요
  • ·값어치는 여는 쪽이 아니라 끄는 쪽에 있어요. 켜기 전에 끄는 조건을 한 줄로 적어 두세요
  • ·여는 순서는 내 계정, 직원, 손님 일부, 전체예요. 단계마다 무엇을 보고 넘어갈지 정해요
  • ·다 열린 스위치는 그 주 안에 걷어내요. 안 지운 스위치는 유지비로 돌아와요
  • ·스위치는 화면과 동작을 끄지, 이미 저장된 자료는 되돌리지 못해요
VibeCampusNew build