컴퓨터/Home Server

홈 서버 만들기 - 구성

김치부침개21 2022. 11. 4. 03:22
반응형

웹사이트를 만들어 보고 싶다는 생각이 불현듯이 들었다.

웹쪽은 한번도 경험해보지 못한 미지의 세계이다. 한달반을 공부해서 간단하게 웹페이지를 구축했다. 급하게 검색하며 찾아보고 만든거라 기억에 잘 남지 않고, 지식의 깊이도 깊지가 않다. 그래서 이곳에 홈서버 구축을 위한 내용을 기억하기 위해 정리를 하며 남겨 본다. 언어나 프로그램에 대한 자세한 내용은 없다. 깊이 있는 내용도 없다.

대충 아래의 순서로 진행을 했다.

 


웹언어 공부

  • 처음 시작을 어떻게 할지 고민하다가 예전에 보고 공부했었던 생활코딩  님의 강좌를 보고 개념을 익혔다. 언어, 데이터 베이스 등 다양한 분야를 무료로 아주 쉽게 알려준다. 유튜브 채널도 있으니 동영상(생활코딩)으로도 볼수 있다.
  • HTML(Hyper Text Markup Language) :
    • 웹페이지에서 골격과 같은 역할을 한다.
    • <html>, <head>, <body> 정도만 알고 있었던 터라 어렵다.
  • CSS(Cascading Style Sheets)
    • HTML로 골격을 만든다면 이를 투박하지 않고 보기 좋게 꾸며 준다.
    • 역시 한번도 해본적 없어서 생소하고 어렵다.
    • 태그 이름을 하나씩 쓰며 사용하는게 귀찮다.
    • CSS preprocessor 중 하나인 SCSS(SASS)를 사용하였다. 
  • Javascript
    • CSS가 디자인을 담당한다면 Javascript는 정적인 페이지를 동적으로 만들어 줄 수 있다.
    • Javascript 를 기반으로 만들어진 백앤드를 위한 node.js, typescript, react.js 등이 많이 사용되고 있다.
    • 절차지향적인 언어만 하다가 웹 언어를 쓰려니 어렵다

웹 호스팅 환경 - 홈 서버

  • 웹페이지를 만들려면 먼저 서버가 돌아가는 컴퓨터가 필요하다. 당연히 인터넷이 되는 네트워크도 필요하다. 그리고 고정 IP가 있으면 더욱 좋다. DDNS(Dynamic Domain Name System)을 사용하면 유동IP를 사용할 수 있지만, 여러가지 불편한 점들이 많다. 하지만 역시나 돈만 있다면 이렇게 불편한 것들을 한방에 처리해주는 서비스를 제공 받을수 있다. 해외 서비스로는 구글, 아마존 등이 있고 국내 서비스로는 가비아, 호스팅 같은 사이트 들이 있다. 유료로 돈만 내면 쉽게 이러한 서비스들을 받을수 있다. 하지만 컴퓨터 사양 및 트래픽 등이 내 마음에 들지 않는다. 또 얼마나 웹페이지를 유지할지도 모르니 일단은 집에서 사용해 보기로 하였다.
  • 개발 컴퓨터
    • 집에 있는 PC를 이용하였다. OS는 Windows 10 / IDE는  VScode
  • 서버 운용 컴퓨터
    • 처음에는 집에서 놀고 있던 싱글보드 컴퓨터를 이용해서 시작하였으나 고장이 나버리는 바람에 개인 PC에서 개발과 서버를 모두 운용하기로 하였다.
    • 가상환경 HyperV에 Ubuntu OS를 설치하여 운용하기로 하였다. 가상환경이기 때문에 native OS보다 느릴수도 있다는 생각이 든다. 컴퓨터는 거의 켜져 있기는 하지만 그래도 전기료가 많이 나올겠...

 


개발환경 선택 - vscode

  • 웹언어 개발을 위해 여러가지 에디터가 사용되고 있다. vim, sublime text, notepad++ 등등 여러가지가 많고 이후에 사용하려는 Framework나 언어에 따라서 선택할 수 있겠다.
  • Vscode 선택, 나는 요즘 많이들 사용하는 vscode를 사용했다. 처음 사용하려면 설정을 해줘야 해서 귀찮긴 하지만 그만큼 기능이 많아서 편하다.

웹 프레임워크(Framework) 선택 - Flask

  • 웹페이지들이 많아 한번에 쉽게 만들수 있는게 없을까 찾아보다 선택하게 되었다.
  • Python을 사용해 본적이 있어 선택한것도 있지만, 가볍고 내가 원하는대로 템플릿을 사용해서 만들수 있을것 같아서 Django 보다는 Flask를 사용했다. 사실 Template를 사용해서 웹페이지를 쉽게 만들 수 있을 것 같아서 선택한 면도 있다.
  • PHP, RUBY, PYTHON, ASP, JSP, JAVA, Javascript 등을 기반으로 한 것들이 많다.
  • Flask 사용법은 시코-시니어코딩 님의 강의를 들으며 공부했다.

 


