nextculture.github.io

 

 

서버를 어디서 어떻게 구동할 것인가... 이게 관건이었습니다.

토이프로젝트나 간단한 서비스를 위한 서버 구동을 위해 AWS나 Google Could를 사용하자니 돈벌이도 없는데 좀 그렇더군요. ㅠ.,ㅜ;

 

아래 블로그를 보다가 Freehosting 서비스로 무료 플랜도 괜찮아 보여 진행하려 하다가,...

 

토이프로젝트에 시용하기 좋은 무료 웹호스팅 및 서비스

들어가며 간단하게 도메인 1개, API 서버, Database, Github action CI/CD 구성, SSL, DNS, 통계만 하면 되는 작은 토이 프로젝트를 만들일이 생겼다. 일단 웹페이지는 추후에 SEO도 붙일까 해서 nextjs로 만들었

uznam8x.tistory.com

 

결국 여기저기를 보던와중  Synology NAS 로 설정하는 걸 보았고.. 나도 있는데!?

 DS918+  Docker가 지원되는 모델!!!! 와우.. 그래서 밤샘하여 설정 테스트를 완료!! ㅎㅎ 기쁘네요.

 

시놀로지 Docker로 Nodejs 웹서버 설치하고 띄우기는 아래 블로그를 보고 차근히 따라 하면 됩니다.

 

 

시놀로지 Docker로 Nodejs 웹서버 설치하고 띄우기

도커에서 Nodejs웹서버를 설치하고 띄우는 일은 간단하면서도 매우 유용한 작업입니다. 시놀로지 도커(Docker)은 주로 GUI로 설치를 진행하게되어 있어서 편리하기는 하나 아직 참고할 만한 자료들

ux.stories.pe.kr

시놀로지 Docker로 Nodejs 웹서버 설치하고 띄우기.mhtml
4.09MB

 

위의 글대로 하면 nodejs로 서버 구동은 잘 되는데..

cmd나 bash 명령 처리 과정의 복잡성, 그리고 nodemon을 사용할 수 없다는 문제점이 있어서 밤샘 ㅠ.,ㅜ;

 

혹시 nodemon 되는 것을 누가 만들었을까 싶어 레지스트리를 봤더니 역시나 nodemon이 있어서 깔아보기도 했지만 오래되고 불안정하고 업데이트 안되고 있어서 삭제..

 

 

여튼 최종적으로 실제 서비스를 위한 Nodejs Docker와 개발을 위한 Nodejs Test Docker를 만들어서 Test 서버에서는 nodemon으로 구동할 수 있도록 환경구축 완료!!!!!

 

 

최종 모습 (node8000, nodemon9000)

 

 

 

Synology.Docker 가장 골치아팠던 컨테이너  실행 명령 

아니.. 왜?? Why?? 컨테이너로 만들어진 이후에는 실행 명령을 수정할 수 없습니다!!!! 그래서 초반에 경로나 파일 내용이 잘못되거나 하면 Docker의 Nodejs가 실행자체가 안되기 때문에 어떠한 조작도 할수가 없습니다.

 

수십번을 컨테이너 지우고 만들기를 반복.. ㅋㅎ..

일단 좀더 쉽게 설정하도록 준비하여 처리하겠습니다.

 

이미 생성되어 있는 Nodejs 컨테이너 하나를 선택하고 "설정 - 내보내기"

 

"컨테이너 콘텐츠 및 설정 내보내기"는 Nodejs Docker를 전체 내보내기하여 txz 파일로 만들어줍니다. 나중에 실서버 백업을 한다거나 할 때 사용할 수 있겠네요.

한번 전체 내보내기 해보았는데 시간도 오래걸리고 용량도 꽤 큽니다. 200MB가 넘네요. 실제로 사용할 일은 적을 것 같고, 실서버에서라도 NAS의 폴더를 /home/node/app 으로 마운팅하여 사용하기 때문에 /home/node/app 폴더 내에서만 자료를 유지한다면 NAS에 알아서 보관이 되니 전체를 백업할 일이 없는 것이지요.

 

위의 설정으로 [내보내기]를 완료하면, /docker 폴더 안에 nodejsApp.syno.json과 같은 파일이 만들어져 있을겁니다.

 

 

 

폴더 구성 (node8000, nodemon9000)

일단 저는 실서버 구동을 위해 node8000 Nodejs 서버와 테스트 개발을 위한 nodemon9000 Nodejs 서버를 돌릴 예정입니다. 따라서 nodejsApp.syno.json 파일을  node8000.syno.json 으로 이름 변경하고,  nodemon9000.syno.json 으로 복사하여 한 개 더 만들어줍니다.

 

Visual Studio Code로 /docker를 열어서 node8000.syno.json을 열고 다음과 같이 수정합니다.

 

 node8000.syno.json 
