2015. 3. 25. 18:01

▶ 시스템 엔지니어(SE : System Engineer)라는 역할은 무엇인가?


IT 분야에서는 다양한 역할을 수행하는 사람들이 공존한다. 일반적으로 IT를 대표하는 직종은 프로그래머이나, 그외에도 다양한 역할을 수행하는 사람들이 함께 일하고 있다. 그중에서 시스템 엔지니어는 프로그래머가 아니나 프로그래머와 가장 밀접한 관계를 맺고 일하는 사람들이다. 이들은 프로그래머가 개발한 소프트웨어(혹은 서비스)가 동작할 수 있도록 기반 시스템(base system) 혹은 인프라 구조(infra structure)를 설계 및 구축하고 운영하며 늘 정상적으로 동작하는지 감시하는데다가 끊임없이 보수한다. 예기치 못한 장애로 인해 어느 한 부분에 장애가 발생하면 문제를 파악하고 고치기도 하며 - 때로는 하드웨어 뿐만 아니라 소프트웨어 오류 또한 관리하고 수정한다 -, 노후한 부분에 대한 보수 및 장비 교체 등을 주도하기도 한다. 시스템이 최고의 성능을 발휘할 수 있도록 튜닝(tunning)하는 역할 또한 이들의 몫이다.


프로그램을 개발하는 것도 아니고, 아름다운 그래픽을 만들어 내는 디자이너처럼 화려하지도 않고, 전체 팀을 총괄하는 프로젝트 매니저처럼 세련된 모습도 아니며 눈에 띄지 않고 조용히 자신의 역할을 수행하는 사람들이지만, 너른 바다를 항해하는 거대한 여객선 밑에서 묵묵히 엔진을 움직이는 사람들처럼 그들의 책임은 막중하다. 물에 떠 있기만 한 배는 아무 의미가 없지 않은가? 발전소가 멈추면 도시가 암흑에 빠지듯 시스템 엔지니어가 서버를 제대로 운영하지 않으면 인터넷에 연결된 소프트웨어 사용자들은 패닉에 빠지고, 모든 기업을 업무가 마비되고 마는것이다. 휴대폰 통화와 항공기 운항 등 거의 모든 문명을 지탱하고 있는 사람들이라 칭할 수 있다.


▶ 무엇을 배워야 하고, 어떤 일을 하는가?


IT 시스템이라는 단어는 네트워크, 하드웨어 그리고 운영체제와 서버 소프트웨어를 포함하는 포괄적인 단어이다. 일부 보안 관련 기술에 대한 이해가 필요한 경우도 있기 때문에 시스템 엔지니어가 배워야할 지식은 실로 방대하다.


시스템의 가장 하위 기술은 네트워크 기술이다. 인터넷 상에서 서버와 PC 그리고 모바일 기기들이 어떻게 서로 통신하는지, 인터넷 주소 체계와 프로그램 간에 데이터를 주고 받는 규약인 인터넷 프로토콜 등 네트워크 기반 원리를 우선 이해해야 한다. 이러한 이론적 배경 위에서 실제 데이터를 주고 받는 스위치, 라우터 등의 장비들을 설치하고, 정상적으로 동작하도록 적절한 설정을 수행하며, 정상적인 통신 유무를 판단하기 위한 관리 및 모니터링 기술들을 익힌다. 네트워크 분야는 그 자체로 매우 전문화 되어 있기 때문에 깊이 학습하면 네트워크 만을 전문적으로 설계, 구성하고, 또 관리하는 네트워크 설계 및 관리 엔지니어로 진출할 수 있다. 이러한 전문가들은 유/무선 통신사, 케이블 TV 사업자, 인터넷 망 사업자, 클라우드 서비스 등 거대 기업에 소속되어 거대한 네크워크의 일부를 설계하거나, 관리하는 업무를 맡는다. 인터넷 데이터 센터(IDC) 등에서 수백/수천 대의 서버 간의 네크워크를 통제하고 주시하는 업무를 수행하기도 한다.


네트워크가 갖추어진 상태에서 필요한 것, 그 다음에 논할 주제는 하드웨어이다. 하드웨어는 소위 말하는 서버 컴퓨터를 떠올릴 수 있지만, 대용량 저장 장치, 백업 장치, 네트워크 스위치와 라우터, 그리고 방화벽 등 네트워크에 연결되거나 그 위에서 동작하는 다양한 요소들이 존재한다. 하드웨어를 다루는 업무를 담당하는 직군은 다양한 회사 혹은 기관에 소속되어, 그 나름의 역할을 담당하게 된다.


