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
IT이야기/입코딩2017. 5. 8. 21:14


인터넷에서 많이 쓰이는 호스팅이라는 용어에 대해서 알아보겠습니다.


전 처음 블로그를 시작하려고 했을때, 나름 웹개발자라서 AWS 서버 구축해서 직접 제작한 블로그를 쓰던가 못해도 워드프레스 같은 cms 를 직접 제작해서 관리해보려는 생각을했습니다.

그러다 무료 호스팅을 신청해서 1년정도 개인홈페이지나 블로그도 만들어봤구요.

그런데, 느껴진게 귀차니즘의 압박으로 네이버 블로그나 티스토리 블로그로 갈아탔네요. 언젠가 가능하다면 개인 호스팅에 사이트를 운영해 보고싶기도 합니다.

일단 호스팅(hosting)이란 뜻을 정의해보면, 서버 컴퓨터의 전체 또는 일정 공간을 이용할 수 있도록 임대해 주는 서비스를 말합니다.

co.kr 이나 .net 같은 도메인과는 좀 개념이 다릅니다. 도메인(domain)이란 문자로 표시한 인터넷 주소입니다. 모를 때는 카페24같은 호스팅업체에서 도메인도 서비스하기에 같은 개념인줄알았습니다.

집에서 아무리 만들고 가지고 놀아도 외부에서 사람들이 보려면 본인의 컴퓨터를 서버로 쓰거나 간단한 작업정도는 쓸수 있겠지만 호스팅이 있어야 겠지요.

인터넷에 연결된 웹 사이트를 운영하기 위해서는 1일 24시간, 1년 365일 항상 인터넷에 연결된 서버 컴퓨터를 운영해야 합니다. 

학부생 시절에 동아리방 구석에 모니터와 키보드 없이 본체만 켜져있는 리눅스 서버를 돌려서 푸티로 접속하고 가지고 놀았던 기억이 있는데요.

만약 집에서 했다면 전기세, 인터넷 트레픽 때문에 눈치가 이만저만 아니겠지요. 개인학습이나 소수 인원이 쓰기엔 노는 데스크탑이나 노트북으로 서버환경 구성해서 사용해도 문제는 안됩니다만, 회원이 몇십명만 넘어가도 부화가 걸려서 버벅거리는게 느껴지더군요.

개인이나 기업 또는 단체가 이런 서버 컴퓨터를 독자적으로 구축하여 운영하기 위해서는 막대한 비용이 필요로 합니다.

이러한 문제를 해결하기 위해 전문 호스팅 업체가 미리 여러 대의 서버 컴퓨터를 구축한 뒤, 그 공간 중 일정 부분을 이용자들에게 임대해 주고 그 대가를 받는 서비스가 생겨났는데, 그것이 호스팅 서비스입니다.

유명한 카페24나 phpschool 같은 경우는 단돈몇백원에 한달의 호스팅을 제공해 주기도 합니다. 물론 사이트의 규모가 커지면 사용자수도 늘어나고 용량도 늘어나서 유지비가 많이 들겠죠.

호스팅 서비스에는 웹 호스팅과 서버 호스팅, 메일 호스팅 등 다양한 종류가 있습니다. 

-웹 호스팅 혹은 공유 호스팅(shared hosting)

개별 홈페이지를 운영하는 사용자를 위해 서버 컴퓨터의 일부 공간을 임대해 주는 서비스입니다. 

웹호스팅은 하나의 서버에서 여러 사용자의 사이트를 띄워주기 때문에 한 사용자가 서버자원을 과도하게 사용하게 되면 서버내 다른 사용자 페이지 처리속도에 영향을 끼쳐 업체마다 정해진 조치를 취합니다. 

물론 사용자측에서는 서버부하가 보이는 것도 아니고, 억울할 수도 있으나 아무래도 다른 서비스에 비해 저렴한 서비스라 감수해야하고, 조금 더 비싼 단독웹 호스팅은 어차피 혼자쓰기 때문에 중요한 사이트라면 돈을 더 내더라도 단독웹이나 서버호스팅을 쓰는게 낫다고 합니다. 

장점

저렴한 가격도 있지만 서버관리에 대해 신경쓸 필요가 없다는게 큰 장점입니다. 

단독웹 호스팅과 서버호스팅은 혼자쓴다는 점은 같지만, 웹호스팅은 서버에 손 댈 필요가 없습니다. 서버 호스팅에는 가상 서버(virtual private server) 호스팅과 단독 서버(dedicated server) 호스팅으로 나뉘는데, 가상 서버 호스팅은 서버의 일정한 공간을 KVM, Xen, OpenVZ 등의 가상화 기술을 이용하여 한대의 서버처럼 나눠주는 서비스이며 단독 서버 호스팅은 서버 한대를 전부 임대해 주는 서비스로서 일정 비용을 납부해야 합니다. 


-메일 호스팅

이메일 혹은 웹메일 계정과 공간을 임대해 주는 서비스입니다. 

