웹 호스팅

간략 소개

웹 호스팅은 누군가가 만들어 둔 웹서버를 사용하는 것으로…
주택으로 본다면 하나의 건물에 여러 가구가 거주하는 “임대 아파트”와 같다.

서버를 관리하는 비용이 없이 간단하게 홈페이지를 만들 수 있기 때문에
웹서버만 필요한 경우라면 VPS나 자체 서버를 구축하지 않고 웹호스팅을 이용하는 것이 저렴하고 편리하다.

서버의 사양이 점점 높아져서 웹호스팅만 하는 경우라면, 하나의 서버에 상당히 많은 웹페이지를 넣을 수 있게 되어
과거의 웹호스팅에 비하면 굉장히 저렴한 제품이 많이 나왔다.

크게 Windows와 Linux 웹호스팅으로 구분되고, 가끔 Java 웹호스팅도 있긴 하다.
Windows 웹호스팅은 당연히 IIS와 함께 ASP를 기반으로 하고
Linux 웹호스팅은 대부분 Apache + PHP + MySQL(또는 MariaDB)를 제공한다.

또한 관리를 위한 SSH 접근을 허용하며, 대부분 FTP와 웹기반 DB 관리자도 지원한다.

웹호스팅 서비스 선택시 주의 사항

SSL 지원 여부를 확인해야 한다.
법령에 따라 회원 가입을 받는 사이트는 SSL을 사용해야 하는데, 업체마다 해당 내용이 매우 다르다.
지원을 아예 안하는 업체도 있고, 비싸게 팔아먹는 회사들이 대부분이고, 직접 발급받은 SSL 인증서를 사용할 수 있는 업체는 소수이다.
직접 발급 받은 인증서를 사용하지 못하면, 호스팅 업체가 부르는 가격대로 비싸게 SSL 인증서를 구입해야 하는데…
개인이 사용하기에는 너무 비싸게 받는다.

일 트래픽 제한이 충분한지 확인한다. 그리고 트래픽 제한에 걸리면 임시로 N회 풀어주는 것도 있는지 잘 확인한다.
트래픽 제한에 따라 초기 웹서비스를 세팅하기 위한 파일 업로드에 문제가 생길 수 있다.

서브도메인 지원 여부도 잘 따져 본다. 상당 수의 웹호스팅 업체가 서브 도메인을 지원하지 않거나, 자사의 도메인 서비스 이용시에만 가능하게 하는 경우가 많다.
이런 점에서는 외국 웹호스팅이 나을 수도 있다. 미국 웹호스팅 업체들은 이런 것 가지고 치사하게 장사하지 않는 업체가 많다.

웹호스팅 관련 사이트들

[iwinv]
하루 10원 용량 10G 트래픽 무제한… SSL 미지원…
하루 20원 용량 10G 트래픽도 10G… Let’s Encript SSL 지원

[코리아호스팅]
최저 사양으로 월 333원, 용량 500M, 트래픽 약 15G, 아주 기본적인 서비스, SSL 부가 서비스 지원

[80포트]
적당한 용량까지는 제한 없이 허용한다 하고, 최저가 기준 일 1G 트래픽
SSL 설정은 inames.co.kr 을 통해서 해야 한다.
지속적인 건전한? 운영을 한다면 무료 호스팅을 받을 수도 있다.

[bluehost]
미국 업체로 월 $3 정도에 50G 트래픽 무제한, Free SSL, 서브 도메인 지원, 이메일 계정 5개, 이메일 계정당 100MB 등!
같은 가격의 국내 서비스와 비교하면 좋은 편이다.
그리고 서버가 한국이 아니므로…

빌드 자동화 도구

세상이 변해서 프로그램이 한 번 만들면 수년씩 사용하던 시대가 끝나고 프로그램은 시도 때도 없이 수정되고 배포되는데 매번 사람이 이 짓을 하기 힘드니까 사용하는 것들을 일컫는다.

[BuildIT Automated Task Tool]

  • 개인 작업환경에서 반복되는 일을 자동화 하는데 사용
  • 무료
  • 기능이 부실 -> 무료니까… -> 기능이 적어서 사용법이 간단

