써버

From Hidden Wiki
Jump to navigation Jump to search
필독 사항 유닠스 계열 저작물, 성인물, 도박 웹 써버 보안 프로그래밍 그래핔 파싱
필독 사항 고스트BSD 표면 웹 싸이트 제작 리눅스 마스터 파이썬 트킨터 뷰티펄 숲
수학 아이투피 마약, 아청물, 해킹 웹 싸이트 보안 웹 프로그래밍 데이터 분석 게임 제작
통계학 뮤와이어 다크넽 싸이트 제작 정보 보안 기사 쟁고우 팬더즈 파이게임
* 상위 문서: 컴퓨터 관련 정보

width=100% 구글 데이터 센터의 서버.[* 위쪽 공간이 쓸데없이 노는 것처럼 보이는데 사실 서버 위쪽 공간 전체는 뜨거운 공기를 순환시키는 일종의 열교환기이다.]

[목차]

개요

서버(server)는 클라이언트에게 네트워크를 통해 서비스하는 컴퓨터를 의미한다. 인터넷 하면 중앙에서 관리해주는 메인컴퓨터가 있는 것으로 생각하는 이들이 있으나,[* 이걸 악용하여 투자금을 받아 가로채는 사기수법도 있었으므로 주의 요망. 실제 인터넷의 방대한 데이터를 중앙집적으로 처리하려면 한반도만한 슈퍼컴퓨터가 필요할 것이다.] 사실 인터넷은 수많은 서버들이 거미줄처럼 얽혀서 형성된 것이다. 홈페이지를 운영하려면 서버가 반드시 필요하며, 온라인 게임이나 웹게임들도 서버를 통해서 서비스를 하고 있다. 보통 어느정도 규모가 있는 기관에서는 데이터베이스, 웹 어플리케이션 서버 등등에 방화벽, 라우터등이 붙어 네트워크를 형성한다.

파일:external/upload.wikimedia.org/Internet_map_1024.jpg 마치 우주처럼 보이는 인터넷 지도 [* 이 지도조차도 주요 간선망 중에서도 추리고 추려 최대한 간단하게 그린 것이며 그나마도 특정 지역의 망 일부만 따로 떼어 그린 것이다.] [[1]]

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

서비스 규모가 커질수록 서버의 규모도 크고 아름다워지기 때문에 구글이나 페이스북같은 세계구급 서비스의 경우 대부분 자체적으로 데이터 센터를 운영한다. 국내에서도 2013년 6월 네이버에서 데이터 센터를 완공하여 운영하기 시작했는데 구글[[2]][[3]]나 네이버 [센터] 그리고 페이스북 [센터]를 보고있자면 이게 서버인지 우주기지인지 구분이 안될 정도로 그 규모가 엄청난 것을 알 수 있다. --메인컴퓨터 맞네-- [* 데이터센터는 돈과 기술이 상당히 많이 필요한 것이라 국내 대형 포털사이트들도 대부분 IDC라고 하는 곳을 임대하여 외주업체에게 관리를 위탁한다. 네이버 말로는 국내 인터넷서비스 사업자들 중에선 최초라는듯.]

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

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

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

서버 하드웨어

서버를 위한 하드웨어는 컴퓨터이면 된다. 성능이 어느 정도 요구되는지에 따라 고성능 고안정성의 컴퓨터를 쓰기도 하고 중고 똥컴이나 폐휴대폰, NAS, USB 포트 달린 공유기, 개발보드 등을 쓰기도 하는 것이다.

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

하지만 접속자 수가 늘어나고 접속자들의 작업량이 많아지는데도 원활한 접속을 24시간 안정적으로 제공하려면 가정용 컴퓨터 정도로는 안 되기 시작한다. 따라서 서버 전용 하드웨어를 사용한다.

파일:HP ProLiant ML110 Gen9.png HP ProLiant ML110 Gen9. 일반 가정용 컴퓨터와 비슷한 모양을 하고있는 서버컴퓨터이다. 가정용 컴퓨터와의 차이 중 하나는 전원 스위치가 작다는 것이다. 사진의 ODD 슬롯 오른쪽을 자세히 보면 초록색으로 빛나는 것이 전원 스위치이다. 서버컴퓨터는 대체로 24시간 항상 켜놓는 걸 전제로 만들기 때문에 실수로 누르지 말라고 전원스위치를 작게 만들거나 케이스 깊숙한 데 만든다. 볼펜으로 누르게끔 만든것도 있고 아예 열쇠로 잠긴 자물쇠를 풀어야 누를 수 있게 만드는 것도 있다.

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

