CPBim::authenticateForge | end - {"message":"Request failed with status code 502","name":"AxiosError
RCA: CPBim::authenticateForge | 502 Bad Gateway
Error Log#
CPBim::authenticateForge | end - {"message":"Request failed with status code 502","name":"AxiosError",
"code":"ERR_BAD_RESPONSE","status":502,
"config":{"method":"post","url":"https://developer.api.autodesk.com/authentication/v2/token",
"data":"grant_type=client_credentials&scope=data:read"}}
Impact#
- Service:
cupixworks-any-thumbnail-agent - Team: fluor
- 발생 횟수: 1
- 최초 발생: 2026-04-11T02:51:00.235Z
- 최근 발생: 2026-04-11T02:51:00.235Z
Root Cause Summary#
Autodesk Forge(APS) OAuth2 token endpoint(https://developer.api.autodesk.com/authentication/v2/token)가 일시적으로 HTTP 502 Bad Gateway를 반환하여 CPBim::authenticateForge에서 인증 실패가 발생했습니다. 동일 SQS 메시지(ID: 106e9d7e-f176-4696-822a-db23f85fe12b)의 전체 재시도 이력을 분석하면, 이전 5회 시도(ReceiveCount 1~5)에서는 인증은 성공했으나 thumbnail 다운로드 단계에서 404 에러가 발생했고, 6번째 시도(ReceiveCount 6)에서만 Autodesk 측 인증 엔드포인트가 502를 반환했습니다. 이는 Autodesk 외부 서비스의 일시적 장애로 판단됩니다. 또한 이전 5회의 404 에러에서 thumbnail URL에 https://developer.api.autodesk.com/undefined/designdata/...가 포함되어 있어, forge_region 값이 올바르게 설정되지 않은 별도의 구조적 문제도 존재합니다.
Technical Analysis#
Code Path#
- Entry point:
thumbnail-service.ts:75—supportModel.setModel()호출 cpbim.ts:40—setModel()내에서this.authenticateForge()호출- Failure point:
cpbim.ts:115—this._oAuth2TwoLegged.authenticate()호출 시 Autodesk API가 502 반환
// packages/cupix-tesla-thumbnail-agent/src/model/cpbim.ts:104-125
private authenticateForge = (): Promise<FORGE.AuthToken> => new Promise((resolve, reject) => {
logger.debug('CPBim::authenticateForge | begin');
if (Environment.ADF_CLIENT_ID == Constants.UnknownKey || Environment.ADF_CLIENT_SECRET == Constants.UnknownSecret) {
const msg = 'CPBim::authenticateForge | end - undefined autodesk forge client id or secret';
logger.error(msg);
return reject(msg);
}
this._oAuth2TwoLegged = new FORGE.AuthClientTwoLegged(Environment.ADF_CLIENT_ID, Environment.ADF_CLIENT_SECRET
,['data:read']
, true
);
this._oAuth2TwoLegged.authenticate()
.then(authToken => {
logger.debug('CPBim::authenticateForge | end');
resolve(authToken);
})
.catch(e => {
logger.error('CPBim::authenticateForge | end - %s', JSON.stringify(e));
reject(e);
});
});
기대 동작: Autodesk OAuth2 토큰 엔드포인트에 client_credentials grant로 POST 요청 후 access token을 수신해야 합니다.
실제 동작: Autodesk API가 HTTP 502 Bad Gateway를 반환하여 authenticate() Promise가 reject되었습니다. 에러가 reject(e)로 전파되어 setModel() → run() → BaseService::handlingMessageErrors까지 전달되었습니다.
별도 문제 — thumbnail URL의 undefined region:
// packages/cupix-tesla-thumbnail-agent/src/model/cpbim.ts:47-61
const forgeRegion = serverModel && (<any>serverModel).forge_region ? serverModel.forge_region : Environment.ADF_REGION;
// ...
const derivativesApi = new FORGE.DerivativesApi(
undefined, forgeRegion
);
이전 5회 시도에서 인증은 성공했으나 thumbnail 다운로드 시 URL이 https://developer.api.autodesk.com/undefined/designdata/...로 구성되었습니다. 이는 forgeRegion 값이 DerivativesApi에 전달될 때 forge-apis 라이브러리가 region을 URL path prefix로 매핑하는 과정에서 undefined가 포함된 것으로 보입니다. 해당 BIM 모델의 forge_region 값이 forge-apis 라이브러리가 인식하지 못하는 값이거나, 서버 모델에 forge_region이 누락되어 fallback인 ADF_REGION 환경변수도 유효하지 않은 것으로 추정됩니다.
Log Evidence#
SQS 메시지 ID 106e9d7e-f176-4696-822a-db23f85fe12b에 대한 전체 재시도 타임라인:
| 시간 (KST) | ReceiveCount | 에러 | 단계 |
|---|---|---|---|
| 2026-04-11 01:32:09 | 1 | 404 /undefined/designdata/... |
thumbnail download |
| 2026-04-11 03:36:30 | 2 | 404 /undefined/designdata/... |
thumbnail download |
| 2026-04-11 05:40:24 | 3 | 404 /undefined/designdata/... |
thumbnail download |
| 2026-04-11 07:43:37 | 4 | 404 /undefined/designdata/... |
thumbnail download |
| 2026-04-11 09:47:31 | 5 | 404 /undefined/designdata/... |
thumbnail download |
| 2026-04-11 11:51:00 | 6 | 502 authentication token endpoint | authenticateForge |
사용한 Datadog 쿼리:
service:cupixworks-any-thumbnail-agent "106e9d7e-f176-4696-822a-db23f85fe12b"
6번째 시도 (502 인증 에러) 원문:
{
"error": {
"message": "Request failed with status code 502",
"name": "AxiosError",
"code": "ERR_BAD_RESPONSE",
"status": 502,
"config": {
"method": "post",
"url": "https://developer.api.autodesk.com/authentication/v2/token",
"data": "grant_type=client_credentials&scope=data:read"
}
},
"sqsMessage": {
"MessageId": "106e9d7e-f176-4696-822a-db23f85fe12b",
"Attributes": { "ApproximateReceiveCount": "6" }
}
}
이전 시도 (404 에러)의 공통 URL 패턴:
https://developer.api.autodesk.com/undefined/designdata/dXJuOmFkc2sud2lwcHJvZGFuejpmcy5maWxlOnZmLnNwQUdnVFduUnR1M2RYbWJPRW9jZ2c_dmVyc2lvbj0z/thumbnail
URL에 undefined가 포함되어 있어, forge region 매핑이 실패한 것을 확인할 수 있습니다.
14일 이내 동일 에러 검색 결과, authenticateForge 502 에러는 이 1건만 확인되었습니다:
service:cupixworks-any-thumbnail-agent status:error "authenticateForge"
# 결과: 1건 (2026-04-11)
Fix Recommendation#
즉시 조치 (Critical)#
없음. 502 에러 자체는 Autodesk 외부 서비스의 일시적 장애이며, 14일 이내 재발이 없으므로 즉시 코드 수정은 불필요합니다.
단기 개선 (1주 이내)#
-
authenticateForge에 retry 로직 추가 (cpbim.ts:115):_oAuth2TwoLegged.authenticate()호출 시 exponential backoff를 적용한 재시도(2~3회)를 추가하여 Autodesk API의 일시적 장애에 대응해야 합니다. 현재 코드는 재시도 없이 즉시 실패하며, SQS 메시지 수준의 재시도는 ~2시간 간격으로 발생하여 불필요하게 느립니다. -
/undefined/URL 문제 조사 (cpbim.ts:48): 이전 5회 시도에서 반복적으로 발생한https://developer.api.autodesk.com/undefined/designdata/...404 에러의 원인을 조사해야 합니다. 해당 BIM 모델의forge_region값과ADF_REGION환경변수를 확인하고, forge-apis 라이브러리(v0.9.11)가 지원하는 region 값과 일치하는지 검증이 필요합니다.
장기 개선 (재발 방지)#
-
외부 API 호출에 대한 공통 retry/circuit-breaker 패턴 도입:
authenticateForge,downloadOriginal등 Autodesk API 호출에 공통적으로 적용할 수 있는 retry 유틸리티를 도입하여 일시적 외부 장애에 대한 복원력을 높여야 합니다. -
forge-apis 라이브러리 업데이트 검토: 현재
forge-apis@0.9.11을 사용 중이며, Autodesk는 Forge에서 APS(Autodesk Platform Services)로 브랜드 변경을 진행했습니다. 최신 SDK로 마이그레이션하면 인증 엔드포인트 및 region 매핑 관련 문제가 해결될 수 있습니다.
Monitoring#
- Autodesk API 인증 실패에 대한 별도 알림 추가:
service:cupixworks-any-thumbnail-agent status:error "authenticateForge"
- 외부 API 502/503 에러 빈도 모니터링:
service:cupixworks-any-thumbnail-agent status:error ("502" OR "503" OR "504") "developer.api.autodesk.com"
Risk Assessment#
- Risk level: low
- 예상 복잡도: standard — retry 로직 추가는 단순하나,
undefinedregion 문제는 데이터 조사가 필요합니다.