5년차가 된 지금. 이 질문들에 대답할 수 있나요?
회사를 다니며 개발자는 다양한 질문들을 받습니다.
가장 많이 받는 질문은 현재 운영중인 서비스 자체에 대한 것 입니다.
업무 담당자로서 비즈니스 로직에 대해 알고있어야 답변이 가능한 질문이죠.
그래서 처음엔 비즈니스 로직에 대해 많이 공부했던 것 같아요.
이 지식은 개발하면서 차근차근 쌓이는 지식이기도 합니다.
Modernization 등의 작업을 주로 하는 지금은...
성능에 관련된 질문들, API 호출 횟수, DB에 저장된 데이터 갯수, 현재 아키텍처 구조 등
1~2년차에는 이런 질문들이 참 부담스러웠는데 아마 잘 몰라서 그랬겠죠?
저희는 인프라팀이 나눠져 있어서, 당시에 인프라팀 사람들에게 많이 물어보고 다녔던 기억이 있네요.
연차가 차면서, 단순히 서비스의 로직만 알아서는 안된다는 것을 깨닫게 됩니다.
우리 시스템이 어느 환경 위에 올려져 있는지, 인프라 구조는 어떤지 전체적인 맥락을 알아야
제대로된 설명이 가능하고, TroubleShooting 하는 수준이 달라지기 때문이죠.
그렇다면 지금의 저는 어떤 질문에 답변하기를 기대받고 있을까요?
최근에 받은 질문들을 복기해보며,, 아직은 알아가야 할 부분과 현재 알고있는 점을 짚어보려고 합니다.
이런저런 질문을 받아보는게 현재 내가 얼마나 정확히 알고있나 파악하기 좋은 것 같아요.
💡 질문에 잘 대답하기 위해선
1. 질문의 요지를 파악하자
2. 질문에 답하기 위해 필요한 지식과 정보는 미리 습득되어 있어야 한다
3. 잘 추론하고 정리하여 대답
(참고로 현재 운영 중인 서비스는 MSA 아키텍처 구조이며, 저는 그 중 하나의 MicroService를 운영하고 있습니다)
1. MSA 간 연동에서 Kafka가 아닌 Rabbit MQ를 고려해본 적 있는지?
현재 우리서비스에서 MS간 연동구조는 RestAPI+Kafka 입니다.
사실... Kafka로 이미 정해져있던 터라 왜 Rabbit MQ말고 Kafka를 채택했을까? 라는 생각해본적이 없었던 것 같아요.
<질문의 요지>
현재 구조에서 현재의 연동구조가 최적의 방법인지 고민해본 적 있는가?
<질문에 답하기 위해 필요한 지식> 이 부분은 Gemini의 도움을 받을게요
Rabbit MQ와 Kafka 각각의 특징, 장/단점
RabbitMQ
- 메시지 전달 보장과 복잡한 라우팅(Routing)에 강점. 메시지를 읽으면 삭제함. (전통적인 메시지 큐)
- broker가 많은 일을 한다. 예를들어 5개의 서비스에 메세지를 보내려면 메세지를 복사하여 각각 큐에 넣어줘야 함. 메시지 전달, 확인(Ack), 대기열 관리 등을 모두 책임진다
Kafka
- 고성능 처리량(Throughput)과 메시지 저장(Persistence)에 강점. 읽어도 일정 기간 보관함. (분산 스트리밍 플랫폼)
- broker가 많은 일을 하지 않는다. 파일을 쌓아두기만 하고, 어디까지 읽었는진 Consumer들이 관리한다
현재 우리 서비스 아키텍처
- MSA 구조이며 약 40개가 넘는 MicroServices가 있음
<잘 정리하여 대답>
브로커가 일일이 개입하는게 아니라 각 서비스 별로 메세지를 독립적으로 처리할 수 있기 때문에 결합도를 낮출 수 있다.
저장된 데이터 하나를 여러 서비스가 공유하므로 대규모 환경에서 인프라 효율이 좋다
장애 복구 시, 메세지를 원하는 시점부터 다시 읽어올 수 있다.
따라서 현재 서비스 구조에서는 Rabbit MQ보다 Kafka가 지니는 이점이 있다.
2. 네트워크 단절 등의 이유로 Kafka 연결이 끊겼을 때 정합성을 보장하기 위해 어떤 구조를 가져가야할지?
현재 Outbox Pattern을 사용하고 있고, 이전에 Dead Letter Queue에 대한 사례도 접한적 있어서 간단히 대답했습니다.
<질문의 요지>
회복 탄력성과 장애 전파 방지에 대한 이해도
<질문에 답하기 위해 필요한 지식>
producer 입장에서의 해결책
- retry
- 로컬 버퍼를 둔다(Outbox Pattern...)
consumer 입장에서의 해결책
- offset부터 다시 읽어 처리한다
아키텍처 측면
- Dead Letter Queue
<잘 정리하여 대답>
위에 내용 말하면 될 듯..
3. Kafka Lag이 쌓였을 때 어떻게 해결할건지?
보통 Consumer의 역할을 하는 서비스를 운영하면서 다행히 Lag이 쌓인 적과 해결했던 경험이 있어 잘 대답할 수 있었습니다.
<질문의 요지>
실무에서 TroubleShooting 능력
<질문에 답하기 위해 필요한 지식>
Lag이 뭔지?
- Producer의 발행 속도에 비해 Consumer 처리 속도가 느려 메세지가 쌓여있는 것
어떻게 해결해야하는지?
<잘 정리하여 대답>
Partition을 늘리고 Consumer Instance를 늘린다 (Consumer 수는 Partition 수와 같거나 더 적어야 함)
Consumer 처리 로직에 문제가 있어 빨리처리하지 못했던 경험도 있어서 로직도 확인한다는 답변도 추가로 했습니다.
4. Modernization(ex. Java 8 -> Java 21 Upgrade) 작업을 어떻게 진행할건지?
<질문의 요지>
Modernization 전략에 대한 고민을 해본적 있는지
<질문에 답하기 위해 필요한 지식>
뭐가 있을까요?...
<잘 정리하여 대답>
먼저 ASIS 서비스에 대한 분석이 필요하고
요즘은 AI를 통해 Migration 작업을 하니까.. OpenRewrite 혹은 requirements -> design -> task 순으로 ai와 함께 작업한다고 대답했어요
추가로, Canary 배포 전략을 가져가는 것 까지 말하면 좋을 것 같아요.
기술 스택 검증이 필요한 부분도 언급해주면 좋을 듯.
단순히 지식으로 대답할 수 있는 부분도 있겠지만,
대답의 퀄리티를 올려주는 부분은 "경험"인 것 같아요.
실제로 고민해본 경험, 혹은 장애를 처리해 본 경험 같은거요!
단순히 주어진 업무만 하기 보단 여러 방면으로 탐구해본다면, 나중에 이런 질문을 받았을 때 대답이 자연스럽게 나올거에요.
여러 방면으로 탐구하며 업무해보시길 추천드립니다^.^