가정, 회사, PC방 등에서 쉽게 찾아볼 수 있는 컴퓨터는 말그대로 일반적인 성능을 가진 컴퓨터라고 본다면 워크스테이션은 서버와 일반적인 컴퓨터 사이라고 보고, 서버는 극한의 성능과 안정성을 가진 전용부품들을 쓰고 일반 컴퓨터에 서버부품들을 써서 극한의 성능과 안정성을 통해 작업이 가능한 전문가용 컴퓨터다.[* 실제로 워크스테이션 컴퓨터들은 서버부품들을 주로 쓴다. 형태가 개인용 컴퓨터와 다를건 없지만 대신 일반부품과 차별되는 안정성과 성능에 집중한다는 점. --가격도--]

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

CPU나 메인보드같은것도 엄연히 서버용이 따로 존재하고 가격또한 ~~안드로메다 급으로~~비싸다. CPU는 인텔의 제온,~~망해버린~~아이테니엄 AMD의 옵테론등이며, RAM역시 일반적인 DDR SDRAM이 아닌 레지스터드 ECC RAM을 쓴다 서버 메인보드 역시 안정성을 최우선으로 오버클럭 따위는 불가능하고 E-ATX 규격의 ~~크고 아름다운~~ 사이즈인데 메인보드 기판의 구성을 보면..

* 듀얼 or 쿼드 CPU소켓 ~~!!! 코어가 아니다.~~
* 최소 6개 이상의 ECC RAM 소켓
* 노스브릿지[* 2개인 제품도 있다.]
* 사우스 브릿지
* 온보드된 RAID 칩셋과 64~128MB 버퍼메모리[* 저가형 서버보드에는 RAID 칩셋은 온데간데 없고 그자리에 휑한 공기판의 흔적만 찾을 수 있다(...).제품마다 들어가는 칩이 다른데 아답텍 칩은 최고급에만 들어가고 저가형이나 보급형엔 SiS나 프로미스, Jmicron 이런거 넣어준다.]
* 온보드된 그래픽 칩셋과 8~16MB 비디오 메모리[* 주로 많이 쓰이는게 Aspeed AST 20xx대 칩셋. 2D 전용으로 3D가속기능 자체가 없다 ~~그러니까 게임같은거 돌려볼 생각말자~~]
* 듀얼 LAN카드와 칩셋[* 주로 인텔칩.]
* PCI-EX 64Bit 2~4개 슬롯[* 색상은 연녹색을 쓰고 일반적인 32Bit PCI 슬롯보다 1.5배 더 길다.]
* PCI 32bit 2~4개 슬롯
이정도를 메인보드 하나에 다 때려 박아야하니 크기가 커지는 이유다. 파워 서플라이 역시 기본이 1000~1400w정도를 먹고 데이터 센터급이라면 당연히 UPS[* 무정전 전원 공급장치.]도 설치해야한다.하드 디스크도 용량과 안정성을 감안해서 증설해야 하고 다수의 디스크 증설시 RAID카드는 필수다. 물론 위에 언급한대로 최고가 서버보드에는 RAID 칩셋이 박혀있지만 설치갯수에 한계가 있기도 하고 괜히 보급형 샀다가 RAID 자리에 휑한 공기판을 보고있자면 한숨쉬고 외장형 RAID 카드를 장만하게되는데 칩셋 제조사와 성능에 따라 가격은 천차만별이다. 하이포인트사의 Rocket RAID 카드야 30만원대 구매가 가능하지만 RAID계의 본좌 아답텍 사의 RAID 카드는 최소 100만원이상이다(...)

서버 컴퓨터용 OS도 따로 있다. 직접 사용하기보다는 외부에 서비스를 제공하는 게 목적이므로 일반용과는 차이가 많다. 유닉스, 리눅스 계열 서버운영체제는 대부분 CUI인 경우가 많은데 이들 컴퓨터에는 모니터조차 달지 않고 서비스하기 때문이다. 물론 원하면 X환경[* X.org 등. X는 생략의 의미가 아니라 엑스라는 알파벳 그 자체다]을 깔아서 VNC등을 통해 GUI를 쓸 수도 있지만 리눅스 계열은 GUI가 오히려 더 불편한 운영체제라 인기는 거의 없다. 굳이 그래픽 출력이 필요한 경우에는 차라리 웹 서버를 올려서 외부에서 웹 브라우저를 통해 제어하게 만드는 게 요즘의 추세다. CUI라고는 해도 멀티태스킹이 되기 때문에 창 여럿 띄워놓고 작업하면 그렇게 크게 불편하지도 않다.

