관리 메뉴

공부한것들을 정리하는 블로그 입니다.

외부 API 사용에 대해 짧게 정리 (장애발생 고려) 본문

경력 실무경험/생각해볼만한 주제

외부 API 사용에 대해 짧게 정리 (장애발생 고려)

호 두 2023. 4. 26. 01:37
반응형

* 해당 글은 계속 수정 예정입니다.
최초 작성일 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

(참고사례)외부 API 사용에 대해 짧게 정리 (장애발생 고려)

공부한것들을 정리하는 블로그 입니다. (참고사례)외부 API 사용에 대해 짧게 정리 (장애발생 고려) 본문

drsggg.tistory.com

 
 
 
 

반응형
Comments