티스토리 뷰
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시경 완전히 고쳐진 것 같았다.
어떻게 보면 출근시간과 아다리가 맞아서 적절한 대응을 하고, 에러 내용을 팀에 전파할 수 있었다.
상용서버 배포하고 다음날 바로 상황이 터졌던게 지금 생각해보면 아찔했지만
운이 좋았기도 했고, 웃기기도 했던 일이었다.
'개발 > chatGPT' 카테고리의 다른 글
ChatGPT Builder로 나만의 챗봇 만들기 (0) | 2023.11.15 |
---|---|
ChatGPT로 이미지 해석하기 - 스프링부트에서 Vision API 사용하기 (1) | 2023.11.14 |
ChatGPT로 이미지 자동 생성하기 - 달리(DALL-E) 사용법 (0) | 2023.10.20 |
DBeaver에서 ChatGPT Plugin 사용하기(AI Smart Assistance) (2) | 2023.08.16 |
ChatGPT를 이용한 데이터 시각화 및 데이터 분석 (0) | 2023.07.24 |
- Total
- Today
- Yesterday
- cache
- Elastic cloud
- 후쿠오카
- ChatGPT
- terraform
- docker
- springboot
- 스프링부트
- AOP
- 오블완
- CloudFront
- S3
- MySQL
- 티스토리챌린지
- Spring
- Kotlin
- OpenFeign
- EKS
- AWS EC2
- lambda
- openAI API
- AWS
- java
- 람다
- JWT
- elasticsearch
- GIT
- serverless
- OpenAI
- Log
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |