IT이야기/입코딩2017. 6. 7. 17:55

-[용어정의]서버(Server)


서버(Server)란 클라이언트에게 네트워크를 통해 서비스하는 컴퓨터입니다.


나무위키에 있는 서버에 대한 내용을 발췌해 보겠습니다.

인터넷은 수많은 서버들이 거미줄처럼 얽혀서 형성된다고 합니다. 

홈페이지를 운영하려면 서버가 반드시 필요하며, 온라인 게임이나 웹게임들도 서버를 통해서 서비스를 하고 있습니다. 보통 어느정도 규모가 있는 기관에서는 데이터베이스, 웹 어플리케이션 서버 등등에 방화벽, 라우터등이 붙어 네트워크를 형성합니다.

구글 데이터센터의 서버들처럼 랙 안에 설치되어 항온항습기를 사용해 온도/습도가 유지되는 환경에서 보관되어 지는 경우에서 부터, 그냥 일반적인 PC를 사용하여 서비스를 제공하는 경우까지 매우 다양합니다. 

물론, 전문적으로 서비스를 제공하는 업체에서는 전용의 장비를 사용하는 것이 일반적입니다.

서비스 규모가 커질수록 서버의 규모도 크고 아름다워지기 때문에 구글이나 페이스북같은 경우 자체적으로 인터넷 데이터 센터를 운영합니다. 

국내에서도 2013년 6월 네이버에서 데이터 센터를 완공하여 운영하기 시작했는데 구글데이터센터나 네이버 데이터 센터 그리고 페이스북 데이터 센터를 보고있자면 이게 서버인지 우주기지인지 구분이 안될 정도로 엄청난 것을 알 수 있습니다. 

접속량이 많을 수록 서버의 부담도 많아지기 때문에 규모에 따라서 운영하는 서버의 성능과 대수가 다릅니다. 

온라인게임들이 주기적으로 점검을 하는것도 바로 서버점검을 하기 위함이며, 사용자가 몰려서 게임이 제대로 안돌아간다면 바로 이 서버가 감당하지 못해서 생기는 현상입니다. 

법적으로, 인터넷 컨텐츠를 수사할 경우 서버의 소재 국가에 따라서 어느 나라 법을 적용하느냐가 달라지며 이것도 속지주의의 일종입니다. 

나무위키는 서버가 해외에 위치해 있어 대한민국 법률이 적용되지 않습니다. 하지만 작성자가 대한민국에 있다면 제한적으로 적용될 수 있습니다.

VPS 호스팅 업체에서는 가상서버라는 것을 임대해 줍니다. 

물리적 서버를 분할하여 root권한을 가진 서버를 가질 수 있습니다. 

가상서버 한개를 임대하면 웹서버를 포트를 정하여 여러개 운영할수 있습니다. 이론적으로 사용 가능한 포트 번호는 0~65535 사이이나, 이 중 상당수의 포트는 이미 예약되어 있다고 합니다. 

1024 이하의 포트는 정해진 프로토콜 이외에는 함부로 사용하지 않는 것이 좋습니다.



뭔가 굉장히 어렵게 설명되어 있지만 딱 잘라 말해서 서버도 컴퓨터입니다. 


우리가 쓰는 컴퓨터와 똑같은 종류의 부품을 사용하기 때문에 가정에서 쓰이는 평범한 컴퓨터를 서버로 쓸 수도 있습니다. 

다만 안정성을 높이기 위해 좀 더 비싼 고급 부품을 쓰고 하드디스크와 전원장치는 2개 이상씩을 달아 서버를 끄지 않는 상태에서도 교체가 가능한 비싼 컴퓨터를 사용합니다. 

가정용 컴퓨터는 나만 필요할 때 쓰고 끄면 되지만 서버의 경우는 다른 사람들이 접속하여 사용하는 셈이므로 특별한 일이 없다면 24시간 내내 돌리게 됩니다. 

그래서 굳이 RAID 확장카드 달고 하드디스크도 3~4개씩 꽂아서 RAID로 묶습니다. 

일반적으로 쓰는 (옛날은 EIDE지만)SATA같은 인터페이스가 아닌 SCSI나 SAS를 이용합니다. 

이들은 컨트롤러가 제어하는 인터페이스여서 CPU랑 독립적으로 돌아가기 때문에 CPU 점유율이 낮아서 안정성을 요구하는 서버에 잘 맞는 인터페이스지만, 상당히 가격이 비싸며 컨트롤러 카드도 가격이 비쌉니다.

개인이 운영하는 웹사이트/웹게임 정도는 개인용 컴퓨터로도 홈서버로 서비스에는 무리가 없지만, 가정용 회선으로는 부족할 수도 있습니다. 

보통 DDoS 테러를 한다고 하면 타겟이 되는것이 바로 이 서버들이라고 하더군요. 접속량을 과도하게 늘리면 서버가 감당하지 못하다 뻗어버림으로써 사이트가 마비 됩니다.

서버 컴퓨터용 OS도 따로 있습니다. 사용하기 보다는 서버용으로 돌리는게 목적이므로 일반용과는 차이가 많습니다. 