macOS 서버윈도우 서버의 경우는 가정용과 인터페이스 차이가 거의 없다. 물론 인터페이스만 차이가 거의 없는거지 서비스 구성이나 사용자 정책, 보안 구성 등은 철저히 서버용으로 튜닝돼있다. 예를 들어 윈도우 서버의 경우 제어판 항목에 접근하기 쉽게 배려돼있고 인터넷 익스플로러는 최고 단계의 보안이 적용돼있다. 서버용 윈도우에서 인터넷 익스플로러로 네이버를 이용하려 하면 끊임없이 콘텐츠 차단, 액세스 거부, 보안 경고를 울려대서 거의 사용이 불가능할 정도다. 보안 수준을 낮추면 정상적으로 쓸 수 있지만 서버 운영체제에 낮은 보안을 적용하는 것도 몹시 찜찜한 일이고.

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

서비스 종류

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

FTP 서버

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

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

웹 서버

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

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

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

동적 웹을 위한 준비

끽해야 자바스크립트만을 제공하는 정적 페이지(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를 기반으로 돌아가고 있다.

데이터베이스 서버

데이터베이스를 구동하는 서버이다. 개인이 취미로 돌리는 웹 서버 정도에선 애플리케이션 서버와 같은 서버에서 돌아가는 것이 대부분이다. 하지만 대형 서비스로 간다면 독립된 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에서만 외부 접속이 가능하도록 세팅하는 것이 가장 일반적이다. 그 외에는 몽땅 로컬 접속만 허용하도록 한다.

기타

토렌트 서버를 만들고 싶다면 "transmission-daemon" 또는 "[for Linux]"를 설치한다. 그러나 굳이 토렌트전용 서버 클라이언트를 설치하기보다는 개인용 클라이언트로도 충분히 가능하다. 토렌트 클라이언트 자체가 서버역할을 할 수 있도록 설계되었기 때문. 근데 토렌트 서버는 네트워크 대역폭을 엄청 빨아먹으므로 민폐가 될 수 있다. [* 해결책은 그냥 간단하게 설정만 바꿔주면 된다. 토렌트 서버 자체는 DHT 갱신을 위한 트래픽만을 사용하고 그 위에서 돌아가는 토렌트 자료들은 피어 연결 수, 업데이트 주기, 속도 제한 등을 걸면 아무 문제 없다. 오히려 겨우 이정도로 네트워크가 죽는다면 그건 애초에 네트워크 환경이 좋지 않은 거다.] 원룸 같은 다세대주택에서 돌리면 인터넷이 먹통이 돼서 이웃주민과 집주인에게 비난받기 쉽고, 직장이나 연구실 등 공적인 장소에서도 쓰지 않는 게 좋다.

게임 서버

게임 서버 문서 참고.

직접 서버를 구축해 보자

가정에서 리눅스로 웹 서버, FTP 서버, 클라우드 스토리지, 토렌트 서버, PLEX 미디어서버, VPN, 웹 오피스, 가상 머신 등을 구축하는 [예시]

가정용 하드웨어

일반인이 개인 취미 정도로 서버를 구축하는 경우 전문적인 서버, 워크스테이션용 하드웨어 없이도 구축 가능하다. 물론 한계도 크다. 일반인용 고성능 노트북 정도로는 400명 이상의 동시접속자를 견딜 수 없다. 또한 네트워크 대역폭이 가정용 회선이 대부분 100Mbps혹은 커봤자 1Gbps인걸 감안 하면 속도도 지나치게 느리다. 따라서 고성능이 필요하면 전문적인 회선을 갖추고 전문 서버를 사들일 필요가 있다. 개발보드 (아두이노, 오드로이드, 라즈베리 파이), 폐휴대폰, 기존 똥컴을 하드웨어로 사용하는 경우는 홈서버 문서 참조.

* 동시접속자 50~400명이거나 웹 서버, 게임 서버를 만들려고 하면 x86, x86-64 등의 PC를 쓰는 게 바람직하다.
가정용 취미용 서버를 구축할 때 CPU에서 가장 중요한 건 전성비 확보다. 누진세로 인해 전기요금이 많이 나온다면 이 취미를 계속 유지할 수 없다. 미성년자라면 부모님에게 맞을 수도 있고. 그래서 전기요금을 아끼면서도 24시간 서버를 돌리려면 전성비가 중요한 것이다.
그래서 데스크탑용 i 시리즈를 쓰는 건 전성비 면에서 안 좋다. 저전력기종이 아닌 일반 데스크탑의 대기시 전력소모는 i시리즈 4세대 이전에서 70W다.
고성능을 목표로 데스크탑용 i시리즈를 쓰려면 하스웰, 스카이레이크 이상의 CPU를 사용해야 한다. 하스웰과 스카이레이크의 Idle시 전력소모는 30~35W 정도이다.
원래부터 '저전력'을 기반으로 설계된 노트북 등을 서버용으로 사용하기도 한다.
CPU가 항상 풀로드 되는 것도 아니고 평소 Idle 시에는 전력 소모가 매우 적다.
* 동시 접속자 수가 50명~100명 수준이라면 ARM 수준에선 버겁다. 인텔 아톰 시리즈나 노트북용 셀러론, 휴렛팩커드, 후지쯔 등에서 나온 마이크로 서버 제품군을 쓰자.
 * 동시 접속자 수가 200명~400명이거나 마인크래프트 등의 게임 서버를 돌릴 것이라면 저전력으로 설계된 모바일 i시리즈나 고급 전력 관리를 지원하는 i시리즈를 쓰자.
* 메인보드의 크기가 작을수록 전력소모가 적다. 그리고 요즘 메인보드는 대부분 WOL[* Wake On Lan. 인터넷망을 이용한 원격 부팅이다. ]를 지원하니까 이런 걸 사면 좋다.
* 동시접속자를 많이 받으려면 RAM을 많이 달아야 한다. 32비트 윈도우 기준 1기가면 충분하고, 2기가면 답답하지 않게 쓸 수 있다. 64비트 윈도우라면 3기가 정도면 그럭저럭 쓸 수 있다.
* 파워 서플라이는 DC to DC 파워를 이용하자. 아톰이나 저전력 셀러론이라면 60W로도 충분하다. 제온 데스크탑 버전을 쓴다해도 그래픽 카드를 달지 않는다면 80W로도 충분. 물론 가격은 매우 비싸다. CPU는 풀 로드 시에 TDP 전력만큼 사용하고 Idle 상태에서는 전기를 거의 먹지 않는다. 오히려 꾸준히 전기를 많이 먹는 쪽은 HDD 쪽이다. 대충 3.5인치 7200rpm HDD는 6~8W, SSD는 3W의 전기를 먹는다.

요약하자면 3.5인치 하드 3개를 넘길 시 dc to dc파워를 포기해야 한다.

* 하드디스크 구할 땐 일반 컴퓨터용 하드디스크를 써야 한다. 가끔 서버용이라고 10000rpm, 15000rpm을 파는데 거의 다 SCSI 혹은 SAS라 서버컴퓨터 보드가 아닌 이상 쓰기 어렵고 별도로 PCI 슬롯에 SCSI/SAS 카드를 달아 연결한다 해도 SATA3 SSD만 못 하다. 정 속도가 욕심이 나면 SSD를 쓰는게 좋다. 
* 크래커라면 보안이 취약한 서버를 찾아내 해킹해 몰래 서버를 돌리기도 하는데 그러다가 구속된다. 


* 팩스 서버 등의 특수 목적이 아니라면 굳이 서버용 윈도우를 쓸 필요는 없다. 일반용 윈도우를 쓴다면 반드시 Pro나 그 이상으로 설치해야 원격 데스크톱 연결을 이용할 수 있다[* Home Premium, Home Basic 등은 원격 데스크톱 클라이언트만 가지고 있다. 바꿔 말하면 서버에 접속은 가능한데 이걸 서버로 쓰면 다른 컴퓨터에서 내 컴퓨터로 접속이 불가능하다.]. 리눅스를 쓸 것이라면 우분투CentOS 등 사용자가 많고 문서화가 잘 되어 있는 배포판(이들은 실무용으로 나온 한국어 가이드북을 서점에서 구할 수 있다. 다른 배포판은 좀...)을 선택하는 것이 좋다.

서버용 컴퓨터에는 암호를 걸어둬야 원격 데스크톱 연결을 이용할 수 있다.[* 로컬 보안 정책에서 비밀번호 없이 로그온 할 수 있도록 설정할 수 있지만 하지 마라. 무조건 털린다.] 최대한 자신만 알 수 있는 암호를 걸자. --비밀번호 기억 못할거 같다고 P@ssw0rd나 1q@ 이런거 쓰면 반드시 해킹당한다(...)--[* Brute Force Attack에 매우 취약하며 사전 대입 공격을 할 때 쓰는 사전에 저것들은 무조건 들어간다.] 서버 암호를 기억도 못 하게 엄청 복잡한 랜덤 패스워드로 만들고 그 패스워드를 서버 본체에 스티커를 붙여 써 놓는 방법이 있다. 어차피 해커가 서버에 물리적으로 접근 가능해지면 암호고 뭐고 다 소용없어지니까 서버에다가 접근 암호를 써붙여놓는 것이다. 기업용 서버는 SSH 공개키 인증 등 패스워드가 아닌 다른 방법으로 접속하게 돼 있다. 또는 금고 안에 암호표를 보관하고 있거나.

또, 하드웨어의 성능과는 별개로 회선이 문제가 있으면 재기능을 할 수 없다. 작은 규모라면 가정용 회선으로도 충분하지만 회선이 좋지 않으면 서버가 아무리 좋아도 문제가 생긴다. 그리고 가정용의 경우 IP포트가 막혀 있는 경우가 대부분이라 IP 포트를 체크 및 후 조치는 필수이다. 기령 80, 8080 IP포트가 막혀있는 경우라면 웹서버를 사용 할 수 없다.

고성능 서버 하드웨어

고성능, 많은 동시접속자를 수용할 수 있는 서버를 지향할 경우 워크스테이션이나 전문적 서버 하드웨어를 사용해야 한다. 이쪽은 전력도 많이 들고 고성능 부품 값으로도 매우 많은 돈이 든다.

* 전력 소모 상관없이 견적을 낸다면 제온과 전용 칩셋 보드를 사용하게 될 것이다. 24시간 내내 돌리는 용도로 ECC 기능이 없는 i5나 i7를 사용하는 것은 부적절하다.
* 동접수가 그리 많지 않다면 제온 E3와 저용량의 램을 쓰는 것이 좋다. 
* 램은 무조건 RDIMM 또는 LR-DIMM(둘다 ECC Registered) 종류로 고르는 것이 좋다. 이런 종류의 램이 아니면 부팅 자체가 불가능한 보드가 존재 하니 참고하자. ECC/REG 램은 또한 안정성에 한몫 한다. 
* 동접수를 400명 이상 확보하려면 제온 E5(듀얼 구성)/램 128기가 이상으로 하는 것이 좋다. 이런 서버는 램 용량을 신경쓰지 말고 늘리는 것이 좋다.
* 칩셋과 소켓은 하스웰/브로드웰-EP 기준, 2011-V3 소켓/C612 칩셋을 쓴다. 스카이레이크 제온 E3로 맞춘다 해도 전용 보드를 써야 한다. 
* 파워는 ATX 파워에 고출력으로 뽑아내는 것으로 해야 한다. ASUS Z10PE-D16/4L(제온 E5 듀얼용 보드)[* WS와 다르게 PCI-e 슬롯과 방열판이 다르다.]만 해도 메인보드 전원만 24+8+8+4 = 44핀이다!! CPU의 TDP와 RAM 전력을 합치면.. 그냥 전기하마다. (애초에 저 보드 유통사에서 정격 1000W 이상을 권장한다.)
* 돈지랄을 하고 싶다면 제온 E5-2699 V4에 LR-DIMM 단일 __64기가__ 램을 찾아서 끼우자. 램으로 1TB 이상을 구현할 수 있다. 단 램값이 CPU 값을 넘을 수 있다. 추가로 최근 나올 젠 코어적용 AMD naples는 cpu당 8체널구성에 한채널당 램 2개씩 즉 2CPU구성시 32개의 램을 장착 가능하며 8기가램을 풀뱅크시 256기가에 64기가 램을 적용하면 2테라라는 무시무시한 용량이 가능해진다.

Under Linux

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

서버는 안정성을 추구하므로 RHEL 계열이 압도적인 우세다. 완성도 높은 RHEL을 돈 안 내고 사용할 수 있는 클론인 CentOS가 가정용 서버로서 가장 유리하다. 다음, 네이버도 CentOS를 쓰고 있다.

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

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

단, 웹 서버는 일정 수준 이상은 한계가 있다. 도메인 연결이 안 되기 때문에 IP 주소로 접속해야 되는데 이 경우 웹 서버 소프트웨어 설정이 도메인 연결시와 달라져서 실 서버에 그대로 적용하기는 어렵고, HTTPS 서버 구축은 아예 불가능하다. HTTPS 서버는 보안 인증서를 발급받아야 하는데 이게 도메인 기준으로 발급되기 때문이다. 어느 정도 리눅스에 익숙해졌다면 가상서버호스팅이나 클라우드호스팅 등으로 갈아타는 것을 추천한다. 단, VMWare나 비슷한 고급 기능을 제공하는 가상화 소프트웨어는 네트워크를 Bridge로 설정하여 컴퓨터 한 대를 새로운 랜카드로 연결한 것과 같은 효과를 볼 수 있다.

설치 중에 계정을 생성하라고 물어볼텐데 로컬 계정이므로 자기가 쓰고 싶은 계정 이름과 패스워드를 입력한다. 어디 클라우드에 동기화하기 위한 목적이 아니니까 맘대로 쓰자. 요즘엔 root로 로그인하는 걸 엄격히 금지하는 추세이기 때문에 이 과정은 필수이다.[* 일부 귀찮다고 다 설치한 후에 root 패스워드를 바꾸고 root 계정을 메인 계정으로 사용하는 경우가 있으나 보안에 매우 좋지 않으므로 절대로 추천하지 않는다.] 계정 이름과 패스워드 둘 다 알아야 서버가 뚫리는 셈이므로 보안성은 상당히 향상됐다.

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

그리고 현재 지역의 시간대를 선택하고(귀찮다고 시간대를 대충 잡으면 안 된다. 서버 시계는 GMT에 동기화하기 때문에 엉뚱한 시간대를 입력하면 시계가 계속 틀려 있게 된다.)[* 설치한 후에 rdate, ntpdate 등을 이용해 시간을 ntp서버와 자동으로 동기화 하도록 구성하는 게 좋다. 컴퓨터는 시간 동기화를 하지 않으면 시간이 꽤 빨리, 큰 폭으로 틀어진다.] 나머지는 기본 설정으로 둬도 된다.

리눅스 서버는 GUI로 조작할만한 게 거의 없고 전부 CLI조작을 기본으로 한다. GUI툴이 있긴 한데 오히려 이쪽이 자료 찾기가 더 힘들다.[* CLI가 무서운 초심자에게 GUI에서 작업하는걸 간단하게 첨언하자면 기본은 CLI 부팅를 사용하지만 GUI환경을 따로 설치해서 필요할 때 마다 GUI로 전환해서 사용해도 된다. GUI에서 패키지 설치는 터미널로 설치하고 설정변경이나 파일관리는 텍스트 편집기와 파일관리자를 관리자 권한으로 실행하면 된다. 리눅스는 윈도우와 다르게 관리자 권한을 중간에 얻을 수 없기 때문에 어플을 관리자 권한으로 실행 시켜야 한다. 간단하게 터미널에서 'sudo 어플이름' 쓰면 된다. 우분투 파일 관리자인 노틸러스 라면 'sudo nautilus'이런 식으로... 어자피 터미널과 같은 CLI를 사용하는 것에는 변함 없지만 vim같은 텍스트 기반 에디터보다 그레픽 기반 에디터를 대신 사용할 수 있으니 좀 더 보기 좋다. Ctrl C,V 라던가.. 퍼미션도 우분투라면 관리자 권한의 노틸러스로 폴더 속성을 바꾸면 그만이다. 필요하다면 GUI로 원격 접속하는 방법도 있다.] 안됐지만 검은 화면에 무심한 듯 시크하게 깜박이는 하얀색 커서가 견딜 수 없으면 시놀로지,윈도우로 가야 한다. 리눅스 서버 세계에서 GUI조작으로 뭔갈 하는 건 왕초보용 강의가 끝이다. 뭐 리눅스 데스크톱 세계는 얘기가 다르지만.

리눅스 서버용 배포판을 설치하면 자동으로 설치되지만 데스크톱으로 설치하면 안 깔리는 패키지 중 가장 중요한 게 openssh 패키지다. 이 패키지가 있어야 원격 로그인이 가능하다. 서버는 최초 설치때만 모니터를 달아 쓰고 그 뒤로는 대부분 원격으로 연결해서 조작하므로 필수이다. 참고로 텍스트 문서 편집 시 vim에디터[* 정확히는 vim-tiny 라는 에디터가 우분투에 내장되어있다. vi는 사장된 에디터이며 vim과는 완전히 다르니 참고. (한마디로 쓸 게 아예 못된다.)]로 편집하는 경우 속 터질수도 있으니 초보자의 경우 nano에디터를 추천. 이것도 불편하다면 macOS 사용자라면 [[7]]를 설치하고 X11 forwarding된 환경[* SSH로 접속할 때 "-X" 옵션을 붙여주면 된다.]에서 gedit 등의 우분투 내장 에디터를 열어서 편집하는 방법 또한 있다.

간이 웹 서버 구축 튜토리얼

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

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

  1. MariaDB 10.1 CentOS repository list - created 2015-09-12 00:45 UTC
  2. 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; #자신의 서버의 코어 수만큼 설정한다.

  1. error_log logs/error.log;
  2. error_log logs/error.log notice;
  3. error_log logs/error.log info;
  1. 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/}}} 에 접속하자. 물론 방화벽은 열어야한다[* 80번 포트를 열어주도록 하자. 인터넷 검색하면 금방 방법을 찾을 수 있다. ]