- 수정이 필요한 부분은 "cmd"와 "port_bindings", "volume_bindings'입니다.
{
   "cap_add" : [],
   "cap_drop" : [],
   "cmd" : "node /home/node/app/index.js",
   "cpu_priority" : 50,
   "devices" : null,
   "enable_publish_all_ports" : false,
   "enable_restart_policy" : false,
   "enabled" : true,
   "entrypoint_default" : "docker-entrypoint.sh",
   "env_variables" : [
      {
         "key" : "PATH",
         "value" : "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
      },
      {
         "key" : "NODE_VERSION",
         "value" : "18.0.0"
      },
      {
         "key" : "YARN_VERSION",
         "value" : "1.22.18"
      }
   ],
   "exporting" : false,
   "id" : "a29fb23a7b9f43b7645b72301a24ecb6f1265c99a78167d31ad2aa9efab198bd",
   "image" : "node:latest",
   "is_ddsm" : false,
   "is_package" : false,
   "links" : [],
   "memory_limit" : 0,
   "name" : "node",
   "network" : [
      {
         "driver" : "bridge",
         "name" : "bridge"
      }
   ],
   "network_mode" : "bridge",
   "port_bindings" : [
      {
         "container_port" : 8000,
         "host_port" : 8000,
         "type" : "tcp"
      }
   ],
   "privileged" : false,
   "shortcut" : {
      "enable_shortcut" : false
   },
   "use_host_network" : false,
   "volume_bindings" : [
      {
         "host_volume_file" : "/docker/node8000",
         "mount_point" : "/home/node/app",
         "type" : "rw"
      }
   ]
}

 "cmd" : "node /home/node/app/index.js" 

즉 Nodejs Docker가 실행되자마자 NAS의 /docker/node8000 폴더를 /home/node/app으로 마운팅시키고,

/home/node/app/index.js 파일을 node로 실행하도록 됩니다. 따라서 경로가 틀리거나 index.js 파일 내 에러가 존재한다면 해당 nodejs docker는 실행되지 않습니다.

 

상관없습니다. 왜냐면 해당 index.js는 일단 테스트 서버에서 돌려보고 업로드해주면 되니까요.

 

그럼 더 중요한 node9000.syno.jon을 다음과 같이 작성합니다.

 

 node9000.syno.json 
{
   "cap_add" : [],
   "cap_drop" : [],
   "cmd" : "node",
   "cpu_priority" : 50,
   "devices" : null,
   "enable_publish_all_ports" : false,
   "enable_restart_policy" : false,
   "enabled" : true,
   "entrypoint_default" : "docker-entrypoint.sh",
   "env_variables" : [
      {
         "key" : "PATH",
         "value" : "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
      },
      {
         "key" : "NODE_VERSION",
         "value" : "18.0.0"
      },
      {
         "key" : "YARN_VERSION",
         "value" : "1.22.18"
      }
   ],
   "exporting" : false,
   "id" : "4335cbd6c4d99a72d5112dd374ffa21ae29c3f208d7c0259593d19d983a03be7",
   "image" : "node:latest",
   "is_ddsm" : false,
   "is_package" : false,
   "links" : [],
   "memory_limit" : 0,
   "name" : "nodemon8080",
   "network" : [
      {
         "driver" : "bridge",
         "name" : "bridge"
      }
   ],
   "network_mode" : "bridge",
   "port_bindings" : [
      {
         "container_port" : 9000,
         "host_port" : 9000,
         "type" : "tcp"
      }
   ],
   "privileged" : false,
   "shortcut" : {
      "enable_shortcut" : false
   },
   "use_host_network" : false,
   "volume_bindings" : [
      {
         "host_volume_file" : "/docker/nodemon9000",
         "mount_point" : "/home/node/app",
         "type" : "rw"
      }
   ]
}

NAS이 마운팅 폴더가 /docker/nodemon9000이며,

"cmd" : "node"로 원래 처음 Nodejs를 생성했을 때의 코드를 사용합니다. 그렇기에 실행이 안될일은 없는 것이지요.

 

/docker 폴더안에

 /docker/node8000, /docker/nodemon9000  폴더도 생성합니다.

 

이제 불필요한 컨테이너를 삭제합니다. 왜냐면 컨테이너는 실행하지 않더라도 포트가 동일하면 컨테이너로서 만들어지지도 않습니다. (사실 이건좀 애매 -_-; 시놀로지에서 그렇게 관리되도록 한듯한데.. 실행되지 않으면 상관없잖우?? 실행할 때 체크하도록 허지..)

 

그리고 "설정 - 가져오기"를 클릭하여,

/docker에서 node8000.syno.json과 node9000.syno.json을 각각 가져오기 합니다. (한번에 안되요)

 

node8000은 실행해도 바로 정지됩니다. /home/node/app/index.js 가 없기 때문입니다.

 

node8000을 더블클릭하여 세부사항을 보면 내용을 확인할 수 있습니다.

 

