서버

width=50%
인터넷서비스에 많이 쓰이는 1unit 크기의 서버. 사진출처 [1]

width=50%
구글 인터넷 데이터 센터의 서버[2] 관련기사

1 개요

Server

클라이언트에게 네트워크를 통해 서비스하는 컴퓨터.
주기적으로 터지거나 다운되는 것 예를 들자면 명절때 코레일 서버나 수강신청 시즌의 대학교 서버

인터넷 하면 중앙에서 관리해주는 메인컴퓨터가 있는 것으로 생각하는 이들이 있으나,[3] 사실 인터넷은 수많은 서버들이 거미줄처럼 얽혀서 형성된 것이다. 홈페이지를 운영하려면 서버가 반드시 필요하며, 온라인 게임이나 웹게임들도 서버를 통해서 서비스를 하고 있다. 보통 어느정도 규모가 있는 기관에서는 데이터베이스, 웹 어플리케이션 서버 등등에 방화벽, 라우터등이 붙어 네트워크를 형성한다.

Internet_map_1024.jpg
크고 아름다운 인터넷 지도 폭죽 같은건 기분탓이다. 그래서 잘 터지나보다

앞서 나온 구글 데이터센터의 서버들처럼 안에 설치되어 항온항습기를 사용해 온도/습도가 유지되는 환경에서 높으신 분으로 모셔지는 경우에서부터, 그냥 일반적인 PC를 사용하여 서비스를 제공하는 경우까지 매우 다양하다. 전문적으로 서비스를 제공하는 업체에서는 전용의 장비를 사용하는 것이 일반적이다.

서비스 규모가 커질수록 서버의 규모도 크고 아름다워지기 때문에 구글이나 페이스북같은 경우 자체적으로 인터넷 데이터 센터를 운영한다. 국내에서도 2013년 6월 네이버에서 데이터 센터를 완공하여 운영하기 시작했는데 구글데이터센터나 네이버 데이터 센터 그리고 페이스북 데이터 센터를 보고있자면 이게 서버인지 우주기지인지 구분이 안될 정도로 엄청난 것을 알 수 있다. 메인컴퓨터 맞네 [4]

접속량이 많을 수록 서버의 부담도 많아지기 때문에 규모에 따라서 운영하는 서버의 성능과 대수가 다르다. 온라인게임들이 주기적으로 점검을 하는것도 바로 서버점검을 하기 위함이며, 사용자가 몰려서 게임이 제대로 안돌아간다면 바로 이 서버가 감당하지 못해서 생기는 현상이다. 엔씨소프트에서 서비스하는 아이온은 2008년 11월 기준 6개국에서 261대의 서버를 운영하고 있다고 한다. #

법적으로, 인터넷 컨텐츠를 수사할 경우 서버의 소재 국가에 따라서 어느 나라 법을 적용하느냐가 달라지며 이것도 속지주의의 일종이다. 나무위키는 서버가 해외에 위치해 있어 대한민국 법률이 적용되지 않는다. 하지만 작성자가 대한민국에 있다면 제한적으로 적용될 수 있으므로 주의가 필요하다.

VPS 호스팅 업체에서는 가상서버라는 것을 임대해준다. 물리적 서버를 분할하여 root권한을 가진 서버를 가질 수 있다. 가상서버 한개를 임대하면 웹서버를 포트를 정하여 여러개 운영할수 있다. 이론적으로 사용 가능한 포트 번호는 0~65535 사이이나, 이 중 상당수의 포트는 이미 예약되어 있다. 1024 이하의 포트는 정해진 프로토콜 이외에는 함부로 사용하지 않는 것이 좋다.

2 컴퓨터와 서버

파일:HP ProLiant ML110 Gen9.png
HP ProLiant ML110 Gen9. 일반 가정용 컴퓨터와 똑같은 모양을 하고있는 서버컴퓨터이다. 전원 스위치가 생각보다 작다. 만약 집에뒀는데 아기가 누르면...........? [5]

뭔가 굉장히 어렵게 설명되어 있지만 딱 잘라 말해서 서버도 컴퓨터다. 우리가 쓰는 컴퓨터와 똑같은 종류의 부품을 사용하기 때문에 가정에서 쓰이는 평범한 컴퓨터를 서버로 쓸 수도 있다. 다만 안정성을 높이기 위해 좀 더 비싼 고급 부품을 쓰고 하드디스크와 전원장치는 2개 이상씩을 달아 서버를 끄지 않는 상태에서도 교체가 가능한 비싼 컴퓨터를 사용한다. 가정용 컴퓨터는 나만 필요할 때 쓰고 끄면 되지만 서버의 경우는 다른 사람들이 접속하여 사용하는 셈이므로 특별한 일이 없다면 24시간 내내 돌리게 된다. 그래서 굳이 RAID 확장카드 달고 하드디스크도 3~4개씩 꽂아서 RAID로 묶는다. 그래야 돈을 벌지 게다가 일반적으로 쓰는 (옛날은 EIDE지만)SATA같은 인터페이스가 아닌 SCSISAS를 이용한다. 이들은 컨트롤러가 제어하는 인터페이스여서 CPU랑 독립적으로 돌아가기 때문에 CPU 점유율이 낮아서 안정성을 요구하는 서버에 잘 맞는 인터페이스지만, 상당히 가격이 비싸다. 컨트롤러 카드도 가격이 비싸다.

개인이 운영하는 웹사이트/웹게임 정도는 개인용 컴퓨터로도 서비스에는 무리가 없지만, 가정용 회선으로는 부족할 수도 있다. 보통 DDoS 테러를 한다고 하면 타겟이 되는것이 바로 이 서버. 접속량을 과도하게 늘리면 서버가 감당하지 못하다 뻗어버림으로써 사이트가 마비된다.

서버 컴퓨터용 OS도 따로 있다. 사용하기 보다는 서버용으로 돌리는게 목적이므로 일반용과는 차이가 많다. 유닉스, 리눅스 계열 서버운영체제는 대부분 CUI인 경우가 많지만[6] macOS 서버윈도우 서버의 경우는 가정용과 인터페이스 차이가 거의 없다. 또 하드디스크의 가격하락과 유무선공유기의 보급덕에 집에서 NAS나 애플의 맥 미니를 이용해 개인용 서버를 운영하는 경우가 늘어나고 있다. NAS에는 주로 시놀로지 DSM OMV free4nas Cent OS라는 리눅스계열 운영체제가 탑재되는 경우가 보통이며 애플의 맥 미니에는 옵션으로 macOS Server가 들어갔다.[7] 과거 애플은 서버컴퓨터인 Xserve도 내놓았지만 단종되었다. 맥 사이에서 써야 빛을 내는데 애초에 그런 환경이 당시 드물었고, 가성비까지 별로라 단종되었다. 현재 맥 프로맥 미니로 대체되있으며, 랙마운트 어댑터도 구매할 수 있다.

혹시 집에서 개인용 서버를 돌려보려는 위키러가 있다면 아래 내용을 참고하면 좋을 것이다.

3 서버의 형태 및 팁

3.1 FTP 서버

대용량 파일 전송을 위한 프로토콜이다. FTP서버는 HTTP서버 다음으로 해킹 표적이 되는 서비스이다. 파일 배포 서비스가 필요한 것이 아니라면, SSH 환경에서 실행할 수 있는 SFTP를 이용하는 것으로 충분하다. 윈도우 환경에서는 FileZilla등의 FTP클라이언트가 sftp서비스를 지원한다.

