글쓰는 개발자

[개발자 생각] 블록이론 (안정적인 서비스 운영을 위해 필요한 것들) 본문

서비스 개발자의 삶

[개발자 생각] 블록이론 (안정적인 서비스 운영을 위해 필요한 것들)

세가사 2024. 5. 1. 05:23
반응형

대학원 석사 시절 대학교 1학년생들 대상으로 레고 블록을 이용한 프로그래밍을 가르친 적이 있다.

 

모터 동작, 색감지, 소리감지 등 한정된 입출력만으로 레고 로봇에 여러가지 동작을 수행하도록 할수 있었다.

 

 

잘 생각해보면 프로그래밍도 이처럼 블록을 쌓아가는 과정과도 비슷하다.

 

조건문 할당문 등 단순한 몇가지 명령문들을 잘 배치해서 설계된 복잡한 기능이 잘 동작되도록 만드는 것이 프로그래밍의 핵심이다.

 

개발에 있어서 가장 중요한 것은 일단은 목표로 하는 동작이 수행되도록 하는 것이다.

 

이미 습득한 지식과 인터넷의 새로운 지식, 동작원리 등을 분석해서 적절한 블록조각을 찾아내고 일단은 동작하도록 이를 조립한다.

 

로그인 기능을 구현한다면 사용자의 입력을 받아오는 부분, 해당 입력이 제대로된 포맷을 가지고 있는지 검증하는 기능, 입력된 유저 정보가 제대로된 아이디와 패스워드를 가지고 있는지 확인하는 부분, 확인된 사용자가 어떠한 권한을 가지고있는지 확인하고 로그인 결과를 반환하는 부분등의 각 기능을 모두 구현해야 로그인 기능의 구현이 완료된다.

 

로그인 기능이 완성되면 이를 위한 회원가입 기능, 사용자정보를 이용해 사용가능한 기능과 아닌것을 구분하는 부분등 하나의 기능에서 다른 기능으로 거미줄 처럼 기능이 확장되어간다.

 

앞에서 말했듯이 중요한것은 기능이 동작하도록 하는것이다. 따라서 기능을 하나씩 검증하고 구현했을때는 이 블록들이 엉성하게 구성되어있을수 밖에 없다. 원하는 기능들은 모두 동작하지만 새로 확장된 기능을 덧붙였다가는 기둥이 없는 빌딩처럼 기존의 기능들조차 우르르 무너져 내릴수 있다.

 

 

따라서 하나의 기능이 완료되면 이를 좀더 견고하게 구조화 하는 리팩토링이라는 작업이 필요하다. 이는 한번에 끝나는 것이 아니고 새로운 기능이 추가될 때마다 기존의 구조에 문제가 없는지 확인하고 재배치 하는 작업이 끊임없이 이루어 져야 한다.

 

 

매번 변경되는 기능정의에 따라 기존에 돌아가던 기능도 변경이 되고 새로운 기능이 추가되면서 계속해서 블록을 추가하고 재배치 해야 서비스는 견고히 운영될수 있다.

 

 

혼자서 이 블록 구조를 만든다면 물론 많은 업무량 때문에 힘은 들지 몰라도 이 구조를 자유자재로 바꾸어 가는것이 좀더 수월할지도 모르지만 현실은 여러 사람이 모여서 이 블록을 쌓아나간다.

 

여러명이 블록을 쌓게 되면 블록을 쌓는 방식에 차이가 발생하고 전체 블록 구조에 대한 이해도가 부족해질수 밖에 없다. 따라서 팀작업을 하기 위해서는 먼저 각 기능별 테스트를 잘 구성해서 내가 구현한 부분때문에 다른 블록에 영향이 없는지 즉각 알수 있도록 단일기능 테스트를 잘 만들어야 한다.

 

또한 기능이 수정 변경되었을 때 이를 실제 운영환경에 올리기 전에 꼼꼼히 테스트 해볼수 있는 테스트환경이 제대로 마련되어있어야 하고 서로만든 블록이 충돌이 나지 않고 비슷한 블록구조를 쌓아갈수 있도록 서로 만든 부분을 공유하고 스타일을 맞춰가는 시간이 반드시 필요하다.

 

이를 개발 문화라고 한다.

 

그럼 좋은 개발문화를 가지고 테스트가 잘 구축된 환경에서는 서비스 운영이 문제가 없을까?

 

아마 그정도만으로도 충분히 훌륭한 서비스 구축과 운영이 가능할 것이다. 하지만 서비스의 기능은 당시의 시대상황을 반영하고 있다는 문제가 있다.

 

예를들어 어떠한 게임의 초기 개발시에는 한대의 서버에 1000명이상의 사용자가 접속하지 않을것이라 생각하고 게임의 설계 자체를 서버 한대당 1000명으로 제한을 해두었다. 그런데 시간이 지나고 사용자가 10만 100만명이 되었을 때 서버 한대에 기존에 예상한 사용자의 10배 100배가 접속해야 한다고 했을 때 기존의 스펙을 기억하는 사람이 없어진 상황에 빠르게 대응하여 기능을 수정하는 일은 불가능에 가깝다.

 

따라서 최소한의 방어책으로 기능과 구조의 문서화는 반드시 필요하고, 서비스를 만들때 있었던 인력이 회사에 오래 남아있는 것이 안정적인 서비스를 운영하는데 필수적인 요소이다.

 


최근 해외/국내 모 게임회사에서 대규모 개발자 퇴사와 함께 게임의 질적인 부분이 떨어져 대규모 유저 이탈이 벌어졌다는 소문이 심심치 않게 들려온다.

 

게임회사에만 국한되지 않고 IT 회사의 서비스는 그 역사를 함께 겪은 직원들에 의해서 안정적으로 유지가 되는 경우가 많다. 물론 회사 규모가 커지며 기존의 회사와 방향성이 달라지는 경우도 많긴 하지만 서비스 제작에 많은 기여를 했던 사람들을 너무 쉽게 내치는 경우가 많이 발생한다.

 

한명이 나가고 같은 포지션의 인력이 구해지면 당장에는 같은 일을 하는 대체 인력이 완벽히 그 업무를 대체할것으로 보이지만,  IT 서비스 특성상 기존의 블록 구조와 그 블록이 쌓여갈때의 회사의 의사결정, 이유 등을 새로운 인원이 완벽하게 숙지하는 것은 불가능에 가깝기 때문에 이를 위한 학습 시간을 소모해야 한다.

 

이러한 시간이 쌓이게 되면 생존 주기가 짧은 스타트업의 경우 아주 큰 대가를 치뤄야만 한다. 따라서 안정적인 서비스를 제공하기 위해서는 궁극적으로 블록을 신속히 잘 쌓을 수 있는 실력있고 인성좋은 사람을 잘 뽑아서 오랫동안 함께 할수 있는 환경을 구축해 나가야만 한다.

 

빡빡한 기준으로 좋은 사람을 뽑고 이들이 오랫동안 회사에 기여하고 함께 나누는 것 그것이야 말로 이상적인 회사를 유지하는 가장 좋은 방법이 아닐까?

반응형