네 index.js 모듈을 찾을 수 없다고 하네요.. (근데 시간이 왜 안맞을까요 -_-; NAS 시스템 시간은 맞음.)

 

일단 무시해주고요.. nodemon9000을 실행합니다.

 

 

 nodemon9000 실행

그러면 잘 실행됩니다. 단지 nodemon이 아니라 node라는 것.

nodemon9000 더블클릭하여 여기서  터미널  탭을 클릭합니다.

nodemon9000이 있고 터미널창이 떠 있지만 이건 무시하고, [생성] 버튼을 클릭합니다.

그르면 "bash"가 생성되는데 이걸 클릭합니다.

 

아래와 같이,

 cd /home/node/app  으로 이동하여,

 npm install -g nodemon  실행합니다. (-g는 전역으로 설정하는 옵션입니다.)

 

추가적으로 express 프레임워크를 돌릴 것이라 미리 설치해줍니다.

(추가적인 module을 PC에서 설정하여 설치하는 것은 맨아래에 추가)

 

이제 Visual Studio Code에서 /docker/nodemon9000/index.js 파일을 생성하고 다음을 작성합니다.

 

 /docker/nodemon9000/index.js 
const express = require('express')
const app = express()
const HOST = '0.0.0.0'
const PORT = 9000

app.use(express.static('static'))

// URL 라우팅
app.get('/', (req, res) => {
	res.json({
		message: "This is TEST Nodemon Server.",
		port: PORT,
        success: true,
    });
	console.log('Hello World Sent.')
})

app.listen(PORT, () => {
	console.log(`TEST Server running at http://${HOST}:${PORT}`);
})

 

이제 터미널 화면에서  nodemon index.js 로 서버를 실행합니다.

 

잘 실행되었습니다!!!!!

 

로컬주소 http://192.168.0.4:9000 이나

DDNS 설정되어 있다면 해당 주소로 접근하면 다음과 같이 웹브라우저로 볼 수 있습니다.

콘솔창에도 잘 출력됩니다.

 

이렇게 실행된 상태로 두면, nodemon으로 구동되는 테스트 서버를 실행시켜둘 수 있습니다.

 

이제 index.js 파일을 수정하면 nodemon이 알아서 node를 재실행해주기 때문에 테스트 서버는 놔두고 개발에만 전념할 수 있게 됩니다.

 

이제 터미널을 닫아도 프로세스로 nodemon이 실행되고 있게 됩니다.

=> 터미널을 닫았을 때 nodemon이 실행은 되고 있지만 index.js 코드를 수정했을 때 프로세스가 죽어버리고 마네요 ㅠ.,ㅜ;;; 결국 터미널을 개발하는 동안 지속 켜놓아야 하니 역시 불편하네요. 다른 해결방법을 찾기 전까지는 켜놓아야 할 상황이네요.

 

그래서 또 이걸보고 처음부터 "node /usr/loca/bin/nodemon index.js"로 시작하면 되잖아!?!? 싶지만..

다시 syno.json 설정파일을 변경하고 새로 컨테이너를 만들면, 해당 컨테이너에는 nodemon이 설치되어 있지 않기 때문에 Error!!! 결국 방법이 없네요. 아시는 분 답변 좀 주세요 ㅠ.,ㅜ;

 

 

 

Node8000 실서버 돌리기

 

이제 해당 index.js 파일을 /docker/node8000 폴더에 복사하고 다음과 같이 수정해줍니다.

 

 /docker/node8000/index.js 
const express = require('express')
const app = express()
const HOST = '0.0.0.0'
const PORT = 8000

app.use(express.static('static'))

// URL 라우팅
app.get('/', (req, res) => {
	res.json({
		message: "This is REAL Node Server.",
		port: PORT,
        success: true,
    });
	console.log('Hello World Sent.')
})

app.listen(PORT, () => {
	console.log(`REAL Server running at http://${HOST}:${PORT}`);
})

 

그리고 node8000 도커 컨테이너를 실행하면 또 정지되어 버립니다. 왜냐면 express를 설치하지 않아 없는 모듈이기 때문입니다.

그렇다면 실행도 되지 않는 컨테이너에 어떻게 express를 설치할 수 있을까요?? 터미널 bash도 컨테이너가 켜져서 돌아야 npm 명령이라도 입력할텐데 말입니다.

 

이제 필요한 것이 PC에서 해당 폴더에 npm 설치하기입니다.

 

 

 

PC cmd 창에서 npm 패키지 설치하는 방법

cmd를 실행하고 해당 폴더로 이동하여 작업을 하면 될 것 같지만,

 

UNC 경로를 지원하지 않아 네트워크 드라이브 접속이 안됩니다. UNC로 접근하는 방법을 써도 되겠지만..

좀더 간편하고 작업하기도 편한 네트워크 드라이브 할당으로 연결하여 작업하였습니다.

 

