나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2024-11-13 12:31:32

서버


파일:나무위키+유도.png  
은(는) 여기로 연결됩니다.
외식 용어에 대한 내용은 웨이터 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
참고하십시오.
🖥️ 컴퓨터의 종류
{{{#!wiki style="margin:0 -10px -5px; min-height: calc(1.5em + 5px);"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -6px -1px -11px; word-break: keep-all"
서버 - 클라이언트
멀티유저 컴퓨터
슈퍼컴퓨터 · 미니컴퓨터 · 마이크로컴퓨터
형태 (타워형 · 랙마운트 · 블레이드 서버)
칩셋 및 OS 유형 (메인프레임 · x86·유닉스 서버)
개인 컴퓨터 워크스테이션
데스크탑 일체형 PC · HTPC · 게이밍 PC · 미니 PC · 스틱 PC · 넷탑
랩탑 포터블 컴퓨터 · 울트라북 · 게이밍 노트북 · 2in1 노트북 · 넷북
헨드헬드
모바일
1
스마트폰 · 태블릿 컴퓨터(태블릿 PC) · 핸드헬드 PC(UMPC · 핸드헬드 게이밍 PC) · PDA · 팜톱 컴퓨터 · 전자수첩 · 전자책 단말기
웨어러블 HMD · 스마트 워치 · 스마트 밴드 · 스마트 링
콘솔 게임기 거치형 콘솔 게임기 · 휴대용 콘솔 게임기 · 아케이드 게임기
이동통신기기(모바일)는 넓은 의미에서 랩탑, 웨어러블도 포함하지만 깔끔한 분류를 위해 손에 들어오는 것(핸드헬드)로만 한정함.
}}}}}}}}} ||


1. 개요2. 서버 하드웨어(인프라)
2.1. CPU 칩셋과 운영체제2.2. 형태2.3. 성능 수준2.4. 가정용 컴퓨터 대신 서버 전용 하드웨어를 쓰는 이유
3. 서비스 종류
3.1. FTP 서버3.2. 웹 서버
3.2.1. 동적 웹을 위한 준비
3.3. 데이터베이스 서버3.4. 기타
4. 직접 서버 구축하기
4.1. 가정용 하드웨어4.2. 고성능 서버 하드웨어4.3. Under Linux
4.3.1. 간이 웹 서버 구축 튜토리얼4.3.2. 우분투
4.3.2.1. 웹 서버워드프레스 블로그 구축 간단 튜토리얼
4.3.2.1.1. 업데이트4.3.2.1.2. LAMP 스택 설치4.3.2.1.3. 워드프레스 설치4.3.2.1.4. 워드프레스 설정
4.4. Under Windows
4.4.1. IIS (인터넷 정보 서비스, Internet Information Service)4.4.2. FileZilla FTP Server4.4.3. 기타 프로그램
4.5. Under macOS4.6. 서버 프로그램을 직접 만들기4.7. 운영체제의 선택
5. 서버 구축 없이 서버 만들기6. 서버의 위치와 법률

[clearfix]

1. 개요

파일:google_infrastructure.jpg
구글 데이터 센터의 서버[1]

서버(server)는 클라이언트를 거쳐 네트워크를 통해 서비스하는 컴퓨터를 의미한다. 이름 그대로 번역해서 '제공자'라고 하면 와닿을 것이다. 인터넷 하면 중앙에서 관리해주는 메인프레임으로 오해받기도 하나, 개인용 단말기 근처에서의 연결이 그렇고[2], 실제 인터넷은 수많은 서버, 라우터 등이 거미줄처럼 얽혀서 형성된 것이다. 홈페이지를 운영하려면 직간접적으로 서버가 필요하며, 온라인 게임이나 웹게임들도 서버를 통해서 서비스를 하고 있다. 보통 어느 정도 규모가 있는 기관에서는 데이터베이스, 웹 어플리케이션 서버 등에 방화벽, 라우터 등이 붙어 네트워크를 형성한다.
파일:external/upload.wikimedia.org/Internet_map_1024.jpg
마치 우주처럼 보이는 인터넷 지도. 이 지도조차도 주요 간선망 중에서도 추리고 추려 최대한 간단하게 그린 것이며 그나마도 특정 지역의 망 일부만 따로 떼어 그린 것이다.[3] 출처

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

서비스 규모가 커질수록 서버의 규모도 커지기 때문에 구글이나 페이스북 같은 세계구급 서비스의 경우 자체적으로 데이터 센터를 운영하는 경우가 있다. 국내에서도 2013년 6월 네이버에서 데이터 센터를 완공하여 운영하기 시작했는데 구글데이터센터나 네이버 데이터 센터 그리고 페이스북 데이터 센터를 보고있자면 이게 서버인지 우주기지인지 구분이 안 될 정도로 그 규모가 엄청난 것을 알 수 있다. 그러나 데이터센터는 상당한 돈과 기술을 필요로 하기에, 이를 직접 운영하는 경우는 생각 외로 거의 없다. 대부분의 경우는 임대를 하고, 외주업체에게 관리를 위탁한다. 네이버 역시도 데이터 센터를 임대하여 서비스를 제공하다가, 2013년에 국내 컨텐츠 업체 중 최초로 자체 데이터 센터, 데이터센터 각을 건립하였다.

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

