서론
IT분야의 시스템관리자 및 프로그래머들이 실력향상을 위해 공부하는 방법은 매우 주관적이며 다양하다. 회사마다 신입직원들을 위한
교육시스템이 다르고, 각자의 공부방법 또한 천차만별이어서 어떤 표준적인 하나의 방법을 제시한다는 것이 때로는 이미 상당한 수준에 올라있는
엔지니어들이 볼때는 하나의 웃음거리가 될수도 있다고 생각한다.
그래서인지 서점에 가서보면 시스템엔지니어들과 프로그래머들이 필요시 참고할 테크니컬한 내용을 담은 책들은 수도없이 출판되어 있지만
정작 그러한 책을 이용하여 빠른시간내에 엔지니어로서의 기본적인 능력을 갖추기위한 지식습득 방법을 가이드하고 있는 책은 찾아볼수가 없다.
본
"노땅엔지니어의노트"에서는 테크니컬한 내용보다는 이미 출판되어있는 IT기술서적들을 이용하여 어떻게하면 빠른 기간내에 시스템 및 프로그래밍에 대한
탄탄한 기본적인 실력을 쌓을수 있는지에 대한 방법론을 과감하게 제안하려고 한다. 초보 엔지니어 및 공부하는 학생들에게 조금이나마 도움이
되었으면 한다.
본론
뛰어난 시스템엔지니어 또는 뛰어난 프로그래머가 되기위해서는 특정 시스템 또는 특정 프로그래밍언어 한가지에 정통할 필요가 있다.
시스템엔지니어의 경우 수많은 종류의 시스템에대해 완벽한 관리자가 될수는 없으며, 프로그래머의 경우도 모든 언어에대해 통달하는 것은
불가능하다. 시스템의 경우 X86계열의 서버를 제외한 메인프레임들과 유닉스시스템들은 제조업체마다 많은 차이가 있다. 그러나 이중 어느
특정시스템에 대해 정통해 있으면 다른 벤더 또는 다른 종류의 시스템에대한 기술을 습득하는 것은 매우 쉽다고 할수 있다. 프로그래밍언어 또한
그 종류가 다양하지만 어느 한가지를 잘 다루면 나머지 다른 언어를 습득하는 것은 아주 쉽다. 물론 특별한 산업에서 특별한 목적으로 사용하는
시스템이나 프로그래밍언어가 있기는 하지만 그러한 경우는 특별한 예외에 속하므로 신경쓸것이 못된다.
그렇다면 초보 시스템관리자나 프로그래머 또는 미래 이러한 직업을 갖기원하는 학생들이 기초를 튼튼히 하기위해 어떻게 공부하는 것이
좋을까 ?
오랜기간 시스템관리자와 프로그래머로서 근무를 해왔고, 지금도 노땅엔지니어로서 직접 웹사이트를 운영하고 있는 경험자로서 제안하고
싶은 것은 바로 직접 웹서비스 시스템을 운영해 보라는 것이다.
즉, 구체적으로 말하면, 가장 쉽게 구할수 있는 서버를 하나 준비해서 직접 운영체제를 설치하고 개발과 관련된 환경을 셋업하고 이
시스템을 이용하여 직접 서비스를 개발하고 운영하는 것이다.
가능하다면 시스템관리자에게도 기본적인 응용프로그래밍 능력을 쌓기를 권한다. 일반적으로 기업에서 시스템을 관리하는 시스템 관리자들을
보면 DBMS나 웹서버 또는 시스템소프트웨어를 설치하고 운영하는 것까지는 직접하지만 응용프로그램을 하는 경우는 아주작은 규모의 회사가 아니라면
거의 보기가 힘들다.
전문 프로그래머들처럼 깊이있는 테크닉을 공부할 필요는 없지만 간단한 응용프로그램은 직접 코딩할줄 알아야 하고, DB와 관련된
프로그램도 조금은 아는것이 좋다. 특히 시스템간 데이타를 주고받는 통신프로그램은 시스템관리자가 알고 있으면 통신에 대해 깊이있는 지식을
습득하는데 상당히 도움이 된다.
응용프로그래밍을 알고 있으면 사용자중심의 시스템관리를 하는데 많은 도움이 되며, 개발자 또는 현업의
요구사항을 적절하게 받아들여 사용자에게 최상의 서비스를 할수있는 시스템을 지원하지 못하면 시스템관리자의 존재 의미가 없어지므로 이 부분은 매우
중요하다고 할수있다.
반면 전문 프로그래머의 길을 가고 있거나 미래 프로그래머가 되고자 하는 학생 또는 초보 엔지니어들도 시스템관리에 대한 기본지식은
습득하는 것이 최적의 프로그래밍을 하는데 도움이 됨은 재론할 필요가 없다.
메인프레임이나 유닉스시스템의 고급과정까지 기술을 습득할 필요는 없지만 윈도우서버나 리눅스서버를 설치하고 DBMS 및 웹서버를 설치 및
셋업하며 성능향상을 위한 기본적인 튜닝이나 데이타백업 및 복구방법 등은 알고 있는것이 바람직하다.
따라서 아래 설명하는 모든 과정은 시스템관리자나 프로그래머들이 공동으로 습득하기를 권한다. 그러나 만일 그럴 사정이 않된다면 우선은
관련된 부분에 신경을 쓰고, 추후 여유가 생기면 그때 전체에 관심을 갖고 관련 내용들을 하나씩 모두 습득하길 바란다.
이제부터 구체적인 내용과 단계를 설명하겠다.
첫째. 윈도우서버나 리눅스 운영체제를 설치할수 있는 조그만 서버를 하나 준비한다. 여유가 있다면
전자상가를 방문하여 값싼 PC를 하나 조립할을 권하고 싶다. PC를 하나 조립하여 보는것은 매우 중요한데 그 이유는, 직접 PC부품을 하나하나
선택하고 구매하여 서버를 조립함으로써 기본적인 컴퓨터용어 및 최근의 기술트랜드를 알수 있으며 하드웨어에 익숙해 질수가 있기 때문이다.
윈도우서버나 리눅스를 설치하여 최소한의 서버기능과 성능을 가진 웹서버를 운영할 계획이므로 사양이 그다지 좋지 않아도 상관없다.
둘째. 본인의 관심에 따라 윈도우서버 또는 리눅스 운영체제를 선택하여 설치한다. 물론 하나의 서버에
윈도우서버 및 리눅스를 모두 설치할수도 있지만 추천할것은 못되며, 개인적으로 나는 리눅스 설치를 권한다. 이유는 리눅스서버에 익숙해지면 나중에
타 유닉스서버를 쉽게 공부할수 있기때문이며 시스템 기능을 깊이있게 공부하는데 있어서도 리눅스가 훨씬 편리하며 또한 대부분의 소프트웨어들은
리눅스에 쉽게 포팅되기 때문이다.
셋째. DBMS(데이타베이스관리시스템 또는 보통 DB라고 함)를 설치한다. 윈도우서버라면
Microsoft의 SQL서버가 있을 것이고, 리눅스라면 다양한 DBMS들이 나와있어 그중 하나를 선택하여 설치하면 된다.
가장 쉽게
구할수 있고 일반적으로 많이 사용되는 DBMS는 MySQL이다. MySQL DBMS는 무료로 구할수 있으며, 상용DBMS들과 비교하여 볼때
일반적인 용도로 사용하는데는 전혀 문제가 없고, 성능 또한 매우 뛰어나기 때문에 많이 사용된다.
넷째. 웹서버를 설치한다. 웹서버는 Microsoft의 윈도우서버를 사용하는 경우는 IIS서버를 설치하면
되고(윈도우서버설치시 자동설치됨) 리눅스의 경우는 보통 아파치 웹서버를 많이 사용하지만 특별히 알고있는 웹서버 종류가 있으면 리눅스용을 찾아서
설치하면 된다.
다섯째. 개발에 사용할 프로그래밍언어를 선택하고 관련 언어를 사용하기위한 언어패키지 또는 개발툴킷을
설치한다. JAVA,PHP,ASP 등 개발에 사용할 언어를 정하고 이와 관련된 개발서적을 구입하면 보통은 관련 소프트웨어 CD 및 개발언어를
사용하기위한 설치방법 등이 구체적으로 설명되어 있으므로 이를 참조하면 된다.
여섯째. 직접 응용프로그래밍을 연습한다. 이부분은 각자의 사정과 환경에따라 다양한 연습이 가능하지만 만일
정해진 것이 없다면 간단한 웹사이트를 계획하여 개발하여 보는것을 권한다. 물론 웹사이트를 구축하는 것은 그리 단순한 작업이 아니며, 순수
엔지니어 부분만 있는 것이 아니라 다양한 요소가 필요하지만 처음부터 완성도가 높은 웹사이트를 목표로 하지말고 아주 간단한 텍스트
위주의 웹사이트를 개발해보자.
웹사이트를 개발하는 것이 유리한 이유는 웹사이트를 운영하여 봄으로써 실제 업무수행시와 유사한 다양한 경험을 할수있기 때문이다. 일단
간단한 사이트를 개발하여 운영하면서 시간적인 여유가 생길때마다 조금씩 기능을 보완하여 완성도를 높여가는 것이 좋다.
일곱째. 시스템 및 응용프로그램의 백업과 복구 그리고 성능향상을 위한 내용을 습득한다. 이부분은 매우
수준이 높은 부분이므로 기본적인 내용을 충분히 습득한 이후에 천천히 하여도 된다.
이제까지 설명한 과정은 내용을 처음 접하는 초보 엔지니어들에게는 매우 낮설고 어렵게 느껴질수도 있다. 그러나 실제 공부해야 할것이
매우 많다.
전체적인 내용을 한마디로 정리하면 『빠른시간내에 시스템 및 프로그래밍에 대해 탄탄한 기본능력을 기르는데는 직접 시스템을
운영해보는 것이 가장 바람직하며, 이를 수행하는 방법으로 서버를 준비하고 그 서버를 이용하여 웹서비스를 개발하여 운영해 보자』는 것이며을
의미한다.
물론 위에 설명한 각 단계가 설명한 내용과 같이 그렇게 단순한 작업이 아닌 경우도 있다. 그러나 너무 부담을 갖지말고, 차근차근
따라가다 보면 그다지 어려운 내용은 절대 아니다. 내가 강조하고 싶은것은 분명한 목적을 계획하고 그 계획된 내용을 하나하나 직접 부딛히며
습득해가는 과정이 중요하다는 것이다.
그러나 너무 막연하고 느릿느릿 진행하면 집중력이 떨어져 좋지않다. 따라서 일정 기간을 정해놓고 매일 일정한 시간을 할애하여
꾸준히 작업을 하는 것이 중요하며, 확실치 않은 단계는 반복하여 완전히 내용을 습득하는 것이 중요하다.
어느 유명한 서버업체에서는 시스템관리자 신입직원 교육과정에서 O/S를 설치해놓고 O/S를 구성하는 각 데몬 또는 기능을 하나씩 차례로
제거하면서 어떤 문제점이 생기는 지를 체크하게하여 각 데몬 및 모듈들의 기능을 습득하고 해당 기능들의 장애시 어떻게 복구하는지를 교육시켰다고
한다.
프로그래밍을 연습하는 방법으로는 웹서비스를 개발하고 직접 운영하는 것보다 좋은 방법이 없다. 웹서비스를 구축하여 운영하다보면 시간이
흐름에 따라 새로운 기능을 지속적으로 추가 개발하게 되어있어 자연스럽게 다양한 프로그래밍 테크닉을 구사할 기회가 많아지며, 다양한 언어를 사용해
볼수도 있다.
처음부터 너무 커다란 계획을 세워 중도에 포기하는 것보다 단순하고 작은 내용이지만 꾸준하게 지속적으로 할수있는 목표를 세워
하나하나 이루어 간다면 그다지 오랜시간이 지나기전에 다양한 경험을 통하여 상당한 지식을 습득할수 있을 것으로 믿어 의심치
않는다.