Z:로 Nas의 docker 폴더를 연결해줍니다.

cmd에서 Z:로 이동하여 보면 /docker 폴더로 연결된 것을 볼 수 있습니다.

 

node8000에 express를 설치할 것이므로,

이렇게 하면 해당 프로젝트 폴더에 node_modules 폴더를 가지게 되고, 해당 프로젝트에서는 해당 module을 사용할 수 있게 됩니다. 즉 현재 node8000 폴더에 한해서 index.js에서 express를 사용할 수 있게 된다는 것이지요.

 

이제 다시 node8000을 실행시켜 봅니다. 오~오~ 죽지않고 살아있습니다.

잘 설정되었다는 것이지요.

 

더블클릭해서 보면

로그도 잘 남았고..

 

프로세스도 잘 실행되고 있습니다.

 

브라우저 접속해 봅니다.

 

실서버는 index.js 파일이 수정되었다면, 컨테이너를 반드시 재시작해주어야 정상 동작합니다.

 

 

 

  1. ㅇㅇ 2022.06.22 11:48

    안녕하세요 게시글 도움이 많이 되었습니다!

    저도 node 프로젝트를 도커에 올려서 사용 중인데 터미널로(ssh가 아닌 시놀로지 ui 에서의 터미널) node 프로젝트를 실행시키고 도커 창을 끌 때 '터미널을 종료하시겠습니까?'라는 알람창에 아니오를 누르면 터미널 창이 계속 켜져있어서

    이후에도 웹 호출이 잘 되는데, 그로부터 한 5분 뒤에 다시 호출해보면 서버가 응답하지 않더라구요

    그래서 다시 도커 접속해서보면 터미널이 종료가 되어있더라구요.. 혹시 이와 같은 현상에 대해서는 어떻게 조치해야할지 질문드려도 될까요?? ㅜㅜ

    • BOOX 2022.08.12 18:52 신고

      답변 늦어 죄송합니다. 이미 답을 찾으셨는지도 모르겠네요 ^^~
      터미널은 시놀로지 웹 접속이 끊어지면 자동으로 종료되더라구요.

      nohup 이라는 명령어가 있습니다.
      /> nohup [프로세스 명령어] &
      nohup으로 검색해보시면 쉽게 하실 수 있을 것 같네요.
      즐거운 주말 보내세요~

ko.wikipedia.org/wiki/Node.js

 

 

 Node.js  개념

Node.js는 구글 크롬 V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다!? (공식설명)

Node.js는 서버 사이드 어플리케이션 개발을 위한 소프트웨어 플랫폼입니다.

Node.js는 웹서버와 같은 확장성 있는 네트워크 프로그램 제작을 위해 고안되었습니다.

Node.js는 서버 사이드에서 구동되는 자바스크립트 엔진입니다.

 

더 자세한 개념등을 알고 싶으면, 하기와 같은 다른 블로그를 참고하세요.

 

 

Node.js 노드 개념 이해하기 자바스크립트 JavaScript 런타임 이벤트

Node.js 노드 개념 이해하기 JavaScript 런타임 - 노드는 다양한 자바스크립트 애플리케이션을 실행할 수 있으며, 서버를 실행하는데 제일 많이 사용된다. 이벤트 기반 이벤트 루프 논블로킹 I/O 싱글

hanamon.kr

 

하나의 Task가 무거운 일(Load가 많이 걸리는)을 해야할 때에는 Node.js는 적합하지 않으며,

개수가 많고 작은 Task가 빈번히 발생하는 데에는 Node.js가 적합합니다.

현재 하고자 하는 대부분의 작업들이 이해 해당됩니다.

단발적인 Load가 걸리는 일든은 별도 Python 등으로 구동할 예정입니다.

 

 

 

갑자기  npm ?? (Node.js Package Manager)

node.js를 설치하면 같이 설치됩니다.

확장성이 고려되어 있어 Node.js를 위해 추가적인 패키지들을 설치할 수 있는데, 이를 관리해주는 녀석입니다.

쉽게 node.js는 무조건 npm과 함께라고 생각하면 됩니다.

이렇게 마구잡이식 가져다 사용이 정말 익숙하지 않은데.. 적응해 나아가는 중..

편하긴 정말 편함. 현재는 배포자들을 믿고 가는 세상..

 

 

 

윈도우에서 Node.js 설치

 

 

Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

무엇인지 모른다면,  LTS(대다수 사용자에게 추천) 를 다운로드 하면 됩니다.

Windows Installer (.msi)를 자신의 윈도우 버전에 맞는 (32-bit, 64-bit) 설치 파일을 다운로드하여 설치하세요.

Node.js 설치시 같이 설치되는 npm

 

설치가 완료되었으면, cmd 명령프롬프트를 실행하고 다음과 같이 실행..

node 버전 확인

 

그렇다 이제 어디에서든 실행되는  node 라는 명령어 하나를 얻은 셈!!!

