서비스 간 통신 실패를 겪은 경험
팀 프로젝트에서 주문 서비스와 재고 서비스를 나눠 개발했는데, 재고 서비스가 잠깐 응답하지 않을 때 주문 서비스가 그대로 멈춰버리는 문제가 있었습니다. 처음엔 원인을 몰라 헤맸는데, 한 서비스의 장애가 다른 서비스로 그대로 전파된다는 걸 그때 이해했습니다. 재시도 로직과 타임아웃을 추가해 완화했지만, 완전히 해결했다고는 말하기 어렵습니다.
면접관이 이 한 문장으로 확인하려는 것들. 각 갈래를 알면 답의 뼈대가 잡혀요.
팀 프로젝트에서 주문 서비스와 재고 서비스를 나눠 개발했는데, 재고 서비스가 잠깐 응답하지 않을 때 주문 서비스가 그대로 멈춰버리는 문제가 있었습니다. 처음엔 원인을 몰라 헤맸는데, 한 서비스의 장애가 다른 서비스로 그대로 전파된다는 걸 그때 이해했습니다. 재시도 로직과 타임아웃을 추가해 완화했지만, 완전히 해결했다고는 말하기 어렵습니다.
회원 서비스와 주문 서비스를 나누고 나니, 회원 정보가 바뀌었을 때 주문 서비스에 저장된 정보가 따로 갱신되지 않는 문제가 생겼습니다. 하나의 데이터베이스를 쓸 때는 없던 문제였는데, 서비스마다 데이터를 따로 갖게 되면서 동기화가 필요하다는 걸 알게 됐습니다. 이벤트를 발행해 갱신하는 방식을 시도했지만, 프로젝트 기간 안에 완성도 있게 마무리하진 못했습니다.
서비스를 나누고 나니 각 서비스마다 실행 환경을 따로 관리해야 해서, 로컬에서 전체 시스템을 띄우는 데만 한참이 걸렸습니다. 처음엔 서비스마다 수동으로 실행했는데, 나중에 컨테이너를 활용해 한 번에 띄우는 방식으로 바꾸고 나서야 개발 속도가 나아졌습니다. 그 전까지는 오히려 단일 서버로 개발할 때보다 비효율적이라고 느꼈습니다.
같은 실수가 반복돼요. 이것만 피해도 절반은 갑니다.
진짜 면접은 두 번째 질문부터예요. 이 답 뒤에 따라올 법한 것들.