나만의 홈서버 만들기 2부 : 네트워크 설정 및 S/W 설치

나만의 홈서버 만들기 2부 : 네트워크 설정 및 S/W 설치


1. 시작하며


※ 1부 보기: https://sharedit.co.kr/posts/20999


  IT 지식을 공유하는 전문 커뮤니티라고는 해도, 저와 같이 입문자에 가까운 분이 계시지 않을까 하는 생각에 시작하게 된 홈 서버 만들기 1부 이후 시간이 제법 흘렀네요. 본업이 따로 있다 보니 작성이 늦어지게 됐습니다. 1부에서는 주로 홈 서버 구성에 대한 전반적인 내용과 선택지에 관한 이야기를 나눴습니다. 2부 역시 큰 그림에서는 개념에 대해 다뤄보겠지만, 몇몇 예시를 드는 느낌으로 설명을 덧붙여보고자 합니다.


  공부나 교육에 대한 개념은 저마다 다르겠지만, 저는 일단 첫 단추를 끼워야 무언가가 시작된다고 생각하는 편입니다. 홈 서버나 소형 비즈니스 서버를 꾸리고 싶었지만 막연한 느낌 때문에 시작하지 못한 분도 많이 계시지 않을까 합니다. 1부에서도 언급했지만, 포기하지 말고 끈기 있게 도전해보라는 말씀을 드리고 싶습니다. 실무자에 비한다면 전문적인 지식이 상대적으로 떨어지는 저조차도 홈 서버를 꾸리고 운영한 지 2년이 훌쩍 넘었으니까요. 새로운 도화지에 그림을 그린다는 생각으로 홈 서버 구성에 관한 이야기를 조금 더 나눠봅시다.








<이미지 1. 포트 포워딩과 내부망은 용어가 익숙지 않을 뿐 개념은 단순하다. / 출처: Unplash>



2. 포트 포워딩 설정


  앞서 1부에서 네트워크 연결에 대한 예시를 들었습니다. 하나는 회선을 직접 연결하는 방식이고, 다른 하나는 공유기를 통해 접근하는 방식입니다. 회선을 직접 연결할 수 있는 상황이라면 네트워크 연결에서 크게 문제가 없겠지만, 공유기를 거쳐야 하는 상황이라면 몇 가지 준비가 필요합니다. 그중 하나가 바로 포트 포워딩입니다.


  위키백과를 참고하자면, 포트 포워딩(Port Forwarding) 또는 포트 매핑(Port Mapping)은 컴퓨터 네트워크에서 패킷이 라우터나 방화벽과 같은 네트워크 게이트웨이를 가로지르는 동안 하나의 IP 주소와 포트 번호 결합의 통신 요청을 다른 곳으로 넘겨주는 네트워크 주소 변환의 응용이라고 합니다. 말이 너무 어렵고 복잡한데, 정말 단순화해서 설명하자면 ‘교환원’ 역할이라고 생각하면 됩니다. 통신 쪽과 연관 있는 부대를 전역한 성인 남성이나 고전 영화를 좋아하는 분에게는 교환원이라는 단어가 그리 생소하게 들리진 않을 텐데요. 외부에서 특정 포트로 접근을 시도했을 때 최종 도착지를 결정해주는 역할을 하는 게 포트 포워딩입니다.




<이미지 2. 위키백과에서 발췌한 포트 포워딩 이미지. 요지는 포트를 연결해주는 중간 다리 역할이다.>


  그렇다면 외부에서 접근을 시도하는 포트와 내부 포트가 무조건 같아야 하는지 의문일 수 있습니다. 결론부터 말하자면 그렇지는 않습니다. 결국 외부에서 접근을 시도하는 포트를 어떤 단말과 포트로 연결하는지는 규칙을 따라가게 됩니다. 예를 들어 외부 포트를 1234로 지정해서 접근하더라도, 내부 연결 포트를 80으로 지정해놨다면 이런 규칙을 따르게 됩니다.



  예시1) 1234 포트로 접근 시 192.168.1.10 단말의 80 포트로 연결하도록 설정

    → 10.10.10.10:1234로 접근 시도 시 192.168.1.10:80으로 연결됨

  예시2) 443 포트로 접근 시 192.168.1.50 단말의 8443 포트로 연결하도록 설정

    → 10.10.10.10:443로 접근 시도 시 192.168.1.50:8443으로 연결됨


  그래서 포트 포워딩 설정에서는 어떤 규칙으로 연결하도록 설정했는지와 더불어 단말로 연결된 서버에서 어떤 포트 허용 규칙을 설정해두었는지 반드시 기억할 필요가 있습니다. 이런 설정이 올바르지 않게 된다면 공유기에서 정상적으로 접근 요청을 넘겨주지 않거나 접근 자체가 불가한 상황이 연출될 수 있으니까요.