node를 실행하면 아래와 같이 javascript 문법을 바로 사용할 수 있습니다.

종료할 때에는  Ctrl + C 를 두번 누르면 됩니다.

 

마찬가지로 다음도 해보자.

npm 버전 확인

역시 어디에서든 실행되는  npm 이라는 명령어를 얻었습니다.

 

그럼 이것으로 무얼할 수 있는데?? 기본적으로 서버를 만들 수 있지.. 어떻게?? 오케이.. 진행해봅시다.

 

 

 

Node.js 로 웹서버 시작하기

Node.js 프로젝트를 구동하기 위해 코딩을 할 텐데, 파일을 만드려면 폴더가 있어야겠지요.

D:/Nodejs 등의 위치에 폴더를 만듭니다.

바로 프로그래밍을 해도 되지만 일반적인 절차로 설명..

 

D:/Nodejs 폴더로 이동하여  npm init  실행. 커서 깜빡일 때 내용을 입력하고 엔터를 치거나 그냥 엔터를 치면 다음으로 넘어간다. 마지막에는  yes  입력하고 엔터.

그럼 package.json 파일이 생성되는데, 나중에 추가 패키지를 설치하거나 관리하는데 도움이 되는 것이라서 보통 생성해두고 진행합니다. 생성된 내용은 위에 표시된 내용이 전부!

 

이제 웹서버를 돌릴텐데, Node.js 공식홈페이지의 About에 나와있는 내용으로 진행하겠습니다.

 

 

 D:/Nodejs/index.js 

파일을 만들고 아래 내용을 입력하고 저장. (Visual Studio Code를 사용하면 편합니다.)

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

 

Visual Studio Code를 사용하면 편하게 코딩하면서 아래처럼 터미널 창도 바로 쓸수 있어서 좋습니다.

 

 

Visual Studio Code - Code Editing. Redefined

Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications.  Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.

code.visualstudio.com

 

Visual Studio Code가 설치되었다면,

D:/Nodejs 폴더에서 우클릭으로 나타나는 "Code(으)로 열기"로 Visual Studio Code를 실행하여 연동해 줍니다.

 

터미널 - 새 터미널을 만들고  node index.js  명령을 입력하여 서버를 실행시킵니다.

터미널 - 새 터미털 - "node index.js" 입력하고 엔터

Server running at http://127.0.0.1:3000/ 이라고 나오며 서버가 실행되고 접속자를 기다리게 됩니다.

터미널창에서 http://127.0.0.1:3000 주소를 Ctrl 누르고 클릭하면 바로 브라우저가 열립니다.

그럼 크롬으로 해당 주소를 열어보자.

127.0.0.1:3000

멋지다. 나만의 웹서버 완성!!!

실행중인 Node 서비스를 종료할 때에는 터미널 창에서  Ctrl + C 를 입력하면 정지됩니다.

 

 

 

npm을 이용하여 express, nodemon 설치

이제 Node.js에서 돌아가는 Express라는 웹서버 프레임워크를 설치하고 만들어보겠습니다.

아니 Node.js가 웹서버라며, 근데 또 express라는 웹서버를 설치하고 만든다고???

 

자세한 설명은 패스하고, Node.js로 웹서버를 만들면 페이지 관리 등의 복잡한 문제들이 생기는데 이를 편하게 관리해주는 녀석이라고 생각하면 됩니다.

 

이렇게 생각하면 좀 낫습니다.

이제 Node.js는 그냥 웹서버만을 돌리기 위한 단순한 프레임워크가 아니라.. npm 등으로 여러 패키지들을 설치하고 구동하게 해주는 전체 통합 프레임워크이고, 웹서버를 위해 특화된 express를 돌리는 것이 좀더 좋다라고 말이지요.

Node.js + express 조합은 현재 가장 많이 사용되고 있습니다.

 

그래서 express 프레임워크 패키지를 설치할 것이고, 추가적으로 nodemon 패키지를 설치할 것입니다.

 

node.js는 구동 js 파일의 변경과 무관하게 처음 실행될 때의 js 파일 내용으로 구동하게 되고, 변경내용을 적용하려면 node를 종료하고 다시 node를 실행해야만 한다. 개발 시점에서는 얼마나 귀찮은 일인가!?

그래서 nodemon이 등장하였다.

nodemon이 내부에서 node를 실행하고, 파일 변경이 발생하면 알아서 node를 재시작해주는 것입니다.

 

 

npm express 설치 명령
 > npm install express 

> npm install express 설치완료. 0개의 취약점.

express 공식 홈페이지

 

Express - Node.js web application framework

Fast, unopinionated, minimalist web framework for Node.js $ npm install express --save

expressjs.com

 

 

 

 

npm nodemon 설치 명령
 > npm install -g nodemon 

npm install -g nodemon 설치 완료.

-g는 global로 어디에서는 nodemon을 실행할 수 있도록 전역 설정해주는 옵션이다.

