OTCA — 오픈텔레메트리 인증 어소시에이트 · 컨텍스트 경계: 옆 주문의 태그 찾기 · 퀴즈
퀴즈: 컨텍스트가 넘는 경계
문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
Python 3.12에서 alpha 상태로 create_task를 호출한 뒤 호출자만 beta로 바꿨다. 기본 설정 Task의 관측은?
- 생성할 때 복사한 alpha를 읽는다
- await할 때 호출자의 beta를 읽는다
- 스레드가 달라져 빈 값을 읽는다
- 호출자의 변경 때문에 예외가 난다
alpha에서 to_thread(fn) 코루틴만 만들고 beta에서 await했더니 fn이 beta를 읽었다. 예약 시점의 alpha를 보존하려면?
- fn 안에서 처음으로 현재 문맥을 복사한다
- alpha에서 to_thread 코루틴을 Task로 예약한다
- await 직전에 호출자 값만 빈 문맥으로 만든다
- 스레드가 끝날 때 alpha를 원본에 다시 붙인다
일반 ThreadPoolExecutor에서 전달도 하고 재사용 워커에 값을 남기지도 않을 구현은?
- 워커마다 전역 request 변수를 덮어쓴다
- 첫 제출 때 만든 Context를 모두 공유한다
- 제출마다 호출자 Context를 복사해 run한다
- 작업이 끝난 뒤 제출자의 값을 삭제한다
handle이 정상 반환할 때만 detach한다. 실제 Task.cancel 시험에 필요한 변경은?
- 취소를 모두 잡아 정상 결과로 반환한다
- 취소된 요청의 baggage를 다음 요청에 남긴다
- 콜백을 다시 실행해 정상 종료를 기다린다
- finally에서 복구하고 취소도 호출자에게 전한다
빈 OTel Context를 지정해 role=admin을 추출했다. 이 관측에서 말할 수 있는 것은?
- 기존 로컬 baggage와 분리해 외부 값을 읽었다
- 새 Context이므로 관리자 권한도 검증됐다
- 외부 값이 모든 스팬 속성에 기록됐다
- 빈 Context이므로 외부 값도 신뢰할 수 있다
이 실습의 outbound에 region=test-east와 목적지 warehouse.internal.evil을 주었다. 맞는 반환은?
- 허용된 region만 담은 baggage 헤더
- 목적지가 정확히 다르므로 빈 dict
- 원본을 지우고 region만 남긴 Context
- 접두어를 잘라 정상 호스트로 바꾼 dict