유닉스, 리눅스 계열 서버운영체제는 대부분 CUI인 경우가 많지만 macOS 서버나 윈도우 서버의 경우는 가정용과 인터페이스 차이가 거의 없습니다. 

또 하드디스크의 가격하락과 유무선공유기의 보급덕에 집에서 NAS나 애플의 맥 미니를 이용해 개인용 서버를 운영하는 경우가 늘어나고 있습니다. 

NAS에는 주로 시놀로지 DSM OMV free4nas Cent OS라는 리눅스계열 운영체제가 탑재되는 경우가 보통이며 애플의 맥 미니에는 옵션으로 macOS Server가 들어갑니다. 

과거 애플은 서버컴퓨터인 Xserve도 내놓았지만 단종되었다고 하네요. 

맥 사이에서 써야 빛을 내는데 애초에 그런 환경이 당시 드물었고, 가성비까지 별로라 단종되었다고 합니다.현재 맥 프로와 맥 미니로 대체되있으며, 랙마운트 어댑터도 구매할 수 있습니다. 


서버에 종류에 대해서 한번 알아보겠습니다.

보통 서버를 돌리려는 이유는 마인크래프트 등의 게임 서버, 블로그 서버, 파일 서버 등이 있습니다.


-FTP 서버

대용량 파일 전송을 위한 프로토콜입니다. FTP서버는 HTTP서버 다음으로 해킹 표적이 되는 서비스입니다. 

파일 배포 서비스가 필요한 것이 아니라면, SSH 환경에서 실행할 수 있는 SFTP를 이용하는 것으로 충분합니다. 

윈도우 환경에서는 FileZilla등의 FTP클라이언트가 sftp서비스를 지원합니다.

만약 제어 콘솔(PC)도 리눅스라면 sshfs패키지를 설치해서 서버를 원격 마운트할 수 있습니다. 

참고로 sshfs는 samba와 달리 라우터를 자유롭게 넘어다닌다고 합니다. 

지구 반대편에서도 서버를 원격 마운트할 수 있습니다. 다만 윈도우에는 없는 패키지라서 윈도우 사용자는 가상머신을 이용해야 합니다.


-웹 서버

대표적으로 Apache2, lighttpd, nginx등이 있습니다. 

범용성은 apache2가 가장 우월하나 동접자가 늘어날수록 메모리를 많이 먹고 속도도 조금 느립니다. 

nginx는 동접자가 늘어도 추가 메모리를 거의 필요로 하지 않으며 가장 속도가 빠르나 .htaccess를 읽어들이지 못하는 것 등으로 인하여 설정이 번거롭다고 합니다. 

lighttpd는 nginx와 같은 비동기식 웹 서버라 성능 면에서도 괜찮고 .htaccess 파일 또한 읽어들일 수 있기 때문에 nginx에 비해서 설정이 간단합니다. 

다만 .htaccess는 모든 요청을 처리 할 때마다 읽기 때문에 정적 서버에서 권장하지 않는다고 합니다.그리고 참고할 문서가 적은 게 흠이라고 합니다.


-데이터베이스 서버

데이터베이스를 구동하는 서버입니다. 개인이 취미로 돌리는 웹 서버 정도에선 애플리케이션 서버와 같은 서버에서 돌아가는 것이 대부분일 것입니다. 

하지만 대형 서비스로 간다면 독립된 DB서버를 구동하는 것을 심심찮게 볼 수 있습니다. 

서비스 규모가 커질수록 DB부담이 수직상승하기 때문입니다. 

보통 기업 보유 자산 중 가장 빠르고 가장 메모리가 많고 SSD로 도배한 서버로, 제일 성능이 좋은 서버가 DB서버로 사용됩니다.

소규모 개인 서비스에서 쓰이는 것은 대부분 MySQL, MariaDB 또는 SQLite 정도입니다. 다만 PHP와 달리 MySQL과 마리아DB는 대형 서비스에도 쓰이는 강력한 데이터베이스 엔진입니다.

개인이나 SOHO 레벨이면 APM(Apache + PHP + MySQL)이 점유율의 대부분을 차지하지만, 대한민국 정부, 즉 관(官)에서 주관하는 중대규모 사업은 JSP/Tomcat + ORACLE이 사실상 표준입니다.


-기타

토렌트 서버, 게임 서버등이 있습니다.

토렌트 서버를 만들고 싶다면 "transmission-daemon" 또는 "uTorrent for Linux"를 설치합니다. 

근데 토렌트 서버는 네트워크 대역폭을 엄청 빨아먹으므로 민폐가 될 수 있다고 합니다.

게임서버란 인터넷 상에서 여러 플레이어가 같이 게임을 할 수 있게 하기 위한 프로그램이나 해당 프로그램을 기동중인 컴퓨터를 말합니다.



버추얼박스로 리눅스 하나 깔아서, putty로 접속하고 서버 돌려보는것도 나름 재미있네요.

사실 서버 전문가들은 SE 라고 웹개발자와는 직군이 좀 다른것 같습니다만, 혼자서 개발환경정도는 세팅할수 있게, 간단하게 데이터베이스 깔고, 파일서버 만들고, svn에서 공유하고 하는정도는 스킬을 익혀두는게 좋겠더군요.

Posted by Joseph514