자기 서명(self signed) SSL 인증서 만들기

openssl req -new -newkey rsa:2048 -days 36500 -nodes -x509 -keyout bslinux.key -out bslinux.crt

req 자기 서명 인증서 만들기
-new 새로 만들기
-newkey 키도 새로 만들기
rsa:2048 RSA 알고리즘의 길이를 2048로
-days 36500 유효 기간은 36500일 (100년?)
-nodes 개인키 파일 암호화 하지 않기
-x509 X.509 표준 형식으로 만들기
-keyout bslinux.key 개인키를 bslinux.key 로 저장
-out bslinux.crt 인증서를 bslinux.crt 로 저장

추가 옵션 하나… 인증서의 subject 설정
-subj ‘/C=KR/ST=Seoul/CN=www.example.com’

워드프레스(WordPress) 소개

블로그 서비스 중 하나이다. 설치형과 서비스형으로 나눌 수 있다.

서비스형

https://wordpress.com/

무료 버전

네이버 블로그와 같이 아파트형 서비스이다.
xxx.wordpress.com 과 같은 도메인을 사용한다.
유저 커뮤니티를 통해 유저끼리 문제 해결을 해야 한다.
3GB의 저장 공간을 제공한다.
WordPress.com 에서 광고를 표시하게 된다.

개인용 최저가 버전

월 $4(그러나 년단위 결제….)
개인 도메인을 사용할 수 있다.
이메일, 채팅 등의 지원을 받을 수 있다.
6GB의 저장 공간을 제공한다.
광고가 제거된다.

설치형

https://wordpress.org/

설치형 블로그 소프트웨어 중에서 현재까지 활발하게 개발되고 유지보수 되는 것은 이것 뿐이라고 생각된다.
물로 [XE] 가 있기는 하지만… XE는 블로그를 위한 소프트웨어는 아니다.
블로그로 사용할 수 있다… 정도…

WordPress 플러그인 소개

Category Order and Taxonomy Terms Order
WordPress를 기본으로만 사용하면 카테고리 순서를 변경하는 것이 없다.
카테고리를 사용한다면 필수 플러그인이라 할 수 있다.

Duplicator
설치형이라면 반드시 사용하게 되는 플러그인이다.
블로그의 내용을 백업하고 복원할 수 있다.
능력만 있다면 블로그 내용을 다른 블로그로 이전하는 importer 도 만들 수 있다.

SyntaxHighlighter
프로그래머의 블로그라면 이 또한 필수 플러그인이라 할 수 있다.
블로그 포스트에 코드를 삽입할 때, 문법 강조를 사용할 수 있다.

TTXML Importer
텍스트큐브 기반의 블로그 백업 파일로부터 포스팅 자료를 가져오는데 사용한다.
https://github.com/channy/ttxml-importer
[포스팅 시점 최신 버전 다운로드: ttxml-importer-master]

웹 호스팅

간략 소개

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

서버를 관리하는 비용이 없이 간단하게 홈페이지를 만들 수 있기 때문에
웹서버만 필요한 경우라면 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 등!
같은 가격의 국내 서비스와 비교하면 좋은 편이다.
그리고 서버가 한국이 아니므로…

간단한 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]

SSL 인증서

SSL 인증서 목적

인증서의 목적은 암호화와 사이트의 신뢰도 향상이다.
관련 법에 따라 의무적으로 사용해야 하는 경우가 있다. (개인 정보를 수집하는 사이트)
개인적인 블로그나 위키를 설치형으로 호스팅 하는 경우에도 사용하면 좋다.
만약 설치형에서 소프트웨어에서 SSL 인증서를 사용하지 않으면 패킷을 가로 챘을 때에 관리자의 비밀번호가 노출될 수 있다.

SSL 인증서의 두번째 목적인 사이트 신뢰도는
SSL 인증서 발급 기관이 해당 사이트가 짝퉁이 아님을 보장하는 것
만약 짝퉁인데 인증서가 먹힌 것으로 판단되게 되면 대부분의 유료 SSL 인증서는 계약 당시의 보험금으로 보상해 준다

작은 사이트를 위한 공짜 SSL

[Let’s Encrypt]
위 사이트를 통해서 무료로 SSL 인증서를 발급 받을 수 있다.
물론 무료이기 때문에 뚫렸을 때에 보상금 같은 것은 없다.
암호화가 필요한데 “Self-signed SSL 인증서”를 사용하면 대부분의 웹브라우저나 모바일 기기에서 거부 당하므로 소규모 사이트라면 간단하게 사용하기에 좋다.

Self-signed SSL 인증서