[Final Builder]

  • 상용인만큼 아주 편리한 UI를 가지고
  • 서버를 제공해서 여럿이 같이 사용할 수 있음

[Jenkins]

  • 무료
  • 서버를 만들고 여럿이 쓸 때 사용
  • Final Builder와 같은 편리한 UI는 없음 -> 하지만 기능은 거의 유사하게 제공

std::locale로 현재 시스템의 locale 설정하기 (for Windows)

Windows 환경에서 STL의 기본 로케일 값이 한글 출력에 문제가 있을 수 있다.
현재 시스템 언어가 한글이라면 아래와 같은 방법으로 간단히? 설정할 수 있다.

struct InitSTLLocale {
    InitSTLLocale() {
        // C Locale에서 현재 시스템의 로케일(OEM Code Page) 설정 중 ctype과 collate만 덮어쓴 로케일로 생성한다
        std::locale loc(std::locale::classic(), ".OCP", std::locale::ctype | std::locale::collate);

        // 아래는 Ansi Code Page를 사용할 때
        std::locale loc(std::locale::classic(), ".ACP", std::locale::ctype | std::locale::collate);
        
        // 원하는 곳에 설정
        std::wcin.imbue(loc);
        std::wcout.imbue(loc);
        std::wcerr.imbue(loc);
        std::cin.imbue(loc);
        std::cout.imbue(loc);
        std::cerr.imbue(loc);
    }
} _gInitSTLLocale;

간단한 Docker 사용

Ubuntu 16.04 LTS 기준으로 작성

설치

# docker라는 패키지명은 이미 사용 중이여서 docker.io라는 패키지 명을 사용
apt-get install docker.io

# docker를 사용할 사용자를 그룹에 추가
# 미리 docker를 사용할 유저를 docker 그룹에 추가하면 sudo 명령을 통하지 않고 docker를 사용할 수 있음
usermod -G docker -a bs

이미지 관리

왠만하면 이미지는 공식 버전(OFFICIAL)을 사용하는 것을 권장
이미지 저자가 악의적인 무언가를 넣었을 수도 있으므로 검증된 이미지를 사용해야 함
자신만의 이미지 생성이나 설정을 할 때에는 Host OS와 동일한 이미지에서 시작하는 것을 권장

# 이미지 찾기
docker search ubuntu

# 이미지 받기
docker pull ubuntu

# 가지고 있는 이미지 확인
docker images

# 가지고 있는 모든 이미지 확인
# 태그 되지 않고 이름이 없는 이미지들이 보일 수 있음
# 태그된 이미지가 참조하는 익명의 이미지가 보일 수 있음
docker images -a

# 컨테이너를 이미지로 생성
docker commit -a "BS <bs@bspfp.pe.kr>" -m "Commit Test" ubuntu-test mytest:0

# 이미지에 추가 태그 붙이기
docker tag mytest:0 mytest:latest

# 이미지 삭제
# 더이상 참조되지 않는 익명의 이미지가 함께 삭제 됨
docker rmi mytest:0

아래는 ubuntu 이미지 검색 결과

NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                            Ubuntu is a Debian-based Linux operating s...   5365      [OK]
ubuntu-upstart                    Upstart is an event-based replacement for ...   69        [OK]
rastasheep/ubuntu-sshd            Dockerized SSH service, built on top of of...   66                   [OK]
consol/ubuntu-xfce-vnc            Ubuntu container with "headless" VNC sessi...   37                   [OK]
ubuntu-debootstrap                debootstrap --variant=minbase --components...   27        [OK]
torusware/speedus-ubuntu          Always updated official Ubuntu docker imag...   27                   [OK]
nickistre/ubuntu-lamp             LAMP server on Ubuntu                           14                   [OK]
nuagebec/ubuntu                   Simple always updated Ubuntu docker images...   13                   [OK]
nickistre/ubuntu-lamp-wordpress   LAMP on Ubuntu with wp-cli installed            8                    [OK]
...

컨테이너 관리

# 컨테이너를 생성하면서 실행
# create로 생성하고 start로 실행할 수도 있지만 run으로 바로 생성과 시작을 할 수도 있음
# --rm 옵션을 주면 종료시 컨테이너를 자동으로 삭제함
docker run -i --name ubuntu-test -t ubuntu /bin/bash -