Ubuntu

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

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

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

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

{{{#!html

<span style="color:#268bd2;font-weight:700">root@namuwiki</span>:~# <span style="color:#2aa198">apt-get </span><span style="color:#a633aa">update </span>&& <span style="color:#2aa198">apt-get</span> <span style="color:#a633aa">safe-upgrade</span>

}}}

LAMP 스택 설치

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

{{{#!html

<span style="color:#268bd2;font-weight:700">root@namuwiki</span>:~# <span style="color:#2aa198">apt-get </span><span style="color:#a633aa">install</span> lamp-server^

}}}

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

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

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

{{{#!html

<span style="color:#268bd2;font-weight:700">root@namuwiki</span>:~# <span style="color:#2aa198">cd</span> /var/www/html

}}}

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

{{{#!html

<span style="color:#268bd2;font-weight:700">root@namuwiki</span>:/var/www/html# <span style="color:#2aa198">wget</span> https://wordpress.org/latest.tar.gz
<span style="color:#268bd2;font-weight:700">root@namuwiki</span>:/var/www/html# <span style="color:#2aa198">tar</span> </span><span style="color:#a633aa">zxvf</span> latest.tar.gz

}}}

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

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

{{{#!html

<span style="color:#268bd2;font-weight:700">root@namuwiki</span>:/var/www/html# <span style="color:#2aa198">mv</span> wordpress wp

}}}

