이번에 개인적인 기회로 운이 좋게 큰 규모의 게임 서버를 개발하시는 분과 약 한 시간 정도 대화를 나눌 수 있는 경험이 있었습니다. 그 과정에서 좋은 개발자란 무엇인가, 그리고 제가 모자란 능력들에는 어떤 것들이 있는지에 대해서 되돌아 볼 수 있었던 기회가 됐기 때문에 이를 회고도 하면서 공유하면 좋겠다 싶은 이야기들을 나눠볼까 합니다.

이번 대화를 요약하자면 ‘좋은 프로그래머는 센스와 시간으로 만들어진다’라고 이야기할 수 있을 것입니다. 그런데 프로그래머에게 요구되는 센스라는 것은 무엇일까요? 사회에서 일반적으로 통용되는 센스라는 것은 다른 사람이 말을 했을 때 그 숨겨진 의도조차도 파악하고 그에 맞춰주는 능력이라고 생각합니다. 물론 프로그래머에게도 그런 능력이 중요하지 않은 것은 아닙니다. 프로그래머도 사람으로써 가장 기본적인 대화에 많은 시간을 써야 하고, 그 능력이 어느 정도는 기반이 돼야하지만 그것을 굳이 프로그래머로써 가장 중요한 자질이라고 할 수는 없을 것입니다.

그렇기에 저는 제 표현으로 재해석해, 제가 식견이 모자라 잘못 이해한 것이 아니라면, ‘프로그래머에게 국한에서 요구되는 센스라는 것은 개발하는 과정에서 드러나지 않는 행간을 이해하고 이를 대응할 수 있는 능력’이라고 생각합니다. 그 분과의 대화에서 있었던 구체적인 예시를 들어 설명하자면 다음과 같습니다. 대화를 진행해주신 분은 ‘the one’으로, 저는 ‘me’로 표기했습니다.

"the one": 해당 프로젝트의 목표에 하루에 1억건의 채팅 데이터까지 핸들링하는 것을 목표로
삼겠다고 했는데, 해당 데이터는 단순히 메모리 상에서만 들고 있는 휘발성 데이터이고 유저에게
전송하고 나면 따로 저장하는 것은 아니예요?

"me": (해당 내용에 대해 깊게 고려해 본적이 없었음) 그와 관련해서 대응할 수 있는 방법을
구현해두었는지 기억은 나지 않는데, rdbms에 로그 형태로 남겨두려고 할 것 같습니다.

"the one": rdbms가 그 정도 데이터를 다루기에 적합하다고 생각하세요? 그러면 많은 문제들이
발생하지 않을까요?

이처럼 내가 개발에서 디자인적인 결정을 내릴 때 그것이 적은 규모의 데이터와 다르게 큰 규모의 데이터가 들어올 때에는 어떤 결과가 나타날 것인가와 같은 정보는 행간에 드러나지 않는다. 그리고 내가 기획서로 받아들 일도 평생 없을 것이다. 그렇다면 내가 백엔드 개발자로 계속해서 커리어를 쌓는다면 항상 두어야하는 마음가짐일 것이다.

‘내가 작성중인 지금 코드는 들어올 것이라고 예상되는 규모의 데이터에서는 효율적으로 동작할 수 있을까’

혹은 더 나아가서는

‘내가 만들고 있는 코드에 사용량이 내가 예상한 것보다 더 많은 상황이 발생했을 경우, 이 코드는 그것에 대해 유연하게 대응할 수 있을까? 대응하려면 내가 후속적으로 할 수 있는 조치에는 어떤 것들이 있을까?’

까지 생각이 닿을 수 있어야겠다는 생각을 하게 됐다. 추가적으로 다음과 같은 대화도 진행 했다.

"me": 처음부터 프로젝트가 지금과 같은 규모의 트래픽을 처리해야 할 것이라고 생각하지는
못하셨을거라 생각합니다. 현재 지금 서비스의 MAU(월간 활성화 유저 수)가 20만이 넘는다고
들었는데요, 어떻게 그 정도 인원에 대응하실 수 있었던 건가요?

"the one": 분산 처리가 가능한 시스템을 확장성 있게 구축하면 어렵지 않습니다.

아마 개발자로써 할 수 있는 가장 섹시한 표현 중 하나였지 않을까. 진짜 쉽지 않았을 것으로 생각되는 기술적인 과제를 한 마디로 요약해서, 아무것도 아니라는 투로 말씀하신 것이 진짜 너무 인상에 깊게 박혔다. 언젠가 나도 꼭 저런 말을 할 수 있는 사람이 되도록 해야지.

이 밖에도 내 코드에 대해서 봐 주시면서 하셨던 이야기들을 들어보면 전반적으로 나는 확장성에 대한 고려들이 많이 모자랐다는 생각을 하게 됐다. ‘잡 큐는 왜 하나만 썼어요?’ ‘채팅 서버가 감당할 수 없는 인원이 들어오면 룸을 늘리려는거예요, 아니면 서버를 늘리려는 거예요?’ ‘서버를 늘려서 대응하려는 거면 트래픽은 어떻게 분산할거예요?’ 사실 코드를 작성했다는 자체보다 가장 중요하게 생각해야하는 것은 결국 내 현재 시스템은 어느 정도의 트래픽에 대해 수용할 수 있는 구조로 만들어져있고, 그보다 더 큰 규모에 대해 대응하기 위한 확장성/유연성을 갖추고 있는가가 내가 앞으로 대답할 수 있어야하는 질문이라고 생각한다. 잡 큐가 하나인 것은 문제가 아니다. 하지만 그것이 더 많이 필요할 때 대응할 수 있는 확장성을 갖추지 못한 것은 문제이다.

어디서 듣기 힘들 너무 귀중한 조언들을 많이 받을 수 있어서 감사한 시간이었고, 나중에 기회가 된다면 센스 있는 개발자로 성장하신 것 같네요라는 이야기를 들을 수 있다면 그게 내 성공의 기준 중 하나가 되지 않을까하는 망상을 해본다. 그러기 위해서는 말씀해주신 것처럼 오직 시간만이 나를 그 길로 인도해줄 것이다. 열심히 살아야지.


2025-05-21
카테고리로 돌아가기 ↩