VPS 호스팅 업체에서는 가상서버라는 것을 임대해준다. 물리적 서버를 분할하여 관리자 권한을 가진 서버를 가질 수 있다. 가상서버 한 개를 임대하면 웹서버를 포트를 정하여 여러 개 운영할수 있다.[4] 이론적으로 사용 가능한 포트 번호는 0~65535 사이이나, 이 중 상당수의 포트는 이미 예약되어 있다. 1024 이하의 포트는 정해진 프로토콜 이외에는 함부로 사용하지 않는 것이 좋다. 그리고 웹사이트를 여러 개 운영하는 것이라면 굳이 포트를 여러 개 이용할 필요없이 웹서버 프로그램의 Virtual Host 기능을 써서 웹서버 하나에 디렉토리별로 운영할 웹사이트를 따로따로 분리하면 된다. 웹호스팅이 이런 방식으로 돌아간다.

일반PC와 달리 소비전력이 크고 폐열과 온실가스를 엄청 내뿜는다.

2. 서버 하드웨어(인프라)

서버 인프라라고도 한다. 서버 규모에 따라 컴퓨터의 수준도 달라지는데, 이론적으로 스마트폰이나 가정용 컴퓨터, NAS, USB 포트 달린 공유기, 개발보드 등을 쓸 수도 있다.

2.1. CPU 칩셋과 운영체제

보통 아직도 남아있는 메인프레임 계열, 인텔과 암드에서 생산한 CPU를 사용하고 맥이나 윈도우를 운영체제로 사용하는 x86 계열, 자체 개발 CPU와 유닉스/리눅스 기반 OS를 사용하는 계열로 크게 구분한다. 사실 이 구분법에는 오류가 많지만 관용적으로 그냥 쓰인다.

2.2. 형태

파일:HPML350TOWERACK.jpg

2.3. 성능 수준

단, 이런 구분에 엄밀한 정의는 없으므로 일반적인 구분을 사용한다.

2.4. 가정용 컴퓨터 대신 서버 전용 하드웨어를 쓰는 이유

개인 블로그나, 위키를 돌리는 정도라면 다 합쳐서 손바닥 크기도 안 되는 개발보드로도 쾌적한 사용이 가능하다. 개인이 운영하는 웹사이트/웹게임 정도라면 가정이나 회사에서 흔히 찾아볼 수 있는 낡은 사무용 컴퓨터로도 충분하다. 또 하드디스크의 가격하락과 유무선공유기의 보급덕에 집에서 NAS나 애플의 맥 미니를 이용해 개인용 서버를 운영하는 경우가 늘어나고 있다. NAS에는 주로 시놀로지 DSM, openmediavault, free4nas, CentOS와 같은 Linux 계열 운영체제가 탑재되는 경우가 보통이며 애플의 맥 미니에는 옵션으로 macOS Server가 들어갔다.[7] 과거 애플은 서버컴퓨터인 Xserve도 내놓았지만 단종되었다. 맥 사이에서 써야 빛을 내는데 애초에 그런 환경이 당시 드물었고, 가성비까지 별로라 단종되었다. 현재 맥 프로맥 미니로 대체돼있으며, 랙마운트 어댑터도 구매할 수 있다.

하지만 접속자 수가 늘어나고 접속자들의 작업량이 많아지는데도 원활한 접속을 24시간 안정적으로 제공하려면 가정용 컴퓨터 정도로는 부족해지기 시작한다. 이럴 때에는 서버 전용 하드웨어를 사용한다.
파일:HP ProLiant ML110 Gen9.png
HP ProLiant ML110 Gen9
일반 가정용 컴퓨터와 비슷한 모양을 하고 있는 서버 컴퓨터이다.

가정용 컴퓨터와의 차이 중 하나는 전원 스위치가 작다는 것이다. 사진의 ODD 슬롯 오른쪽을 자세히 보면 초록색으로 빛나는 것이 전원 스위치이다. 서버 컴퓨터는 대체로 24시간 항상 켜놓는 걸 전제로 만들기 때문에 실수로 누르지 말라고 전원 스위치를 작게 만들거나 케이스 깊숙한 데에 위치한다. 전원 버튼을 본체의 측면이나 후면에 위치하기도 하고, 볼펜이나 클립, 핀(압정 등 날카롭고 짤막한 핀이 아니라 오히려 최신 휴대폰의 유심 트레이를 뽑는 핀처럼 생겼다.) 등으로 누르게끔 만든 것도 있고 아예 열쇠로 잠긴 자물쇠를 풀어야 누를 수 있게 만드는 것도 있다. 전원 버튼을 아예 없애 버리고 지문이나 스마트키 등으로 서버를 켜는 방법까지 나왔다.

안정성을 높이기 위해 좀 더 비싼 고급 부품을 쓰고 하드디스크와 전원장치[8]는 2개 이상씩을 달아 서버를 끄지 않는 상태에서도 교체가 가능한 값 비싼 컴퓨터를 사용한다. 가정용 컴퓨터는 나만 필요할 때 쓰고 끄면 되지만 서버의 경우는 다른 사람들도 접속하여 사용하므로 특별한 일이 없다면 24시간 내내 풀가동 된다. 보통 인터넷 서비스에 사용되는 서버는 랙마운트에 수납되어 데이터 센터에서 관리한다.

가정, 회사, PC방 등에서 쉽게 찾아볼 수 있는 컴퓨터는 말 그대로 일반적인 성능을 가진 컴퓨터라고 본다면 워크스테이션은 서버와 일반적인 컴퓨터 사이라고 보고, 서버는 극한의 성능과 안정성을 가진 전용부품들을 쓰고 일반 컴퓨터에 서버부품들을 써서 극한의 성능과 안정성을 통해 작업이 가능한 전문가용 컴퓨터다.[9]

