장애 격리 관련해서 궁금한 부분이 있어요
2
작성한 질문수 93
강사님, MSA의 장애 격리에 대해 강의를 듣다가 궁금한 점이 생겨 질문드립니다.
제가 이해하기로는 모놀리식은 하나의 애플리케이션 안에 여러 도메인/서비스가 함께 구성되어 있고, MSA는 각 도메인별로 서비스를 분리하여 구성하는 것으로 알고 있습니다.
강의에서 MSA의 장점 중 하나로 장애 격리를 말씀해 주셨는데, 실제로는 한 서비스의 장애가 해당 서비스를 의존하고 있는 다른 서비스로 전파될 수도 있지 않을까 하는 생각이 들었습니다.
예를 들어 여러 서비스에서 회원 정보나 회원 상태를 검증하기 위해 회원 서비스에 요청을 보내야 하고, 회원 서비스의 검증 결과가 정상이어야만 해당 서비스를 이용할 수 있는 구조라고 가정하겠습니다.
이 경우 회원 서비스에 장애가 발생하면 회원 서비스에 의존하고 있는 여러 서비스에서도 요청 처리가 불가능해지기 때문에, 결국 장애가 다른 서비스로 전파되는 것처럼 보입니다.
그래서 제가 생각한 것은 MSA의 장애 격리가 '장애가 다른 서비스로 전혀 전파되지 않는다'는 의미보다는, 모놀리식에 비해 장애가 발생했을 때 영향을 받는 범위를 제한할 수 있다는 의미에 더 가깝지 않을까? 하는 것입니다.
예를 들어 모놀리식에서는 하나의 애플리케이션에 장애가 발생하면 전체 기능에 영향을 줄 수 있지만, MSA에서는 특정 서비스의 장애가 해당 서비스 및 이를 직접적으로 의존하는 서비스 정도로 영향 범위를 제한할 수 있다는 의미인지 궁금합니다.
그리고 실제 MSA 환경에서는 이러한 장애 전파를 막기 위해 Circuit Breaker, Timeout, Retry, Fallback, 비동기 메시징 등의 방법을 사용해서 장애 격리 수준을 높이는 것으로 이해하고 있는데, 제가 이해한 방향이 맞는지도 궁금합니다.
결국 MSA에서 말하는 장애 격리의 핵심이 '완전한 장애 격리'라기보다는 '장애 영향 범위를 줄이고 장애 전파를 제어할 수 있다'는 점에 있다고 이해하면 될까요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 감바스님, MSA의 장애 격리와 장애 전파에 대해 정확한 관점으로 이해하고 계십니다.
MSA의 장애 격리는 장애가 절대 다른 서비스로 전파되지 않는다는 의미라기보다, 모놀리식 아키텍처에 비해 장애의 영향 범위를 서비스 단위로 제한하고 전파를 제어하기 쉽다는 의미에 가깝습니다.
예를 들어 회원 서비스가 여러 서비스의 요청을 동기적으로 처리하고 있다면, 회원 서비스에 장애가 발생했을 때 해당 서비스를 직접 호출하는 주문·결제 등의 서비스도 영향을 받을 수 있습니다. 이처럼 MSA에서도 서비스 간 의존성이 존재하면 장애 전파 가능성은 남아 있습니다. 다만 전체 애플리케이션이 하나의 프로세스로 중단되는 대신, 의존 관계와 호출 경로에 따라 영향을 받는 범위를 구분하고 격리할 수 있다는 차이가 있습니다.
이를 위해 일반적으로 다음과 같은 방법을 활용합니다.
- Timeout: 장애 서비스의 응답을 무한정 기다리지 않도록 제한
- Circuit Breaker: 장애가 반복되는 서비스로의 호출을 일시적으로 차단
- Retry: 일시적인 네트워크 오류 등에 한해 재시도
- Fallback: 호출 실패 시 기본 응답이나 대체 처리 제공
- 비동기 메시징: 서비스 간 직접적인 동기 의존성을 줄이고 eventual consistency 방식으로 처리
- 서비스 경계 재설계: 특정 서비스에 과도한 의존성이 생기지 않도록 도메인과 책임을 조정
관련하여 서비스 분리의 장점과 한계, 네트워크 호출로 인한 장애 및 병목 문제를 함께 다룬 기존 답변을 참고해 보시면 좋습니다.
MSA 애플리케이션에 Spring Web과 Spring Data JPA를 사용하는 것이 바람직한지 궁금합니다. (MSA 설계와 관련된 질문입니다)
MSA로 분리하더라도 서비스 간 통신 비용과 병목이 발생할 수 있으며, 필요한 경우 서비스 경계를 다시 나누거나 모놀리스의 모듈로 유지할 수도 있다는 설명이 있습니다.MSA와 사가 패턴을 찾아보면서 궁금했던 부분이 있어서 질문 남겨봅니다.
MSA의 서비스 분리로 장애 지점과 네트워크 문제가 늘어날 수 있으며, 빠른 응답이 필요한 경우 gRPC나 서비스 경계 재정의 등을 고려해야 한다는 답변이 있습니다.
따라서 감바스님께서 정리하신 것처럼, MSA의 장애 격리 핵심은 완전한 장애 격리가 아니라 장애 영향 범위를 줄이고, 장애 전파를 통제하며, 일부 기능은 계속 동작하도록 만드는 것이라고 이해하시면 됩니다. 다만 장애 격리 수준은 서비스 간 동기 호출 구조와 의존성 설계에 따라 크게 달라집니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
Inner class로 Config를 지정하는 이유
0
47
1
service-discovery 프로세스 가동 이유
0
62
1
rabbitmq에 configservice 연결에 대해 질문있습니다.
0
88
1
kafka 업데이트 강의 듣고 시포요
0
175
2
강의 교안
0
150
2
마이크로서비스간 통신 시, 인증 처리
0
160
2
api gateway 에서 인증 처리
0
103
1
섹션 19 질문드립니다
0
123
2
강의 자료 업데이트
0
139
2
부하분산 강의 섹션
0
96
1
강의자료는 어디에서?
0
130
2
강의 자료는 어디서 다운 받을 수 있나요?
0
173
2
전체 사용자 조회시 오류
0
85
1
혹시 pk 외 별도의 id 를 부여한 이유가 있을까요 ??
0
168
2
학습 방향
0
136
2
카프카 커넥터 사용 목적 문의
0
133
2
kafka 강의
0
155
2
서비스 디스커버리 종류
0
125
2
강의 자료에 대해서 궁금해요
0
167
2
GlobalFilter, LoggingFilter가 동작하지 않습니다.
0
131
2
Kafka Source Connect 버전 에러
0
136
2
소스커넥터는 사용안한 거 맞죠?
0
129
2
강의자료 업데이트 문의
0
123
2
강의에서 BCryptPasswordEncoder 에 역할(5-2)
0
87
1