가장 먼저 떠올릴 수 있는 역할은 하드웨어를 제작하고 판매하는 회사에 근무하는 엔지니어들이다. IT 분야의 하드웨어, 그중에서 소위 엔터프라이즈(enterprise) 영역이라고 부르는 기업 및 공공기관에서 사용하는 장비들은 개인이 사용하는 것들에 비해 성능, 용량, 가격 등에서 큰 차이가 있다. 이러한 장비들은 냉장고나 TV와는 다르다. 전원만 꽂는다고 동작하는 것도 아니고, 사용 매뉴얼만 읽어보고 쓸 수 있는 것도 아니다. 제품을 설치하고, 각종 설정을 하고 네트워크에 연결하고, 설치 후에 문제가 발생했을 사후 지원하는 기술지원 엔지니어가 필요한 것이다. 따라서, 대다수의 하드웨어 제조사들은 자신들이 판매하는 제품에 대한 전문 기술지원 팀을 운영하고 있다. 이러한 부류의 업체 중에서 우리가 쉽게 떠올릴 수 있는 기업들은 IBM, Oracle, HP 등이 있다. 다만, 안타깝게도 이들 회사의 한국 지사에서 근무하는 기술지원 엔지니어는 거의 없다고 보면 된다. 직접 하드웨어를 판매하기 보다는 벤더(vendor)라고 불리는 판매 대행사들이 직접 고객을 상대하기 때문에 기술지원 엔지니어들은 벤더 사에 소속된 경우가 많다.


대규모의 하드웨어를 운영하는 공공(정부,공기업)/기업(금융,게임,온라인쇼핑,제조,포털 서비스등등)/기관(학교/재단), 그리고 서버 호스팅 업체 등에서 상주 근무하는 하드웨어 엔지니어들도 있다. 이들의 역할은 지속적으로 서버 및 네트워크 등 인프라 상태를 확인하고 관리하는 것이다. 착각하기 쉬운 점은 서버라는 것이 충분한 전원과 항온항습기를 통한 적정한 외부 환경만 갖추어지면 잘 동작할거라 믿는 것이다. 기계도 간혹 오동작을 하는데다, 지속적으로 다양한 작업을 처리하다 보면 데이터가 쌓이기에 시간이 지남에 따라 불필요한 정보를 삭제해야 하고, 주기적을 백업해야 한다. 노후 장비를 찾아서 교체해야 하며, 장비가 변경될 때마다 이런저런 설정을 계속 고쳐줘야 한다. 사용 중인 소프트웨어가 변경되면 그에 따른 다양한 조치는 말할 것도 없다. 대규모의 시스템을 운영하는 기업(예를 들어 포털/컨텐츠/게임/쇼핑 서비스 등)이 자체적으로 IT 인프라를 설계하고, 운영하는 조직을 가지고 있다면, 단지 서버를 관리하는 역할을 담당하는 엔지니어들 이외에 시스템을 설계하는 팀이 있기 마련인데, 이들이 하는 일에 대해서는 TA(Technical Architect)에 대해 이야기할 때 자세히 다루도록 하겠다.


앞서 이야기한 IT 담당자들은 이미구축되어 있는 하드웨어와 소프트웨어를 운영하는 역할을 수행한다. 그러나, 사업 분야가 확장되거나, 법령이 바뀌거나, 모바일 등 새로운 서비스 채널을 만들어야 하거나, 업무 수행 방식이 대폭적으로 바뀌는 등의 새로운 비즈니스 요구가 발생했을 때, 그에 걸맞는 시스템을 재구축 하기에는 역부족이다. 한국 IT 업계에서는 이렇게 조직의 소프트웨어 및 하드웨어 전체를 새로 설계/구축하는 일을 차세대 프로젝트라고 부른다. 차세대 프로젝트 요구가 발생하거나, 일부 비지니스를 새로 시작해야 할 때 외부 용역 업체의 도움을 받게 되는데, 이럴 때 나타나 해결사 역할을 수행하는 기업들이 SI(System Integration, 한국에서만 사용하는 IT 용어이며 외국에서는 IT Outsourcing이라는 용어를 사용함) 회사들이다. SI 회사에서 소속되어 잠재 고객의 현재 시스템 구조를 진단하고, 새로운 요구사항에 맞추어 네트워크 및 하드웨어 설계를 진행하는 엔지니어들이 있다. 이들을 System Engineer 라고 부르기도 하고, 최근 들어서는 TA (Technical Architect)라고 부른다. (간혹 Architecture라고 잘못 지칭하는데 Architect가 역할/직책을 나타내는 정확한 표현이다.) 참고로, Architect는 TA(Tehchnical Architect), DA(Data Architect)., AA(Application Architect),. QA(Quality Architect) 등의 역할이 존재한다.