컴퓨터의 성능 외에, 서버를 운영하는 데는 가정용 회선으로는 부족할 수도 있다. 보통 분산 서비스 거부 공격 테러를 한다고 하면 타겟이 되는것이 바로 이 서버. 접속량을 지나치게 늘리면 서버가 감당하지 못하다 뻗어버림으로써 사이트가 마비된다.

CPU나 메인보드 같은 것도 엄연히 서버용이 따로 존재하고 가격 또한 비싸다. CPU는 인텔의 제온, AMD의 EPYC 등이며, RAM 역시 일반적인 DDR SDRAM이 아닌 레지스터드 ECC RAM을 쓴다. 서버 메인보드 역시 안정성을 최우선으로 하기 때문에 이에 악영향을 주는 오버클럭은 하지 않고 중대형 서버 정도 되면 E-ATX 또는 SSI 규격의 사이즈이다. 중대형 서버용 메인보드 기판의 구성을 보면
이 정도를 메인보드 하나에 집적해야 하니 자연스레 크기가 커진다. 파워 서플라이 역시 기본이 1000~1400W 정도를 먹고 데이터 센터급이라면 UPS비상발전기[10]를 설치할 때도 있다. 하드 디스크도 용량과 안정성을 감안해서 증설해야 하고 다수의 하드 디스크 증설 시 RAID 카드나 HBA는 필수다. 애플리케이션이나 파일 시스템의 종류에 따라서 도리어 하드웨어 RAID가 방해가 될 수도 있으므로 이러한 경우에는 RAID 기능이 없는 단순한 스토리지 확장용 HBA를 설치하기도 한다. 특히 ZFS를 쓰고 싶다면 하드웨어 RAID 컨트롤러를 쓰는 것 자체가 어불성설이다. RAID 컨트롤러 자체가 고장나는 경우도 드물게 존재하고, CPU 파워가 증가하면서 소프트웨어 RAID의 성능 페널티도 줄어들었기 때문에 굳이 내장 RAID가 있는 서버 보드를 쓰지 않는 경우도 많다. 서버에도 NVMe SSD가 보급되면서 RAID 컨트롤러나 HBA를 거치지 않고 CPU의 PCIe 레인과 직결이 가능해졌다.

이러한 하드웨어를 서버 하드웨어라고 부른다. 서버 하드웨어는 주로 'IA(Intel Architecture) 서버'와 '엔터프라이즈 서버' 두 가지가 있다. 양 쪽 서버 모두 메인보드, CPU, 메모리, 디스크, NIC(Network Interface Card: 네트워크 인터페이스 카드), PSU(Power Supply Unit: 파워 서플라이 유닛)와 같은 주요 부속의 조합으로 구성된다. 하드웨어 측에서 서버의 종류를 따져 보면 랙 마운트형 서버, 타워형 서버 형태도 있고 아예 가상서버처럼 물리적 형태가 없는 경우도 있다. 서버의 종류는 날이 갈수록 다양화되어, 각 차이와 특성을 정확히 이해하기란 쉬운 일이 아니다.

여담으로 서버 하드웨어는 데스크톱 PC에 비해 바이오스 POST 과정이 느리고[11] 바이오스 설정도 매우 복잡하다. 이는 가장 안정적인 상태를 유지해야 하는 서버의 특성상 어쩔 수 없는 부분이다. 데스크톱 PC에는 없는 IPMI(원격 관리 기능)도 가지고 있다. 서버 본체와는 별개의 임베디드 시스템으로 전원을 제어하거나 화면을 볼 수 있는 기능이다.

서버 하드웨어 관점에서 서버의 종류는 많다. 왜냐하면 설치 장소나 용도가 다양하기 때문이다. 업체마다 다양한 모델의 서버를 판매하고 있다. 공통점은 가격이 상당히 비싸며, 비싼 제품은 무려 4~5천만원대에 형성되어 있는 편이다.

서버의 수명은 절대적으로 4-5년이며 4-5년이 되는 시점부터는 성능과 에너지 효율이 떨어진다.근거자료

3. 서비스 종류

여기서 말하는 서비스는 클라이언트가 요청과 응답을 하는 동안 서버단에서 어떤 방식으로 수행되는지 알 필요가 없도록 만든 컴퓨터 자원을 말한다. 클라이언트단에서는 서비스로부터 받는 i.e 프로토콜 포맷만 신경 써 주면 된다.

3.1. FTP 서버

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

만약 제어 콘솔(PC)도 리눅스라면 sshfs 패키지를 설치해서 서버를 원격 마운트할 수 있다. 참고로 sshfs는 samba와 달리 라우터를 자유롭게 넘어다닌다. 지구 반대편에서도 서버를 원격 마운트할 수 있다. 윈도우에서도 FTP서버를 저장장치로 마운트 해주는 프로그램을 설치할 수 있지만 호환성 문제도 있고 안정성&속도가 좀 떨어진다.

3.2. 웹 서버

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

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

파일:상세 내용 아이콘.svg   자세한 내용은 웹 서버 문서
번 문단을
부분을
참고하십시오.

3.2.1. 동적 웹을 위한 준비

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

