brunch

You can make anything
by writing

C.S.Lewis

by 강진우 Feb 21. 2016

클라우드와 시스템 엔지니어의 역할

저는 2009년 입사해서 지금까지 시스템 엔지니어로만 근무 했습니다. 첫 회사에서도 그렇고 지금 회사에서도 리눅스 기반의 시스템을 구축,운영하는 업무를 하고 있습니다. 개발을 아예 할 줄 모르는 건 아니지만, 어디까지나 개인적인 취미 생활 혹은 업무 상 필요한 모니터링 시스템 등을 만들 뿐 일반 사용자들을 대상으로 하는 서비스를 만든적은 없습니다. 첫 근무할 때 부터 지금까지 제 머릿속을 떠 다니는 생각 중에 하나는 과연 시스템 엔지니어는 어떤 역할을 해야 하는가 였습니다. 물론 아직도 답은 찾지 못했습니다.

특히 요즘같이 클라우드가 새로운 트렌드로 떠오르고 있는 지금 시대에는 더욱더 그 물음에 대한 답이 절실해 지고 있습니다. 그리고 이 글에서 그동안 제가 생각한 내용을 써보려고 합니다. 이게 답은 아니겠지만, 저 처럼 답을 찾고 싶어 하시는 많은 분들에게 도움이 되었으면 합니다.


개발자들이 요청하는 서버들을 적시에 지급해 주는 것은 시스템 엔지니어의 가장 큰 역할 중에 하나 입니다. 대부분의 업무를 차지하고 있기도 합니다. 하지만 요즘에는 AWS와 같은 퍼블릭 클라우드가 워낙 잘 되어 있기 때문에 시스템 엔지니어의 이런 역할이 점점 줄어들고 있기도 합니다. 비단 퍼블릭 클라우드 뿐 아니라 사내의 프라이빗 클라우드 역시 높은 수준의 안정성과 편의성을 제공하기 때문에 더더욱 시스템 엔지니어의 역할이 축소되고 있는 것도 사실 입니다.

그럼.. 시스템 엔지니어는 어떤 역할을 해야 할까요?


엔지니어링, 즉 공학이란 무엇인지에 대해 먼저 이야기 해 보겠습니다.

다음 어학사전에서 공학이란 아래와 같이 정의 되어 있습니다.

공업 분야의 노동 생산력과 생산품 성능을 향상, 발전시키기 위해서 활용되는응용과학 기술을 연구하는 학문

그럼, 시스템 엔지니어링이란 어떻게 정의할 수 있을까요?

IT 기반의 개발 생산력과 서비스의 응답 속도를 향상, 발전시키기 위해서 활용되는 기반 기술을 연구하는 학문

이라고 볼 수 있을까요?

여기에 제 개인적인 의견을 붙여서 저는 아래와 같이 정의 해보고 싶습니다.

시스템에서 발생하는 다양한 문제들에 대한 원인 분석 및 해결을 통해 서비스의 퀄리티를 높이며, 개발 생산성을 높일 수 있도록 기반 기술에 대해 연구하는 학문

제가 생각하는 시스템 엔지니어링은 이렇습니다. 아마도 서버 제공의 업무가 개발 생산성을 높이는 일 중 하나가 될 수 있을 겁니다. 하지만 그 외에 시스템을 운영하면서 발생하는 여러 문제들, 예를 들어 시스템 리소스 부족이라던가, 이중화, 성능 최적화 등등 시스템 엔지니어가 해야할 역할이 아직도 많이 있다고 생각 합니다.

조금 더 구체적으로 예를 들어 볼까요?

리눅스 시스템에서 돌아가는 자바 어플리케이션이 있습니다. 외부 API와의 연동 때문에 내부적으로 TimeWait 상태의 소켓이 많이 쌓이게 되고 더 이상 사용할 소켓이 없어서 타임아웃이 나는 상황을 가정해 보겠습니다. 이를 해결하는 데에는 많은 방법이 있습니다. tw_reuse 옵션을 켜서 TimeWait 소켓을 재사용하도록 하는 것도 있고, 어디로 요청할 때 TimeWait 소켓이 발생하는지를 추적해서 로직을 수정하도록 요청할 수도 있습니다. 

여담
RestClient를 구현할 때 잘못 구현하면 HTTP/1.1 에 keepalive를 헤더에 추가한 후 통신을 해도 TimeWait가 쌓이는 경우가 있습니다. 대부분 쓰레드 기반으로 구현하고 요청이 끝나면 쓰레드를 죽이는 방식으로 구현할 때 이런 현상이 발생할 수 있습니다.

시스템 엔지니어의 역할은 바로 이런 곳에서 필요하다고 생각 합니다. 

개발자들이 좀 더 개발 자체에 매진할 수 있도록 시스템에서 발생하는 다양한 이슈들을 감지하고 시스템에 왜 이런 이슈가 발생했는지, 그리고 어떻게 하면 이슈를 해결할 수 있는지에 대해서 알려 주고 수정할 수 있도록 도와 주는 것 

사실 클라우드는 서버를 좀 더 빨리 지급받을 수 있게 해주는 도구일 뿐이라고 생각 합니다. 클라우드를 통해서 사용하던 그렇지 않던 시스템에서는 다양한 이슈들이 발생하고 있고 이를 추적하고 해결할 수 있는 시스템 엔지니어들은 필요하다고 생각 합니다.


이 글이 많은 시스템 엔지니어 분들에게 힘을 줄 수 있었으면 좋겠습니다.



브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari