[프로토콜] 시스템 업데이트: 당신의 '핫픽스'가 OS를 충돌시키는 이유

[프로토콜] 시스템 업데이트: 당신의 '핫픽스'가 OS를 충돌시키는 이유

패치를 멈추십시오. 릴리스를 시작하십시오.

: 버전 2.0이 되기 위한 엔지니어링 가이드

대부분의 사람들은 자신의 성장을 마치 불타는 서버에 당황하며 '핫픽스(Hotfixes)'를 적용하는 시스템 관리자처럼 다룹니다. 외롭습니까? 데이팅 앱을 다운로드합니다 (패치 1.0.1). 살이 쪘다고 느낍니까? 샐러드를 삽니다 (패치 1.0.2). 돈이 없습니까? 복권을 삽니다 (패치 1.0.3).

이것들은 업데이트가 아닙니다. 이것들은 커널 패닉(Kernel Panic) 위의 반창고일 뿐입니다. 그리고 핵심 아키텍처가 구식(Deprecated)이기 때문에 필연적으로 시스템은 다시 충돌합니다.

실리콘 밸리에서 우리는 패치만 하지 않습니다. 우리는 '메이저 버전'을 출시(Ship)합니다. 윈도우 95는 배경화면을 추가한다고 해서 윈도우 98이 되지 않았습니다. 코드베이스의 재작성이 필요했습니다. 당신은 현재 [당신의이름] v1.0을 실행하고 있습니다. 버그가 많고, 느리며, 새로운 시장 요구 사항과 호환되지 않습니다. 이제 v2.0을 출시할 시간입니다.

1. 변경 로그(Changelog): 사양 정의

정의할 수 없는 것은 구축할 수 없습니다. 코드 한 줄을 작성하기 전에(행동을 취하기 전에), v2.0을 위한 '릴리스 노트'를 작성해야 합니다.

  • 사용 중단된 기능(Deprecated Features): 어떤 기능을 제거하고 있습니까? "사람들을 기쁘게 하는 프로토콜 v1.0"은 높은 대기 시간을 유발하고 있습니다. 제거 대상으로 표시하십시오.
  • 새로운 기능(New Features): v1.0이 할 수 없었던 무엇을 v2.0이 할 수 있습니까? "대중 연설 모듈". "경계 시행 API".
  • 버그 수정(Bug Fixes): 구체적으로 작성하십시오. "도파민 고갈로 인해 오후 9시 이후 사용자가 충돌하는 문제를 수정했습니다."

이것을 적으십시오. 적지 않으면 그것은 베이퍼웨어(Vaporware)입니다.

2. 샌드박스 환경(The Sandbox Environment)

v2.0을 프로덕션(당신의 본래 삶)에 즉시 배포하지 마십시오. 충돌할 것입니다. '샌드박스 환경'이 필요합니다.

  • 격리(Isolation): 안전하고 격리된 컨테이너에서 새로운 성격을 테스트하십시오. 아무도 모르는 카페에 가십시오. v2.0 버전인 척하십시오. 그/그녀처럼 주문하십시오. 그/그녀처럼 걸으십시오.
  • A/B 테스팅: 문제에 대해 두 가지 다른 접근 방식을 테스트하십시오. "방법 A: 말대꾸한다. 방법 B: 급진적인 침묵." 어떤 것이 더 나은 지표(심박수 감소, 더 나은 결과)를 산출했습니까?

3. 우아한 사용 중단(Graceful Deprecation)

오래된 기능(예: 매주 금요일 술 마시기) 지원을 중단하면, 레거시 사용자(술친구)들이 불평할 것입니다. 그들은 '버그 리포트'를 제출할 것입니다. "야, 너 이제 재미없어. 시스템이 고장 났어."

고장 난 것이 아닙니다. '의도한 대로 작동 중(Working as Intended)'입니다.

당신은 '사용 중단 공지(Deprecation Notice)'를 발행해야 합니다. "이 기능은 v2.0에서 더 이상 지원되지 않습니다. 기대치를 업그레이드하십시오." 당신은 그들에게 낡고 망가진 당신과의 하위 호환성을 빚지지 않았습니다.

4. 데이터베이스 마이그레이션

당신의 기억은 당신의 데이터베이스입니다. 하지만 스키마(Schema)가 오래되었습니다. 당신은 쿼리를 받을 때마다 "나는 피해자다"와 같은 데이터를 제공합니다. 이 데이터를 새로운 스키마로 마이그레이션해야 합니다.

  • SQL 업데이트: UPDATE memories SET meaning = 'Lesson' WHERE meaning = 'Trauma';
  • 인덱싱(Indexing): 성공을 다시 인덱싱하십시오. 현재 당신의 검색 알고리즘은 '실패'를 우선시합니다. '승리'에 대한 쿼리 속도를 최적화해야 합니다. 도전에 직면했을 때, 시스템은 "내가 실패한 시간"이 아니라 "내가 성공한 시간"을 즉시 검색해야 합니다.

