🔸 mkcert : 로컬 환경(내 컴퓨터)에서 신뢰할 수 있는 인증서를 만들수 있는 프로그램.
// Ubuntu 환경에서 설치하기
$ sudo apt install libnss3-tools
$ wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/v1.4.3/mkcert-v1.4.3-linux-amd64
$ chmod +x mkcert
$ sudo cp mkcert /usr/local/bin/
🔸 아래의 명령어를 통해 로컬을 인증된 발급기관으로 추가.
mkcert -install
🔸 로컬 환경에 대한 인증서를 만들려면 다음 명령어를 입력.
$ mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1
🔸 cert.pem
, key.pem
이라는 파일이 생성된 것을 확인할 수 있음.
cert.pem
: 공개 키와 인증기관의 서명을 포함하고 있는 인증서(certificate). (공개되어도 무관)key.pem
: 개인 키. (공개되면 안됨, git에 커밋하지 않고, 암호처럼 다루어야 함)📍 이때 발급 받은 key와 cert의 저장 경로를 알고 있어야, 나중에 활용할 수 있음.
🔸 HTTPS 서버를 작성하기 위해서 두 가지 방식을 활용할 수 있음.
const https = require('https');
const fs = require('fs');
https
.createServer(
{
key: fs.readFileSync(__dirname + '/key.pem', 'utf-8'),
cert: fs.readFileSync(__dirname + '/cert.pem', 'utf-8'),
},
function (req, res) {
res.write('Congrats! You made https server now :)');
res.end();
}
)
.listen(3001);
__dirname
: 현재 실행 중인 폴더 경로 🔸 터미널에 node 파일명.js
로 서버 실행 후, https://localhost:3001 로 접속하면 브라우저의 url 창 왼쪽에서 HTTPS 프로토콜을 이용한다는 것을 알 수 있음.
const https = require('https');
const fs = require('fs');
const express = require('express');
const app = express();
https
.createServer(
{
key: fs.readFileSync(__dirname + '/key.pem', 'utf-8'),
cert: fs.readFileSync(__dirname + '/cert.pem', 'utf-8'),
},
app.use('/', (req, res) => {
res.send('Congrats! You made https server now :)');
})
)
.listen(3001);
📍 로컬에서 개발한 애플리케이션을 외부로 공유할 때(호스팅), 아래와 같이 두가지 상황이 존재
- 배포를 통한 외부 공유 : Amazon의 AWS, Microsoft의 Azure, Google의 GCP, Naver의 NCP 등.
- ngrok을 활용한 외부 공유 : 일정 시간동안만 외부로 공유하는 상황일 때 사용
🔸 ngrok : HTTP로 만들어진 서버를 HTTPS 프로토콜로 터널링 해주는 프로그램.
// Linux 기준
curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc \
| sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null \
&& echo "deb https://ngrok-agent.s3.amazonaws.com buster main" \
| sudo tee /etc/apt/sources.list.d/ngrok.list \
&& sudo apt update \
&& sudo apt install ngrok
🔸 ngrok을 불편함 없이 사용하기 위해 authtoken을 추가하기를 권장.
🔸 기존에 미등록 회원일 시, 2시간짜리 세션을 받지만 회원가입 후 authtoken을 사용하면 장시간의 세션을 받을 수 있음.
ngrok config add-authtoken <authtoken>
🔸 서버가 실행된 상태에서 터미널에
ngrok http https://localhost:<PORT번호>
🔸 혹은 로컬 환경에서 애플리케이션이 예를 들어 포트 번호 8080에서 구동되고 있다면, 터미널에서 아래처럼 입력해도 됨.
ngrok http 8080
🔸 실행하면 아래 사진과 같은 정보들이 대시보드 형태로 보임.
🔸 Session Status : 세션의 활성 상태. online일 경우, 세션이 정상적으로 살아있음을 의미.
🔸 Account : ngrok에 가입된 사용자 정보
🔸 Region : ngrok agent가 터널을 호스팅하기 위한 region을 의미
🔸 Web Interface : ngrok 대시보드를 UI로 제공하는 URL. request에 대한 분석, connection, 세부 옵션 등에 대한 상태를 제공
🔸 Forwarding : ngrok에서 제공하는 터널 URL로, 이 URL을 통해 외부에서도 로컬 환경에 접근할 수 있음.
🔸 Connections : ngrok에서 제공하는 터널에 대한 connections 관련 정보.