2025.08.07 TIL
2025.08.07 TIL
학습한 내용
- 외부 시스템 연동시 외부 시스템의 문제로 인해 호출 시스템 영향 최소화하기
상세 내용
오늘 책을 통해 살펴봐야 할 것들에 대해 공부했다. 이곳에 학습한 내용을 간단히 작성하고 자세한 내용은 다음 포스트에서 다뤄보겠다.
1. 타임아웃 설정
- 커넥션 타임아웃: 연결 설정 시간 제한
- 리드 타임아웃: 응답 읽기 시간 제한
목적: 외부 시스템 응답 지연이 호출 시스템 성능에 미치는 영향 최소화
이러한 타임아웃을 설정하는 이유는 외부 시스템의 응답 속도가 호출 시스템에 주는 성능 영향을 최소화 하기 위함이다.
2. Retry(재시도)
외부 시스템에 요청시 실패가 발생할수 있고, 이는 사용자에게 불편한 경험을 주기도 한다. 그래서 실패시 재시도
를 통해 정상적인 응답을 줄수 있다.
하지만, 재시도를 하기 위해서는 여러 조건이 필요하다.
재시도 가능한 조건:
- ✅ 조회(READ) 요청만 있는 경우
- ✅ 커넥션 타임아웃인 경우
- ✅ 멱등성을 갖는 변경 요청인 경우
⚠️ 주의
리드 타임아웃은 실제로 외부 서비스에서는 처리됐는데 타임아웃이 될 수 있기에 위험성이 있다.
3. 동시 요청 제한
외부 서비스가 동시에 20개의 요청만 처리할 수 있는데 호출 서비스에서 총 100개의 요청이 발생한다했을때, 20개의 요청만 외부로 보내고, 나머지는 에러처리하여 외부 서비스의 성능에 문제를 주지 않고, 자사 서비스의 성능에도 영향을 최소화할 수 있다.
4. 서킷 브레이커
특정 시간동안 에러 응답률이 설정 값을 초과하면 외부 서비스로 요청을 보내지 않고 실패 처리
를 해서 사용자에게 빠른 피드백
을 준다. 또한, 외부에 요청을 보내고 응답시간을 기다리지 않아도 되기에 불필요한 자원 낭비를
최소화 할 수 있다.
5. DB와 외부 서비스의 트랜잭션
db가 실패할때도 있고, 외부 서비스가 실패할때도 있다. 이때 상황에 맞게 보상 처리를 해줘야한다.
6. HTTP 커넥션 풀
db 커넥션과 같이 HTTP 도 커넥션풀을 만들어서 초기 네트워크 연결시간을 최소화 할 수 있다.
7. 외부서비스 이중화
만약 단일 외부서비스인데 성능이 부족하다면 이중화를 통해 TPS를 높일수 있다. 하지만, 비용이 들기에 정말 성능이 중요한 결제 같은게 아니면 이중화를 더 진지하게 생각해봐야 한다.
참고 자료
오늘의 생각 및 다짐
오늘은 외부연동시 생각해봐야 할 점에 대해 배워봤다.
실무에서 외부 api를 사용하면서 대부분 해당 서비스는 오류가 발생하지 않을거라는 생각을 갖고있었다.
오늘 해당 학습을 통해 외부 연동 서비스를 신뢰하지 않고, 오류가 발생해도 대응을 할수 있는 지식 재밌게 배웠다.