Confluent Schema Reference 관련 문제
문제
기존 Protobuf 포맷으로 정의된 스키마(Version 1)에 새로운 inner message를 생성하여 스키마 버전(Version 2) 업을 하는 경우 이전 버전 스키마가 새로 생성한 inner message 를 참조하지 못하여 스키마 업그레이드를 하지 못하는 문제가 발생.
해결
스키마에 inner message를 생성하는 방식이 아닌 별도의 schema를 생성하여 수정할 스키마에서 이를 참조하는 방식으로 해결
+ Terraform Provider로 Confluent Schema Reference 적용 시 발생한 문제
A스키마에서 B스키마를 참조할 경우 참조할 스키마(B)가 먼저 생성이 되어 있어야 한다.
"A" 스키마에서 새로운 메시지인 "B" 스키마를 참조하려고 할 때, "B" 스키마 생성과, "A" 스키마에서 "B" 스키마를 참조하려고 동시에 수정하는 경우 "B" 스키마를 찾지 못하는 문제가 있었다.
"B" 스키마를 먼저 생성해주고, 참조하도록 하여 문제를 해결하였다.
+ Terraform Plan "known after apply"
더불어 terraform plan 시 A 스키마 설정에서 참조 스키마의 버전을 명시할 때, 새로 생성하는 스키마의 버전을 참조하려고 참조 표현식을 사용했는데 apply 전까지 새로 생성하는 스키마의 버전을 알 수 없기때문에 (known after apply) Invalid schema 에러가 발생했다.
그래서 A 스키마 설정 전에 B 스키마를 먼저 생성하도록 순서를 강제하기 위해 depends_on 을 사용했는데도 불구하고 동일 에러가 계속 발생했었다.
우선 문제는 A 스키마의 설정을 B스키마 참조하기 위해 수정함과 동시에 B 스키마 생성을 동시에 하는 작업을 할 수가 없었다는 것이였다.
A 스키마 설정값에서 참조 스키마 B의 버전을 삼항연산자를 사용해서 null이나 0 값이 올 경우 default 값을 설정해주어도 아직 B 스키마가 생성되지 않았기 때문에 이 방법도 불가능 했다.
결국 시간이 없어 로컬에서 수동으로 B 스키마 먼저 생성하고, A 스키마 설정값을 변경하는 방식으로 해결했는데 수동으로 했다는 점에서 아직도 찝찝한 느낌이 여전히 남아있다.
Confluent에서 다른 스키마 참조하는 방식
Protobuf 스키마 참조 문법
참조
https://github.com/hashicorp/terraform/issues/34391
https://itnext.io/beware-of-depends-on-for-modules-it-might-bite-you-da4741caac70