기타 이외에도 쇼핑몰 호스팅, 리셀러 호스팅 등이 있습니다. 웹호스팅을 구매하면 해당 옵션에 메일 몇개씩 메일 호스팅은 기본으로 포함되어 있더군요.

호스팅 서비스는 스토리지에 따라서 SSD, HDD로 나뉘고, 운영체제에 따라서 리눅스(Linux) 호스팅, 윈도우즈(Windows) 호스팅로 나누기도 합니다.

하지만 해당 호스팅이 웹 호스팅일경우, 혹은 꼭 웹 호스팅이 아니라도 그냥 저렴한 리눅스 호스팅을 쓰는게 나은 경우가 있습니다.

많은 사람이 간과하는 부분이 있는데, 일부 호스팅 업체는 서버에 부담을 준다는 이유로 검색엔진 봇(구글봇, 네이버 봇 등)을 막아버리는 경우가 있습니다. 개인 자료관리용이라면 상관없겠으나 그렇지 않은 경우라면 아무리 열심히 홈페이지를 운영해도 방문자가 들어오지 않을수 있습니다. 검색에 민감한 홈페이지를 운영할 계획이라면 호스팅을 신청하기 전 검색엔진 봇을 차단해 두는지 여부 등을 미리 물어보도록 하거나 안전하게 단독형 호스팅을 사용하는 게 좋다고 합니다.


호스팅을 구매하기전 팁

워드프레스 같은 CMS 도구나 미디어위키같은 위키엔진을 설치하고자 할 경우, 서버 환경이 UTF-8기반에 PHP와 MySQL 버전이 최신으로 세팅 되어 있는지 꼭 확인하는게 좋습니다. 

PHP, Mysql 양쪽다 5 이상이면 괜찮다습니다. 단, 워드프레스나 미디어위키, XE 최신버전은 PHP 5.3 이상을 요구합니다. 

SSH 지원 여부도 중요한데. 호스팅에 따라 SSH가 지원되지 않는 경우가 생기면 홈페이지 관리가 불편해집니다.

제 실력이 짧아서 그런지 모르겠지만 php 라라벨 프레임워크 같은경우는 설정을 안해주면 아에 하지를 못하는경우가 생기더군요.

SSH가 지원되는 호스팅을 고르고 그렇지 않다면 cPanel 같은 관리자 툴이 제공되는지 꼭 알아보아야 할것입니다.

마지막으로 가장 중요한 것은 역시 비용입니다. 한국을 포함한 아시아권 서버의 비용은 전반적으로 비싼 반면 구미권 서버비는 상당히 싸다고 합니다. 저는 한국것만 써봤는데, 영어를 더 익혀서 북미에 미국호스팅이나 캐나다 호스팅도 한번 사용해봐야겠군요.


출처 : 나무위키, 본인생각

Posted by Joseph514
IT이야기/입코딩2017. 4. 14. 13:43


-JSP란 무엇일까요?



현재 저는 흔히들 이야기하는 자바 개발자로 일하고 있습니다.

단순하게 말하면 스프링 프레임워크로, SQL 화면 불러오고, JSP 화면에 뿌려주고 그런 일이죠.

이 JSP에 대해서 한번 말씀드려보겠습니다.

이 단어의 뜻은 Java를 사용한 서버측 코드가 들어가 있는 웹페이지란 의미로 JavaServer Page의 약자입니다. 

같은 부류에 속하는 것으로 PHP, ASP가 있습니다. 당연히, 확장자는 .jsp를 사용하지요. ex) index.jsp 이런식입니다. 

ASP와 마찬가지로 <% ... %>로 둘러싸인 스크립트 영역이 있으며, 실행시에 javax.servlet.http.HttpServlet 클래스를 상속받은 자바 소스코드로 변환된 다음 컴파일되어 실행됩니다. 

<p>Counting to three:</p>

<% for (int i=1; i<4; i++) { %>

    <p>This number is <%= i %>.</p>

<% } %>

<p>OK.</p>

이런 모양으로 사용된다고 보심되죠.

웹브라우저에 출력되는것을 확인해보겠습니다.

Counting to three:

This number is 1.

This number is 2.

This number is 3.

OK.

이렇게 나옵니다.


이 JSP 파일을 Servlet 클래스로 변환하고 실행시켜 주는 역할을 하는 프로그램이 Servlet Container로, 대표적으로 오픈소스 서블릿 컨테이너인 톰캣을 사용합니다.

개인 프로젝트인 경우 가볍고 무료인 톰켓을 많이 사용하나, 기업의 경우, 제우스나, 웹로직 같은 유료 서블릿 컨테이너들도 많습니다. 

하나의 JSP페이지가 하나의 자바 클래스이기 때문에 모든 자바 라이브러리를 끌어다 쓸 수 있습니다.

서블릿 컨테이너도 Java 프로그램이며, 자바 가상 머신 위에서 실행됩니다. 