만약 제어 콘솔(PC)도 리눅스라면 sshfs패키지를 설치해서 서버를 원격 마운트할 수 있다. 참고로 sshfs는 samba와 달리 라우터를 자유롭게 넘어다닌다. 지구 반대편에서도 서버를 원격 마운트할 수 있다. 다만 윈도우에는 없는 패키지라서 윈도우 사용자는 가상머신을 이용해야한다.

3.2 웹 서버

대표적으로 Apache2, lighttpd, nginx등이 있다. 범용성은 apache2가 가장 우월하나 동접자가 늘어날수록 메모리를 처묵하고 속도도 조금 느리다. nginx는 동접자가 늘어도 추가 메모리를 거의 필요로 하지 않으며 가장 속도가 빠르나 .htaccess를 읽어들이지 못하는 것 등으로 인하여 설정이 번거롭다. lighttpd는 nginx와 같은 비동기식 웹 서버라 성능 면에서도 괜찮고 .htaccess 파일 또한 읽어들일 수 있기 때문에 nginx에 비해서 설정이 간단하다. 다만 .htaccess는 모든 요청을 처리 할 때마다 읽기 때문에 정적 서버에서 권장하지 않는다. [8]다만, 참고할 문서가 적은 게 흠이다. 나무위키는 프론트엔드 서버로 nginx를 사용중이다.

우분투에서는 npmanager라는 패키지를 이용하면 nginx + php + mariadb를 자동으로 설치/설정할 수 있다. 리눅스 사용을 제법 한 적이 있다면 컴파일 설치를 시도해 보는 것도 좋다.

자세한 사항은 웹 서버 문서 참조.

3.2.1 동적 웹을 위한 준비

끽해야 자바스크립트만을 제공하는 정적 페이지(FTP로 포스팅하는 블로그 사이트 등)를 운영할 것이 아니라면 PHP와 같은 패키지가 필요하다. 가장 범용적으로 사용되는 것은 PHP로, 미디어위키, 모니위키, 도쿠위키PHP를 기반으로 한다. PHP가 입문하기도 쉽고 써먹기도 쉽기 때문. 다만 큰 규모의 서비스엔 보안상의 문제점이나 성능상의 문제점으로 인하여 잘 사용하지 않는다. 예로, 페이스북PHP의 영 좋지 못한 성능에 질려 HHVM을 만들어냈으며, 결국 Hack라는 파생형 언어를 만들어내기에 이르렀다.

PHP 외엔 파이썬, 루비, JSP, node.js, 등의 언어가 사용된다. 사실 cgi게이트웨이만 설정하면 현존하는 모든 언어를 다 쓸 수 있다. 하지만 PHP는 웹을 위해 만들어진 특수 목적 언어이기 때문에 웹 쪽에서 점유율이 가장 높다. 그러나 엄청난 접속자수를 감당하는 서버를 만들려면 Erlang, Go, Stackless Python, PyPy등 병렬화를 잘 지원하는 언어를 사용하는 게 유리하다. 그리고 조언 하나 하자면, PHP로 중규모 이상의 웹사이트를 만들려고 하지 말라. 아무리 코드를 잘 통제하려고 해도 언젠가는 반드시 유지보수 지옥에 빠져든다. 전체 코드 줄 수가 1만줄을 넘어가면 다른 언어로 재작성하는 걸 심각하게 고려해야 한다. 자세한 건 PHP문서 참고.

나무위키의 the seed 엔진은 Node.js를 기반으로 돌아가고 있다.

3.3 데이터베이스 서버

데이터베이스를 구동하는 서버이다. 개인이 취미로 돌리는 웹 서버 정도에선 애플리케이션 서버와 같은 서버에서 돌아가는 것이 대부분이다. 하지만 대형 서비스로 간다면 독립된 DB서버를 구동하는 것을 심심찮게 볼 수 있다. 서비스 규모가 커질수록 DB부담이 수직상승하기 때문이다. 보통 기업 보유 자산 중 가장 빠르고 가장 메모리가 많고 SSD로 도배한 서버, 즉 제일 성능이 좋은 서버가 DB서버로 사용된다.

소규모 개인 서비스에서 쓰이는 것은 대부분 MySQL, MariaDB 또는 SQLite 정도이다. 다만 PHP와 달리 MySQL과 마리아DB는 대형 서비스에도 쓰이는 강력한 데이터베이스 엔진이다. 예로 위키백과는 현재 MySQL을 포크, 개량한 MariaDB를 사용하고 있다. 이 외의 DB엔진으로는 MongoDB, PostgreSQL, ORACLE社나 MS社의 제품 등(SQL Server 제품군)이 있다.

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

데이터베이스 관리를 쉽게 하기 위해서 phpmyadmin도 설치하면 좋지만 이것도 해킹 표적공격을 많이 당하므로 기본적인 보안 설정을 철저히 해야한다. 다른 디렉토리에 설치하거나 추가 보안(HTTP Basic Auth)을 걸거나 방화벽에서 막아버리는 방법 등이 있다. 물론 가장 쉬운 방법은 그냥 phpmyadmin의 외부접속을 막아버리고 내부 네트워크에서만 접속하는 것이다. MySQL Workbench나 Navicat 제품군 같은 클라이언트용 GUI를 설치하는 방법 또한 존재하나 이쪽도 방화벽 설정을 만져주는 등 추가 보안대책이 필요하다. 이런 외부 클라이언트를 사용해야 할 경우(대개 업무 편의와 효율성을 위해) 특정 계정을 특정 IP에서만 외부 접속이 가능하도록 세팅하는 것이 가장 일반적이다. 그 외에는 몽땅 로컬 접속만 허용하도록 한다.

3.4 기타

토렌트 서버를 만들고 싶다면 "transmission-daemon" 또는 "uTorrent for Linux"를 설치한다. 근데 토렌트 서버는 네트워크 대역폭을 엄청 빨아먹으므로 민폐가 될 수 있다. [9] 대학교 연구실 같은데다가 토렌트 돌리면 교수님한테 크게 털릴 수도 있으니 주의. 원룸 같은 다세대주택에서 돌리면 인터넷이 먹통이 돼서 분노한 이웃주민과 집주인과 인터넷기사의 3단콤보를 얻어맞을 수도 있다.

3.4.1 게임 서버

게임 서버 문서 참고.

4 직접 서버를 구축해 보자

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

