본문 바로가기

Programming/Node.js

5. http 모듈로 서버 만들기 (4) - https와 http2 [2/2]

node js logo image

 

 

 

우리는 앞선 아티클에서 http가 아닌 https 모듈을 사용하는 예제를 살펴보았습니다.

 

 

 

5. http 모듈로 서버 만들기 (4) - https와 http2 [1/2]

웹 사이트를 이용하다보면, https에 대해서 흔히 접하게 됩니다. 대충 '무언가 보안이 강화된' 장치인 것은 알겠는데, 정확히 무엇인지는 알 수 없었습니다. 이번 아티클에서 https에 대해서도 간단

nozeroslope.tistory.com

 

 

이번 아티클에서는 https와 또 다른 또 하나의 모듈, http2 모듈을 사용하는 방식에 대해서도 살펴보겠습니다. 간단하게 http2 모듈을 사용하게 되면 최신의 HTTP 프로토콜인 http/2를 사용할 수 있게됩니다. http/2 프로토콜은, 우리가 기존에 사용하던 http/1.1 프로토콜 대비 req와 res 방식이 크게 개선되어 효율성을 높였고, 동시에 이로 인해서 웹의 속도 자체가 많이 빨라지는 효과를 가져오게 됩니다. 

 

개념적으로 보면, http/1.1의 경우 아래와 같은 프로세스를 거치게 됩니다. 

(1) 클라이언트 ~ 서버 연결
(2) GET /index.html
(3) 서버 > 클라이언트 응답
(4) GET /styles.css
(5) 서버 > 클라이언트 응답
(6) GET /scripts.js
(7) 서버 > 클라이언트 응답
(8) 페이지 렌더링
(9) 연결 종료

 

 

http/2의 경우에는 다음과 같은 프로세스를 거치게 됩니다.

(1) 클라이언트 ~ 서버 연결
(2) GET /index.html
(3) 서버 > 클라이언트 응답
(4) GET /styles.css, GET /scripts.js
(5) 서버 > 클라이언트 응답(병렬)
(6) 페이지 렌더링
(7) 연결 종료

 

 

물론 http/1.1도 파이프라인이라는 기술을 사용하므로 극단적인 차이가 발생하는 것은 아니지만, http/2가 훨씬 더 효율적인 것은 변함 없습니다. 

 

앞선 예제에서 일부 코드를 수정해 http2 모듈을 적용해 보겠습니다. 

 

const http2 = require('http2');
const fs= require('fs');

http2.createSecureServer({
    cert: fs.readFileSync('도메인 인증서 경로 입력'),
    key: fs.readFileSync('도메인 비밀 키 경로 입력'),
    ca: [
        fs.readFileSync('상위 인증서 경로'),
        fs.readFileSync('상위 인증서 경로'),
    ],
}, (req, res) => {
        res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8'});
        res.write('<h1>HELLO WORLD</h1>');
        res.end('<h1>HELLO SERVER</h1>');
    })
    .listen(443, () => {
        console.log('443포트 대기중...');
    });

 

 

바뀐 것은 크게 없습니다. http2 모듈을 사용하고, createServer 메서드가 createSecureServer로 바뀐 정도입니다.