<이미지 3. 작성자 공유기에 설정되어 있는 포트 포워딩 예시 이미지>


  그렇다면 포트 포워딩 설정은 어디에서 해야 할까요? 일반적으로는 집에서 사용 중인 공유기 설정 페이지로 접근해서 해당 기능을 설정할 수 있습니다. 예시 이미지로 제가 집에서 사용 중인 공유기 포트 포워딩 설정 메뉴를 가져왔습니다. 예시에서는 ASUS 공유기 설정 화면을 보여주고 있지만, 다른 제조사 공유기라고 해서 크게 다르지는 않습니다. 공유기가 해야 할 역할 자체는 크게 다르지 않으니까요. 서버로 포트 포워딩을 잘 넘어가게 설정했다면, 실제 서버 운영 전에 반드시 확인해보는 습관을 들이는 걸 잊지 마세요.


  포트 포워딩은 꼭 필요한 포트만 열어두는 걸 권장합니다. 예를 들어 웹 서비스 접속을 위한 http, https 접속 포트와 SSH 접근을 위한 포트, 추가적인 통신을 위해 열어둬야 할 포트 정도를 제외한 나머지는 모두 닫아두는 걸 추천합니다.








<이미지 4. 무료 DNS 서비스로 유명한 Duck DNS / 출처: duckdns.org>




3. DDNS 설정


  포트 포워딩과 더불어 DDNS 설정도 매우 중요한 역할을 합니다. 서버 구동과 포트 포워딩 설정으로 내 · 외부에서 서버에 접근할 수 있게 되었다고 하더라도, 언제까지고 숫자로 된 IP 주소만을 외울 수는 없기 때문입니다. 설상가상으로 한 가지 문제가 더 있는데, 가정용으로 지급되는 회선은 유동 IP를 제공한다는 점입니다. 인터넷 서비스를 공급하는 ISP에서는 IP를 무한정 제공할 수 없기 때문에 사용자가 인터넷에 접근할 때 남는 IP를 할당하는 방식을 주로 사용합니다. 그래서 인터넷을 종종 사용하다 보면 IP가 바뀔 때가 있는데, 서버를 운영하는 입장에서는 매번 바뀌는 IP를 외우는 게 난감할 수밖에 없습니다. 그래서 등장하는 게 DDNS입니다.


  DDNS는 Dynamic DNS 또는 줄여서 Dyn DNS라고 부르는 동적 DNS 방식입니다. DDNS를 활용하는 주된 이유는 유동 IP를 활용하더라도 같은 접속 주소를 유지할 수 있기 때문입니다. 만약 abc.com이라는 도메인을 소유하고 있다고 가정했을 때, DDNS 기능을 이용해서 바뀌는 IP를 매번 갱신해줄 수 있다면 언제 어느 때나 abc.com으로 서버에 접근하는 게 가능하다는 이야기입니다. 그렇다면 DDNS는 어떻게 이용해야 할까요? 방법은 여러 가지가 있지만, 가장 간편한 방법은 공유기에서 자체 제공하는 DDNS 기능을 활용하는 겁니다.