PHP 외엔 파이썬, 루비, JSP(Java), Node.js(JavaScript), Perl 등의 언어가 사용된다. 사실 cgi게이트웨이만 설정하면 현존하는 모든 언어를 다 쓸 수 있다. 하지만 PHP는 웹을 위해 만들어진 특수 목적 언어이기 때문에 웹 쪽에서 점유율이 가장 높다. 그러나 엄청난 접속자수를 감당하는 서버를 만들려면 Erlang, Go, Stackless Python, PyPy등 병렬화를 잘 지원하는 언어를 사용하는 게 유리하다.
나무위키의 the seed 엔진은 Node.js를 기반으로 돌아가고 있다.

3.3. 데이터베이스 서버

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

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

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

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

3.4. 기타

토렌트 서버를 만들고 싶다면 "transmission-daemon" 또는 "uTorrent for Linux"를 설치한다. 그러나 굳이 토렌트전용 서버 클라이언트를 설치하기보다는 개인용 클라이언트로도 충분히 가능하다. 토렌트는 P2P를 사용하기 때문에 토렌트 클라이언트 자체가 서버역할을 할 수 있도록 설계되었기 때문이다. 다만 안정적인 운영을 위해서라면 서버 운영체제를 설치하고 운영하는 것이 낫다. 근데 토렌트 서버는 네트워크 대역폭을 엄청 먹으므로 민폐가 될 수 있다.[13] 원룸 같은 다세대주택에서 돌리면 인터넷이 먹통이 돼서 이웃 주민과 집주인에게 비난받기 쉽고, 직장이나 부설 연구소 등 공적인 장소에서도 쓰지 않는 게 좋다.

메일 서버는 여기를 인용하여 구성하면 된다. 다만, 이를 위해서는 사실상 유료 도메인 구매가 반드시 필요하다. ".tk"나 "내도메인.한국" 등으로 대표되는 무료 도메인로는 안 되는 경우가 많기 때문이다.

3.4.1. 게임 서버

파일:상세 내용 아이콘.svg   자세한 내용은 게임 서버 문서
번 문단을
부분을
참고하십시오.

4. 직접 서버 구축하기

4.1. 가정용 하드웨어

일반인이 개인 취미 정도로 서버를 구축하는 경우 전문적인 서버, 워크스테이션용 하드웨어 없이도 구축 가능하며 사실 NAS정도로도 거의 대부분의 작업이 가능하다, 물론 한계도 크다. 일반인용 고성능 노트북 정도로는 400명 이상의 동시접속자를 견딜 수 없고 네트워크 대역폭이 가정용 회선이 대부분 100Mbps-1Gbps 사이인걸 감안하면 속도도 지나치게 느리다. 따라서 고성능이 필요하면 전문적인 회선을 갖추고 전문 서버를 사들일 필요가 있다.
서버용 컴퓨터에는 암호를 걸어둬야 원격 데스크톱 연결을 이용할 수 있다.[15] 최대한 자신만 알 수 있는 암호를 걸자. 서버 암호를 기억도 못 하게 엄청 복잡한 랜덤 패스워드로 만들고 그 패스워드를 서버 본체에 스티커를 붙여 써 놓는 방법이 있다. 어차피 해커가 서버에 물리적으로 접근 가능해지면 암호고 뭐고 다 소용없어지니까 서버에다가 접근 암호를 써붙여놓는 것이다. 기업용 서버는 SSH 공개키 인증 등 패스워드가 아닌 다른 방법으로 접속하게 돼 있다. 또는 금고 안에 암호표를 보관하고 있거나.

또, 하드웨어의 성능과는 별개로 회선이 문제가 있으면 제 기능을 할 수 없다. 작은 규모라면 가정용 회선으로도 충분하지만 회선이 좋지 않으면 서버가 아무리 좋아도 문제가 생긴다. 그리고 가정용의 경우 IP포트가 막혀 있는 경우가 대부분이라 IP 포트를 체크 및 후 조치는 필수이다. 기령 80, 8080 IP포트가 막혀있는 경우라면 웹서버를 사용 할 수 없다. 통신사들 중에는 가정용으로 할당한 유동 IP 주소 대역에는 아예 종류를 불문하고 서버 용도로 사용하지 못하게 포트를 막아놓기도 한다.

가정용 데스크탑 PC나 노트북 PC의 경우 하드웨어 부품이 서버 용도가 아니라서 전문 서버에 비해 수명이 더 짧아진다.

4.2. 고성능 서버 하드웨어

고성능 서버는 전용 부품 가격이 날아다니는지라 가격이 장난이 아니며 따라서 일반 기업들도 클라우드 서비스를 이용하거나 중고 서버에다가 굴리는 경우가 대다수다. 자신이 확고한 목적이 있고 직접 유지보수가 가능한 상황이 아니라면 고성능 서버는 완제품을 직접 구매하거나 베어본 형태로 나오는 반조립 제품을 고민하는것도 방법이다.

4.3. Under Linux

아예 리눅스가 처음이라면 VirtualBox와 같은 OS 에뮬레이터로 리눅스 데스크톱을 깔아서 연습 먼저 하자. 그 다음에는 서버로 쓰기 위한 배포판을 결정해야 한다.

서버는 안정성을 추구하므로 RHEL 계열이 압도적인 우세다. 완성도 높은 RHEL을 돈 안 내고 사용할 수 있는 클론인 CentOS가 가정용 서버로서 가장 유리하다. 다음, 네이버도 CentOS를 쓰고 있다. 허나 요새는 'CentOS의 스트림 전환 논란'과 'RHEL 무료 정책 확대' 등으로 인해 오라클 리눅스 등으로 갈아타거나 아예 RHEL로 회귀하는 기업체/단체가 늘고 있는 상황이다.