준비하기

  • 가정용 서버의 CPU는 전력소모가 가장 중요하다. 물론 데스크탑용 i5, i7 등을 써도 되지만 그랬다간 누진세 크리티컬을 직격으로 맞을 것이다. 최신형 기종이 아닌 일반 데스크탑의 대기시 전력소모는 70W다. 미성년자라면 부모님의 등짝 스파이크는 덤, 크래커라면 보안이 취약한 서버를 찾아내 해킹해 몰래 서버를 돌리는 것도 나쁘지 않다 그리고 은팔찌획득. 24시간 내내 돌리더라도 최대한 적은 전력으로 많은 효율을 뽑아내야 한다[10] 그래서 원래부터 '저전력'을 기반으로 설계된 노트북 등을 서버용으로 사용하기도 한다. [11]
  • 개인용 NAS나 동시 접속자 수가 얼마 되지 않는 사이트를 만들 것이라면 라즈베리 파이(컴퓨터)가 제격이다. 보급형 NAS보다는 높은 성능이지만 기가비트 이더넷을 지원하지 않아 기가바이트 단위로 파일을 송수신 하려면 속이 좀 터질 것이다. 그리고 전력소모가 매우 낮다. 다만 SATA를 지원하지 않기 때문에 TB단위의 서버를 원한다면 외장하드 케이스를 사서 USB에 주렁주렁 달거나[12] 아래 나오는 인텔 아톰 시리즈가 정신건강에 좋다.
  • 동시 접속자 수가 50명~100명 수준이라면 ARM 수준에선 버거울 수 있다[13] 인텔 아톰 시리즈나 노트북용 셀러론, HP, 후지쯔 등에서 나온 마이크로 서버 제품군을 쓰자.
    • 동시 접속자 수가 200명 이상이거나 마인크래프트 등의 게임 서버를 돌릴 것이라면 저전력으로 설계된 모바일 i시리즈나 고급 전력 관리를 지원하는 i시리즈를 쓰자.
    • 동시 접속자 수가 500명 이상이라면... IDC에 입주해라. 집에서 돌리다가는 누진세 때문에 버틸 수가 없다! 또한 네트워크 대역폭이 가정용 회선이 대부분 100Mbps혹은 커봤자 1Gbps인걸 감안 하면 속도도 정말 시망이다...
  • 메인보드의 크기가 작을수록 전력소모가 적다. WOL[14]를 지원하는 메인보드를 사자. 물론 요즘의 메인보드는 거의 대부분 WOL을 지원한다.
  • 메모리많을수록 좋다. 개인용 서버라면 1기가면 충분하고, 2기가면 답답하지 않게 쓸 수 있다. 사람을 대규모로 받는다면 당연히 메모리를 많이 확장하자.
  • 파워 서플라이는 DC to DC 파워를 이용하자. 아톰이나 저전력 셀러론이라면 60W로도 충분하다. 제온 데스크탑 버전을 쓴다해도 그래픽 카드를 달지 않는다면 80W로도 충분. 물론 가격은 매우 비싸다. CPU는 풀 로드 시에 TDP 전력만큼 사용하고 Idle 상태에서는 전기를 거의 먹지 않는다. 오히려 꾸준히 전기를 많이 먹는 쪽은 HDD 쪽인데 평균적으로 3.5인치 7200rpm HDD는 6~8W, SSD는 3W의 전기를 먹는다고 생각하고 계산하면 된다.

요약하자면 3.5인치 하드기준 3개를 넘길시 dc to dc파워를 과감하게 포기하는것이 좋다

  • 하드디스크 구할 땐 그냥 하드디스크를 쓰던지, 정 속도가 욕심이 나면 SSD를 쓰는게 좋다. 가끔 서버용이라고 10000rpm, 15000rpm을 파는데 거의 다 SCSI 혹은 SAS라 서버컴퓨터 보드가 아닌 이상 쓰기 어렵고 별도로 PCI 슬롯에 SCSI/SAS 카드를 달아 연결한다 해도 SATA3 SSD만 못 하다.
  • 팩스 서버 등의 특수 목적이 아니라면 굳이 서버용 윈도우를 쓸 필요는 없다. 일반용 윈도우를 쓴다면 반드시 Professional나 그 이상으로 설치해야 원격 데스크톱 연결을 이용할 수 있다[15]. 리눅스를 쓸 것이라면 우분투센트OS등 사용자가 많고 문서화가 잘 되어 있는 배포판(이들은 실무용으로 나온 한국어 가이드북을 서점에서 구할 수 있다. 다른 배포판은 좀...)을 선택하는 것이 좋다.
  • 서버용 컴퓨터에는 암호를 걸어둬야 원격 데스크톱 연결을 이용할 수 있다.[16] 최대한 자신만 알 수 있는 암호를 걸자. 비밀번호 기억 못할거 같다고 P@ssw0rd나 1q@ 이런거 쓰면 심히 골룸하다(...)[17]
  • 서버 암호를 기억도 못 하게 엄청 복잡한 랜덤 패스워드로 만들고 그 패스워드를 서버 본체에 스티커를 붙여 써 놓는 방법이 있다. 어차피 해커가 서버에 물리적으로 접근 가능해지면 암호고 뭐고 다 소용없어지니까 서버에다가 접근 암호를 써붙여놓는 것이다. 기업용 서버는 SSH 공개키 인증 등 패스워드가 아닌 다른 방법으로 접속하게 돼 있다. 또는 금고 안에 암호표를 보관하고 있거나.
  • 남아도는 안드로이드 스마트폰으로 서버를 만들기도 한다.
아두이노로도 웬만한 웹하드 서비스는 충분히 만들 수 있다. 다만 아두이노는 요즘 스마트폰에 비해 스펙이 좀많이 딸리는 놈이다[18](우선 가격 차이가...). 초저전력, 초저소음(사실 무음), 초경량(?) 서버를 만들 수 있는 것이다. 다만 OS를 ARM계열용을 써야 하므로 리눅스 아니면 좀 써먹기 힘들다. 윈도우도 ARM용이 있지만 영 마이너해서 자료 찾기가 어렵다.
  • 위처럼 고려해서 서버를 만들어도 회선이 문제가 있으면 재기능을 할 수 없다. 작은 규모라면 가정용 회선으로도 충분하지만 회선이 좋지 않으면 서버가 아무리 좋아도 문제가 생기기 마련이다. 그리고 가정용의 경우 IP포트가 막혀 있는 경우가 대부분이라 IP 포트를 체크 및 후 조치는 필수이다. 기령 80, 8080 IP포트가 막혀있는 경우라면 웹서버를 사용 할 수 없다.

4.1 Under Linux

서버의 근간이 되는 OS가 설치되는데 리눅스를 사용하길 결정했다면, 어느 배포판을 사용할지 결정해야 한다. 자신이 리눅스에 자신이 있다면 순수 CLI 기반의 슬랙웨어나, CentOS, OpenSUSE 등의 배포판이나 Ubuntu Server를 사용하는것도 좋다. Debian 계열 리눅스 배포판(Ubuntu, Mint 등)이 리눅스 배포판 중에서 가장 많이 쓰이는 배포판#이기도 하고 이 격차는 점점 더 커지고 있긴 하지만 안정성을 추구하는 서버용은 굳세다. 여전히 RHEL계열을 써재낀다. CentOS가 돈 받고 파는 완성도 좋은 RHEL의 클론이기 때문에 완성도도 좋다. 서버 용도로만 쓸거면 CentOS등 RHEL을 권장한다.CentOS는 RHEL계열로 안정성이 대단히 높다. 네이버도 이걸 사용중이다. 전문적으로 서버를 운영하려면 이걸 추천한다. 서버 자료는 여기가 압도적으로 많다. 물론 여기다가 GUI도 올리고 이것도 설치하고 영화도 보고 음악도 듣고 일반 PC처럼 쓸거라면 우분투가 좋다. [19]