WAS(Web Application Server), WSGI(Web Server Gateway Interface)  선택 - gunicorn

  • 웹서버와 백앤드 서버를 연결시켜주는 middleware 역할을 한다.
  • python 기반 프레임워크를 사용하면 WSGI를 사용하게 되는데 uwsgi, gunicorn 2가지 라이브러리가 있다. 이중 gunicorn을 이용하였다. gunicorn이 좀 더 속도가 빠르다는 이야기가 있다.

웹 서버(Web Server) 선택 - Nginx

  • apache 가 전통적인 강자이다. APM이라고 말할정도로 Apache+PHP+MySQL 이라고 할정도로 점유율이 높다.
  • Nginx는 최근 빠르게 점유율을 높이고 있다. 검색해보니 나는 DB를 사용할것도 아니라서 Nginx를 웹서버로 선택했다.
  • 사실 Flask만 있어도 가벼운 서버는 돌릴 수 있다. 하지만 테스트 용도 일뿐 안정적인 서버를 운용하려면 WSGI+Nginx를 같이 사용해야 한다.
  • 서버쪽은 지식이 전무하기 때문에 더욱 어려웠다.
  • 점프 투 플라스크 라는 책으로 서버쪽은 따라하는 정도로 끝냈다. Flask+gnucorn+Nginx 를 이용해서 웹사이트를 개설하는 과정을 알려주는 책이다.

도메인 개설 (도메인 구매 + DDNS)

  • 웹페이지를 만들려면 역시나 URI(URL) 주소가 있어야 한다.
  • URL을 만드는 방법은 여러가지가 있는데 나는 나만의 도메인을 만들고 싶어서 유료로 돈을 주고 구매하였다. 해외사이트에서 구매 할 수도 있지만 국내 사이트를 가비아를 통해 구매하였다. 비용은 대략 연 20,000원, 할인행사를 자주 한다.
  • 도메인은 구입했지만 웹호스팅 서비스는 이용하지 않기 떄문에 고정IP는 없다. IPTIME 공유기를 이용하고 있기 때문에 iptime DDNS 서비스를 이용하였다. DDNS를 쓰면 불편한 점이 있다. 웹호스팅 서비스를 이용하면  웹공간과 고정 IP를 제공해주지만 역시나 비용이 문제. 테스트를 위해서라면 몇개월간 무료로 제공해 주는 곳들이 많이 있다.

SSL(Secure Sockets Layer) 발급 - Letsencrypt

  • 예전에는 http:// 로 시작하는 주소를 사용하였다면, 보안과 관련하여 요즘은 모두 https:// 주소를 사용한다. 최근 웹브라우져들은 http:// 주소는 접속조차 허용하지 않는 경우가 많다. https를 사용하려면 인증기관을 통해 인증을 받아야한다.
  • 인증을 받기 위해서는 기관을 통해 유료로 받아야 한다. 하지만 비영리 단체 Letsencrypt 라는 라는 곳에서 무료로 발급을 해주고 있다. 사설 개인 인증을 통해서도 발급을 받을수 있지만 공인된 기관에서 발급 받은게 아니라면 테스트 환경이 아닌 실사용에서는 제한적이다. 인증 범위가 틀리지만 개인이 사용하기에는 무료로도 충분하다. 다만, 유료가 아닌 만큼 단점이 있다면 갱신기간이 3개월로 짧다는 것이다. 스크립트를 통해 자동 갱신을 해 이러한 번거로움을 해결 할 수 있다.
  • Iptime DDNS 도 예전에는 letsencrypt 사이트에서 등록이 가능했지만 현재는 발급이 안된다고 한다.(직접 해보지는 않았다.) 하지만 나는 도메인을 구매하였다. 고정IP가 아니기 때문에 A record 를 통해 등록은 하지 못하고, CNAME 등록을 통해 우회하여 발급을 받았다.

 


검색엔진최적화(Search Engine Optimization)

  • 웹페이지를 만들었다면 다른 사람들이 접속이 되어야 한다. 나만 보는 페이지라면 나만 알면 되겠지만, 모든 사람이 사용하려면 검색엔진에서 검색이 되어야 한다.
  • 웹 페이지를 만들고 광고를 하고 시간이 지나 사람들이 많이 들어온다면 검색엔진의 크롤러가 사이트를 서치 하겠지만 미리 검색엔진에서 검색이 되게하려면 도메인을 등록해야 한다.
  • Google, Naver 와 같은 검색엔진에서 등록을 하여 웹페이지가 검색되도록 하였다.

 

대략적으로 보면 이 정도 과정을 통해서 홈서버를 구축하였다. 모르는 걸 공부하는 것은 역시나 힘든일이다.

반응형