초보개발자의 DevOps에 대한 생각

먼저 나는 DevOps에 대해서는 잘 모른다. 이 Role이 어떤 역할을 수행해야 하는지, 또는 왜 각광받게 되는지 이런 부분에 대한 이해가 떨어질 수 있기 때문에, 그냥 초보 개발자의 그냥 잡소리로 생각해주면 좋을듯 하다.

사실 나는 DevOps라는게 기존의 패키지 소프트웨어 개발자보다는 서비스 개발자를 특성 때문에, 어떻게 각광받고 있는게 아닐까 싶다. 그러나 어떻게 생각하면, DevOps라는 것은, 어떤 낭비가 줄어든다는 느낌(?) 때문이지 아닐까 싶기도 하다.

먼저 Software Engineer 에 대해서 생각해보자. 프론트 엔드 개발자이든 백엔드 개발자이든 상관없이, 먼저 주된 업무는 서비스를 개발하는 일이다. 배포나 이런 작업을 일단 제외로 하고, 서비스에서 장애가 발생했다. 갑자기 웹페이지에 파일 업로드가 되지 않는다. 당연히 해당 기능의 개발자가 먼저 소스코드를 확인할 것이다. 그러다가 소스코드에서 문제가 없다면, 이것저것 테스트해볼 것이다. 아, 이 장비에서만 문제가 발생하고, 다른 장비에서는 문제가 없구나라고 한다면, 해당 장비의 셋팅이나 서버의 설정등을 살펴보고 디스크에 남아있는 용량도 확인한 다음, 이것도 동일하면, 장비가 이상해요라고 하고 System Engineer에게 확인을 요청할 것이다. 그러면 System Engineer가 이에 대해서 장비를 확인하고 디스크에 문제가 있다든지, 아니면 inode가 다차서 실제로는 디스크 용량은 남지만 파일시스템에 더 쓸 수 없어서 문제가 발생한 것을 알고 이에 대해서 파일시스템을 재 포맷해야 한다거나, 쓸데 없는 파일을 지우면 된다고 해답을 주게 될 것이다.

그럼, 이제 이런 지식에 대해서 잘 알고 있는 개발자라면, 소스코드에 이상이 없고 해당 장비에만 문제가 생긴다는 걸 확인하면, 아마도 디스크 용량과, inode 개수를 확인해보고, 쓸모없는 파일을 지운다든지의 행동을 통해서, 해당 장비를 바로 복구하고 서비스에 투입할 수 있을것이다. 즉, 전체 문제를 해결하는 시간이 줄어든다.

이제 반대로 생각해보자. 어떤 Software 개발자가 서비스에 버그를 만들었지만, 이를 찾지 못해서, System Engineer에게 책임을 떠 넘긴다고 하자. tcpdump로 패킷을 잡고, dummy 서버를 만들어서 직접 동작을 확인할 수 있다면, 훨씬 빨리 개발자의 잘못이라는 것을 알 수 있다. 쓸데 없는 시간낭비를 줄일 수 있다.

Software Engineer 든 System Engineer든 사람이라면 보통 안정을 추구한다. 잘 돌아가는 코드가 있다면 이쪽 수정은 하지 않고 살짝 돌려서 만들고 싶은 욕망이 생기고, 안정적인 서비스에 뭔가 새로운 시도를 하기란 쉽지가 않다. 하지만, 항상 마일스톤은 정해져 있고, 서비스는 진화해야 하기 때문에, 변화는 피할 수 없고, 결국 이 변화에 빨리 대응할 수 있는 개발자가 당연히 요구되어지는 것이다. 결국 Software Engineer는 System의 영역을 System Engineer는 Software의 영역을 서로 침범하고, 서로의 영역을 넓혀 갈 수 밖에 없다고 생각한다.

그러나, 그것이 완전히 같아지기는 힘들꺼라고 보인다. 점점 더 도메인이 넓어지면서, 배워야 할 것이 늘어나고 혼자서는 모든 것을 알기가 힘들어지고 있다. 물론, 자신의 도메인에 대한 깊이있는 지식도 중요하지만, 다른 영역의 지식을 알아야만, 좀 더 훌륭한 Sotware Engineer 그리고 System Engineer가 될 수 있지 않을까? 결국 DevOps 는 Developer + Operator 의 합성어처럼 둘 다 다하라는 의미보다는 다른 도메인도 이해해서 생산성을 올릴 수 있는 Engineer가 필요하다라는 것의 다른 표현이 아닐까 싶다.

짧은 개발 경력동안에도, 발생하는 문제는 항상 복합적이었다. 어떤것은 리눅스 OS 커널의 정책때문이었고, 어떤 것은 네트웍 장비에 대한 이해 부족이었다.(물론, 대부분은 내가 실수한 내 로직 버그였지만) 그리고, 이 문제를 해결하기 위해서 Software, System 구분 없이 지식이 필요했다.

결국, DevOps 라는 단어는 서로 상대방의 영역에 대해서 조금 더 이해하고, 더 훌륭한 엔지니어가 되자라는 의미가 아닐까 싶다. 아, 뻘글이 산으로 가는구나… 원래는 DevOps가 되면 무조건 생산성이 좋아지고, 인력이 줄어들어도 된다라는 그런 내용에 대한 개인적인 반박이었는데, 이미 주제도, 내용도 안드로메다구나 T.T