원래 서버 용도로 배포되는 센트OS와 다르게 우분투는 데스크톱용과 서버용으로 나오는데 서버용을 다운받아 설치해야 한다. 데스크톱용으로 설치해도 서버로 못 쓰는 건 아니지만 불필요한 데스크톱 환경을 설치하기 때문에 자원낭비가 된다. 아예 리눅스가 처음이라면 버츄얼박스 같은 걸로 리눅스 데스크톱을 깔아서 연습 먼저 하자. 자동차가 뭔지도 모르는 사람이 자동차 정비부터 배우겠단 꼴이다. 레이서까지는 안 바래도 최소한 운전 정도는 할 줄 알고 나서 정비를 배우는 게 낫지 않을까?

설치 중에 계정을 생성하라고 물어볼텐데 로컬 계정이므로 자기가 쓰고 싶은 계정 이름과 패스워드를 입력한다. 어디 클라우드에 동기화하기 위한 목적이 아니니까 맘대로 쓰자. 요즘엔 root로 로그인하는 걸 엄격히 금지하는 추세이기 때문에 이 과정은 필수이다.[20] 계정 이름과 패스워드 둘 다 알아야 서버가 뚫리는 셈이므로 보안성은 상당히 향상됐다. 정 root 쓰고 싶다면 SSH로 root접근을 금지시키고 다른 계정으로 접속한 뒤 su root 를 쳐서 써도 되긴 된다. 루트 작업이 필요할 때는 su보단 sudo로 작업하는 것이 일반적. 그리고 현재 지역의 시간대를 선택하고(귀찮다고 시간대를 대충 잡으면 안 된다. 서버 시계는 GMT에 동기화하기 때문에 엉뚱한 시간대를 입력하면 시계가 계속 틀려 있게 된다.)[21] 나머지는 기본 설정으로 둬도 된다.

리눅스 서버는 GUI로 조작할만한 게 거의 없고 전부 CLI조작을 기본으로 한다. GUI툴이 있긴 한데 오히려 이쪽이 자료 찾기가 더 힘들다.[22] 안됐지만 검은 화면에 무심한 듯 시크하게 깜박이는 하얀색 커서가 견딜 수 없으면 시놀로지,윈도우로 가야 한다. 리눅스 서버 세계에서 GUI조작으로 뭔갈 하는 건 왕초보용 강의가 끝이다. 뭐 리눅스 데스크톱 세계는 얘기가 다르지만.

리눅스 서버용 배포판을 설치하면 자동으로 설치되지만 데스크톱으로 설치하면 안 깔리는 패키지 중 가장 중요한 게 openssh 패키지다. 이 패키지가 있어야 원격 로그인이 가능하다. 서버는 최초 설치때만 모니터를 달아 쓰고 그 뒤로는 대부분 원격으로 연결해서 조작하므로 필수이다. 참고로 텍스트 문서 편집 시 vim에디터[23]로 편집하는 경우 속 터질수도 있으니 초보자의 경우 nano에디터를 추천. 이것도 불편하다면 macOS 사용자라면 Xquartz를 설치하고 X11 forwarding된 환경[24]에서 gedit 등의 우분투 내장 에디터를 열어서 편집하는 방법 또한 있다.

4.1.1 웹 서버구축 간단 튜토리얼

Nginx-HHVM-MariaDB 설치를 전재로 한다. Nginx및 HHVM이 RPM을 제공하지 않는 관계로 컴파일 설치를 해야 한다. 깃허브 등지에 이것에 관한 자동 설치 스크립트가 있으니 찾아 보아도 된다.
먼저 작업용 유저를 추가한다. 로그인 할 수 없는 작업용 유저이다.
[root@namuwiki ~]useradd --shell /sbin/nologin www-data
그리고 EPEL 저장소를 설정한다.
[root@namuwiki ~]rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
HHVM컴파일을 위한 의존성 요소들을 설치한다. 엄청나게 많다.

[root@namuwiki ~]yum install cpp gcc-c++ cmake git psmisc {binutils,boost,jemalloc}-devel \
{ImageMagick,sqlite,tbb,bzip2,openldap,readline,elfutils-libelf,gmp,lz4,pcre}-devel \
lib{xslt,event,yaml,vpx,png,zip,icu,mcrypt,memcached,cap,dwarf}-devel \
{unixODBC,expat,mariadb}-devel lib{edit,curl,xml2,xslt}-devel \
glog-devel oniguruma-devel ocaml gperf enca libjpeg-turbo-devel openssl-devel \
make

만약 MariaDB를 더 최신 버전으로 설치하고 싶다면 다음 과정을 끼워넣어라. 우선 더 최신버전의 MariaDB를 설치하기 전에 깔린 패키지를 지우도록 하자. 이걸 안하면 충돌 오류가 생긴다.
[root@namuwiki ~]yum -y remove mariadb* mariadb-libs-5.5*
저장소를 설정하고

[root@namuwiki ~]cat >  /etc/yum.repos.d/MariaDB.repo <<END
# MariaDB 10.1 CentOS repository list - created 2015-09-12 00:45 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
END

DB를 설치하자.
[root@namuwiki ~]yum -y install MariaDB-server MariaDB-client MariaDB-devel
MariaDB서비스를 시작한다. 서비스를 먼저 시작하는 이유는 HHVM을 컴파일 할때 CMake가 DB소켓 파일을 찾을 수 있도록 하기 위함이다. MariaDB를 설치해놓고 MySQL을 시작하고 있는데 상관 없다. MariaDB는 MySQL과 호환을 위해서 이렇게 실행 해도 잘만 실행 된다.
[root@namuwiki ~]service mysql start
DB 설정을 한다. 대화식으로 되어 있어 쉬우니 입맛게 맞게 설치하자. 참고로 기본 비번은 공백이다. 그냥 엔터 누르자.
[root@namuwiki ~]mysql_secure_installation
지금부터 시간이 오래 걸리는 작업이다. 컴퓨터 오래 켜놓을 자신 없으면 screen을 설치하여 애니 한두편 보고 오던가결국 이것도 컴퓨터 켜놓는짓 운동이라도 하고 오자.
먼저 HHVM소스를 얻는다. 재귀적으로 소스를 가져오기 때문에 HHVM하나만 끝났다고 신난다 하면서 ^c를 누르지 않도록 하자. 여기선 /tmp 디렉터리에서 작업을 한다.

[root@namuwiki ~]cd /tmp
git clone https://github.com/facebook/hhvm -b master  hhvm  --recursive

완료되었으면 CMake를 이용해 컴파일을 하자. (nproc)+1 부분은 컴파일 시에 사용한 프로세스 개수를 지정하는 건데 자신의 서버의 코어 수의 1.2배가 가장 빠르다. 수정하고 싶으면 참조하자. 컴파일 설명은 HHVM문서에서 가져왔는데 귀찮았는지 저렇게 되어 있다.

[root@namuwiki tmp]cd hhvm
cmake .
make -j$(($(nproc)+1))

다음은 테스트 과정이다. 버전이 정상적으로 뜨면 컴파일이 잘 된 것이다.
[root@namuwiki hhvm]./hphp/hhvm/hhvm --version
설치하자.
[root@namuwiki hhvm]make install
설치가 다 되었으면 php.ini와 같은 기능을 하는 server.ini설정을 한다.

[root@namuwiki ~]mkdir /etc/hhvm
touch /etc/hhvm/server.ini
chown -R www-data /etc/hhvm

그리고 hhvm을 서비스에 등록한다.