* 폴더의 소유주 설정

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

{{{#!html

<span style="color:#268bd2;font-weight:700">root@namuwiki</span>:/var/www/html# <span style="color:#2aa198">chown</span> </span><span style="color:#a633aa">-R</span> www-data:www-data wp

}}}

* 인덱스 파일 수정

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

{{{#!html

<span style="color:#586e75"><</span><span style="color:#268bd2;font-weight:700">meta</span> <span style="color:#93a1a1">http-equiv</span>=<span style="color:#269186"><span style="color:#269186">"</span>refresh<span style="color:#269186">"</span></span> <span style="color:#93a1a1">content</span>=<span style="color:#269186"><span style="color:#269186">"</span>0;url=/wp<span style="color:#269186">"</span></span><span style="color:#586e75"> /></span>

}}}

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

워드프레스 설정

이제 웹 브라우저를 이용하여 서버의 주소로 접속하면 GUI가 나올 것이다.

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

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

Under Windows

* 윈도우는 접근 장벽이 가장 낮은 운영 체제중 하나다. 따라서 누구나 쉽게 서버를 운영할 수 있다. 리눅스 콘솔만 보면 현기증이 나는 사람이면 이걸 추천한다. 하지만 아무것도 모르고 따라만 하는 사람이라면 자료가 많은 리눅스를 추천한다. 윈도우 쪽은 자료가 리눅스에 비해 적다. 
* Windows는 마소의 IIS를 사용 할 수 있다. 퍼포먼스도 상당히 좋은 편에다 GUI도 지원되므로 서버 지식은 있는데 콘솔 쓸 자신이 없으면 이걸 쓰자. 성능 자체도 좋고 콘솔을 쓸 필요가 거의 없어 관리가 쉬워 기업에서도 많이 쓴다.
* Windows Server 계열에서는 FTP를 기본적으로 지원하지만 Windows 계열에서는 파일질라를 사용해 보자
* 블로그를 만들 것이라면 웹서버를 설치해야 한다. 요즘은 APMSETUP같은 apache, PHP, MySQL을 한꺼번에 설치해주는 프로그램도 많이 있으니 활용해보도록 하자. 그 다음에는 설치형 블로그인 텍스트큐브, 워드프레스등을 깔아줘야 하는데, 그건 자신의 상황, 서버상황에 따라 설치해주어야 한다. 
* 보안을 고려해서 운영체제를 선택해야 한다. 지원기간이 다소 남아있는 20122012 R2를 사용하든지, 지원기간이 형식적으로만 존재하는 2016을 사용하도록 하자. Windows Server 2008 R2 이하의 Windows Server 계열 운영체제는 지원기간이 끝나 보안이 취약한 상태다. 이런 PC에 외부용 포트를 열어버리면 1분도 안 되어 뚫린다고 할 정도다. 따라서 보안 지원기간이 끝난 운영체제는 공유기 밑에서만 돌려야 한다. 그리고 Windows 7 이하의 각종 개인용 윈도우 역시 서버용으로는 적합하지 않다.
* 학생 자격이 유지되는 기한 이내라면 Microsoft Imagine에서 Windows Server 2016를 무료로 다운가능하니 참고하자. 에디션 중에 라이선스 값이 제일비싼 데이터센터 제품키를 제일 먼저 확보해 두도록 하자[* 서버 2016 부터는 라이선스 정책이 프로세서상 라이선스에서 코어 당 라이선스로 변경된 관계로 매우 비싸졌다.].
* 학생은 Microsoft Dream Spark에서 Server 계열의 운영체제를 무료로 다운가능하고, 학생이 아니어도 반년간 무료로 체험해볼 수 있다.--포맷 후 재설치하면 사실상 무제한이다.--
* 상업용으로 사용할 경우 크랙을 사용하면 큰 법적 위험부담을 안게 된다. 다만, 개인적으로 크랙을 쓰는 것에 대해서는 MS는 2018년 기준 별도의 법적 조치를 취하고 있지 않는 편이다.
* 외부에서 접속이 안되는 경우가 있는데, 그건 공유기나 Windows 방화벽등에서 따로 설정을 해야한다.
* 방화벽이 귀찮다고 꺼버리는 것은 매우 위험한 행동이다. 윈도우 방화벽 자체는 그닥 좋진 못하지만 없는 것 보단 낫다. 네트워크 상단에 물리 방화벽을 달아 두거나 서드파티 방화벽을 쓸 생각이 아니라면 끄지 말아야 한다. 방화벽의 기본은 전부 막고 사용하는 서비스만 열어두는 것이다.
* 윈도우의 파일시스템인 NTFS는 파일명의 대소문자를 구분하지 않는다. aaaa.file / Aaaa.file / aAAa.file 이 윈도우에서는 모두 같은 파일명으로 처리되지만, *nix 계열에서는 모두 다른 파일이다. 신규서버라면 신경 쓸 것 없지만, 마이그레이션 하는 경우에는 대소문자에 따른 파일명 겹침을 주의해야 한다. 복사하는 도중에 파일을 덮어쓰겠냐는 확인창이 뜨고, 무심코 네 해버리면 망한다(...). ~~원본 살아있으면 파일명 바꿔서 다시 복사하면 되긴 하지~~

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를 고정해야 한다.[* 대부분의 공유기가 NAT + DHCP 환경이다. 서버의 내부 IP가 변경된다면 포트포워딩 설정을 다시 해야 한다. 서버의 경우 기억하기 쉽도록 192.168.0.100이나 192.168.0.200등으로 만들어 두자.] ipTime 공유기를 기준으로 한다. 네트워크 관리→내부 네트워크 설정에서 수동 IP 할당 설정을 하자. 서버 컴퓨터의 IP 주소를 보고 체크하여 추가를 누르면 끝.
* 이렇게 열심히 만들었지만 공유기 밖의 네트워크에서는 접속할 수 없다. 공유기가 있는 네트워크 내에서만 쓸 것이라면 상관 없겠지만, 그렇지 않은 경우가 있으니 일단 설정하도록 하자.
NAT→포트포워드 설정으로 가서 정의된 리스트에서 FTP를 설정, 서버 컴퓨터의 IP를 입력하고 추가하자. 이렇게 하면 외부에서 ftp://공유기의 내부 IP 주소를 입력하는 것으로 FTP 서버에 접근이 가능하다.
* 24시간 내내 켜둘 것이라면 별 상관 없겠지만, 그렇지 않은 경우를 대비해 WOL을 설정하자. 컴퓨터는 절대로 절전 모드로 들어가서는 안 된다. 절전 모드에 들어가지 않도록 하자. 전원 설정에서 절전 모드와 최대 절전 모드까지 걸리는 시간을 모두 없음으로 설정하자.
장치 관리자에서 네트워크 어댑터을 확장하고, 어댑터를 더블클릭하자. 전원 관리에서 첫번째 항목과 두번째 항목을 체크한다. 고급 항목에서 Wake on LAN이나 WOL은 일단 다 사용으로 하고 보자.
공유기에서 보안 기능→공유기 접속 관리에서 원격 관리 포트를 사용하게 하고, 원하는 포트를 입력하자.
특수기능→WOL에서 서버 컴퓨터의 MAC 주소를 쳐서 추가하면 끝.