하지만 일반 PC처럼 쓰면서 서버도 겸해서 써보고 싶다면 우분투 서버가 낫다. CentOS도 PC처럼 쓸 수 있지만, 그렇게 쓰는 사람이 많지 않아서 문제가 생겼을 때 도움 받기 어렵다. GUI도 올리고 영화도 보고 음악도 듣고. 원래 서버 용도로 배포되는 센트OS와 다르게 우분투는 데스크톱용과 서버용으로 나오는데 서버용을 다운받아 설치해야 한다. 데스크톱용으로 설치해도 서버로 못 쓰는 건 아니지만 불필요한 데스크톱 환경을 설치하기 때문에 자원낭비가 된다.

자신이 리눅스에 자신이 있다면 순수 CLI 기반의 슬랙웨어나, openSUSE 등의 배포판도 좋다. 데비안 계열 리눅스 배포판(Ubuntu, Mint 등)이 리눅스 배포판 중에서 가장 많이 쓰이는 배포판#이기도 하고 이 격차는 데스크탑을 중심으로 점점 더 커지고 있다.

설치 중에 계정을 생성하라고 물어볼텐데 로컬 계정이므로 자기가 쓰고 싶은 계정 이름과 패스워드를 입력한다. 어디 클라우드에 동기화하기 위한 목적이 아니니까 맘대로 쓰자. root로 로그인하는 걸 엄격히 금지하는 추세이기 때문에 이 과정은 필수이다.[19] 계정 이름과 패스워드 둘 다 알아야 서버가 뚫리는 셈이므로 보안성은 상당히 향상됐다.

리눅스 좀 다뤄본 사람들이라면 root 계정 자체를 사용하지 않는다. 루트 작업이 필요할 때는 su보단 sudo로 작업하는 것이 일반적. 불가피하게 쓰더라도 절대 메인 계정으로 사용하지 않는다. 이럴 때는 SSH로 root 접근을 금지시키고 다른 계정으로 접속한 뒤 su root를 쳐서 쓴다.

그리고 현재 지역의 시간대를 선택하고(귀찮다고 시간대를 대충 잡으면 안 된다. 서버 시계는 GMT에 동기화하기 때문에 엉뚱한 시간대를 입력하면 시계가 계속 틀려 있게 된다.)[20] 나머지는 기본 설정으로 둬도 된다.

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

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

4.3.1. 간이 웹 서버 구축 튜토리얼

2019년의 시점에서는 철 지난 방법이다. NGINX가 자체 저장소를 운영하고 있고, 기본 저장소에서도 설치할 수 있는 리눅스 배포판이 많아졌기 때문이다. HHVM도 PHP 버전이 7.x로 올라가면서 속도가 상당히 빨라졌기 때문에 설치할 필요성이 적어졌다.

NGINX-HHVM-MariaDB 설치를 전제로 한다. nginx및 HHVM이 RPM을 제공하지 않는 관계로 컴파일 설치를 해야 한다. GitHub 등지에 이것에 관한 자동 설치 스크립트가 있으니 찾아 보아도 된다.

먼저 작업용 유저를 추가한다. 로그인 할 수 없는 작업용 유저이다.
[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
지금부터 시간이 오래 걸리는 작업이다. 먼저 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/에 접속하자. 물론 방화벽은 열어야한다[24]

4.3.2. 우분투

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

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

우분투는 자체 서버OS인 Ubuntu Server가 있다.[25] 리눅스를 잘다룰수 있다면 추천한다.
4.3.2.1. 웹 서버워드프레스 블로그 구축 간단 튜토리얼
4.3.2.1.1. 업데이트
일단 설치하자마자 서버를 최신 상태로 바꿔준다. 참고로 여기서는 설명의 용이성을 위해 sudo su - 명령을 사용해서 루트 쉘로 들어가 작업하고 있는데 권장되지는 않는 방법이다. 일반 유저로 작업할 때는 모든 명령어 앞에 sudo를 붙여주면 된다.
root@namuwiki:~# apt-get update && apt-get safe-upgrade

4.3.2.1.2. LAMP 스택 설치
초보자라면 nginx의 rewrite 설정에 질려버리게 될 것이다. 초보자가 만드는 웹 사이트에 엄청난 트래픽이 몰리지는 않을 테니 아파치 웹 서버를 사용하는 것이 편하다. 설치도 한 줄로 끝난다. 다음은 Apache 웹 서버, MySQL 서버, PHP 5.6을 한 번에 설치하는 명령어이다.
root@namuwiki:~# apt-get install lamp-server^

nginx의 설정이 아파치에 비해 많이 어렵진 않다. 관련 자료가 상대적으로 적지만 부실한 정도는 아니다. 결국 선택의 문제다. 다만 .htaccess문제 때문에 아래 워드프레스 설치시에는 nginx보다 아파치가 유리한 건 사실이다.
4.3.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)의 내용을 모두 지우고 아래의 내용을 넣는다.
<meta http-equiv="refresh" content="0;url=/wp" />


아니면 설정파일에서 웹 루트 디렉토리를 /var/www/html/wp로 수정하거나, wp디렉토리의 내용을 /var/www/html 아래로 다 이동한다. 사실 위 방법보단 버츄얼호스트 기능을 이용하는 게 좋은데 자기 소유 도메인이 없으면 사용할 수 없는 방법이므로 생략한다.
4.3.2.1.4. 워드프레스 설정
이제 웹 브라우저를 이용하여 서버의 주소로 접속하면 GUI가 나올 것이다.

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

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

