웹 호스팅은 웹사이트(html)를 외부에서 인터넷을 통해 접근할 수 있도록 서버 자원을 웹 호스팅 업체로 부터 빌리는 것이다. 웹 호스팅 공급자로는 AWS가 가장 유명하다.
오늘 과정에서는 지난 이틀간 만들었던 웹 페이지를 호스팅하는 과정을 배웠다.
Amazon Elastic Compute Cloud(AWS EC2)는 서버 컴퓨터로 사용하기 위한 컴퓨팅 환경을 제공받을 수 있는 서비스이다.
리눅스, 우분투 등 다양한 운영체제를 선택하여 가상 서버를 할당 받을 수 있다.
메모리, 저장용량, CPU 성능 등이 높을수록 더 많은 비용을 내야하므로, 사용자와 트래픽을 고려하여 적절한 성능을 갖는 서버를 선택해야 한다.
이번 과정에서는 직접 인스턴스를 할당받지는 않고, 제공된 우분투 기반의 t2.micro 서버를 사용하였다.
Secure shell(ssh)는 원격지의 호스트 컴퓨터에 접속하기 위한 보안 프로토콜이다.
서버 컴퓨터를 원격으로 제어하고, 필요한 데이터를 송수신하기 위해 사용한다.
ssh는 통신을 암호화하기 위해 공개키(Public key)와 개인키(Private key)라는 개념을 사용한다.
공개키는 누구에게나 공개되어도 상관이 없는 키이다.
공개키를 바탕으로 메세지를 암호화하여 전송할 수 있는데, 반대로 공개키를 통한 복호화는 불가능하다.
서버는 공개키를 통해 랜덤한 암호화된 메세지를 생성하여 클라이언트에 전송한다.
개인키는 오직 로컬 컴퓨터(클라이언트)에만 파일(.pem) 형태로 저장되어 있으며, 개인키를 바탕으로 암호화된 메세지를 복호화 할 수 있다.
클라이언트는 개인키를 바탕으로 메세지를 복호화하고, 서버는 클라이언트가 해석한 결과가 전송한 메세지와 일치하는지 확인하여 클라이언트의 접근을 허용한다.
ssh -i <.pem파일 경로> <user>:<public ip>
-i
는 다음에 올 파일 경로가 인증 방식의 인증 파일이 있는 위치라는 것을 지정하는 옵션이다.
AWS를 사용한다면 user와 public ip는 할당된 값을 사용한다.
ssh를 통해 서버 컴퓨터와 연결되었다면 git bash에 $
표시 대신 ubuntu@
가 표시되며 이는 이제부터 실행하는 명령어는 모두 서버 컴퓨터에서 실행된다는 것을 의미한다.
Bash Shell은 리눅스에서 사용자와 커널을 이어주는 역할을 하는 쉘의 한 종류이다.
윈도우 처럼 GUI가 제공되지 않으므로 Bash를 기반으로 하는 CLI를 통해 서버 컴퓨터를 다루어야 한다.
cd <디렉토리>
: 선택한 디렉토리로 이동한다.cd ~
: ~
는 루트 디렉토리를 나타내므로, 루트 디렉토리로 이동한다.pwd
: 현재 디렉토리를 확인한다.ls
: 현재 디렉토리의 파일 및 하위 디렉토리 리스트를 확인한다.tree
: 현재 디렉토리의 파일 구조를 트리 형식으로 출력한다. 기본으로 사용할 수는 없고 별도로 설치해야 한다.clear
: 현재 bash에 있는 내용들을 모두 지운다.mkdir <디렉토리>
: 현재 디렉토리에 새 디렉토리를 생성한다.dh
: 현재 보조기억장치의 용량 현황을 확인한다. -h
옵션과 함께 사용하면 MB, GB 단위로 확인할 수 있다.free
: 현재 메모리(RAM) 정보를 확인한다. -h
옵션 역시 사용할 수 있다.cat <파일>
: 지정한 파일 내에 있는 텍스트를 모두 출력한다.history
: 이전에 bash에서 실행했던 모든 명령어를 출력한다. !라인번호
를 통해 실행했던 명령어를 다시 실행할 수 있다.Secure Copy(scp)는 ssh를 기반으로 한 파일 전송 프로토콜이다.
리눅스의 scp
명령어를 통해 실행할 수 있다.
할당 받은 서버 컴퓨터에는 아직 웹 호스팅을 위해 필요한 프로그램이 하나도 설치되어있지 않으므로, 설치파일이나 requirements.txt
등을 넘겨주어야 한다.
scp <옵션> <.pem 파일 경로> <전송할 파일 경로> <user>:<public ip>:<저장할 경로>
ssh 기반이므로 연결때처럼 -i
옵션과 함께 개인키 파일의 위치를 주어야 한다.
이어서 전송할 파일을 입력하는데, 파일 하나만 전송하려면 파일 경로를, 디렉토리를 전송하려면 -r
옵션과 함께 디렉토리 경로를 지정해주어야 한다.
마지막으로 저장할 경로는 전송된 파일을 서버 컴퓨터의 어떤 디렉토리에 저장할지를 지정한다.
결과적으로 다음과 같은 명령어가 된다.
scp -ri ~/foo.pem ~/Desktop/env ubuntu@<public ip>:~/
vi 에디터는 윈도우의 메모장과 같은 리눅스 운영체제의 텍스트 편집 프로그램이다.
리눅스 및 우분투에서 vi <파일명.txt>
명령어로 실행할 수 있다.
vi 에디터의 특징은 편집 방식을 모드를 통해 지정해야한다는 것이다.
다른 모드에서 esc 키를 입력해 변경할 수 있는 모드이다.
텍스트를 수정할 수는 없지만 커서 이동, 문자 제거, 문자 복사 및 붙여넣기, 되돌리기 등의 기능을 사용할 수 있다.
w
: 한 단어 뒤로 이동b
: 한 단어 앞으로 이동x
: 현재 커서위치의 문자 삭제dd
: 현재 커서위치의 행 삭제gg
: 문서의 처음으로 이동G
: 문서의 끝으로 이동숫자 + G
: 숫자 번째의 라인으로 이동{
, }
: 페이지 이동yw, yy
: 한 단어 복사/한줄 복사p
: 붙여넣기u
: 되돌리기메모장 처럼 텍스트를 자유롭게 편집할 수 있는 모드이다.
일반모드에서 i
, o
, a
를 입력해 편집모드로 변경할 수 있다. (커서 위치의 차이)
문서 내 검색, 저장, 종료 등을 할 수 있는 모드이다.
일반 모드에서 :
를 입력하면 명령모드로 변경할 수 있다.
여러 명령어를 한 번에 실행할 수 있다.
w
: 저장q
: 파일 종료 (저장 없이 종료하면 저장 안됨)/
, ?
: 정방향/역방향 검색n
: 다음 검색 단어로 이동wq
를 한번에 입력하여 저장 후 종료가 가능하다.
Terminal Multiplexer(TMUX)는 리눅스 접속 환경의 세션을 관리하는 프로그램이다.
각 개발자는 TMUX를 통해 세션을 만들 수 있고 같은 서버 컴퓨터에 있는 다른 사람이 생성한 세션에 연결할 수 있다.
세션을 연결하면 세션 내의 화면이 서로에게 실시간으로 공유되어 페어 프로그래밍을 원활한 환경에서 진행할 수 있다.
TMUX는 세션, 윈도우, 팬을 각각 지원한다.
tmux new -s <세션 이름>
: 세션을 생성한다.
tmux ls
: 현재 생성되어있는 세션을 확인한다.
tmux a -t <세션 이름>
: 지정한 세션에 접속한다. a는 attach의 단축어이다.
tmux kill-session -t <세션 이름>
: 지정한 세션을 종료한다.
동일한 세션에 연결되었다면 화면이 공유된다.
한 세션 내에서 여러개의 윈도우를 생성할 수 있다.
엔진엑스(Nginx)는 웹 서버 프로그램으로 웹 서버의 역할을 하면서 AWS의 부하를 줄이는 로드밸런서 역할을 할 수도 있다.
스스로 동적 컨텐츠를 처리할 수 없어 반드시 외부자원과 연결되어야 하지만 동시에 많은 연결을 처리하는데 특화되어있어, 동시 사용자가 많은 환경에 강점이 있다.
먼저 Nginx를 설치한다.
sudo apt-get install nginx
설치 후 status를 확인해서 active로 되어있는지 확인한다.
sudo systemctl status nginx
vi 에디터를 이용해 Nginx 설정 파일을 수정할 수 있다.
sudo vi /etc/nginx/sites-available/default
server {
listen 3306;
location / {
root /home/ubuntu/230425_web_programming;
}
}
listen 3306
: 3306번 포트를 사용한다는 뜻이다, 원래 3306번 포트는 MySQL에서 기본값으로 사용하는 포트이지만, 이번 프로젝트에서는 MongoDB를 사용할 것이기에 3306으로 설정하였다.
한번에 여러개의 포트를 설정할 수도 있다.
location /
: 호스팅할 웹페이지(html 등)이 있는 파일을 지정한다.
config 파일 수정을 완료했다면 설정을 적용하기 위해 systemctl restart
명령어를 사용해서 서비스를 재시작한다.
sudo systemctl restart nginx
이제 서버의 public ip와 port 번호를 이용해 호스팅된 웹 페이지에 접속할 수 있다.