티스토리 뷰

 

10월 두번째 스프린트로 진행한 미니프로젝트에서 발생한 일.

 

목요일 상용 서버 배포를 진행하고 테스트를 충분히한 후에, 마음 놓고 퇴근했다.

 

다음날 10월 20일 금요일 여유있게 출근하고, 아침 9시경 별 생각없이 어제 배포된게 잘 돌고 있나 테스트를 진행해봤다.

 

슬프게도 먹통이었다.

 

dev서버와 qa서버에서 동일한 현상이 나타나는 걸 확인하고, 로컬에서 바로 테스트를 진행

 

다행히 바로 어떤 문제 상황인지 확인이 됐다.

feign.FeignException$InternalServerError: [500 Internal Server Error] during [POST] to [https://api.openai.com/v1/embeddings] [OpenAiFeignClient#createEmbedding(EmbeddingRequestDto)]: [{
    "error": {
        "message": "Internal server error",
        "type": "auth_subrequest_error",
        "param": null,
        "code": "internal_error"
    }
}
]

 openAI에 embedding API 요청을 했는데 500에러가 떨어져서 발생한 에러였다.

 

사실 외부 연동 건에서 발생한 에러에 대해서는 명확한 대처법이 없고, 상황에 맞게 UX 적으로 접근해야한다.

 

서버에서 할 수 있는 일은 적절한 에러코드를 내려주는 것이다. 

 

별도의 커스텀 익셉션을 생성하고 메시지에 적절한 의미를 담아 던져줬다.

public EmbeddingResponseDto createEmbedding(String message) {
    List<String> messages = Collections.singletonList(message);
    try {
        return openAiFeignClient.createEmbedding(EmbeddingRequestDto.builder().model(embeddingModel).input(messages).build());
    } catch (Exception e) {
        throw new ExternalServerException("open AI 연동 오류 : /embeddings");
    }
}

RestControllerAdvice엔 커스텀 익셉션 핸들러가 있고, ResultCode에 적절한 코드와 메시지가 선언되어 있다.

// 외부 연동 실패 커스텀 익셉션
public class ExternalServerException extends RuntimeException {
    public ExternalServerException(String errorMessage) {
        super(errorMessage);
    }
}
----
@ExceptionHandler(value = {ExternalServerException.class})
public ResponseEntity<Object> ExternalServerException(RuntimeException e) {
    ResultVo<String> responseVo = new ResultVo<>();
    responseVo.setCode(ResultCode.EXTERNAL_SERVER_ERROR.getCode());
    responseVo.setResponse(ResultCode.EXTERNAL_SERVER_ERROR.getDescription());
    if (!ObjectUtils.isEmpty(e.getMessage())) {
    	responseVo.setResponse(e.getMessage());
    }
    logMessageManager.setExceptionLogMessage(e, responseVo);
    return new ResponseEntity<>(responseVo, HttpStatus.INTERNAL_SERVER_ERROR);
}

익셉션 처리를 하고, 응답을 확인해보니 응답 내용이 변경되어있었다.

feign.FeignException$BadGateway: [502 Bad Gateway] during [POST] to [https://api.openai.com/v1/embeddings] 
[OpenAiFeignClient#createEmbedding(EmbeddingRequestDto)]: 
[{"error":{"code":502,"message":"Bad gateway.","param":null,"type":"cf_bad_gateway"}}]

openAI도 발등에 불이 떨어졌는지, 나름대로 적극적으로 대응을 하는 중인 것 같았다.

 

나중에 찾아보니 openAI 서버의 status를 공유해 주는 사이트가 있었다. https://status.openai.com/#

 

내가 처음 확인한 금요일 화살표 친 마커의 색은 주황색이었는데, 몇 시간 후 부터 빨간색으로 변해 있었다.

 

그리고 아래를 내려보면 대응한 이력이 나와있다.

 

간단히 번역해보면 API 인증스택의 업스트림 파트에 문제가 있었다고 한다.

 

그리고 오류가 발생하는 중에는 오류가 발생된게 확인되었으며 문제 확인 중 이런식으로 메시지가 남겨져있다.

 

평소에는 오류가 발생하지 않을 때는 아래와 같이 메시지를 남겨준다.

 

 

마치며

재밌는게 이날, 평소엔 8시쯤 출근하지만 일주일간 무리도 했고해서 9시에 출근했다.

 

여유있게 출근한 날, 딱 9시부터 에러가 발생하기 시작해서 오후 1시경 완전히 고쳐진 것 같았다.

 

어떻게 보면 출근시간과 아다리가 맞아서 적절한 대응을 하고, 에러 내용을 팀에 전파할 수 있었다.

 

상용서버 배포하고 다음날 바로 상황이 터졌던게 지금 생각해보면 아찔했지만

 

운이 좋았기도 했고, 웃기기도 했던 일이었다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함