5. 의존성 지옥(Dependency Hell)

소프트웨어는 망가진 라이브러리에 의존할 때 실패합니다. 당신은 '인정.dll' 및 '동기부여.exe'와 같은 의존성에 의존하고 있습니다.

'동기부여.exe'는 불안정한 프로세스입니다. CPU를 너무 많이 소모하고 자주 충돌합니다. 당신은 기분과 상관없이 조용히 실행되는 백그라운드 데몬인 '규율.d(Discipline.d)'로 전환해야 합니다.

의존성을 감사(Audit)하십시오. 정서적 안정성을 위해 누구에게 의존하고 있습니까? 만약 그 서버가 다운되면(그들이 떠나면), 당신도 충돌합니까? '중복성(Redundancy, 자기 검증)'을 구축해야 합니다.

6. 사용자 인터페이스(UI) 새로 고침

v2.0은 v1.0과 똑같이 보일 수 없습니다. UI는 사용자 경험(UX)에 영향을 미칩니다. 겉모습이 지저분하면 기분도 지저분해집니다(백엔드는 프론트엔드를 따릅니다).

  • 스킨 업데이트: 옷장을 바꾸십시오. 허영심 때문이 아니라 신호(Signaling)를 위해서입니다. 그것은 잠재의식에 새로운 버전이 배포되었음을 알립니다.
  • 오디오 드라이버: 말하는 방식을 바꾸십시오. 불필요한 단어를 제거하십시오. 톤을 낮추십시오. 더 천천히 말하십시오. 이것이 새로운 OS의 출력 인터페이스입니다.

7. 스트레스 테스트(Stress Testing)

공식 출시 전에 시스템을 스트레스 테스트해야 합니다.

  • 부하 테스트(Load Testing): 감당할 수 있다고 생각하는 것보다 더 많은 책임을 지십시오. 시스템이 버티는지 확인하십시오.
  • 침투 테스트(Penetration Testing): 누군가가 당신을 비판하게 하십시오. 방화벽이 버팁니까? 아니면 v1.0 방어 모드로 되돌아갑니까(Rollback)?

되돌아가더라도 괜찮습니다. 아직 '베타' 상태라는 뜻일 뿐입니다. 패치하고 다시 시도하십시오.

8. 지속적 배포(Continuous Deployment)

'최종 버전'은 없습니다. 구글은 '완료'되지 않았습니다. 아마존은 '완료'되지 않았습니다. 업데이트를 멈추면 당신은 '레거시 소프트웨어'가 됩니다. 공룡이 되는 것입니다.

'스프린트 주기(Sprint Cycle)'에 전념하십시오. 2주마다 지표를 검토하십시오. 무엇이 효과가 있었습니까? 무엇이 효과가 없었습니까? 다음 스프린트의 백로그(Backlog)에는 무엇이 있습니까?

9. 죽음의 블루 스크린(Burnout)

아무리 좋은 시스템이라도 과열되면 충돌합니다. 번아웃은 죽음의 블루 스크린(BSOD)입니다. 적절한 냉각 없이 CPU를 오버클럭할 때 발생합니다.

  • 열 스로틀링(Thermal Throttling): 열기(짜증, 피로)가 느껴지면 시스템이 강제로 종료되기 전에 자발적으로 속도를 줄이십시오.
  • 냉각 시스템: 수면은 선택 사항이 아닙니다. 그것은 팬(Fan)입니다. 명상은 방열판(Heat Sink)입니다. 이것들을 무시하면 하드웨어가 녹을 것입니다.

요약: 실행 명령(Execute Command)

사양을 가지고 있습니다. 코드를 가지고 있습니다. 이제 설치 프로그램을 실행해야 합니다.

명령: sudo apt-get upgrade life-os

무서울 것입니다. 설치하는 동안 화면이 잠시 검게 변할 것입니다. 자신을 잃어버리는 것처럼 느낄 것입니다. 그렇지 않습니다. 당신은 단지 재부팅 중입니다.

시스템 아키텍트의 지시

오늘 v2.0의 기능을 '하나만' 정의하십시오. 딱 하나만요. "v2.0은 스누즈 버튼을 누르지 않는다." 내일 아침 그 기능을 배포하십시오. 실패하면 디버깅하십시오. 왜 실패했습니까? 코드를 수정하십시오. 다시 시도하십시오. 업그레이드를 환영합니다.

← 블로그로 돌아가기