어느 프로젝트의 면접 후기
지난주에 어떤 프로젝트를 위해서 면접을 봤다. 최근에 이슈가 되고 있는 어느 업체의 클라우드로 마이그레이션을 진행하는 프로젝트였다. 면접을 보는 내내 답답함 뿐이였다. 물론 그런 답답함은 그쪽도 느꼈는지, 자신들이 찾는 사람이 아닌거 같다는 말로 갈음했다.
클라우드내 있는 서비스들은 수백가지가 넘는다. 하지만 큰 카테고리로 혹은 덩어리로 분류를 할 수 있는데, 최근에 이슈가 되고 있는 IoT, Big Data, AI, Micro Service 그리고 내가 레거시(Legacy) 라고 여기는 전통적이고도 일반적인 서비스들로 나뉜다.
문제는 모든 것을 다 속속들이 다 알 수는 없다. 예를들어, 데이터베이스 서비스로 RDS 서비스와 Aurora 서비스가 있다. 만일 어떤 프로젝트를 수행함에 있어서 RDS 를 사용해봤다고 Aurora 는 그져 한번 검토하는 정도에서 끝났다고 치면 Aurora 에 대한 경험은 없는 것이다.
클라우드로 마이그레션을 하기 위해서는 한 두가지 서비스를 알아야하는 일도 아닐텐데, 그 많은 것을 다 알기도 힘들지만 그것의 내부 옵션이나 한계치를 모두 알고 있는 것은 이론적으로 머리속에 암기하는 수준으로는 안된다.
답답함은 차라리 어떤 서비스 영역에 대해서 집중적으로 물어봤으면 좋았을 텐데하는데 기인한다. 그런데, 이런 저런 서비스들에 대해서 알고 있는지를 물어보는데, 내가 신도 아니고….
또 다른 답답함은 Kinesis 물음 있었다. Kinesis 는 AWS 에서 제공하는 데이터스트림 서비스다. 이들이 동작 방법은 Shard 라고 불리는 블럭단위의 격리공간에 파티션키를 기반으로 데이터 스트림이 기록된다. 이렇게 기록된 데이트를 레코드(Record) 라고 한다.
문제는 Shard 에 대해서 알고 있냐 없냐와 적정 Shard 를 어떻게 나눌 거냐 하는 거다. 이거는 단순 계산식이 존재한다. 초당 1,000 에 1MB 이다. 그러면 초당 몇건이 들어오는지에 따라서 Shard 를 정하면 된다????
내가 기대했던 질문은 Shard 을 얼마나 정하는가가 아니라 Shard 를 늘리고 줄이는데 어떻게 할 거냐 하는데 있다. AWS 는 Elastic 아키텍쳐를 지향한다. 거기다 비용을 고려하게되면 데이터 양에 따라서 Shard 의 갯수를 늘렸다 줄였다 할 수 있어야 한다.
당연히 Kinesis 는 이를 지원하는데, 한가지 함정이 있다. Kinesis 의 Shard 의 증가는 단순하게 Shard가 추가되는 것이 아니라 부모 사드를 분리(Split) 된다. A Shard 가 열심히 데이터를 받는 상황에서 2개의 Shard 를 추가한다면 2개의 Shard 가 추가되고 A Shard 를 부모, 2개는 자식으로 관계를 맺는다. 2개의 자식이 추가되는 순간부터 부모 A Shard 에 데이터는 쌓이지 않는다.
문제는 A Shard 에 데이터를 자식에게 자동으로 넘겨주지 않는다. 프로그램에서 A Shard 에서 데이터가 남아있는지 검색해서 소비시켜줘야 한다. 여분의 Shard 를 없이기 위해서 병합을 할때도 이는 마찬가지다.
이것을 어떻게 할 것인가? Kinesis 는 AutoScaling Shard 가 안되는 건가? (된다.)
Kinesis 를 설계할때 핵심은 Shard 갯수라고 하기 어렵다. 대~~~충 적당한 갯수로 놓고 그때 그때 Shard 갯수를 조절할 수 있어야 한다. Shard 의 갯수는 돈이다. 24시간 거의 편차가 없이 초당 데이터 갯수가 들어온다면 문제가 안되지만 낮에는 100만건, 밤에는 1천건 들어오는데 100만건에 맞춰 Shard 갯수를 정할 건가?
Aurora … 만일 내가 면접자라면 이런 식의 질문은 하지 않는다. Aurora 의 사용경험도 물론 중요하다. 하지만 프로젝트가 마이그레이션이 주 목적이라면 반드시 데이터 이전이 동반된다. 이럴 경우 Oracle 에서 Aurora 로 이전하거하는 작업이 필요할텐데 이를 어떻게 할 것인가…. 쉬운 일이 아니다.
얼마나 Best Practice 아키텍쳐들을 알고 있는지도 중요하다. 하지만 단편적인 몇몇 서비스들에 대해서 “이거 아냐?” 하는 질문은 별로 인거 같다. 전체적인 아키텍쳐에 대해서 물어보고 세부 사항에 대해서 질문을 했다면 어땠을까 싶다.
마지막으로 짜증났던 것은 Maven 을 사용할줄 아냐?, 젠킨스로 빌드 시스템 구축 가능하냐?, Python 할줄 아냐?, Ansible 사용할줄 아냐?? 문서는 잘 작성하냐?
다 갖춘 슈퍼맨을 뽑는건지…..