<이미지 5. ASUS 공유기에서 기본 제공하는 DDNS 서비스 화면>




  비단 ASUS 공유기뿐만 아니라 국내에서 많이 사용하는 아이피타임 공유기, TP-Link 공유기 등 다양한 제품들이 DDNS 서비스를 무료로 제공하고 있습니다. 하지만 모든 공유기에서 지원하는 건 아니기에, 대안도 분명 존재해야 할 텐데요. 리눅스 환경이라면 DDNS 기능을 수행하는 소프트웨어를 설치하거나 수동으로 간단한 셸 스크립트를 만들어서 자동으로 갱신되도록 설정할 수도 있습니다.


  예를 들어 별도 도메인을 사용 중이고 Cloudflare를 함께 활용한다면, Cloudflare에서 내 서버를 바라볼 수 있도록 DNS 설정을 할 수 있습니다. 이때, 서버에서는 주기적으로 회선 IP를 확인하고 해당 내용을 Cloudflare DNS 설정으로 전송할 수 있는데, 이런 방식을 이용해 간이 DDNS 서비스를 제작하는 게 가능합니다. Cloudflare를 이용한 IP 갱신은 이미 구글링만으로도 많은 자료를 얻을 수 있는 만큼 추가적인 설명은 생략하도록 하겠습니다.








<이미지 6. 본격적인 웹 서버로 기동하려면 APM 또는 NPM이 필요하다. / 출처: pixabay>




4. APM & NPM 설치


  이제 나만의 홈 서버 만들기 막바지에 다다랐습니다. 사실 홈 서버로 기능하기 위해서는 FTP라거나 Samba처럼 더 많은 내용을 함께 포함하는 게 좋겠지만, 어디까지나 이번 기고의 취지는 홈 서버, 나아가 서버라는 개념을 너무 막연하게 생각하는 초급자를 위한 내용이므로 개념을 설명하는 쪽에 조금 더 초점을 맞추었습니다. 향후에도 비슷한 레이아웃으로 기고할지는 확언하기 어렵지만, 차후에도 이런 튜토리얼을 소개할 일이 있다면 세부 내용에 대해서도 별도로 언급할 기회가 닿으면 좋겠습니다.


  APM과 NPM은 특정 애플리케이션의 알파벳을 따온 약어로, APM = Apache + PHP + MySQL(혹은 MariaDB)을 뜻합니다. NPM은 Nginx + PHP + MySQL(혹은 MariaDB)를 지칭하는 약어입니다. 이렇게 표현하더라도 초급자 입장에서는 이해하기 어려울 텐데요. 조금씩 풀어서 설명해보도록 하겠습니다.


  나만의 홈 서버를 만들기 위한 목적은 다양하게 있겠지만, 대다수는 웹 드라이브나 NAS 개념에 가깝게 활용하는 사례가 많을 겁니다. 아니면 개인용 홈페이지나 블로그를 가볍게 운영하고자 하는 목적도 있을 수 있겠네요. 그렇다면 웹 서버로 구동되도록 애플리케이션을 설치하고 실행해야 하는데, APM이나 NPM은 이를 위한 베이스라고 생각하면 됩니다.


  웹 서버를 구동하기 위해 가장 기본이 되는 건 역시 웹 서버 애플리케이션일 텐데, 이에 해당하는 게 바로 Apache나 Nginx입니다. Apache나 Nginx에 대한 개념 이해가 아직은 어렵다면 대부분 최신 리눅스에서 기본 지원하는 Apache 쪽이라고 생각하면 편하겠네요. PHP는 웹 서버 애플리케이션과 함께 묶여서 작동하는 애플리케이션이라고 이해하면 쉬울 텐데, HTML 코드나 다양한 함수를 수행하기 위한 기능이라고 이해하면 빠를 듯합니다. 예를 들어 웹상에서 이루어져야 하는 다양한 스크립트 기능은 PHP를 기반으로 하는 사례가 많습니다. 마지막으로 MySQL과 MariaDB는 데이터베이스 관리용 애플리케이션입니다. 데이터베이스라고 해서 너무 어렵게 생각할 필요는 없습니다. 특정 자료를 묶어서 보관하는 개념이 데이터베이스이기 때문입니다. 예를 들어 물품 관리를 위해 엑셀 문서로 내용을 차곡차곡 정리하고 있다면 이미 훌륭하게 데이터베이스를 활용 중인 겁니다.




