← 질문 목록
#360깊이 0

메시지 형식을 바꾸면 옛 소비자는 어떻게 되는가?

아키텍처 · 분산시스템깊이설계 원칙빌드·배포

보내는 쪽과 받는 쪽을 같은 순간에 바꿀 수 없다. 그래서 한동안 두 형식이 함께 흐르고, 그 기간을 견디게 만드는 것이 형식 설계다.

순서생산자소비자큐에 쌓인 것
1옛 형식을 보낸다옛 형식을 읽는다아무것도 하지 않습니다
2새 형식을 보내기 시작한다둘 다 읽을 수 있어야 한다두 형식이 섞여 있다
3새 형식만 보낸다옛 것이 다 빠질 때까지 둘 다 읽는다옛 형식이 아직 남아 있다

오른쪽 칸이 함정이다. 생산자가 새 형식만 보내기 시작해도 소비자는 아직 둘 다 읽어야 한다. 큐에 남은 옛 메시지가 그 뒤에 처리되기 때문이다.

새 형식을 옛 소비자가 못 읽는 변경이라면 소비자를 먼저 배포한다. 순서가 뒤집히면 아직 안 바뀐 소비자가 못 읽는 메시지가 쌓인다.

무엇이 안전한지는 형식이 정한다. 모르는 칸을 그냥 넘기는 형식이면 칸을 더하는 것은 안전하다. 칸을 지우거나 없던 것을 필수로 바꾸는 것은 어느 형식에서나 위험하다.

주의

이름을 그대로 두고 뜻만 바꾸는 것이 가장 나쁘다. 형식은 통과하는데 값이 틀려서 조용히 잘못된 결과가 나온다. 새 이름을 쓰는 편이 낫다.

메시지를 오래 보관하는 구조에서는 이 기간이 훨씬 길어진다. 옛 형식을 읽는 코드는 그것이 다 빠지고 되돌려 읽을 일이 없어진 뒤에 지운다.

옛 소비자가 모르는 필드를 보존하는지 확인해야 한다. 버리는지 그대로 넘기는지에 따라, 거쳐 간 데이터가 조용히 사라지기도 한다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

메시지 형식을 바꾸면 옛 소비자는 어떻게 되는가?
메시지 형식을 바꾸면 옛 소비자는 어떻게 되는가? · CS 길라잡이