# 실행 중인 컨테이너 확인
docker ps

# 종료된 컨테이너를 포함한 모든 컨테이너를 확인
docker ps -a

# 종료된 컨테이너 다시 실행
docker start -a -i ubuntu-test

컨테이너

가상화는 H/W 환경을 가상으로 제공한다.
이에 따라 각 VM에 Guest OS를 설치해야 한다. 그만큼의 저장소도 소비한다.
컨테이너는 이런 단점을 대폭 줄여서 소프트웨어 환경만 분리한다.
마치 Linux에서 chroot 명령을 적절히 사용하여 Host OS와 분리된 공간에서 소프트웨어를 구동하는 것과 유사하다.
때문에 가상화보다 빠르다.

[Docker]

업계 표준이 된 컨테이너 기술

[간단한 Docker 사용]
[가장 빨리 만나는 Docker]

Windows Container

Microsoft에서는 Windows Server 2016에서 컨테이너 기술인 Docker를 Windows Container와 Hyper-V Container 형태로 제공/지원.
기존 Docker와 완전히 다른 형태가 아니라, Docker와 동일한 형태를 Windows Server에 구현한 형태.
그렇기에, Docker 자체 명령어와 Windows PowerShell 형태의 관리를 제공.

[Windows Container]
[MS의 Windows Container에 대한 알림글]

VPS(Virtual Private Server) – 가상 서버 호스팅

[VM 관련 포스팅]에서 소개한 VM 으로 서버를 제공하는 서비스

웹호스팅과 같은 특정 기능을 호스팅하는 것에 비하면 비싸다.
하지만 OS의 관리자 권한을 가지고 자신만의 환경을 구축하여 서비스 할 수 있기 때문에 원하는 용도로 맘껏 활용할 수 있다.

저렴한 VPS
[Google Cloud Platform]
[AWS Lightsail]
[Vultr]

D2Coding

[D2Coding GitHub]

BS가 지금까지 사용했던 프로그래밍 언어는 모두 영어에 기초를 두고 있다.
하지만 BS는 한국에서 살고, 일하므로… 프로그램 소스에 대부분 한글로 주석을 작성한다.
일단, 그 주석을 읽는 사람 중에 한국어가 모국어가 아닌 사람이 한명도 없기 때문에…

그런데 BS와 같은 사람에게 적합한 코딩용 고정폭 폰트가 없다.
그나마 그럭저럭 참고 쓸만한 것이 돋움체 정도?
결국 Il1O0 구분도 안되는 폰트 뿐인데…

현재로선… 유일하게 사용할 수 있는 폰트는 D2Coding 뿐

IncrediBuild

[IncrediBuild]

여러 컴퓨터에서 병렬로 빌드를 수행해서 빌드 타임을 크게? 향상 시켜주는 솔루션
C++로 개발할 때 어느 정도 규모가 커지면 유용한 제품이다.
그런데 한글을 포함한 영어가 아닌 언어들과 궁합이 좋지 않다.

[2018년 1월 16일 IncrediBuild Knowledgebase 글]

If the default versions of your operating system and Visual Studio are not English,
the IncrediBuild console output may read out unrecognizable characters,
such as question marks or may just output “undefined characters.”

IncrediBuild needs to write the output in English, this is due to Delphi limitations,
so if there is no English language pack available, you will face this issue.

발번역을 해보면

영어 버전이 아닌 OS와 VS를 사용하면 외계어가 출력되는데
이는 델파이의 한계 때문이지 우리 책임이 아니야.
IncrediBuild 를 쓰려면 영문으로 설정해.

정말? 델파이란 녀석이 영어만 지원한다고? 금시초문인데…

BS가 회사에서 테스트한 결과로는…
정말로 영어가 아닌 한글로 출력을 하게 되면 알 수 없는 이유로 빌드가 실패
(알 수 없는 이유는 … 아무것도 출력하지 않고 그냥 실패라고만 뜨기 때문… 돈 주고 팔지 말았으면…)

결론… IncrediBuild 는 정말 유용하지만 영문만 지원한다.