일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- hashcode
- 개발자면접
- jpa
- 자바면접
- 기술면접
- 스프링
- equals
- 개발자기술면접
- 스트림
- 기술면접대비
- 자바기술면접
- Spring
- 면접준비
- lock
- 백엔드
- 백엔드면접
- stream
- 배타락
- Application
- http
- DB
- 자바8
- 운영체제
- 자바
- 공유락
- java
- 객체지향언어
- 알고리즘
- 네트워크
- 데이터베이스
Archives
- Today
- Total
서은파파의 추월차선
[백엔드/면접] 동기 방식으로 외부 서비스를 호출할 때 외부 서비스 장애가 나면 어떻게 조치할 수 있나요? 본문
728x90
동기 방식으로 외부 서비스를 호출할 때 외부 서비스 장애가 나면 어떻게 조치할 수 있나요?
외부 서비스 장애로 인해 응답이 오래 걸린다고 했을 때 외부 API 응답으로 대기하는 자원들이 운영 서버 내부에 쌓이면서 성능에 악영향을 줄 수 있습니다. 이를 해결하기 위한 가장 기본적인 방법은 타임아웃을 설정하는 것입니다. 크게 타임아웃에는 커넥션 타임아웃과 리드 타임아웃, HTTP 커넥션 풀 타임아웃을 설정해 볼 수 있습니다.
다음과 같이 특정 서비스의 장애가 전체 서비스에 영향을 주는 경우는 어떻게 해결할 수 있을까요? 🤔
1. A 서비스, B 서비스, C 서비스 연동 코드가 HTTP 커넥션 풀을 공유한다.
2. A 서비스의 장애로 응답 시간 지연이 발생하는 경우
2-1. 풀에 남은 커넥션이 점점 줄어든다.
2-2. 풀에서 커넥션을 구하는 대기 시간이 증가한다.
2-3. B, C 서비스에 대한 연동도 함께 대기한다.
이 경우는 벌크헤드 패턴을 적용해 볼 수 있습니다. 벌크헤드 패턴은 기능의 종류마다 자원 사용을 분리하는 것을 의미하는데요. 자원을 격리하여 서비스 일부에 장애가 발생해도 전체로 전파되지 않도록 보장해 주는 패턴입니다. 위 예시에서는 외부 서비스마다 다른 HTTP 커넥션 풀을 사용하도록 벌크헤드 패턴을 적용할 수 있습니다. 서로 다른 커넥션 풀을 사용하기 때문에 A 서비스에 문제가 발생해도 B,C의 영향을 최소화할 수 있습니다.
외부 서비스 장애가 계속 발생하면 어떻게 되나요?
지속되는 외부 서비스 장애로 타임아웃에 의한 서비스 에러가 발생할 수 있습니다. 외부 서비스가 장애가 발생했는데도 불구하고 운영 서버는 계속 요청을 보내게 되니, 불필요하게 응답 시간이 저해되고, 처리량도 감소하게 됩니다. 이 문제를 해결하기 위해서는 서킷 브레이커를 적용할 수 있는데요. 서킷 브레이커는 오류가 지속되는 경우 일정 시간 동안 기능 실행을 차단할 수 있습니다. 서킷 브레이커가 빠른 실패를 도와주기 때문에 외부 서비스 장애에 의한 응답 시간 증가를 예방할 수 있습니다.
추가 학습 자료를 공유합니다.
728x90
'면접대비' 카테고리의 다른 글
[Java/면접] 동일성과 동등성에 대해서 (0) | 2025.02.08 |
---|---|
[Java] equals와 hashCode는 왜 함께 재정의해야 할까요? (1) | 2025.02.07 |
[백엔드/면접] 로그와 메트릭을 설명해주세요 (0) | 2025.02.05 |
[자바/Java/면접] JVM의 구조와 동작 원리 (0) | 2025.01.19 |
개발자 기술면접질문지 리스트(Java, Network, OS, DB) (0) | 2025.01.12 |