[root@namuwiki ~]cat > /usr/lib/systemd/system/hhvm.service <<END
[Unit]
Description=HHVM HipHop Virtual Machine (FCGI)
[Service]
ExecStartPre=-/usr/bin/mkdir -p /var/run/hhvm
ExecStartPre=-/usr/bin/chown www-data /var/run/hhvm
ExecStart=/usr/local/bin/hhvm --config /etc/hhvm/server.ini --user www-data --mode daemon -vServer.Type=fastcgi -vServer.Port=9000
[Install]
WantedBy=multi-user.target
END

HHVM 서비스를 시작, 부팅시 설정, 상태를 본다.

[root@namuwiki ~]systemctl enable hhvm
systemctl start hhvm
systemctl status hhvm

그러면 Nginx를 설치하자.
의존성 설치.
[root@namuwiki ~]yum -y install zlib-devel
Nginx를 다운받고(여기선 최신 버전인 1.9.5를 사용한다. 버전 바꾸고 싶으면 엔진엑스 홈페이지 가서 확인하라. )압축을 푼다.

[root@namuwiki ~]cd /tmp
wget http://nginx.org/download/nginx-1.9.5.tar.gz
tar -xvzf nginx-1.9.5.tar.gz

디렉터리 안으로 들어가자.
[root@namuwiki tmp]cd nginx-1.9.5/
컴파일 옵션은 다음과 같이 준다. 엔진엑스는 컴파일할때 모듈 추가를 안하면 추가가 안되니 쓸모 있을 거 같은 모듈은 미리 설치를 하자. 여기서는 ssl지원을 위한 모듈을 활성화만 한다.

[root@namuwiki nginx-1.9.5]./configure --with-http_ssl_module --user=www-data --group=www-data
make
make install

심볼릭 링크를 설정한다. 꼭 안해도 되긴 한데 실행할 때마다 /usr/local/nginx/sbin/nginx 라고 칠 잉여력만 있으면 상관없다.

[root@namuwiki ~]cd /usr/bin/
ln -s /usr/local/nginx/sbin/nginx

nginx.conf를 설정한다. 다음과 같이 설정하면 php는 돌아간다. 설정 파일은 /usr/local/nginx/conf/nginx.conf 이다.

worker_processes  1; #자신의 서버의 코어 수만큼 설정한다. 

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
worker_connections  1024;
}