D:/Nodejs>에서만 nodemon을 사용하겠다면 -g를 붙일 필요는 없다.

 

 

 

Nodejs.express로 웹서버 구동하기

 

 전체 구성  (index.js, test.html, test.css, test.js, cat.jpg)

 /template  폴더 안에 test.html을 하나 만들고..

 /static  폴더 안에 test.js, test.css 파일과 cat.jpg 이미지 하나를 넣어줍니다.

 

template에는 html 파일을 보관해 둘것이고, static은 고정 경로로 참조할 파일들을 넣어둘 곳입니다.

 

 

 

 

 index.js 
const express = require('express')
const app = express()
const HOST = '127.0.0.1'
const PORT = 3000

app.use(express.static('static')) // 고정 폴더 사용

//
app.get('/', (req, res) => { // / 메인 페이지
	res.send("Hello World!!! <a href='/test'>Test Page</a>") // 바로응답
	console.log('Hello World Sent.')
})
app.get('/test', (req, res) => { // /test 페이지
	res.sendFile(__dirname + "/template/test.html") // 파일전송
})

app.listen(PORT, () => { // 서버실행
	console.log(`Nodejs.express Server running at http://${HOST}:${PORT}`);
})

 

 test.html 
<html>
<head>
    <title>Test Page</title>
    <link rel="stylesheet" href="test.css"/>
    <script src="test.js"></script>
</head>
<body>
    <a href="/">Home</a><br/>
    <img class="mycat" onclick="testAlert()" src="cat.jpg"/><br/>
    한번 가면 끝인 없는 인생 멀그리 힘들게 사니..
</body>
</html>

 

 test.css 
* {
    background-color: rgb(193, 226, 241);
}
.mycat {
    border-radius: 30px;
}

 

 test.js 
function testAlert() {
    alert('할거면 목숨바쳐 해봐!')
}

 

cat.jpg

 

 

 

nodemon으로 index.js 실행
 > nodemon index.js 

 

이제 모두 끝났습니다. 터미널 창에서 아래와 같이 입력합니다.

 

> nodemon index.js

서버가 잘 실행되었습니다.

이 상태에서 index.js 파일 내용을 변경하고 저장을 하면..

 

위와 같이 nodemon이 변경사항으로 인해 node를 알아서 재실행해주는 것을 볼 수 있습니다.

이제 편하게 개발에 집중할 수 있겠네요.

 

http://127.0.0.1:3000  접속해봅니다.

/ 메인페이지
/test 테스트페이지
고양이클릭 - testAlert()

 

이제 무언가 그럴싸한 html + css + javascript와 이미지로 이루어진 웹페이지를 구성할 수 있게 되었습니다.

 

* VSCode

 

 

* Node, Npm, Javascript, React Native & Expo를 이용하여 나만의 꿀팁 페이지 꾸미기

 

 

 

 

* Expo AboutPage.js 만들어보기

 

 

예전에 일일이 불안정한 프로그램들 설치하며 찾아다니며, 공부하고 바꾸고 힘들던 그때.. 는 갔다..

물론 지금은 너무 많기 때문에 잘 찾아서 사용해보고 나에게 맞는 프레임워크를 구축하는 것도 일이긴 할 것 같다.

 

 

 

1. FileZilla

 + AWS FTP 접속용

 

2. 가비아

 + shop 도메인 500원 할인중

 

3. 무비스타 프로젝트 완성

 

4. AWS

 

5. Flask 서버 구동

 

6. 원페이지 쇼핑몰 DB연동 도메인 연동하여 실행

http://innosoft.shop 

 

원페이지쇼핑몰

내가 만든 원페이지쇼핑몰 테스트

innosoft.shop

 

 

음 재미있는 웹개발이었다..

예전에 php, javascript, css로 노가다 개발하던 것과 크게 다른 건 없는 듯 하면서도..

각각 잘 구성된 프레임워크라는 이름으로 잘 가져다 쓰도록 구성되었다는 점이 좋은 듯..

 

확실히 특정 정보를 보기 위해 페이지를 넘기며 매번 페이지가 바뀌는 형태보다는

Ajax로 백엔드와 연동하여 UI를 갱신하는 것이 사람이 인식함에 지속적인 정보의 유지가 된다는 느낌이 든다.

 

조금 아쉬운 것은

생각하는 아이디어들을 구현해낼 정도의 결과물들은 아니라서 ㅠ.,ㅜ;

완전 겉핥기가 끝난것이고, 또 공부할 내용들이 많을 듯하다.

 

 

1. Flask 서버 사용하기

 

2. Flask 서버로 Ajax 이용하여 GET, POST 등 요청

 

3. 모두의 책 리뷰. 요청정보 MongoDB 저장하고 List 불러와서 보여주기

 

4. 나홀로메모장. 글쓰기 -> 웹크롤링하여 DB저장하고 -> 목록 보여주기

 

