JSCODE 박재성님의 유튜브를 보고 들었던 생각을 정리해 보았다.
영상에서는 경력이든 신입이든 백엔드 개발자 채용 공고에는 '대규모 트래픽 처리 경험 우대'라는 우대사항 항목이 어김없이 있는데, 신입이 이런 경험과 역량을 어떻게 채워야할 것인지에 대한 물음을 던지고 그에 대한 방향을 소개한다.
취준을 할 때, 그리고 지금도 여전히 고민스러운 부분을 이야기한다고 하니 흥미롭게 영상을 봤다.
‘대규모 트래픽 처리 경험’이라는 말 자체가 추상적이다.
생각해보니 그렇다. 채용 공고에 나와있는 대규모가 얼마나 대규모라는 건지 기준이 명시되어 있는 경우는 드물었다. 영상에서는 개인의 주관적 기준이든 특정 기업의 자료든 어떤 기준을 두고 대규모를 정의하는 것을 먼저 선행하는 것이 좋을 것 같다라고 한다.
'대규모 트래픽 처리 경험'을 어떻게 할 수 있을까 이전에 이 말이 추상적이라고 짚어내는 모습이 인상 깊었다.
무언가에 덤벼들기 전에 먼저 상황과 목표를 정의를 내려보는 관점. 엔지니어가 문제를 해결하기 전, 먼저 문제를 정의하는 습관에서부터 오는 시야가 아닐까 싶었다.
현 회사의 팀장님에게는 팀원들이 이야기를 장황하고 개떡같이 해도 그걸 잘 구조화하여 정리하는 능력이 있어, 덕분에 팀 내 소통이 원활하다고 느끼는 경우가 많았다. 이와 마찬가지로 문제를 잘 정의해내는 역량은 여러모로 개인과 팀에 기여할 수 있는 역량인 듯하다. 습관을 들여놓으면 좋겠다 싶다.
대규모 트래픽 처리. 어떤 부분에 포커싱을 맞춰서 공부 및 경험하면 좋을까?
영상에서는 3단계로 나눠서 고민해볼 것을 권장했다.
1. 무엇을, 어떻게 측정할 것인가?
현업에서는 Traffic, Latency, Error, Saturation 등 전문적인 것을 측정하지만, 구직자 입장에서는 전문적이지 않아도 CPU나 메모리, 디스크, 네트워크 사용량 등 간단한 모니터링 도구로도 측정가능한 것들을 먼저 해보는게 중요하다고 한다. 이 단계에서 중요한 것은 측정을 해보려하는 시도인 것 같다.
예전 구름톤에서 "측정할 수 없으면 관리할 수 없고, 관리할 수 없으면 개선할 수 없다."라는 말을 들었다. 이 말에 빗대어보면 측정은 현업, 그러니까 실제 사용자가 있는 서비스에서는 선택이 아니라 필수라고도 할 수 있는 것이겠다.
추천하는 모니터링 툴 - 프로메테우스, 그라파나, 엘라스틱 서치
찍먹(튜토리얼 따라하기)이라도 괜찮으니 직접 설치해 붙여보는 것 자체로도 좋은 경험이라고 하니 한번 해봐야겠다 싶다.
2. 어떻게 대규모 트래픽이라는 것들을 흉내낼 수 있을까?
어떻게 측정할 수 있는지에 대한 방법론이나 도구들이 정립되었다면 이제는 그 것을 가지고 흉내를 내보는 경험을 해볼 것을 이야기한다.
부하 테스트 툴 - AB Apache Server benchmark tool, JMeter, nGrinder
여기서 한번 더 생각해볼 것은 흉내낼 트래픽 규모를 어느정도로 둘 것인지일 것 같다. 서버 성능이 한없이 좋으면 당연히 좋겠지만 그에 비례하여 비용은 치솟는다. 이 서비스에서 발생함직한 트래픽을 정의 내리고 흉내를 내야 합리적이고 현실적인 흉내가 가능할 것 같다 생각한다.
3. 대규모 트래픽 발생으로 인해 생긴 문제를 어떻게 해결할가?
측정과 모니터링이 같도록 환경을 구축하고, 트래픽 흉내를 내보면 병목지점이 발견될텐데 그 병목을 어떻게 해결할지 고민하는 단계다. 이 스텝에서 발생하는 문제와 해결방법이 다양할 것인데 몇 가지 케이스에 대한 시나리오를 짜서 해결하는 경험을 해보라고 한다.
최종적으로 구직자들에게 바라는 대규모 트래픽 처리라는 건 이 단계에서 어떤 시나리오와 시행착오를 겪었는지 어떤 해결책을 도출했는지 그 스토리를 보겠다는 것으로 귀결되는 것 같다.
결국 신입에게 대규모 트래픽 처리 경험이란
대규모 트래픽이라 함은 사실은 운영 경험이라고 생각하기에 신입은 당연히 할 수 없는 경험이라고 생각한다고 한다. 신입한테 중요한건 그런 처리 경험을 위해 필요한 기본기와 문제 해결 아이디어를 구현해내는 능력이라는 당연하지만 맞는 말을 이야기한다.
또, 대규모 트래픽 처리 경험이라는 워딩에 숨겨진 개발자들이 실질적으로 바라는 역량은 ‘대규모’ 보다는 ‘실전 경험’이라는 워딩으로 봐야 한다고 생각한다고 한다. 실제 문제를 해결하려고 하는 과정 속에서 발견되는 문제해결에 대한 집녑, 태도, 방법론, 가설 검증 시나리오, 시행착오 등을 보겠다는 것이란다.
---
영상을 보고 고민스러웠던 부분에 대한 답변을 잘 받았다는 생각도 있었지만, 사실 이미 알고는 있지만 실천하지 않고 있었던 것이란 생각도 들었다.
회사에서는 이런 경험을 할 수 없는 상황이 되어버렸지만 스스로 발버둥치지 않으면, 아니 발버둥 치면 충분히 경험할 수 있는 영역이겠다는 모처럼의 동기부여가 생겼다. 지금 생각나는 것들을 잘 시도해봐서 이후에 꼭 소개하는 글을 올려보도록 하겠다.
(이 글을 다시 읽는 미래의 나는 아직도 시도하지 않았다면 부끄러워하고 당장 시작하길..!)