FileZilla FTP Server

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

Autoset, APMSetup 등의 프로그램

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

여기 있는대로 하면 개인 FTP 서버가 완성된다.

Under OS X

소규모 저사양 서버를 구축하려면 굳이 비싼 제품이 없어도 된다. 중고로 구입하거나 저렴한 맥미니면 충분하다. 맥 미니는 개인 컴퓨터로 쓰면서 동시에 모든 서버 역할도 할 수 있다. 해킨토시도 좋다.

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

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

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

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

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

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

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

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

네트워크같은 비동기 병렬처리를 구현할 때 C/C++은 궁합이 매우 나쁘다. 과거에는 딱히 다른 선택지가 없었으니까 C/C++을 사용했지만 현대에는 Go 언어Erlang같이 비동기 네트워크 프로그래밍을 직접 지원하는 언어들이 널렸다. 굳이 서버 소프트웨어를 자작해야 한다면 네트워크 프로그래밍을 지원하는 언어 및 프레임워크를 반드시 고려하자. 2년 분의 작업량이 이틀로 줄어드는 기적을 볼 수도 있다.[* 그러나 OSI레이어의 3레벨 아래쪽의 저수준 네트워크 스택을 개발할 때는 C언어가 올바른 선택이다. 이쯤 가면 기계제어의 영역에 들어가기 때문이다.]

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

운영체제의 선택

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

윈도에서 APMSetup은 클릭 몇 번이면 끝나지만, 홈페이지 가서 다운로드 하는 과정이 필요하다.

서버 구축 없이 서버 만들기

서버리스아키텍처 문서로.

같이 보기