changeloop 블로그
실전 릴리스 노트
저희가 자주 고민하는 두 가지가 있습니다. 누군가 읽는 릴리스 노트를 쓰는 법, 그리고 changelog를 손으로 관리하지 않는 법입니다. 뉴스레터도, 가입도 없습니다. 글만 있습니다.
버그 수정 릴리스 노트, 쓸모 있는 항목을 쓰는 법
버그 수정 릴리스 노트는 항목마다 증상, 영향받은 대상, 다음에 할 일을 밝혀야 읽힌다. 전후 사례와 보안 수정, 데이터 손실 수정 규칙을 정리했다.
실전 릴리스 노트5분 분량
소프트웨어 제품에서 고객 피드백을 요청하는 방법
사용자가 무언가를 막 끝낸 직후, 그 자리에서 구체적인 질문 하나를 던져라. 순간별로 쓸 수 있는 문구와 피해야 할 나쁜 요청 방식을 정리했다.
피드백 루프6분 분량
제품 로드맵 예시 여섯 가지와 각각이 실패하는 이유
Now/Next/Later, 분기별, 테마, 성과, 공개, 릴리스 로드맵까지 여섯 가지 제품 로드맵 예시를 보여주고, 각각 어떤 팀에 맞고 어디서 무너지는지 정리한다.
피드백 루프5분 분량
자주 배포하는 팀을 위한 릴리스 관리 프로세스
소프트웨어 팀을 위한 릴리스 관리 프로세스를 범위 계획부터 회고까지 일곱 단계로 나누고, 단계마다 담당자와 완료 기준을 정했다. DORA 지표도 소개한다.
엔지니어링6분 분량
모든 종류의 변경에 쓸 수 있는 릴리스 노트 예시
새 기능, 수정, 파괴적 변경, 보안 수정, 비추천, 앱스토어 노트, 내부 노트까지 변경 종류별 릴리스 노트 예시와 그 문구가 효과적인 이유를 보여준다.
실전 릴리스 노트5분 분량
Stripe API 버전 관리, 작동 방식과 따라 할 점
Stripe API 버전 관리는 계정마다 날짜 기반 버전을 고정하고 요청마다 헤더로 덮어쓸 수 있게 한다. 작동 방식과 유지 비용, 작은 API가 따라 할 점을 설명한다.
API 변경5분 분량
체인지로그는 누가 쓰는가, 그리고 누가 써야 하는가
체인지로그는 누가 쓰는가? PR 작성자는 무엇이 바뀌었는지 알고 PM은 왜 중요한지 안다. 어느 쪽도 혼자서는 쓸모 있는 항목을 쓸 수 없다.
엔지니어링4분 분량
긴급 릴리스 노트: 실시간 시간 압박 속에서 쓰기
인시던트로 시작된 긴급 릴리스는 며칠이 아니라 몇 분 안에 노트가 필요하다. 평소의 작성 과정은 없는 시간을 전제로 하므로 무엇을 남기고 자를지 설명한다.
실전 릴리스 노트4분 분량
Protobuf 브레이킹 체인지: 와이어에서 살아남는 것
Protobuf 파괴적 변경은 URL이 아니라 와이어 위에서 일어난다. 어떤 gRPC 필드 변경은 공짜지만 다른 변경은 모든 클라이언트를 조용히 망가뜨린다.
API 변경5분 분량
체인지로그 파일 형식, JSON인가 YAML인가 그냥 Markdown인가
체인지로그 파일의 형식은 페이지와 위젯을 공급할 수 있는지 사람만 읽는지를 정한다. Markdown, JSON, YAML이 각각 치르는 대가를 비교한다.
엔지니어링4분 분량
중복된 기능 요청, 목소리를 잃지 않고 병합하기
중복된 기능 요청을 묶으면 개수는 지키지만, 부주의하게 병합하면 유용했던 표현이 사라진다. 표현을 지키는 병합과 잘못된 일치를 가려내는 법을 다룬다.
피드백 루프4분 분량
버전 번호 없는 GraphQL 비추천 처리
GraphQL은 URL에 v1이나 v2가 없고 필드를 지시어로 하나씩 비추천 처리한다. 이는 체인지로그가 지는 책임을 바꾼다. 파괴적 변경과 안전한 제거법을 다룬다.
API 변경4분 분량
API 마이그레이션 가이드는 어떻게 작성하는가
API 마이그레이션 가이드는 호환되지 않는 변경을 장애가 아니라 체크리스트로 바꾼다. 무엇이 필요한지, 언제 써야 하는지, 왜 항목 하나로는 부족한지 설명한다.
API 변경4분 분량
GitHub Actions용 체인지로그 체크
GitHub Actions 체인지로그 체크는 항목 없는 머지를 막는다. 기억에 의존하면 일정 앞에서 실패하는 이유와 체크 자체가 깨뜨리는 것을 다룬다.
엔지니어링4분 분량
고객을 잃지 않고 기능 요청을 거절하는 방법은 무엇인가
루프를 닫는다는 것은 보통 요청이 출시되었다고 알리는 일이다. 더 어려운 쪽은 관계를 해치지 않고 거절하는 일이며, 좋은 거절이 말해야 할 것을 설명한다.
피드백 루프4분 분량
기능 요청을 놓치지 않고 추적하는 방법
기능 요청 추적은 어디에도 도달하지 못하거나 아무도 보지 않는 곳에 쌓여서 실패한다. 두 실패를 견디는 체계와 쓸모 있는 라벨 붙이는 법을 설명한다.
피드백 루프4분 분량
기능 요청이 실제로는 버그 신고일 때
새 설정을 요청하는 지원 티켓은 숨겨진 버그를 우회하는 방법일 수 있다. 잘못된 라벨은 티켓을 엉뚱한 담당자와 대기열로 보낸다. 구별법과 판단할 사람을 다룬다.
피드백 루프4분 분량
피처 플래그 릴리스 노트: 무엇을, 언제 말하는가
피처 플래그 릴리스 노트는 머지와 출시를 구분해야 한다. 잘못된 시점에 루프를 닫으면 사용자가 아직 볼 수 없는 기능을 알리게 된다. 판단 기준을 짚어본다.
피드백 루프4분 분량
지원 티켓 대 기능 요청: 무엇을 신뢰해야 하는가
지원 티켓과 기능 요청 게시판은 서로 다른 것을 측정한다. 한쪽의 급증을 다른 쪽의 급증과 똑같이 취급하면 자신만만하지만 잘못된 우선순위가 나온다.
피드백 루프4분 분량
Git 태그, 릴리스, 그리고 당신의 체인지로그
Git 태그, 릴리스, 체인지로그 항목은 하나의 사건에 대한 세 가지 기록이다. 이를 혼동하면 체인지로그가 실제 릴리스에서 벗어난다. 맞추는 법을 설명한다.
엔지니어링4분 분량
내부용 API 체인지로그: 다른 팀에게 무엇이 달라지는가
공개 API 체인지로그에는 직접 연락할 수 없는 독자가 있고, 내부용에는 두 층 떨어진 독자가 있다. 이 차이가 체인지로그의 책임을 어떻게 바꾸는지 짚어본다.
API 변경4분 분량
내부용 릴리스 노트: 그 밖에 누가 알아야 하는가
지원팀과 영업팀은 보통 당황한 고객에게서 출시 소식을 듣는다. 내부용 릴리스 노트는 이를 해결하며, 고객용 노트와는 다른 형태로 먼저 도착해야 한다.
실전 릴리스 노트4분 분량
모바일 앱 릴리스 노트: 글자 수 제한이 무엇을 잘라내는가
앱스토어와 플레이스토어는 눈에 보이는 몇 줄만 주고 링크는 허용하지 않는다. 웹 체인지로그에서 통하던 방식이 깨지므로 무엇을 의도적으로 자를지 설명한다.
실전 릴리스 노트4분 분량
모노레포 체인지로그: 하나로 합칠까, 패키지마다 따로 둘까
모노레포는 저장소 전체를 위한 체인지로그 하나나 패키지마다 하나를 둘 수 있다. 잘못 고르면 릴리스가 너무 시끄럽거나 흩어진다. 기준은 구조가 아니라 독자다.
엔지니어링4분 분량
새 기능을 어떻게 발표해야 하는가 (침묵 없이)
대부분의 기능 발표는 아무도 두 번 읽지 않는 채널에서 조용히 죽는다. 어디서 발표하고 무엇을 먼저 말할지, 요청했던 사람에게 어떻게 닿을지 설명한다.
실전 릴리스 노트4분 분량
계속 쌓이는 기능 요청에 우선순위를 매기는 방법
백로그를 추적하고 묶고 라벨을 붙여도 어떤 요청을 먼저 내보낼지라는 질문은 남는다. 쓸 만한 프레임워크와 한계, 투표 수가 감추는 것을 짚어본다.
피드백 루프4분 분량
엔터프라이즈 릴리스 노트: 한 계정에 무엇이 달라지는가
엔터프라이즈 릴리스 노트는 비공개 빌드 위의 고객 인스턴스에 맞춰야 한다. 공개 블로그용을 그대로 보내면 고객이 혼란스러워지고 로드맵이 유출될 수 있다.
실전 릴리스 노트4분 분량
시맨틱 버저닝과 당신의 체인지로그, 함께 보기
시맨틱 버저닝은 호출자가 체인지로그 항목을 읽기 전에 릴리스가 얼마나 아플지 알려준다. 각 숫자가 약속하는 것과 항목이 그에 대해 져야 할 책임을 설명한다.
엔지니어링4분 분량
웹훅 체인지로그, 아무도 요청하지 않은 파괴적 변경
웹훅 페이로드 변경은 새 형태를 거부할 호출자가 없어 조용히 깨진다. 무엇이 파괴적 변경인지와 버전을 매기는 방법을 다룬다.
API 변경4분 분량
API Sunset 헤더, 언제 보내야 하는가
API Sunset 헤더는 비추천 공지와 달리 클라이언트에 버전이 응답을 멈춘다고 알린다. RFC 8594가 다루는 범위와 브라운아웃의 이점을 설명한다.
API 변경4분 분량
체인지로그란 무엇이고, 무엇이 들어가야 하는가
체인지로그는 제품에서 무엇이 바뀌었는지 날짜순으로 기록한 것으로, 영향받는 사람들을 위해 쓴다. 무엇이 들어가고 어디에 두며 어떻게 배포할지 설명한다.
실전 릴리스 노트4분 분량
API 체인지로그: 무엇을 공개하고 누가 읽는가
API 체인지로그는 내 코드가 다음 달에도 작동할지 판단하려는 사람이 읽는다. 각 항목이 독자에게 져야 할 책임과 위치, 구독 방법을 설명한다.
API 변경5분 분량
사람들이 계속 찾아오는 체인지로그 페이지 만드는 법
체인지로그 페이지는 사람들이 다시 돌아올 때 가치가 있다. 어디에 둘지, 항목에 무엇이 필요한지, 피드와 마크업, 위젯과의 관계를 설명한다.
엔지니어링5분 분량
실제로 읽히는 제품 업데이트 이메일 템플릿
읽히는 제품 업데이트 이메일은 그것을 요청한 사람에게 도착한 이메일이다. 템플릿 구조, 네 가지 유형, 제목 짓는 법, 세그멘테이션과 동의를 설명한다.
실전 릴리스 노트4분 분량
개발자를 잃지 않고 API를 비추천 처리하는 방법
비추천 처리는 날짜가 적힌 하나의 약속이다. 일정, 공지 템플릿, 응답 헤더, 서비스 종료가 사고로 번지지 않게 막는 한 단계를 설명한다.
API 변경5분 분량
호출자를 위한 API 버저닝 모범 사례
부서지는 것만 버전으로 관리하고, 호출자가 볼 수 있는 곳에 버전을 두며, 예전 버전은 정해진 날짜까지 유지하자. 네 가지 방식을 비교한다.
API 변경6분 분량
파괴적 변경: 무엇이 해당하고 어떻게 출시하는가
파괴적 변경은 올바른 호출자가 버티지 못하는 변경이다. 해당 여부, CI에서 잡는 법, 안전하게 출시하는 방법을 정리한다.
API 변경7분 분량
체인지로그 쪽에서 고객 피드백 루프를 닫는 방법
피드백 루프는 요청한 사람에게 출시되었다고 알릴 때 닫힌다. 네 단계의 루프가 어디서 끊어지는지, 왜 체인지로그가 그것을 닫기에 알맞은지 설명한다.
피드백 루프6분 분량
체인지로그 항목이 되는 기능 요망 템플릿
기능 요청은 출시되는 순간 다시 찾을 수 있어야 쓸모가 있다. 요청을 올바른 곳으로 보내는 라벨과 나중에 체인지로그가 읽을 필드를 살펴본다.
피드백 루프4분 분량
issue 트래커로 만드는 세 개의 열로 이루어진 공개 로드맵
공개 로드맵은 미래에 대한 약속이므로 작게 유지하고, 이미 추적하는 issue로 만들며, 항목은 issue에 붙인 라벨 하나로 열 사이를 옮기는 편이 좋다.
피드백 루프4분 분량
체인지로그 자동화, 그리고 그 한계에 대하여
수집, 포맷팅, 발행은 자동화해도 좋지만 무엇을 선별하고 어떻게 쓸지는 자동화해선 안 된다. 그 경계선이 어디인지, 옮겨지면 어떻게 되는지 살펴본다.
엔지니어링5분 분량
체인지로그 대 릴리스 노트: 무엇이 다른가?
체인지로그는 무언가를 찾아보는 사람을 위한 계속 이어지는 기록이고, 릴리스 노트는 관심을 가질지 판단하는 사람을 위해 선별한 메시지다.
실전 릴리스 노트4분 분량
Conventional commits에서 체인지로그로
Conventional commits는 체인지로그를 도출 가능하게 하지만 읽기 쉽게 만들지는 못한다. 이 관례가 사주는 것과 한계, 그 간극을 메우는 법을 살펴본다.
엔지니어링4분 분량
실제로 읽히는 릴리스 노트를 쓰는 방법
버그 수정 및 성능 개선이라는 문구만으로는 릴리스 노트라고 할 수 없다. 모든 항목이 답해야 하는 하나의 질문과 실제 사례의 고치기 전후를 보여준다.
실전 릴리스 노트5분 분량
Keep a Changelog, 실제로 적용해 보니
Keep a Changelog 명세는 한 페이지이고 읽는 데 십 분도 걸리지 않지만, 구현하면서 대부분의 팀이 어긋난다. 명세가 말하는 것과 열어둔 것, 틀린 곳을 살펴본다.
엔지니어링4분 분량
지킬 가치가 있는 릴리스 노트 모범 사례
릴리스 노트 모범 사례 목록의 대부분은 문체 조언에 지나지 않는다. 독자의 행동을 실제로 바꾸는 사례와 유행만 좇는 흔한 세 가지 사례를 살펴본다.
실전 릴리스 노트5분 분량