5. 원페이지 쇼핑몰 - 주문하고 목록보여주기

 

 

Flask 서버와 Ajax를 활용하여 백그라운드 정보 요청 및 표시 처리 등의 반복 작업..

마지막 원페이지쇼핑몰은 오히려 웹크롤링 등이 연동되지는 않음.

 

 

 

1. OpenAPI로 Ajax 연동

 

2. Python List, Dictionary 기본 사용

+ JQuery와 거의 유사하네.

 

 

3. Naver 영화 랭크 페이지 크롤링하여 MongoDB에 저장

 

 

4. 지니 뮤직 사이트 랭크 크롤링 및 MongoDB 저장

 

 

이젠 정말 하나하나 이해하고 개발하는 시대는 끝났다..

무엇을 어떻게 잘 활용하여 서비스를 만드는가가 중요한 것이다.

 

 

 

1. 서울시 미세먼지 OpenAPI 이용하기

 

2. 서울시 따릉기 OpanAPI 이용하기

 

3. 랜덤 고양이 사진 API

 

 

4. 환율 API 이용하여 환율 표시

 

 

 

Ajax를 쓰기위해 JQuery를 import 해주면 되고..

 

OpenAPI가 일 다 하네.. 결국 데이터를 처리해주는 백엔드의 공개 API인것..

 

 

 

 

1. PyCharm.. - Html + CSS 핫한 개발툴..

 

 

2. Html + CSS를 이용하여 간단한 로그인 페이지를 뚝딱 만들기

 

 

3. 구글 웹 폰트 - 많지는 않지만 바로 사용하기 편하다.

https://fonts.google.com/?subset=korean 

 

Google Fonts

Making the web more beautiful, fast, and open through great typography

fonts.google.com

 

 

4. 부트스트랩 - 워낙 유명한데.. 이렇게 편하게 사용하는 것이었는지는 이번에 알게됨.

https://getbootstrap.com/docs/4.0/components/alerts/

 

Alerts

Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages.

getbootstrap.com

 

 

5. 부트스트랩을 이용하여 간단한 링크메모장 만들기..

 

 

6. Javascript 연습

+ 크롬 브라우저 F12 - 콘솔 에서 Javascrip 연습

 

 

7. HTML+CSS를 이용한 원페이지 쇼핑몰

 

 

 

아직도 모든 걸 직접 개발해야 할 것 같은 알 수 없는 중압감이 있지만..

이제는 벗어나야 하는 시대이지 않을까 합니다.

 

어렵지만 한발자국씩 전진해 봅니다.

장비 업체도 언젠가는 개발 방향이 모두 바뀌게 되겠지요.

 

 

유선랜으로 네트워크 패킷 모니터링만을 하려면 아래 링크로 가서 진행하면 됩니다.

 

 

[무료유틸] 와이어샤크(Wireshark) 유선 네트워크 패킷 모니터링 무설치

와이어샤크(Wireshark) https://www.wireshark.org Wireshark · Go Deep. What is SharkFest? SharkFest™, launched in 2008, is a series of annual educational conferences staged in various parts of the g..

boox.co.kr

 

우선 무선랜 카드의 패킷 모니터링을 하려면 무선랜 카드가 "모니터 모드"를 지원해야지만 사용가능합니다.

 

일단 무선랜 카드가 "모니터 모드"를 지원하는지부터 확인해보자.

Cmd 창에서 "netsh wlan show wirelesscapabilities | findstr 모니터"를 입력해보자.

"지원됨"이 나왔다면 성공!!! 기뻐하자 ^^~ 지원되지 않으면 지원되는 무선랜 카드를 구입해야 한다.

 

 

 

 

무선 네트워크를 포함하여 네트워크 패킷 모니터링하는 것을 설명합니다.

 

와이어샤크(Wireshark)
https://www.wireshark.org
 

Wireshark · Go Deep.

What is SharkFest? SharkFest™, launched in 2008, is a series of annual educational conferences staged in various parts of the globe and focused on sharing knowledge, experience and best practices among the Wireshark® developer and user communities. Shar

www.wireshark.org

 

Download를 클릭하여 이동하고 아래 PortableApps를 다운로드 합니다.

 

2021.04월 기준 버전 3.4.4입니다.

 

WiresharkPortable_3.4.4.paf.z01
10.00MB
WiresharkPortable_3.4.4.paf.z02
10.00MB
WiresharkPortable_3.4.4.paf.z03
10.00MB
WiresharkPortable_3.4.4.paf.zip
6.59MB

 

* WiresharkPortable_3.x.x.paf.exe를 실행하여 원하는 폴더에 시스템에 맞는 무설치 프로그램을 생성합니다.

 

* PC에 이미지 Packet capture driver가 설치되어 있다면 아래의 PCap 드라이버 설치는 패스~

 