4.4. Under Windows

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

4.4.2. FileZilla FTP Server

#

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

4.4.3. 기타 프로그램

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

2020년 이후에는 두 프로그램 모두 지원이 중단되었기 때문에 사용을 권장하지 않는다. 보안 취약점에 노출되어 악성코드에 감염되거나 개인정보가 유출될 수 있다. 특히 APMSetup은 과거 공식 홈페이지 도메인을 랜섬웨어 개발자가 매입해 버렸기 때문에 단순 설치만으로도 랜섬웨어 감염 위험이 있다. #

4.5. Under macOS

기존에 애플이 판매하던 서버 제품으로는 Mac Pro Server, Mac mini Server 제품들과 1U 랙마운트 수납형 서버인 Xserve가 있었으나 2012년을 기점으로 전부 단종되었으며 서버처럼 쓰라고 내놓는 제품은 2019년형 Mac Pro 랙마운트(5U) 제품 뿐이나 기업이나 일반인이나 대부분 Mac Mini 를 서버처럼 쓰는 경우가 대다수다.[31] Xserve는 중고품을 이베이 등지에서 원래 가격의 1% 이하로[32] 업어올 수도 있으며 스펙도 아직 꽤나 좋은 편이나, 1U 크기의 특성상 엄청나게 시끄러워서 개인의 경우 지하실이 딸린 단독주택이 없으면 시도하지 않는 것이 정신건강에 이롭다.

해킨토시는 아직 문제가 많은 편이다.

OS X Server가 엄청 까이긴 하나 잘 쓰면 뛰어난 서버로 활약한다. 애플 전용 환경에서는 매우 뛰어난 서버가 될 수 있다.

맥 앱스토어에서 'macOS Server' 애플리케이션을 다운로드 받으면 아주 기본적인 지식만 있어도 클릭 몇 번으로 각종 서비스 서버를 설정할 수 있을 정도로 매우 간단하다. 웹 서버 데몬을 올리는건 클릭 몇 번이면 가능하다. 다만 여기에 도메인을 물려준다거나 하는 설정은 별도로 해야 한다.

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

또한 애플 클라이언트 환경에서 유용한 기능이 돋보인다. 서버가 업데이트 캐시에 미리 다운받은 패키지를 사용해서 인터넷 연결 없이도(!) 클라이언트 업데이트가 가능하다.[33] 개인용 OS를 기반으로한 서버의 장점이다. 그리드 컴퓨팅 기능도 있는데 이것을 사용하는 Final Cut Pro와 컴프레서 같은 프로그램은 간단하게 작업속도를 향상시킬 수 있다.

그러나 macOS Server 애플리케이션이 업데이트를 거듭할 때마다 기능이 줄어들고 있어 사용자들의 반발이 이만저만이 아니다. 맥 앱스토어의 별점은 폭락한 지 오래고 기존 사용자들도 리눅스 등으로 이주하는 상황. 설상가상으로 기능이 아예 빠지는 것이기 때문에 터미널로도 접근할 수 없다. 전부 애플 제품 전용 기능들이었기 때문.

4.6. 서버 프로그램을 직접 만들기

만들려는 서버가 웹 서버라면 웹용 서버 라이브러리를 가져다 쓰면 된다. 고부하를 견딜 수는 없지만 보통 이들 서버 소프트웨어는 클라우드 환경에서 로드 밸런서의 지원을 상정하기 때문에 별 문제가 되지 않는다.

그러나 클라우드 서비스에서 제공하는 부하 분산 및 보안 지원을 받지 않고 직접 TCP/IP의 깊숙한 곳까지 건드리려 한다면 그때는 이야기가 확 달라진다. 네트워크 전문 지식을 가진 고급 프로그래머가 필요해지는데 전 세계를 다 뒤져도 이만큼의 네트워크 프로그래밍이 가능한 사람은 흔치 않다.

네트워크같은 비동기 병렬처리를 구현할 때 C/C++은 생산성이 크게 떨어진다.[34] 과거에는 언어의 종류가 한정적이어서 C/C++을 주로 사용했지만, 현대에는 Go 언어Erlang같이 비동기 네트워크 프로그래밍을 직접 지원하는 언어도 있고, 이러한 언어를 사용해서 생산성을 높일 수 있다. 굳이 서버 소프트웨어를 자작해야 한다면 네트워크 프로그래밍을 지원하는 언어 및 프레임워크를 반드시 고려하자. 2년 분의 작업량이 한 달로 줄어드는 기적을 볼 수도 있다.[35]

타인이 만들어 놓은 충분히 검증된 프로그램이 있다면 가능한 가져다가(또는 사다가) 쓰는 게 나은 선택이다. 이미 존재하는 프로그램을 다시 비슷하게 만드는 행동은 취미나 학습, 연구개발 등의 목적이 아니라면 가치가 무의미한 삽질에 불과하다.

참고로 직접 서버 프로그램을 만들거나 라이브러리를 이용하는 것의 장점은 활용도가 무궁무진하다는 것이다.

다음은 유명한 서버 라이브러리이다.

4.7. 운영체제의 선택

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