SI 회사에서 TA의 역할은 기존에 구축된 시스템의 네트워크 및 하드웨어 설계와 세밀한 설정, 용량 등을 검토한 후, 새로운 비즈니스를 수행하고자 하는 고객의 요구에 맞추어 시스템 아키텍쳐(구조)를 재설계하는 것이다. 고객이 제시하는 예산이 허용하는 범위 내에서 가장 고급스러운(?) 장비를 선정해 납품할 수 있어야 하며, 기존 네트워크 구성의 문제점을 파악해 새로운 네트워크 구조를 제시한다. 새로운 장비가 몇 년 간 문제없이 동작할 수 있다는 것을 보증하기 위해 서버의 메모리, CPU 등의 용량을 계산하여 얼마나 많은 부하(load)를 감당할 수 있는지 계산하기도 한다. 고객 측과 계약이 이루어져 시스템 구축 프로젝트를 수행하게 되면, 하드웨어와 네트워크가 원활히 동작하도록 각종 설정을 수행하고, 운영체제를 설치 및 설정하며, 웹/웹 어플리케이션 서버 등의 소프트웨어를 설치한다. 서버가 일정 수준 이상의 부하를 감당할 수 있는지 확인하기 위해 성능 테스트(performance test)를 수행하고, 결과 보고서를 제출하는 것도 이들의 몫이다. SI 기업에 소속된 TA 들이 고객사의 시스템을 설계하는 서비스를 제공하는 반면에, 자체 서비스를 구축 및 운영하는 기업에 속한 이들은 소속 회사의 시스템을 설계하는 일을 한다는 점이 다르다.


이제 다음에 논할 이야기는 소프트웨어에 관련된 것이다. 기업에서 사용하는 소프트웨어의 종류는 다양한다. 서버용 운영체제(유닉스,리눅스,윈도우), 웹 서버, 웹 어플리케이션 서버, APM(Application Performance Monitoring), 데이터베이스, BPM(Business Process Management), 그룹웨어(groupware), ERP(Enterprise Resource Planning), 이미지 처리 소프트웨어(image processing software), 문서관리시스템(Electronic Document Management System), 문서보안, EAI(Enterprise Application Integration), MCI (Multi Channel Interface), 그외에 산업 분야 별로 특화된 소프트웨어들을 나열하자면 수백/수천가지의 소프트웨어 제품들이 존재한다. 이러한 소프트웨어 역시 기업에서 사용하기 위해서는 설치, 환경설정, 문제해결 그외에 다양한 기술지원을 필요로 하고, 그에 기술지원 담당 엔지니어들이 있기 마련이다.


SI 기업에서 고객사 소프트웨어 인프라를 검토하고, 새로운 아키텍쳐 설계를 담당하는 사람들이 AA(Application Architect)이다. AA는 고객사의 업무를 수행하는데 있어 가장 적합한 소프트웨어들을 선정하는 역할을 최우선적으로 수행한다. AA 역할을 수행하며 기업용 소프트웨어 구조를 설계하기 위해서는 다양한 소프트웨어 관련 이론들을 이해해야 하며, 어느 정도 하드웨어 지식 또한 갖추어야만 한다. 자료구조와 알고리즘에 대한 기초 지식을 이해해야 소프트웨어의 성능을 예측할 수 있고, 성능 문제 발생시 합리적인 판단을 수행할 수 있다. 운영체제를 설치할 수는 없더라도 운영체제의 다양한 명령어를 다룰 줄 알며, 각종 설정을 이해하고 있어야 한다. 운영체제를 모르면 최적의 성능을 이끌어 낼 수 없는데다, 소프트웨어/하드웨어들이 서로 충돌했을 때 원인 파악이 불가능하다. 네트워크 이론과 실전 지식을 갖추지 못할 경우, 다양한 소프트웨어가 통신하는 기업 환경을 설계할 수 없다. (네트워크 영역은 TA/AA가 함계 설계하고 구축한다.) 다양한 소프트웨어 제품들의 기능을 이해하고, 오픈소스들의 장단점을 파악하고 있어야 고객 환경에 최적의 구성을 제안할 수 있다.


AA가 소프트웨어 아키텍쳐를 설계할 때 사용하는 소프트웨어들은 앞서 이야기한 다양한 기업에서 파는 제품일수도 있고, 오픈소스를 활용할 수도 있다. AA는 오픈 소스를 다룰 줄 알아야 하고 기능을 이해하며, 필요하면 수정할 수도 있어야 하기 때문에 TA와 달리 프로그래밍 역량을 필요로 한다. TA와 마찬가지로 자신에 설계하고 제시한 구조가 합리적이고 충분한 성능을 발휘할 수 있다는 것을 증명해야 하므로, TA 와 함께 성능 테스트를 수행하고 각종 소프트웨어의 설정을 수정하거나 필요하면 수정하는 작업을 통해 성능 최적화(performance optimization)을 실시한다.


개략적으로 SE의 역할과 필요한 지식을 요약했다. 충분치 못한 부분은 추후에 보완할 생각이고, 다행히 아직은 밥은 먹고 산다.

짤방(?) 원작자 - 김국현 블로그 

Posted by 곽중선