* WiresharkPortable.exe를 실행하면 아래와 같이 Packet Capture driver를 설치해야 한다고 나옵니다.

 

* 무선랜 카드 호환을 위해 Npcap을 설치합니다. 기존 WinPcap이 설치되어 있다면 제거합니다.

  - 티스토리 자동저장 지원이 되지 않는군요 ㅠ. 업로드 진행중에 멈추어버리니 그냥 날아간. ㅜ.,ㅡ;

 

 

* Npcap 설치

 

Download로 이동하여 "Npcap 1.3 installer for Windows"를 다운로드합니다.

npcap-1.30.exe
0.76MB

 

* 설치시 중요한 건 아래와 같이 무선랜 지원을 활성화해주는 것입니다.

* 해당 항목을 선택하고 설치하면 무선랜카드 패킷 스니퍼링이 가능했습니다.

 

* 아래와 같이 Wlanhelper로 직접 수정하지 말고 맨 아래 설명하는 Winshark 실행시 설정하여 진행하는 것이 안전합니다. 안될시에 아래 주의사항 부분 도전!

* 혹시 되지 않는 분들은 Npcap 설치 완료후 아래와 같이 Cmd 프롬프트를 사용하여 모드 변경을 할 수 있습니다.

 

### 주의 ###

monitor mode로 변경시 무선랜 접속이 끊어집니다. 작업중이던 내용이 있다면 저장하고 진행하세요.. 그래서 티스토리 작성 중이던게 날아감 ㅠ.,ㅜ;;

사실 monitor 모드가 아니었음에도 무선랜 패킷 스니퍼링은 가능했습니다.

- Managed: Radiotab 데허를 포함한 802.11 데이터 패킷만 모니터링 가능.

- Monitor: 모든 802.11 패킷 모니터링 가능.

 

이제 WinsharkPortable.exe를 실행시켜 봅니다.

 

 

 

Wi-Fi가 모니터링됨을 확인할 수 있고, 좌상단 상어 지느러미 아이콘을 클릭하거나, Wi-Fi를 더블클릭하여 패킷 모니터링을 시작할 수 있습니다.

 

* Wireshark Capture Options을 진입하면 아래와 같은 창이 나타나고 우측에 [v] Monitor 기능을 설정하여 [Start]할 수 있습니다.

 

실행하니 monitor 모드로 자동 변경해서 구동하네요.. 마찬가지로 Wi-Fi 연결은 끊어졌습니다.

와이어샤크(Wireshark)
https://www.wireshark.org
 

Wireshark · Go Deep.

What is SharkFest? SharkFest™, launched in 2008, is a series of annual educational conferences staged in various parts of the globe and focused on sharing knowledge, experience and best practices among the Wireshark® developer and user communities. Shar

www.wireshark.org

 

Download를 클릭하여 이동하고 아래 PortableApps를 다운로드 합니다.

 

2021.04월 기준 버전 3.4.4입니다.

 

WiresharkPortable_3.4.4.paf.z01
10.00MB
WiresharkPortable_3.4.4.paf.z02
10.00MB
WiresharkPortable_3.4.4.paf.z03
10.00MB
WiresharkPortable_3.4.4.paf.zip
6.59MB

 

* WiresharkPortable_3.x.x.paf.exe를 실행하여 원하는 폴더에 시스템에 맞는 무설치 프로그램을 생성합니다.

 

* PC에 이미지 Packet capture driver가 설치되어 있다면 아래의 PCap 드라이버 설치는 패스~

 

* WiresharkPortable.exe를 실행하면 아래와 같이 Packet Capture driver를 설치해야 한다고 나옵니다.

 

* Winpcap.org 설치

 

Download로 이동하여 "Installer for Windows"를 다운로드합니다.

2021.04월 기준 버전 4.1.3

 

WinPcap_4_1_3.exe
0.87MB

 

설치는 간단히 끝~

 

WinsharkPortable.exe을 다시 실행하면 아래와 같이 메시지가 뜨지 않습니다. 준비 완료.

- 좌상단의 상어 지느러미 아이콘을 클릭하면 "이더넷 2" 유선랜을 통한 모든 데이터 패킷을 검사할 수 있습니다.

 

* 난 무선랜이 기본인데!?!? 그렇다.. 난 무선랜만 사용해서 아무것도 캡쳐링되지 않는다..

만약 무선랜을 사용한다면 아래 링크로 무선랜을 위한 Winshark 사용을 보기 바랍니다.

 

 

 

 

[무료유틸] 와이어샤크(Wireshark) 무선 네트워크 패킷 모니터링 무설치

유선랜으로 네트워크 패킷 모니터링만을 하려면 아래 링크로 가서 진행하면 됩니다. [무료유틸] 와이어샤크(Wireshark) 유선 네트워크 패킷 모니터링 무설치 와이어샤크(Wireshark) https://www.wireshark.or

boox.co.kr

 

+ Recent posts