본문 바로가기

Programming

(477)
6. 패키지 매니저 (1) - npm [1] npm은 Node Package Manager입니다. 대부분의 JS프로그램은 패키지라는 이름으로 npm에 등록되어 있으며, 어떤 피처를 가진 패키지가 필요할 경우 npm에서 찾아서 실행하게 됩니다. npm에 등록된 약 190만개의 패키지를 ㅇ활용할 수 있고, 대부분 오픈소스여서 노드를 사용해 웹을 개발할 때 유용하게 사용됩니다.  npm에 업로드 된 노드 모듈을 패키지라고 칭하며, 모듈과 모듈의 관계와 마찬가지로 패키지에서도 다른 패키지를 사용할 수 있습니다. 참고로 npm의 대체제로 yarn과 pnpm이 존재합니다.    패키지를 여러개 설치하면 패키지의 숫자가 엄청나게 늘어나고, 또 각각의 패키지의 버전에 대한 관리도 필요해집니다. 이를 위해서 사용하는 것이 package.json입니다. 이는 노드 ..
5. http 모듈로 서버 만들기 (5) - cluster [2/2] 앞서 작성했던 cluster.js 예제를 이어서 살펴보도록 하겠습니다.  const cluster = require('cluster');const http = require('http');const numCPUs = require('os').cpus().length;if (cluster.isMaster) { console.log(`마스터 프로세스 아이디: ${process.pid}`); // CPU 개수 만큼 워커 프로세스 생성 for (let i = 0; i { console.log('${worker.process.pid} 번 워커가 종료되었습니다.'); console.log('code', code, 'signal', signal); });} else {..
5. http 모듈로 서버 만들기 (5) - cluster [1/2] 노드는 기본적으로 싱글 프로세스를 기반으로 동작합니다. cluster 모듈은 이런 노드가 CPU의 코어를 모두 사용할 수 있게 만들어 줍니다.  예를 들어, 어떤 서버가 코어를 8개 갖고 있을 때, 노드는 당연히 코어 하나만을 활용하게 됩니다. 하지만 cluster 모듈을 사용해서 코어 하나당 노드 프로세스 하나가 돌아가도록 할당이 가능하죠. 성능이 8배가 되는 것은 아니지만 꽤 성능이 개선됩니다. 이러한 과정을 통해서 포트를 공유하는 노드 프로세스를 여러개 두고, 요청이 많으면 병렬로 실행된 서버의 개수 만큼 요청을 분산 시킬수도 있습니다.  물론 메모리를 공유하지 못하기 때문에 세션을 메모리에 저장하는 경우 문제가 되는 단점이 있으며, 이는 레디스 등의 서버를 도입해 해결합니다.  우선 다음 예제를 ..
5. http 모듈로 서버 만들기 (4) - https와 http2 [2/2] 우리는 앞선 아티클에서 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 프로토콜 대..
5. http 모듈로 서버 만들기 (4) - https와 http2 [1/2] 웹 사이트를 이용하다보면, https에 대해서 흔히 접하게 됩니다. 대충 '무언가 보안이 강화된' 장치인 것은 알겠는데, 정확히 무엇인지는 알 수 없었습니다. 이번 아티클에서 https에 대해서도 간단히 알아보겠습니다.  일단 https 모듈을 사용하게 되면, 웹 서버에 SSL 암호화를 추가하게 됩니다. 우리가 앞서 배운 GET이나 POST 메서드를 사용하면 클라이언트와 서버 간에 데이터가 오고가게 됩니다. 그런데 이 과정에서 누군가 요청을 가로채 정보를 탈취할 수도 있죠. SSL은 이 오고가는 데이터를 암호화 하게 됩니다. 그래서 중간에 유실되더라도 쉽게 내용을 확인할 수 없게 만드는 역할을 합니다. https를 사용하는 사이트에 접속하게 되면, 주소창 왼쪽에 주로 자물쇠 표시 등이 출력되는 것을 확인..
5. http 모듈로 서버 만들기 (3) - 쿠키와 세션의 이해 [7] 앞서 작성했던 코드로 서버를 실행하고, 사용자 이름을 넣어 쿠키를 동작해 보도록 하겠습니다. cookie2.js를 실행하고, URL 입력창에 http://localhost:8084를 입력해 봅시다. 그러면 아래와 같은 화면을 만날 수 있습니다.    이제 여기에 적당한 값을 넣고 [LOGIN] 버튼을 클릭하면, 로그인 처리를 하고 화면에 환영 인사를 출력합니다. 그런데 개발자 도구의 Application 탭에서 쿠키를 확인해 보겠습니다. 사실상 쿠키가 그대로 노출되고 있는 상태입니다. 보안상, 민감한 정보는 쿠키에 넣지 않는 것이 원칙이고 보관하는 방법도 달라야 합니다.    그럼 다음 예제에서 우리가 작성했던 코드를 수정해서 서버가 사용자의 정보를 관리하도록 만들어보겠습니다. 여기서 사용하는 방식이 바..
5. http 모듈로 서버 만들기 (3) - 쿠키와 세션의 이해 [6] 앞선 아티클에서는 최초로 로그인을 한 다음, res를 보내면서 Set-Cookie로 쿠키 정보를 보낸다고 했습니다. 여기서는 만료 시간(Expire)이나 HttpOnly등과 같은 옵션이 부여되었습니다. 쿠키를 설정할 때는 이러한 다양한 종류의 옵션을 부여해 설정이 가능합니다. 복수의 옵션을 부여할 때는 세미콜론으로 구분하게 됩니다.  여기에 제한 사항은, 한글과 줄바꿈은 입력할 수 없다는 점 입니다. 앞서 설명했듯이, 한글의 경우 encodeURIComponent로 감싸서 넣게 됩니다.   [cookie2.js]//생략http.createServer(async (req, res) => { const cookies = parseCookies(req.headers.cookie); // 주소가 /l..
5. http 모듈로 서버 만들기 (3) - 쿠키와 세션의 이해 [5] 앞선 아티클에서 계속 이어서 코드를 살펴보겠습니다. [cookie2.html] LOGIN    [cookie2.js]const http = require('http');const fs = require('fs').promises;const path = require('path');// *1번 시작const parseCookies = (cookie = '') => cookie .split(';') .map(v => v.split('=')) .reduce((acc, [k, v]) => { acc[k.trim()] = decodeURIComponent(v); return acc; ..