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와 이미지로 이루어진 웹페이지를 구성할 수 있게 되었습니다.

 

 

나만의 꿀팁 페이지
- <View> <ScrollView> <Image> <Text> <StatusBar> 태그 등을 활용하여 페이지 구성

{Navigation}을 이용하여 페이지 이동하기.

{useState}, {useEffect} 등 사용하기

 

 

 

소개 페이지
- <ScrollView> <Image> <Text> 태그 등을 활용하여 페이지 구성

 

 

 

 

카테고리 버튼
- <ScrollView> <Image> <Text> 태그 등을 활용하여 페이지 구성

{useState}를 활용하여 카테고리 함수 만들어 버튼 동작 연동하기

- "반려견" 클릭시 반려견 관련 데이터만 보여주기

"꿀팁 찜" 버튼은 {Navigation}으로 LikePage.js 로 이동하기.

 

 

 

꿀팁 찜
- <ScrollView> 태그 등을 활용하여 페이지 구성

LikeCard.js component를 구성하여 map() 함수를 이용하여

<LikeCard></LikeCard> 호출하여 사용하기

 

 

상세 페이지
- <ScrollView> <View> <Image> <Text> 태그 등을 활용하여 페이지 구성

 

{Navigation}에서 전달받은 {route}의 params 값을 이용하여 상세 페이지 보이기.

- 이전 페이지로부터 제목과 이미지, 상세 설명 데이터를 그대로 전달받아 화면에 표시

 

Share를 사용하여 외부 링크 공유하기

 

Linking을 사용하여 외부 링크로 연결하기

 

 

 

몇년전 안드로이드 개발서적 보던게 엊그제 같은데..

너무나 달라진 환경.. 게다가 현재 사용되는 React, Expo 등도 너무나 빠르게 변화되고 있다는 것이 문제라면 문제다..

언제 또 개발 환경 및 플랫폼이 뒤바뀔지 알수가 없기 때문이다...

 

결국은 프론트앤드 개발자는 저러한 엄청난 툴들을 잘 활용해서 개발을 하고.. 몇년 지나 관리가 되지 않으면 앱의 생명은 끝이 되는거다.. 해당 프레임워크의 업데이트가 종료되거나 사라지거나, 또는 지속적인 업데이트를 프론트앤드 개발자를 두고 지속 대응을 하지 않으면 몇개월뒤 이미 오래전 만든 앱으로 전락해버릴 것이기 때문이다.

 

그러다보니 저런게 싫은 개발자들이 백앤드 개발자로 자리하게 되지 않을까 싶다.

나또한 백앤드가 맞지 않나 싶고, 생각이 많아지네.. 휴우..

 

 

 

0. 덱스터
- 메인 포스터

 

 

 

0. 덱스터 전시즌
- 자막 모음

덱스터_전시즌_포스터_자막.zip
3.34MB
Dexter All season 한글자막.zip
2.09MB
Dexter All season 영문자막.zip
2.00MB

 

 

 

1. 덱스터 시즌 1
- 자막, 포스터

Dexter.S01.Season.1.zip
0.28MB

 

 

 

2. 덱스터 시즌 2
- 자막, 포스터

Dexter.S02.Season.2.zip
0.33MB

 

 

 

3. 덱스터 시즌 3
- 자막, 포스터

Dexter.S03.Season.3.zip
0.65MB

 

 

 

4. 덱스터 시즌 4
- 자막, 포스터

Dexter.S04.Season.4.zip
0.30MB

 

 

 

5. 덱스터 시즌 5
- 자막, 포스터

Dexter.S05.Season.5.zip
0.31MB

 

 

 

6. 덱스터 시즌 6
- 자막, 포스터

Dexter.S06.Season.6.zip
0.30MB

 

 

 

 

7. 덱스터 시즌 7
- 자막, 포스터

Dexter.S07.Season.7.zip
0.31MB

 

 

 

 

8. 덱스터 시즌 8
- 자막, 포스터

Dexter.S08.Season.8.zip
0.36MB

 

 

 

9. 덱스터 시즌 9 (뉴블러드 시즌 1) (완)
- 자막, 포스터

Dexter.S09.Season.9.New.Blood.S01.zip
0.51MB

 

0. 왕좌의 게임
- 메인 포스터

 

 

 

0. 왕좌의 게임 전시즌
- 자막 모음

 

왕좌의게임_전시즌_포스터_자막.zip
7.69MB
Game.of.Thrones.complete.zip
1.30MB

 

 

1. 왕좌의 게임 시즌 1
- 자막, 포스터

 

왕좌의게임_시즌_1 (20110417~20110619).zip
0.54MB

 

 

 

2. 왕좌의 게임 시즌 2
- 자막, 포스터

 

왕좌의게임_시즌_2 (20120401~20120603).zip
0.37MB

 

 

 

3. 왕좌의 게임 시즌 3
- 자막, 포스터

 

 

왕좌의게임_시즌_3 (20130331~20130609).zip
2.00MB

 

 

 

4. 왕좌의 게임 시즌 4
- 자막, 포스터

 

 

왕좌의게임_시즌_4 (20140406~20140615).zip
0.91MB

 

 

 

5. 왕좌의 게임 시즌 5
- 자막, 포스터

 

 

왕좌의게임_시즌_5 (20150412~20150614).zip
0.36MB

 

 

 

6. 왕좌의 게임 시즌 6
- 자막, 포스터

 

 

왕좌의게임_시즌_6 (20160424~20160626).zip
0.56MB

 

 

 

7. 왕좌의 게임 시즌 7
- 자막, 포스터

 

 

왕좌의게임_시즌_7 (20170716~20170827).zip
0.28MB

 

 

 

8. 왕좌의 게임 시즌 8 (완)
- 자막, 포스터

 

 

왕좌의게임_시즌_8 (20190414~20190519)(완).zip
2.69MB

 

* 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인것..

 

 

 

+ Recent posts