http {
include       mime.types;
default_type  application/octet-stream;

#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                  '$status $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';

#access_log  logs/access.log  main;

sendfile        on;
#tcp_nopush     on;

#keepalive_timeout  0;
keepalive_timeout  65;

#gzip  on;

server {
listen       80;
server_name  localhost;

#charset koi8-r;

#access_log  logs/host.access.log  main;

location / {
root   html;
index  index.html index.htm index.php;
}

#error_page  404              /404.html;

# redirect server error pages to the static page /50x.html
#
error_page   500 502 503 504  /50x.html;
location = /50x.html {
root   html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#    proxy_pass   http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

location ~ \.php$ {
try_files $uri =404; #보안상 중요한 부분이다. 빼먹지 않도록 하자. 
root           html;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
include        fastcgi_params;
}
}

설치가 끝났다. Nginx를 실행하면서 쾌감을 맛보자 잘 동작하는지 확인한다. 아무 말이 없으면 동작이 제대로 된 것이다. Nginx를 정지하거나 reload할때는 -s stop, -s reload 옵션을 추가하라.
[root@namuwiki ~]nginx

정상 작동을 확인하려면 http://서버IP/ 에 접속하자. 물론 방화벽은 열어야 겠지???[25]
으아아아 이게 무슨 소리야
sudo apt-get install apache2 php5 mysql_server mysql_client phpmyadmin은 안 되나요

4.1.2 Ubuntu

배포판 선택할 때 가능하면 LTS 버전으로 설치하자. Long Term Support의 약자로 LTS버전은 5년 정도 지원을 해 준다. LTS가 아닌 버전은 1년 정도. 배포판 업데이트하는건 꽤나 스트레스 받는 일이므로 처음부터 장기 지원 버전을 선택하는 게 현명하다.

우분투 서버를 USB로 설치할 때 USB가 퍼스트 드라이브로 잡힌 경우 부트로더를 USB에 설치하는 불상사가 생겨 부팅이 안될수도 있다.

4.1.2.1 웹 서버워드프레스 블로그 구축 간단 튜토리얼
4.1.2.1.1 업데이트

일단 설치하자마자 서버를 최신 상태로 바꿔준다. 참고로 여기서는 sudo 쓰기 귀찮아서 설명의 용이성을 위해 sudo su - 명령을 사용해서 루트 쉘로 들어가 작업하고 있는데 권장되지는 않는 방법이다. 일반 유저로 작업할 때는 모든 명령어 앞에 sudo를 붙여주면 된다.

root@namuwiki:~# apt-get update && apt-get safe-upgrade

4.1.2.1.2 LAMP 스택 설치

초보자라면 nginx의 rewrite 설정에 질려버리게 될 것이다. 초보자가 만드는 웹 사이트에 엄청난 트래픽이 몰리지는 않을 테니 아파치 웹 서버를 사용하는 것이 편하다. 설치도 한 줄로 끝난다. 다음은 Apache 웹 서버, MySQL 서버, PHP 5.6을 한 번에 설치하는 명령어이다.

root@namuwiki:~# apt-get install lamp-server^


nginx의 설정이 아파치에 비해 많이 어렵진 않다. 참고자료가 상대적으로 적지만 부실한 정도는 아니다. 결국 선택의 문제다. 다만 .htaccess문제 때문에 아래 워드프레스 설치시에는 nginx보다 아파치가 유리한 건 사실이다.

4.1.2.1.3 워드프레스 설치
  • 웹 서버의 루트 디렉토리로 이동.

위의 방법으로 설치했다면 웹 서버의 루트 디렉토리는 /var/www/html이다. 또는 /var/www이거나. 배포판별로 다르다. 설정에서 이 기본값을 바꿀 수 있다.

root@namuwiki:~# cd /var/www/html

  • 워드프레스를 다운로드한 후 압축을 푼다. 참고로 영문버전으로 깔리는데 설치 후 수정하면 된다.

root@namuwiki:/var/www/html# wget https://wordpress.org/latest.tar.gz

root@namuwiki:/var/www/html# tar zxvf latest.tar.gz

  • (옵션) 폴더 이름을 변경한다.

변경하지 않아도 상관은 없으나 변경하지 않으면 블로그 주소가 더러워질 수 있다. wp로 변경한다.

root@namuwiki:/var/www/html# mv wordpress wp

  • 폴더의 소유주 설정

웹 서버가 파일에 제대로 접근할 수 있도록 폴더(wp)의 소유주를 웹 서버 유저로 변경한다. 옵션 -R은 하위 폴더와 파일들에도 적용한다는 의미이다. 위 방법대로 설치했다면 웹 서버 유저의 이름은 www-data이다.

root@namuwiki:/var/www/html# chown -R www-data:www-data wp

  • 인덱스 파일 수정

nano 또는 vi를 이용하거나 sftp로 접근하여 웹 서버 루트에 있는 기본 인덱스 문서(index.html)의 내용을 모두 지우고 아래의 내용을 넣는다.


아니면 설정파일에서 웹 루트 디렉토리를 /var/www/html/wp로 수정하거나, wp디렉토리의 내용을 /var/www/html 아래로 다 이동한다. 사실 위 방법보단 버츄얼호스트 기능을 이용하는 게 좋은데 자기 소유 도메인이 없으면 사용할 수 없는 방법이므로 생략한다.

4.1.2.1.4 워드프레스 설정

이제 웹 브라우저를 이용하여 서버의 주소로 접속하면 반가운 GUI가 기다리고 있을 것이다. 더 이상의 자세한 설명은 생략한다.

주소를 모른다고? 서버에서 ifconfig 치면 주소 나온다. 공유기아래에서 돌린 경우 DMZ설정을 해줘야 외부에서 접속가능하니 참고.

데스크톱 리눅스를 서버로 개조해 사용하는 사용자는 그냥 간단하게 http://localhost 라고 치면 된다.

4.2 Under Windows

  • 윈도우는 접근 장벽이 가장 낮은 운영 체제중 하나다. 따라서 누구나 쉽게 서버를 운영할 수 있다. 리눅스 콘솔만 보면 현기증이 나는 사람이면 이걸 추천한다.
  • Windows는 마소의 IIS를 사용 할 수 있다. 퍼포먼스도 상당히 좋은 편에다 GUI도 지원되므로 서버 지식은 있는데 콘솔 쓸 자신이 없으면 이걸 쓰자. 성능 자체도 좋고 콘솔을 쓸 필요가 거의 없어 관리가 쉬워 기업에서도 많이 쓴다.
  • 아무것도 모르고 따라만 하는 사람이라면 자료가 많은 리눅스를 추천한다. 이건 자료가 리눅스에 비해 적다.
  • Windows Server 계열에서는 FTP를 기본적으로 지원하지만 Windows 계열에서는 알드라이브, 파일질라를 사용해 보자
  • 블로그를 만들 것이라면 웹서버를 설치해야 한다. 요즘은 APMSETUP같은 apache, PHP, MySQL을 한꺼번에 설치해주는 프로그램도 많이 있으니 활용해보도록 하자. 그 다음에는 설치형 블로그인 텍스트큐브, 워드프레스등을 깔아줘야 하는데, 그건 자신의 상황, 서버상황에 따라 설치해주어야 한다. Windows 2000,Windows XP, Windows Vista, Windows 7 (Windows Me, Windows 98, Windows 95, Windows 3.1???)등은 보안에 취약하니 서버용 운영체제인 Windows Server 계열을 사용하도록 하자. 학생이라면 DreamSpark에서 무료로 다운가능하니 참고하자
  • 외부에서 접속이 안되는 경우가 있는데, 그건 공유기나 Windows 방화벽등에서 따로 설정을 해야한다(설마 방화벽을 다 꺼버리는 자살행위를 하는 사람은 없을꺼라 믿는다[26])
  • 학생은 위에서도 언급했듯이 Microsoft Dream Spark에서 Server 계열의 운영체제를 무료로 다운가능하니 참고하자. 학생이 아니어도 반년간 무료로 체험해볼 수 있다.포맷 후 재설치하면 사실상 무제한이다.
  • 윈도우의 파일시스템인 NTFS는 파일명의 대소문자를 구분하지 않는다. aaaa.file / Aaaa.file / aAAa.file 이 윈도우에서는 모두 같은 파일명으로 처리되지만, *nix 계열에서는 모두 다른 파일이다. 신규서버라면 신경 쓸 것 없지만, 마이그레이션 하는 경우에는 대소문자에 따른 파일명 겹침을 주의해야 한다. 복사하는 도중에 파일을 덮어쓰겠냐는 확인창이 뜨고, 무심코 네 해버리면 망한다(...). 원본 살아있으면 파일명 바꿔서 다시 복사하면 되긴 하지

4.2.1 IIS (인터넷 정보 서비스, Internet Information Service)

  • 서버를 조립하고, 컴퓨터에 OS를 설치했다면 일단 원격 데스크톱을 사용할 수 있게 하자. Windows 키+Pause Break를 누르면 시스템 정보가 뜨는데, 고급 시스템 설정으로 들어가서(XP라면 건너뛰자.) 원격 탭으로 들어가자. 이후 원격 데스크톱 프레임에서 이 컴퓨터에 대한 원격 연결 허용으로 바꾸면 된다. 집에 있는 컴퓨터가 모두 Windows 비스타나 7 이상이라면 네트워크 수준 인증도 체크하자. 보안성이 강화되지만, XP 이하에선 접속할 수 없다.
  • FTP나 웹 서버를 구축하려면 일단 인터넷 정보 서비스를 설치해야 한다. 프로그램 및 기능에 들어가서(XP는 프로그램 추가/제거) Windows 기능 켜기/끄기(XP는 Windows XP에 기능 추가)를 선택하고 인터넷 정보 서비스 찾아서 +를 누른 다음 FTP 서버나 WWW 서비스와 웹 관리 도구를 체크하자.
  • FTP 서버를 추가해보자. 사이트에서 오른쪽 클릭을 한 다음 FTP 사이트 추가를 누르면 대화상자가 뜬다. 사이트 이름은 대충 정하고, 경로는 공유하려는 디렉토리를 설정한다.
바인딩에서는 자기 네트워크의 IP 주소와 맞는 IP로 설정한다. SSL은 사용 안함으로 하자.
인증 항목은 둘 다 선택. 권한 설정은 입맛대로 하자. 모든 익명사용자-읽기로 하면 누구든 FTP를 볼 수 있다. 아래에 계정을 입력해서 계정과 비밀번호를 사람만 들어오게 할 수도 있으니 열심히 응용해보자.
이렇게 한 다음 ftp:// 아까 설정한 ip 주소로 들어가면 정상적으로 접속이 된다.
  • Windows에서 탐색기에서도 서버의 파일을 볼 수 있도록 해보자. 서버 컴퓨터에서 공유하려는 폴더를 오른쪽 클릭→공유 탭으로 가서 고급 공유를 누르자. 공유 이름과 권한은 적절하게 정하자. 특정 PC에서는 내용 변경이 가능하도록 할 수도 있다.
클라이언트에서는 네트워크 드라이브 연결을 해서 공유한 항목을 탐색기에서 볼 수 있다. 네트워크 드라이브 연결을 눌러서 \서버 컴퓨터의 이름\공유한 폴더를 입력하고 계정과 암호를 적절하게 입력하면 끝.
  • 공유기를 쓴다면, IP를 고정해야 한다.[27] ipTime 공유기를 기준으로 한다. 네트워크 관리→내부 네트워크 설정에서 수동 IP 할당 설정을 하자. 서버 컴퓨터의 IP 주소를 보고 체크하여 추가를 누르면 끝.
  • 이렇게 열심히 만들었지만 공유기 밖의 네트워크에서는 접속할 수 없다. 공유기가 있는 네트워크 내에서만 쓸 것이라면 상관 없겠지만, 그렇지 않은 경우가 있으니 일단 설정하도록 하자.
NAT→포트포워드 설정으로 가서 정의된 리스트에서 FTP를 설정, 서버 컴퓨터의 IP를 입력하고 추가하자. 이렇게 하면 외부에서 ftp://공유기의 내부 IP 주소를 입력하는 것으로 FTP 서버에 접근이 가능하다.
  • 24시간 내내 켜둘 것이라면 별 상관 없겠지만, 그렇지 않은 경우를 대비해 WOL을 설정하자. 컴퓨터는 절대로 절전 모드로 들어가서는 안 된다. 절전 모드에 들어가지 않도록 하자. 전원 설정에서 절전 모드와 최대 절전 모드까지 걸리는 시간을 모두 없음으로 설정하자.
장치 관리자에서 네트워크 어댑터을 확장하고, 어댑터를 더블클릭하자. 전원 관리에서 첫번째 항목과 두번째 항목을 체크한다. 고급 항목에서 Wake on LAN이나 WOL은 일단 다 사용으로 하고 보자.
공유기에서 보안 기능→공유기 접속 관리에서 원격 관리 포트를 사용하게 하고, 원하는 포트를 입력하자.
특수기능→WOL에서 서버 컴퓨터의 MAC 주소를 쳐서 추가하면 끝.

4.2.2 FileZilla FTP Server

#
윈도우에서 가장 많이 쓰이고 검증된 FTP 클라이언트인 Filezilla의 서버 애플리케이션. 가벼우며 설정도 쉽고 누구와는 다르게표준을 제대로 지원한다. 접속량이 많아도 상당히 잘 버텨낸다.
윈도우 환경에서 백그라운드 서비스로 작동시킬 수 있으며, 서비스로 작동되기 때문에 FileZilla Server Interface라는 원격 서버접속 앱을 제공한다. 물론 여러 서버를 관리한다던가 하는 게 아니라면 그냥 켜고 OK버튼만 누르면 된다.

4.2.3 Autoset, APMSetup 등의 프로그램

웹서버 구축과 데이터베이스 구축, PHP 문법 설치 등등을 원터치로 해결해 주는 프로그램이다. 웹서버를 설정하기 위해서 필요한 자질구레한 것들을 저 프로그램이 알아서 다 해주기 때문에 관련 지식이 전혀 없는 사람도 데이터베이스가 필요한 프로그램(ex:설치형 블로그)을 굴리는 웹서버를 만들 수 있다는 장점이 있다.

만약 UbuntuCentOS등의 리눅스를 쓰기로 마음먹었다면, 저런 프로그램 필요없고 그냥 LAMP패키지 찾아서 설치 누르면 끝이다. 리눅스는 원래가 서버에 최적화된 OS이다. 서버용으로 사용할 때의 강력함과 편의성은 타의 추종을 불허한다. 덤으로 극강의 안정성까지 갖추고 있다. APMSetup도 클릭 몇 번이면 끝난다고? 그렇게 말하면 리눅스에서는 명령어 한 줄[28]로 끝이다. 거기다 APMSetup은 홈페이지가서 다운로드하는 수고가 들어간다. 리눅스는 알아서 패키지를 인터넷에서 찾아서 다운받고 설정하고 설치까지 끝낸다. 제대로 운영하려면 설정파일을 만져야 한다지만 그건 윈도우쪽도 마찬가지. 물론 설치 끝난 이후에 들어가는 수고는 둘 다 비슷비슷하다. 오히려 익숙한 윈도우 환경에서 탐색기와 메모장 켜놓고 작업하는 게 이후 유지보수 측면에서 나을 수도 있다.

여기 있는대로 하면, 이 글을 보는 위키러만의 FTP 서버가 완성된다. 한 번 해 보는 것을 추천한다. 다른 서버 구축법은 다른 컴덕후 여러분이 추가바람.

4.3 Under OS X

  • 1. "시스템 환경설정"에 들어간다.
  • 2. "공유"를 누른다.
  • 3. "웹 공유"에 체크하고 창을 닫는다.
  • 4. 쉽쥬? 그럴싸하쥬?

맥 앱스토어에서 'OS X Server' 애플리케이션을 다운로드 받으면 아주 기본적인 지식만 있어도 클릭 몇 번으로 각종 서비스 서버를 설정할 수 있을 정도로 매우 간단하다. 일단 맥이 괜히 비싼 게 근본적으로 문제[29] 예를 들어 웹 서버 데몬을 올리는건 클릭 몇 번이면 가능한데, 여기에 도메인을 물려준다거나 하는 설정은 별도로 해야 한다(...)

물론 맥도 유닉스 계열 OS이기 덕분에 리눅스 서버처럼 터미널로 운영할 수 있다. OS X Server는 이것을 GUI로 정리한 것일 뿐이다. 세밀한 설정은 터미널로만 변경할 수 있으니 주의하자. 또한 리눅스에 익숙한 유저는 오히려 윈도우 서버보다 친밀감을(?) 느낄 수 있다.

OS X Server가 엄청 까이긴 하나 잘 쓰면 뛰어난 서버로 활약한다. 맥 미니는 개인 컴퓨터로 쓰면서 동시에 모든 서버 역할도 할 수 있다. 또한 애플 클라이언트 환경에서 유용한 기능이 돋보인다. 서버가 업데이트 캐시에 미리 다운받은 패키지를 사용해서 인터넷 연결 없이도(!) 클라이언트 업데이트가 가능하다.[30] 개인용 OS를 기반으로한 서버의 장점이라고 볼 수 있다. 그리드 컴퓨팅 기능도 있는데 이것을 사용하는 파이널 컷 프로와 컴프레서 같은 프로그램은 매우 간단하게 작업속도를 상향할 수 있다.

결론은 애플 전용 환경에서는 매우 뛰어난 서버가 될 수 있지만 그놈의 가격이 문제다. 그러니까 해킨토시가 답이다

4.4 프로그램 스택을 직접 만들기

농담 같지만, 자신이 TCP/IP 프로그래밍까지 할줄안다면, 서버 프로그램을 일단은 만들수 있다. 성능은 보장못한다.
여기에 더해서 하드웨어 지식 등이 있다면 운영체제까지 스스로 만들 수 있다.

다만 스스로의 프로그래밍 능력에 엄청난 자신감이 있는 것이 아니라면, 절대로 이런 서버를 중요한 용도로 사용하지는 말자.

어디까지나 프로그래밍 연습용 등 학습용으로만 사용하는 것을 추천한다.이걸 만들 정도의 사람한테 굳이 이런 조언은 필요없다
  1. 참고로 이런 종류의 서버는 주로 랙마운트에 탑재하여 쓴다.
  2. 사진에 보이는 것은 이라는 것으로, 한 랙 안에 여러개의 서버나 네트워크 장비 등이 들어간다. 그러니까 위 사진의 저 납작한 서버 컴퓨터가 냉장고같은 저 랙마운트에 들어가는 것. 랙마운트만 해도 왠만한 냉장고 크기 또는 그 이상이며 내부에는 서버컴퓨터가 수 대에서 수십 대까지 들어간다. 그 외에도 라우터라던가 하는게 저기 들어가있다.
  3. 이걸 악용하여 투자금을 받아 가로채는 사기수법도 있었으므로 주의 요망. 실제 인터넷의 방대한 데이터를 중앙집적으로 처리하려면 한반도만한 슈퍼컴퓨터가 필요할 것이다.
  4. 데이터센터는 돈과 기술이 많이 필요한 것이라 국내 대형 포털사이트들도 대부분 IDC라고 하는 곳을 임대하여 외주업체에게 관리를 위탁한다. 네이버 말로는 국내 인터넷서비스사업자들 중에선 최초라는듯.
  5. ODD 포트 왼쪽을 자세히 보자. 원래 서버컴퓨터는 24시간 항상 켜놓는 걸 전제로 만들기 때문에 실수로 누르지 말라고 전원스위치를 작게 만들거나 케이스 깊숙한 데 둔다. 아예 열쇠로 언락해야 작동하게 만드는 놈도 있다.
  6. 물론 GNOME 같은 GUI 환경을 추가로 설치해서 데스크탑용 OS와 같은 환경을 구현하는 것도 가능하다. GUI 환경에서 돌아가는 서버 관리 소프트웨어도 많이 나와 있다. 그러나 CUI를 많이 쓰는 이유는 이쪽이 휠씬 가볍고, 물어봤을 때 답변받기 편하고, 원격제어가 편리하기 때문이다.
  7. Mac OS X Lion부터는 서버버전과 개인용 버전의 구별이 없어질 예정이다. 서버버전의 기능들이 가정용에도 모두 들어간다, 이전 버전에서도 '웹공유'기능으로 웹서버 기능은 기본적으로 들어있다. 하드웨어에 종속적이면서 서버도 인기가 별로라 OS를 분리해 개발 판매할 이유가 없다고 판단했을 것이다.
  8. Nginx는 이것을 every requests의 every에 대문자까지 잔뜩 써가면서 무지 까고 있다.
  9. 해결책은 그냥 간단하게 설정만 바꿔주면 된다. 토렌트 서버 자체는 DHT 갱신을 위한 트래픽만을 사용하고 그 위에서 돌아가는 토렌트 자료들은 피어 연결 수, 업데이트 주기, 속도 제한 등을 걸면 아무 문제 없다. 오히려 겨우 이정도로 네트워크가 죽는다면 그건 애초에 네트워크 환경이 좋지 않은 거다.
  10. 이왕 서버 돌리는거 저전력 고성능으로 돌리면 관리자 입장에서도 전기세 많이 안나와서 좋고, 서버에 과부하 안걸려서 좋다.
  11. 하지만 CPU가 항상 풀로드 되는 것도 아니고 평소 Idle 시에는 전력 소모가 매우 적으므로 고성능을 원하는 경우 전력소모 효율이 좋아진 하스웰, 스카이레이크 이상의 CPU를 사용하면 된다.
  12. 하드의 대역폭이 떨어지는 단점이 있다. 하지만 네트워크 대역이 대강 10MB/s 라는걸 생각해보면 NAS로 쓰기엔 나쁘지 않다.
  13. 애초에 이쪽은 모바일을 노리고 나온 것이니... 그 덕에 Floating-Point 연산은 물어보면 그냥 슬퍼진다. ARM으로 웹 서버나 그런걸 돌릴 생각이라면 접어 두자.
  14. Wake On Lan. 인터넷망을 이용한 원격 부팅이다.
  15. Home Premium, Home Basic 등은 원격 데스크톱 클라이언트만 가지고 있다. 바꿔 말하면 서버에 접속은 가능한데 이걸 서버로 쓰면 다른 컴퓨터에서 내 컴퓨터로 접속이 불가능하다.
  16. 로컬 보안 정책에서 비밀번호 없이 로그온 할 수 있도록 설정할 수 있지만 하지 마라. 무조건 털린다.
  17. Brute Force Attack에 매우 취약하며 좀 해킹좀 해봤다 하는 크래커들은 사전 대입 공격을 사용하는데 이 사전에 저것들은 무조건 들어간다고 보면 된다(...) 바꿔 말하면 비밀번호를 저걸로 걸어두고 서버 운영하면 침입 대상 1순위(...)
  18. 요즘 나오는 엑시노스,테그라,애플ap에 비하면 반의 반의 반도 (오타가 아니다)안된다.
  19. 사실 CentOS도 PC처럼 쓸 수 있다. 그렇게 쓰는 사람이 많지 않아서 그렇지... 어디까지나 사람 수 문제라서 어디서 도움 받기 쉬운가? 이 문제이다.
  20. 일부 귀찮다고 다 설치한 후에 root 패스워드를 바꾸고 root 계정을 메인 계정으로 사용하는 경우가 있으나 보안에 매우 좋지 않으므로 절대로 추천하지 않는다. 리눅스 좀 다뤄본 사람들이라면 절대로 root를 메인 계정으로 사용하지 않는다. 아니 아예 root 계정 자체를 사용하지 않는다.
  21. 설치한 후에 rdate, ntpdate 등을 이용해 시간을 ntp서버와 자동으로 동기화 하도록 구성하는 게 좋다. 컴퓨터는 시간 동기화를 하지 않으면 시간이 꽤 빨리, 큰 폭으로 틀어진다.
  22. CLI가 무서운 초심자에게 GUI에서 작업하는걸 간단하게 첨언하자면 기본은 CLI 부팅를 사용하지만 GUI환경을 따로 설치해서 필요할 때 마다 GUI로 전환해서 사용해도 된다. GUI에서 패키지 설치는 터미널로 설치하고 설정변경이나 파일관리는 텍스트 편집기와 파일관리자를 관리자 권한으로 실행하면 된다. 리눅스는 윈도우와 다르게 관리자 권한을 중간에 얻을 수 없기 때문에 어플을 관리자 권한으로 실행 시켜야 한다. 간단하게 터미널에서 'sudo 어플이름' 쓰면 된다. 우분투 파일 관리자인 노틸러스 라면 'sudo nautilus'이런 식으로... 어자피 터미널과 같은 CLI를 사용하는 것에는 변함 없지만 vim같은 텍스트 기반 에디터보다 그레픽 기반 에디터를 대신 사용할 수 있으니 좀 더 보기 좋다. Ctrl C,V 라던가.. 퍼미션도 우분투라면 관리자 권한의 노틸러스로 폴더 속성을 바꾸면 그만이다. 필요하다면 GUI로 원격 접속하는 방법도 있다.
  23. 정확히는 vim-tiny 라는 에디터가 우분투에 내장되어있다. vi는 사장된 에디터이며 vim과는 완전히 다르니 참고. (한마디로 쓸 게 아예 못된다.)
  24. SSH로 접속할 때 "-X" 옵션을 붙여주면 된다.
  25. 방화벽 설정은 누가 올렸었는데 보안상 이유로 지워졌다. 80번 포트를 열어주도록 하자. 인터넷 검색하면 금방 방법을 찾을 수 있다.
  26. 윈도우 방화벽 자체는 그닥 좋진 못하지만 없는 것 보단 낫다. 네트워크 상단에 물리 방화벽을 달아 두거나 서드파티 방화벽을 쓸 생각이 아니라면 방화벽을 죄다 내려버리는 자살행위는 하지 말자. 방화벽의 기본은 전부 막고 사용하는 서비스만 열어두는 것이다.
  27. 대부분의 공유기가 NAT + DHCP 환경이다. 서버의 내부 IP가 변경된다면 포트포워딩 설정을 다시 해야 한다. 서버의 경우 기억하기 쉽도록 192.168.0.100이나 192.168.0.200등으로 만들어 두자.
  28. 우분투의 경우 apt-get -y install lamp-server^
  29. 다만, 서버를 개인 서버나 소규모 저사양으로 돌릴만한 수준이라면 굳이 비싼 최신형 제품이 아니어도 된다. 중고로 매킨토시를 구입하거나 저렴한 맥미니를 구매하는것도 좋다. 저가 해킨토시도 좋다.
  30. 모든 애플 기기에 적용된다. 즉, 아이폰도 사용할 수 있다! 느려터진 업데이트 다운로드를 서버가 미리 해주면 속이 다 시원하다