<이미지 7. 흔하게 많이 사용하는 엑셀 시트도 넓은 의미에서는 데이터베이스에 해당한다.>


  MySQL과 MariaDB는 개념상 크게 다르지는 않습니다. 하지만 오픈소스로만 제공되던 과거와 달리, MySQL은 오라클에서 인수한 애플리케이션인 관계로 상용 버전이 별도로 존재하고, MariaDB는 MySQL의 커뮤니티 버전으로부터 파생한 애플리케이션이기에 상용 버전을 제공할 수 없습니다. 바꿔 말하면 MariaDB는 앞으로도 무료로 제공할 가능성이 매우 높은 만큼 개인 사용자에게 조금 더 적합할 수 있겠네요. 물론 어디까지나 선택은 개인의 자유입니다. 리눅스 계열 운영체제를 사용한다면 자체 제공하는 앱 관리 기능으로 설치를 손쉽게 할 수 있는 만큼 너무 겁먹지 말고 설치 및 설정해보면 좋겠네요.








<이미지 8. 다양하게 제공되는 CMS>




5. CMS 혹은 웹 기반 소프트웨어 설치


  홈 서버를 사용하려는 목적은 제각각이겠지만, 한 가지 공통 사항은 있으리라 생각합니다. 바로 편의성이 아닐까 하는데요. 무에서 유를 창조할 수 있는 프로그래머나 컴퓨터 지식이 풍부한 사람이라면 얼마든지 혼자서 뼈대부터 세우는 게 가능하겠지만, 보통은 쉽지 않은 일입니다. 이는 개념적인 내용을 작성하면서도 너무 깊이 들어가지 않는 까닭이기도 합니다. 너무 많은 걸 주입해서 혼란을 주기보다는 필요한 정보만을 일차적으로 전달하기 위함이죠.


  이런 목적을 고려해본다면, 서버용 애플리케이션 역시 단순하고 쉬워야 한다고 봅니다. 예를 들어 블로그나 개인 홈페이지를 운영하고자 한다면 CMS를 활용한다는 예시처럼 말이죠. CMS는 Content Management System의 약자로, 쉽게 말해 콘텐츠 관리를 위한 도구입니다. 여기서 말하는 콘텐츠란 사진이나 동영상, 글처럼 직 · 간접적으로 생산하는 저작물을 의미합니다. 블로그로 친다면 포스트, 커뮤니티로 친다면 게시물이 이에 해당하겠네요. 단순한 목적으로 홈 서버를 이용하고자 한다면 대다수는 여기에 해당하리라 봅니다.


  설치법은 그렇게 어렵고 복잡하지 않습니다. CMS를 설치하는 방법은 저마다 조금씩 다르겠지만, 큰 줄기에서는 아래 과정을 따릅니다.


  1) APM 혹은 NPM 설치

  2) CMS 용도로 사용할 데이터베이스 생성

  3) 웹 서버 애플리케이션으로 실행할 위치에 CMS나 웹 소프트웨어 설치

  4) 외부 접근 여부에 따른 접근 경로 확보


  간단히 말해, 앞서 언급했던 과정들을 접목한다면 훌륭히 홈 서버로 거듭나는 게 가능하다는 이야기입니다. 여기서 조금 더 나아가면 도메인 설정이나 Rewrite 설정 등을 통해 쉽고 빠르게 접근할 수 있는 경로를 확보하는 정도가 아닐까 하네요. 국내에서는 xpressengine이나 rhymix, 그누보드 같은 게 대표적인 CMS에 해당할 테고, 해외로 시선을 돌려 본다면 wordpress는 막강한 소프트웨어가 있습니다. 초보자도 쉽게 설치할 수 있게 각종 레퍼런스 문서를 제공하고 있는 만큼, 끈기 있게 하나씩 시도해본다면 큰 무리 없이 설치할 수 있으리라고 봅니다.


  NAS 용도가 주목적이라면 Nextcloud나 Owncloud 같은 소프트웨어가 있는데, 개인적으로는 Nextcloud가 여러모로 사용이 편리하고 업데이트도 꾸준한 만큼 추천해드리고 싶습니다. 이런 CMS 소프트웨어나 서버 개념에 친숙해졌다면, 다음으로 살펴보면 좋은 개념은 하이퍼바이저(Hypervisor)가 아닐까 합니다. 저는 홈 서버 위에 Unraid를 올리고 그 위로 우분투 서버를 VM으로 얹어둔 상태입니다. 이렇게 사용하면 외부에서도 실제 PC에 연결해서 관리하듯 접근하는 게 쉽다는 장점이 있으며, 필요하다면 자원을 나눠서 여러 VM 인스턴스를 올릴 수 있다는 장점도 있습니다. 다만 하이퍼바이저 개념은 현 단계에서 설명하기에는 조금 어려울 수 있으니 차후 설명할 기회가 있으면 좋겠네요.