자신의 인증서에 대한 인증을 자신이 하는 경우를 말한다.
대부분의 웹브라우저에서 경고를 띄우고, 모바일 기기에서는 exception이 발생할 수도 있다.
개발용도나 백엔드끼리의 통신등에 주로 쓰인다.

생성 방법

openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout server.key -out server.crt
[/code]

  • req: 자기 서명 인증서 만들기
  • -new: 새로 만들기
  • -newkey: 키도 새로 만들기
  • rsa:2048: RSA 알고리즘 2048 길이로
  • -days 365: 유효 기간은 365일
  • -nodes: private key를 DES로 암호화 하지 않음
  • -x509: X.509 표준을 사용
  • -keyout server.key: private key를 server.key에 저장
  • -out server.crt 생성될 인증서
  • 옵션 사항) -subj ‘/C=KR/ST=Seoul/CN=www.example.com’: 한국,서울,www.example.com 도메인용

WSL – Windows Subsystem for Linux

  • Windows 에서 Linux 프로그램을 맛볼 수 있는 기능
  • Windows 10 1607 에서 시작
  • 64비트만 가능
    당연히 이 가짜 Linux에서 실행되는 프로그램도 64비트용이어야 하고
  • Windows Server 2019 부터 서버 제품에도 포함되었음

처음에는 Ubuntu 만 가능했지만 Windows 1709 부터 Windows Store 를 통해 배포되는 형식으로 바뀌면서 Fedora, SUSE 이미지도 제공됨… 그리고 점점 늘어나고 있긴 함.

그런데 이걸 어디다가 써먹지!!!???

일단은 무조건 개발자를 위한 도구라는 것!!!
일반적인 Linux 로 생각하고 사용하기에는 성능이 너무 너무 떨어짐.
Hyper-V에 Linux 설치한 것이 더 빠를지도 모름

BS 생각엔…
MS가 생각하길… 이대로 있다가는 안될 거 같아. 뭔가 변화가 필요해…
그리하여 MS는 Linux와 친해지고, Open Source Project 들과 친해지는 과정을 가는데…
GitHub를 인수하고, Eclipse 재단에 가입하고, MS의 OS가 아닌 환경을 위한 Visual Studio Code를 만들고, 몇몇 MS의 제품을 Open Source로 바꾸고…
그런 일련의 변화 중에서 Linux 개발을 위해 MS Windows 를 버리고 Linux 나 macOS 를 사용할 필요가 없이 Windows 하나로 모두 해결 가능한 상태를 만들고 싶었고,
Windows NT 시절의 그 모습이 떠올랐던게 아닐까? [위키의 Windows NT 구조]

아직은 갈 길이 멀지만… 업계에서 핫한 소프트웨어들 중심으로 점차 안정적인 모습을 갖춰가고 있음.

참고자료
[MS의 릴리즈 노트]

VM – Virtual Machine

VM(Virtual Machine)

물리 컴퓨터 안에서 가상의 컴퓨터를 만든 것을 말함
Java, Javascript, .NET Framework 등으로 만들어진 프로그램이 돌아가는 환경도 VM 이지만…
보통은 Host OS에서 가상화 솔루션들(Hyper-V, Xen, Parallels, VMWare, …)을 통해 사용하는 가상 컴퓨터를 뜻한다.
일반 사용자?들은 Windows – VMWare, macOS – Parallels, Linux – VirtualBox 정도를 많이 쓰는 듯…

Host OS

물리 컴퓨터에서 동작하는 OS

Guest OS

VM 내부에서 동작하는 OS

PV(Para-Virtualization)

Guest OS가 Para-API라고 불리우는 시스템콜을 통해 H/W에 직접 접근하는 방식의 가상화를 의미
당연히 H/W에 Host OS의 시스템콜을 통해 접근하므로 빠르다.
단, API의 기능에 의존적일 수 밖에 없고, Guest OS가 PV 를 지원해야 가능하다.
이에 따라 Guest OS 위에서 실행되는 프로그램이 요구하는 동작을 Host 의 API가 제공하지 않는 경우 실행 오류가 발생할 수 있다.

HVM(Hardware-assisted Virtual Machine)

H/W 전체를 가상화한다. 그래서 Guest OS의 수정이 없이 사용할 수 있다. (물론 Guest OS가 HVM이 제공하는 가상 H/W를 지원해야 하겠지만…)
Guest OS를 수정하지 않고 사용한다는 것은 Guest OS 위에 실행되는 대부분의 프로그램이 물리 컴퓨터에 설치했을 때와 동일한 동작을 보장한다.
하지만, 전체를 가상화하기 때문에 성능은 PV보다 떨어진다. 이를 개선하기 위해 일부 Hypervisor는 Guest OS에 서비스 프로그램을 설치하거나, 디바이스 드라이버를 설치해서 가속해주는 기능을 제공하기도 한다.