윈도에서는 XAMPP 등은 클릭 몇 번이면 끝나지만, 홈페이지 가서 다운로드 하는 과정이 필요하다.그냥 'IIS+PHP+마리아DB'를 쓰자.

5. 서버 구축 없이 서버 만들기

파일:상세 내용 아이콘.svg   자세한 내용은 서버리스 아키텍처 문서
번 문단을
부분을
참고하십시오.

6. 서버의 위치와 법률

법적으로 서버의 소재 국가에 따라서 어느 나라 법을 적용하느냐가 달라질 수 있다.

일단 해외에 위치한 서버의 경우 대한민국의 법률이 적용되지 않고 서버가 위치한 국가의 법률이 적용된다. 만약 해당 사이트에서 대한민국에서 불법인 내용을 제공하고 있더라도 유해 사이트로 지정하는 정도가 가장 강력한 대응이다.

하지만 대한민국에서 적극적으로 사업을 하고자 한다면 대한민국의 법을 준수하여야 한다. 대표적인 예로 인터넷 실명제로 인해 업로드가 금지된 유튜브나 망 사용료 문제로 철수한 트위치 등이 있다.

반면 이용자의 경우 대한민국에 소재한 이용자나 대한민국 국민인 이용자의 경우 서버의 위치와 관계없이 대한민국 법률의 관할에 있다.

예를 들면 나무위키는 서버와 운영사가 해외에 위치해 있어 사이트에 대해서는 일반적으로 대한민국 법률을 적용할 수 없다. 하지만 작성자가 대한민국 국민이거나 대한민국에 있다면 작성자에 대해서는 한국 법률이 적용된다.

해당국의 동의 없이 국외에 서버가 있는 사이트에 대해 직접적으로 수사한다면 문제가 될 수 있다. 상대국에서는 정당한 수사가 아니라 해킹으로 간주한다. 또한 사이트 운영사가 서버 소재지의 법적 요건을 무시한 채 한국 수사당국에 정보를 제공한다면 서버 소재지의 개인정보 보호법에 저촉될 수 있다.