<이미지 9. 도전해보세요! / 출처: unsplash>




6. 마치며


  나만의 홈 서버 만들기 1부와 2부는 개념적인 설명이었던 만큼 실제 예제로 조금 더 상세한 예시를 들지 못한 점이 못내 아쉽습니다. 최초로 나만의 홈 서버 만들기를 기획할 때는 세부 예시를 들어가면서 조금 더 꼼꼼하게 설명하는 방향도 고려하기는 했습니다. 물론 기초적인 이해도 없이 무작정 따라 하는 방법도 나름대로 훌륭한 장점은 있지만, 빠르게 발전하고 바뀌고 있는 시대상에 빗대면 응용하기가 어렵다는 단점이 있어서 오히려 어려울 수 있겠다는 생각이 들었습니다. 일단 도전해보는 건 용기라고 생각하지만, 그래도 개념적인 부분을 이해하고 도전하는 접근법은 큰 무기가 될 수 있으니까요.


  개념적인 내용들을 설명했다고는 하지만 부족한 부분은 많이 있겠다고 생각합니다. 그럼에도 불구하고 서버라는 개념에 대해 너무 막연했거나 어떻게 시작하거나 접근해야 할지 전혀 감을 잡지 못했다면 조금이나마 도움이 되었으면 합니다. 나만의 홈 서버 만들기는 여기서 마무리하겠지만, 기회가 된다면 실제 예제나 시리즈 형태로 서버를 구성하거나 설정하는 등 실전 테스트를 병행할 수 있는 내용도 소개해보고 싶다고 생각합니다. 물론 번데기 앞에서 주름잡는 꼴일 수 있어서 제 나름대로도 공부를 열심히 해야겠지만요.


  무엇보다도 SharedIT는 많은 실무자가 참여하는 커뮤니티 공간입니다. 제 어설픈 유저 리뷰보다도 더 전문적이고 자세한 지식을 갖추고 계신 분이 잔뜩 계시니, 필요하다면 적극적으로 질문 공세를 남겨보는 방법도 레벨업할 수 있는 좋은 수단이 아닐까 합니다. 항상 시작이 어려운 법입니다. 적극적으로 도전해서 홈 서버를 만들어 보거나 리눅스 체계에 익숙해지는 등 실무에도 도움이 되었으면 하는 바람과 함께 글을 마무리하겠습니다.


태그가 없습니다.

4개의 댓글이 있습니다.

일 년 이상 전

좋은 내용 감사합니다

Reply

댓글 남기기

댓글을 남기기 위해서는 로그인이 필요합니다.

로그인 회원가입

일 년 이상 전

자료 감사합니다.

Reply

댓글 남기기

댓글을 남기기 위해서는 로그인이 필요합니다.

로그인 회원가입

일 년 이상 전

유익한 정보 감사합니다

Reply

댓글 남기기

댓글을 남기기 위해서는 로그인이 필요합니다.

로그인 회원가입

일 년 이상 전

유익한 정보 감사합니다

Reply

댓글 남기기

댓글을 남기기 위해서는 로그인이 필요합니다.

로그인 회원가입

댓글 남기기

댓글을 남기기 위해서는 로그인이 필요합니다.

로그인 회원가입