Hypervisor

PV나 HVM을 Host OS에서 만들어 주는 소프트웨어를 말한다.
Hyper-V, VMWare, Parallels, Xen 등등이 있다.
BS의 경험으로는 가정용이 아니라면 Hyper-V, Xen, VMWare 정도가 아닐까 생각된다.
각자의 장단점이 있기 때문에 이것이 정답이다 라고 할 수 없지만, 사설 가상화 환경을 구축한다면 아무래도 Host 에 Linux, Hypervisor는 Xen이 무난할 거 같다.

가상화 vs 물리 서버

가상화를 사용하면
OS 구매 비용에 대한 부담이 줄어들고
H/W 구매에 대한 부담도 줄어들고
서버 이전이 용이하고
프로그램을 통한 서버 확장, 축소가 가능하고
서비스의 이용량에 따라 동적으로 사용할 수 있어 전체적으로 비용 절감의 효과가 있다
하지만 네이X나 카카X처럼 시도 때도 없이 접속자가 있고 장사가 잘 되면 오히려 비용이 늘어날 수 있다.
가상화로 가볍게 시작해서 어느 수준이 넘어서면 자체적인 가상화를 마련해야 한다.

가상화 vs 에뮬레이터

에뮬레이터는 H/W를 제어하는 기능을 소프트웨어로 흉내내는 것이다.
예를 들어, x86 계열의 CPU를 사용하는 PC에서 히타치 SuperH-2 CPU를 사용하는 Sega Saturn 게임기 소프트웨어를 구동하는 에뮬레이터의 경우
소프트웨어가 실행하는 기계어나 H/W 입출력을 Host의 H/W에 맞게 변환해서 실행하고 그 결과를 다시 변환해서 소프트웨어에게 알려주는 구조이다.
이런 명령 변환 과정이 있기 때문에 에뮬레이터는 성능이 좋을 수 없다.
가상화는 이런 변환 과정이 거의 없다.
Host의 CPU가 x86계열인데 Guest의 OS를 ARM용 Android로 설치할 수 없다.
Guest도 역시 x86을 위한 OS여야 한다.
물론 NIC, VGA, HDD, ODD 등의 H/W는 일부 에뮬레이션을 하기도 한다.

참고자료

[Xen Project]
자칭 업계 표준 가상화 솔루션
PV, HVM 모두 지원한다. HVM의 경우 QEMU 기반의 에뮬레이션에 위에서 설명한 Guest OS용 프로그램을 통해 PV 수준의 I/O를 사용할 수 있다고 한다.

[VMWare]
데스크탑 제품군에서 서버 제품군까지 오래전부터 가상화에 열심히 달려온 기업이다.
쌓인 것이 많으니 당연히 화려한 기능들이 많지만 역시 가격이…
BS는 Windows 데스크탑 제품군에서 Hyper-V 가 기본 내장되면서부터 거의 사용하지 않는다.
과자 찾아서 먹이기도 싫고, 돈 주고 사기도 싫고, 평가판은 더 싫고, 무료 제품은 쓸 이유가 없어서…

[VirtualBox]
Innotek GmbH 라는 독일 회사에서 시작해서
BS는 Sun Microsystems 가 인수한 뒤에 사용했었는데
이후 Oracle이 Sun을 인수하면서… 그냥 사용하지 않기로.
왠지 Oracle이 인수한 Open Source 관련된 모든 것이 정상적이지 않게 되어 사용 안함.

[Hyper-V]
MS의 Hypervisor로 BS가 사용하는 오래된 노트북에서도 VMWare나 VirtualBox와 달리 문제없이 사용할 수 있다.
독립 설치형 미디어도 있고(이걸 설치하면 일반적은 Windows 사용은 못하고 오로지 Hyper-V만 사용할 수 있음)
Windows Server에 기능을 추가하여 사용하거나
Windows Desktop에 기능을 추가하여 사용할 수 있다.
MS가 개발도구에 모바일 환경을 추가하면서 모바일 환경과 유사한 환경을 제공해서 디버깅을 할 수 있어야 함을 깨닫고?
Windows Desktop 제품인 Windows 8 에 추가하면서 일반 사용자들도 사용할 수 있게 되었다.
따라서 Server 제품군의 Hyper-V를 Desktop 제품군의 Hyper-V에서 바라지는 말자.