[1] 천장이 왜 이리 높은 건가 싶은 생각이 들 만한데, 대류 현상을 생각해보면 된다. 위쪽 공간 전체가 뜨거운 공기를 순환시키는 일종의 열교환기 역할을 하는 것.[2] 개인용 인터넷 연결은 대부분 중앙집중식(단말기-세대단자함-스위치-모뎀-중간단자함(IDF)-주배선반(MDF)-전화국 등)으로 되어 있어 그런 오해가 발생할 수 있다. 실제로 아현지사 화재에서도 봤듯이 개인용 인터넷은 중앙관리주체의 무력화에 상당이 취약하다.[3] 저 선 하나하나가 우리가 인터넷에 접속한 기록 중 하나이다.[4] 호스팅 서비스를 제공하는 업체마다 다른데, Dedicated IP를 주는 경우 가능하지만 저가를 내세우며 NAT를 사용하는 호스팅 제공 업체는 포트를 임의로 정하는 것이 불가능하다. 이 경우 신청한 포트만 이용 가능.[5] 특히 ARM으로 이주한뒤 60만원짜리 제품이 어지간한 저가형 데스크톱 서버 수준의 퍼포먼스를 보여주자 애플리케이션 서버로도 인기를 끌었는데 대신에 용량 확장은 거의 불가능한 관계로 무안단물처럼 쓰이는것은 아니고 일부 업계에서 특정 작업에 많이 쓰는 정도다.[6] 주로 대기업에서 쓰인다[7] Mac OS X Lion부터는 서버버전과 개인용 버전의 구별이 없어질 예정이다. 서버 버전의 기능들이 가정용에도 모두 들어간다, 이전 버전에서도 '웹공유'기능으로 웹서버 기능은 기본적으로 들어있다. 하드웨어에 종속적이면서 서버도 인기가 별로라 OS를 분리해 개발 판매할 이유가 없다고 판단했을 것이다.[8] 이렇게 하나가 고장나도 예비용 부품이 하나 이상 붙어있는 것을 리던던트 파워라고 한다.[9] 실제로 워크스테이션 컴퓨터들은 서버부품들을 주로 쓴다. 형태가 개인용 컴퓨터와 다를건 없지만 대신 일반부품과 차별되는 안정성과 성능에 집중한다는 점.[10] 경우에 따라 자체 발전소.[11] 다만, 조립 서버나 SSD RAID 구성 등의 예외도 있다.[12] nginx는 이것을 every requests의 every에 대문자까지 잔뜩 써가면서 무지 까고 있다.[13] 해결책은 그냥 간단하게 설정만 바꿔주면 된다. 토렌트 서버 자체는 DHT 갱신을 위한 트래픽만을 사용하고 그 위에서 돌아가는 토렌트 자료들은 피어 연결 수, 업데이트 주기, 속도 제한 등을 걸면 아무 문제 없다. 오히려 겨우 이 정도로 네트워크가 죽는다면 그건 애초에 네트워크 환경이 좋지 않은 거다.[14] Home Premium, Home Basic 등은 원격 데스크톱 클라이언트만 가지고 있다. 바꿔 말하면 서버에 접속은 가능한데 이걸 서버로 쓰면 다른 컴퓨터에서 내 컴퓨터로 접속이 불가능하다.[15] 로컬 보안 정책에서 비밀번호 없이 로그온 할 수 있도록 설정할 수 있지만 하지 마라. 무조건 털린다.[16] 이들 회사는 규모의 경제를 실현 가능해서 성능과 규모를 포기한다면 1U까지 서버 블레이드도 100~300만원 정도에 신품을 구매 가능하다.[17] 이 쪽은 서버 전용 브랜드인 ASRock Rack.[18] 특히 ASRock Rack 같은 경우 ITX 사이즈의 서버 메인보드라는 희한한 제품도 출시해 이목을 끈적이 있다.[19] 일부 귀찮다고 다 설치한 후에 root 패스워드를 바꾸고 root 계정을 메인 계정으로 사용하는 경우가 있으나 보안에 매우 좋지 않으므로 절대로 추천하지 않는다.[20] 설치한 후에 rdate, ntpdate 등을 이용해 시간을 ntp서버와 자동으로 동기화 하도록 구성하는 게 좋다. 컴퓨터는 시간 동기화를 하지 않으면 시간이 꽤 빨리, 큰 폭으로 틀어진다.[21] CLI가 무서운 초심자에게 GUI에서 작업하는 걸 간단하게 첨언하자면 기본은 CLI 부팅를 사용하지만 GUI 환경을 따로 설치해서 필요할 때마다 GUI로 전환해서 사용해도 된다. GUI에서 패키지 설치는 터미널로 설치하고 설정 변경이나 파일 관리는 텍스트 편집기와 파일 관리자를 관리자 권한으로 실행하면 된다. 리눅스는 윈도우와 다르게 관리자 권한을 중간에 얻을 수 없기 때문에 어플을 관리자 권한으로 실행시켜야 한다. 간단하게 터미널에서 'sudo 어플이름' 쓰면 된다. 우분투 파일 관리자인 노틸러스라면 'sudo nautilus'이런 식으로... 어차피 터미널과 같은 CLI를 사용하는 것에는 변함없지만 vim 같은 텍스트 기반 에디터보다 그래픽 기반 에디터를 대신 사용할 수 있으니 좀 더 보기 좋다. Ctrl C,V 라든가.. 퍼미션도 우분투라면 관리자 권한의 노틸러스로 폴더 속성을 바꾸면 그만이다. 필요하다면 GUI로 원격 접속하는 방법도 있다.[22] 정확히는 vim-tiny라는 에디터가 우분투에 내장되어 있다. vi는 사장된 에디터이며 vim과는 완전히 다르니 주의할 것. (한마디로 쓸 게 아예 못 된다.)[23] SSH로 접속할 때 "-X" 옵션을 붙여주면 된다.[24] 80번 포트를 열어주도록 하자. 인터넷 검색하면 금방 방법을 찾을 수 있다.[25] CLI환경[26] 어디까지나 사용자 경험 상으로만. 윈도 서버 OS의 가격은 클라이언트용 윈도 가격과 자릿수부터 다르다. 대략 120~140만원대.[27] 서버 2016부터는 라이선스 정책이 프로세서상 라이선스에서 코어 당 라이선스로 변경된 관계로 매우 비싸졌다.[28] 만일에 아직까지도 상위 윈도우 서버로 업그레이드를 하기가 여의치 않은 상황이라 당분간 윈도우 2K를 써야만 한다면 TCP/IP 필터링과 IPSEC 설정방법을 인용해서 기본 방화벽 기능을 활성화 해야한다.[29] 대부분의 공유기가 NAT + DHCP 환경이다. 서버의 내부 IP가 변경된다면 포트포워딩 설정을 다시 해야 한다. 서버의 경우 기억하기 쉽도록 192.168.0.100이나 192.168.0.200등으로 만들어 두자.[30] 단, 사용중인 컴퓨터가 어느 제조업체이냐에 따라서는 이 방법 그대로 먹히지 않을수도 있으므로 해당 제조업체의 메뉴얼을 인용해서 설정하면 된다.[31] 맥 프로의 경우 랙마운트 제품은 부피도 부피지만 그정도 가격대면 Dell EMC나 Lenovo, 휴렛 팩커드의 전용 서버 블레이드를 구매 가능할 정도로 가격이 비싼지라 서버로 쓰겟다고 맥 프로 블레이드를 구매하는건 수지타산이 맞지 않으며 일반적인 회사들에서도 큰 규모를 갖출 필요가 없고 가격도 저렴한 Mac Mini를 대충 굴리는 경우가 많으며 이마저도 최신 버전에서는 확장성이 매우 제한되는지라 채용처가 더 줄어드는 중이다.[32] 2010년에 $15,000 가량 하던 사양의 제품을 $100 정도에 구매하는 것이 가능하다.[33] 모든 애플 기기에 적용된다. 즉, 아이폰도 사용할 수 있다.[34] 단, 이는 어떻게 구현하는가에 따라 달려있다. 비동기 프로그래밍을 지원받지 않고 직접 비동기 처리를 구현한다면, 버그도 많고 생산성도 최악일 것이다. 그러나 별도의 비동기 프로그래밍 라이브러리를 (예를 들면, Boost.Coroutine이 있다.) 사용한다면 비동기 프로그래밍을 지원받을 수 있기 때문에 큰 문제는 아니다. C++20부터는 아애 비동기 프로그래밍에 대한 지원이 표준 라이브러리에 추가될 예정이다.[35] 그러나 OSI레이어의 3레벨 아래쪽의 저수준 네트워크 스택을 개발할 때는 C언어가 올바른 선택이다. 이쯤 가면 기계제어의 영역에 들어가기 때문이다.[36] 우분투의 경우 apt-get -y install lamp-server^