공부한것들을 정리하는 블로그 입니다.
외부 API 사용에 대해 짧게 정리 (장애발생 고려) 본문
* 해당 글은 계속 수정 예정입니다.
최초 작성일 2022.06
마지막 수정일 2023.04
# 외부 API 연동시 고려사항
외부 API를 연동시 신경써야 할 부분이 많다.
예를들면,
외부 API관련 변수의 처리에 신경을 써야하고
ex) 요청/응답 값을 DB의 키값으로 설정하지 않을 것, 매핑처리에 대해 고민 할 것, 응답값을 필수값으로 가정하지 않을 것(null값으로 인한 NPE 발생, 혹은 빈 값의 저장에 주의)
고객에게 어떤 응답을 줄지 고민해야 되고
ex) 결제요청에 대해 외부 API에서 타임아웃 혹은 장애응답을 받아서 결제 유무를 알 수 없는 경우, 일단 고객에게는 결제실패 응답한 후. 배치나 메시징큐 등을 통해 취소요청을 재처리하는 것
또 외부 API가 우리쪽 애플리케이션의 성능에 영향을 최소화하는 것을 고려해야 되고
ex) 외부 API의 장애로 인한 레이턴시의 증가, 혹은 서버 내에 병목이 일어나지 않도록 주의하는 것
등이 있다.
이중에서 외부 API의 장애발생에 대해서 짧게 정리한다.
# 외부 API의 장애발생에 대해 영향도를 낮출 수 있는 방법
# 동기호출 방식
1. 타임아웃
- 외부 API 통신간에 연결 타임아웃과 응답시간 타임아웃을 설정 할 수 있다.
2. 벌크헤드
- WAS HTTP 커넥션 풀 설정시 외부 서비스마다 트래픽 규모에 맞춰 개별로 설정한다.
3. 서킷브레이커
- 서킷브레이커가 오픈된 동안에는 다른 시스템으로의 장애 전파를 확실하게 막아 줄 수 있다.
https://drsggg.tistory.com/685
3-1.백업용도의 외부 API를 연동하여놓고 우선순위를 둔다(장애설정시 후순위로 자동으로 요청)
4. 비동기호출 방식으로 변경
- 외부 API를 별도 쓰레드/프로세스를 이용한 비동기 방식으로 연동시, 꼭 장애발생 상황이 아니더라도 서버의 성능을 향상시킬 수 있다.
# 비동기호출 방식
1. 별도쓰레드 (OR 쓰레드풀 이용)
2. 연동 데이터를 DB에 저장하고 별도 쓰레드/프로세스로 처리
3. 연동 데이터를 메시징 시스템에 저장하고 별도 쓰레드/프로세스로 처리
4. 배치 스케줄러를 이용하여 처리
# 비동기호출 방식 고려사항
비동기 방식으로 연동시에는 구성요소가 늘어나므로 복잡도가 증가할 수 있다.
따라서 무조건 비동기로 연동하기보단, 필요에 따라서. 해당 외부 API 연동이 성능에 영향을 주는지에 대한 분석부터 진행하는 것이 좋다.
재처리나 트랜잭션 등 요구사항(제약)이 적다면 1,4번 방법이 간결하고
연동이나 성능에 대한 요구사항이 높다면 2,3번 방법을 쓰거나 혹은 2+3하여 사용 가능하다.
# 참고
1. 본인 블로그 : (참고사례)
https://drsggg.tistory.com/755
'경력 실무경험 > 생각해볼만한 주제' 카테고리의 다른 글
결제 도메인의 네트워크 예외처리(망취소) (0) | 2023.04.30 |
---|---|
대용량 트래픽 처리 방법 짧게 정리 (0) | 2023.04.28 |
자바 예외처리, 에러 핸들링에 대해 짧게 정리 (0) | 2023.04.28 |
에러 핸들링 비교 (Return OR throw Exception) (0) | 2023.04.26 |
접근제한자 protected는 언제, 어떻게 사용해야 할까 (0) | 2023.04.25 |
자바를 쓰면 왜 좋을까요? (0) | 2023.04.25 |
동시성, 병렬, 비동기, 논블럭킹과 컨셉들 (0) | 2023.02.01 |
InterruptedException에 대해 짧게 정리(JVM, 쓰레드, sleep, wait) (0) | 2022.06.16 |