따라서 대부분의 운영체제에서 소스코드 변경이나 재 컴파일 없이 실행시킬 수 있습니다. 

운영을 반영할때 controller등 java파일이 아닌 jsp의 경우는 그냥 새로고침만 해도 반영됩니다.

특히 유닉스계열과 궁합이 잘 맞는다고 합니다.

중-소규모 사이트에서 주로 쓰이는 PHP와 달리, 주로 대규모 기업용 시스템 구축에 사용됩니다. 

사람인이나 잡코리아를 보면 대부분의 구직란에 jsp 개발이 많습니다.

위에서 말씀드린대로, 대규모 기업 환경에서는 보통 톰캣과 같은 단순한 서블릿 컨테이너가 아닌, Java Platform, Enterprise Edition(J2EE) 사양을 만족하는 Application Server 위에서 프로그램을 운용하게 됩니다.

J2EE는 JSP의 실행 뿐만 아니라 DB 커넥션 풀, 메시징 시스템, 로드밸런싱 등등 화려한 기능들로 무장하고 있고 덕분에 매우 비싸며. 규모가 방대하고 무거우며, 메모리 등의 자원도 많이 사용하게 되고 상대적으로 초기 로딩도 느립니다.

이쪽 업계의 최고봉은 BEA의 WebLogic 이었지만 지금은 오라클에 인수된 상태 국내 한정으로 기관 등에 자주 쓰이는 티맥스소프트의 JEUS 도 J2EE 어플리케이션 서버입니다.

PHP를 지원하는 호스팅 업체는 많이 널려있지만 JSP를 호스팅 해주는 업체는 찾기가 예전에는 쉽지 않았으나, 데이터 센터와 호스팅 업체들이 클라우드 컴퓨팅으로 갈아탄 다음부터 비교적 싼 값에 자바를 운용할 수 있는 클라우드 호스팅 서비스도 꽤 생겨났다고 합니다.

구글의 App Engine이 공짜로 Java를 지원하니, 호스팅을 이용해보는것도 괜찮을거같습니다. 아니면 AWS(Amazone web server)에서 1년가량 무료로 사용하는 리눅스 서버에서 반영할수 있습니다.

PHP와 비교해서 JSP는 실행 속도가 빠르고, 안정적이고, 유지보수가 쉽다고 합니다.(정확히는 사용하기 나름이나, jsp는 어느정도 정형화 되 있어서 그런거같습니다.) 

반면 PHP는 개발 속도가 압도적으로 빠르다는 평가를 합니다.

그런데 아쉽게도 2010년대 이후의 웹 환경은 JSP의 경직된 구조를 받아들이지 못하고 있어 빠르게 인기가 식고 있다.

특히 요즘 트렌드인 API 주도형 사이트 구축과 SPA(Single Page Application)는 JSP와 정말 궁합이 안 맞는다네요. 

대기업이나 금융권, 관공서 등 주로 규모가 큰 곳에서는 여전히 수요가 있지만, 이러한 곳이 아니라면 서비스 내용 대비 쓸데없이 무겁고 학습곡선이 가파른 JSP를 선호하지 않는 경향이 있다고 합니다.

과거에 쓰였던 EJB 는 군더더기 코드가 많고, EJB를 로딩하는 데 꽤나 시간이 걸리며, 원래 분산 환경을 위해 설계되었으나 아무도 그렇게 쓰지 않고, 속도를 위해 Local Bean 으로만 줄창 쓰다가 지금은 스프링 프레임워크에게 완전히 밀려난 상태입니다.

그나마 스프링 프레임워크가 이 학습 곡선을 절반 정도로 줄여주긴 했으나 그래도 높습니다. 

스프링 프레임웍 없이 쌩으로 JSP를 사용한다면 그냥 코딩지옥이라는 평이 있습니다. 확실히 오래된 소스를 까보면 Model2 형식에 jsp로만 이루어진 사이트들이 있는데, 완전 헬 이군요.

ASP도 비슷한 사정으로 점유율이 하락중이라 합니다.

PHP가 아직 웹 쪽에서는 선방중이고(다만 사용하는 방식이 많이 변했다) 신흥강자로 node.js가 떠오르고 있습니다.

그리고 루비 온 레일즈의 성공도 JSP의 앞날을 가로막는 존재라고 하네요. 

파이썬의 장고(Django)와 플라스크(Flask)프레임워크도 편의성과 고성능, 그리고 압도적인 생산성과 낮은 학습곡선으로 JSP를 위협하고 있습니다

여기까지만 들으면 JSP 는 완전 안습이 되어 가고 있는거같은데, 한국에서의 SI에서는 최소 10년은 먹고 살걱정없을거같고, 해외 구직 사이트들에서도 분명 많은 비중을 차지하고 있습니다.

most popular coding languages of 2017

링크


여러 사이트들에서 랭킹을 매겨놨습니다.대부분은 java 언어가 1위를 차지하고 있네요.


자료 출처 : 나무위키, 위키백과

Posted by Joseph514