기본 콘텐츠로 건너뛰기

3월, 2020의 게시물 표시

AWS instance로 Nodejs 구현하기

AWS instance로 Nodejs 구현하기 서버와 데이터베이스 관리 차원에서 효율적으로 관리하기 위해선 로컬보다는 서버를 호스팅해서 하는 것이 좋다. 우리는 Nodejs를 구동하기 위해 AWS에서 인스턴스를 할당받을 계획이다. 인스턴스의 pem키를 발급받아 nodejs와 npm까지는 설치를 완료한 상태이다. $ sudo npm install -g express 다음의 명령어를 입력하면 글로벌 옵션으로 어느 path에서든 express를 사용할 수 있게 설치한다. 다음과 같이 실행이 된다면 성공이다. 이후 Express generator를 설치한다. $ sudo npm install -g express-generator@4 버전은 4.x이며 이 역시 글로벌 옵션으로 설치해 준다. 이제 Node monitoring을 위해 nodemon을 설치해 준다. $ sudo npm install -g nodemon 모든 설치가 끝났다. 이제 nodejs를 실행시킬 프로젝트용 directory를 만든다. 이렇게 만들어 주고 express를 실행시키면 된다. $ express -e 다음과 같은 결과가 나오면 된다. 이제 node package를 설치하는 명령어를 입력하자. $ sudo npm install 이제 vi를 통해 포트번호를 정의해보자. app.set의 마지막에 한줄을 추가하면 된다. app.set('port', process.env.PORT || 9000); 이로써 우리는 9000번 포트를 사용하게 되었다. 또한 마지막줄에 서버를 생성하기 위한 코드를 작성하자. module.exports = app; var server = app.listen(app.get('port'), function() { console.log('Express server listening on port ' + server.address().port); }); 이

20.03.24 ShareBook TIL

20.03.24 ShareBook TIL Project/TIL 20.03.24 ShareBook TIL 중간 배포를 위해 EC2, RDS를 다시 설정하였다. EC2에 git에서 clone을 하고 서버를 작동시켜보니 ts로 돌려서 그런지 작동하지 않고 대기 상태로 있다가 timeout같은 시간 초과 에러가 났다. 그리고 갑자기 EC2 자체가 느려져서 nodejs를 삭제하고 다시 nvm으로 높은 버전의 node를 설치하였다. 그리고 나서 혹시 js로 돌리면 될까 해서 tsc로 js로 변환한뒤 돌려보니 RDS와 연결이 되지 않는 에러가 생겼다. workbench로 RDS를 연결했을 때는 정상적으로 작동해서 EC2에서 잘 못 설정한게 있다고 생각했다. 그래서 local에서 한번 config.json을 수정하고 연결하여도 똑같은 에러가 발생했다. 그럼 보안 설정에서 문제인가 싶어서 EC2, RDS 보안 그룹에서 설정을 막 만져보다 RDS에서 Custom TCP에 처음 RDS에서 설정한 포트를 넣어주었더니 연결되었다. config.json내용을 EC2에도 똑같이 적용시켜보려고 json파일을 vim으로 작성해서 넣어 주었지만 여전히 같은 에러를 반복하였다. 그럼 json 파일을 못 읽어내는게 아닌가 싶어서 그냥 module에 index.js에서 sequelize를 생성하는 부분에 직접 넣어 주었더니 마침내 연결이 되었다. 해결하고 난 뒤 생각의 흐름을 적어보니 매우 짧지만 정작 오늘 아침 10시 반부터 시작해서 저녁 10시 반까지 12시간을 고민하고나서야 해결되었다. from http://three-five.tistory.com/46 by ccl(A) rewrite - 2020-03-25 00:54:05

NodeJS로 배포한 서비스에 SSL 인증서 취득하기

NodeJS로 배포한 서비스에 SSL 인증서 취득하기 보안적인 이슈가 많은 근래 앱스토어에서도 SSL을 필수로 취득하도록 하며 https 통신은 의무가 되어가고 있습니다 이 게시물에서는 AWS의 EC2 인스턴스에 NodeJS로 만든 프로젝트를 SSL을 취득하여 https 통신을 가능하게 만드는 과정을 정리해 보고자 합니다 순서 1. 도메인 준비 2. Route53을 이용하여 도메인과 EC2 인스턴스 연결 3. nginx를 사용하여 NodeJS를 80번 포트에서 접근가능하도록 열어주기 4. nginx에서 도메인 - IP address 연결하기 5. ACM을 통해서 SSL 취득하기 6. 취득한 SSL을 사용해 ELB생성 및 Route53 수정하기 위의 과정에서 1~4번 과정을 마치면 Nodejs를 도메인을 사용하여 통신 가능하며 나머지 5~6번 과정을 추가로 마치면 https 통신이 가능합니다 하는 과정에서 실수를 할 수 있기 때문에 한번에 https 통신을 하기 보다는 http 통신을 먼저 마친후에 https 통신을 하는 것을 권장드립니다 도메인 준비 및 EC2와 연결하기 도메인과 서버(EC2) 연결하기 참고로 EC2를 도메인과 연결하려면 탄력적IP할당이 필수적이며 NodeJS서비스를 도메인에 연결하여 가동시키기 위해서는 pm2 모듈을 사용하시는 것을 추천드립니다 탄력적IP로 고정 IP만들기 AWS EC2에 서버 올리기 (using pm2) nginx를 사용하여 도메인 - NodeJS 연결하기 우선 nginx를 설치합니다 sudo apt-get update sudo apt-get install nginx 설치 후에 자신의 도메인으로 접속하였을 때 다음과 같이 nginx가 반겨주면 성공한 것입니다 :D 만약 위와 같은 화면이 뜨지 않는다면 nginx를 실행해주세요 sudo service ngnix start nginx가 정상적으로 작동한다면 프록시 설정을 위해 디

passport-local, passport-local-mongoose 회원가입, 로그인

passport-local, passport-local-mongoose 회원가입, 로그인 Passport는 NodeJS 의 사용자 인증 미들웨어이다. passport-local-mongoose는 passport를 사용한 사용자 이름 및 비밀번호 로그인을 단순화하는 Mongoose 플러그인 이다. form 부분 구성한 환경이 틀려 복붙하시면 에러날 가능성이... // login form form(action=routes.login, method="post") input(type="email", name="email", placeholder="Email@" required=true) input(type="password", name="password", placeholder="Password" required=true) input(type="submit", value="로그인") // join form form(action=routes.join, method="post") input(type="email", name="email", placeholder="이메일@" required=true) input(type="password", name="password", placeholder="비밀번호" required=true) input(type="password", name="password2", placeholder="비밀번호 확인" required=true) input(type="submit", value="가입") input(type="button", va

AWS CI/CD 파이프라인에 Slack 알람 적용(Lambda, CloudWatch Events 연동)

AWS CI/CD 파이프라인에 Slack 알람 적용(Lambda, CloudWatch Events 연동) 이번 글에서는 구축된 CI/CD 파이프라인과 Slack 알람을 연동하는 방법에 대해서 알아볼 것이다. CI/CD 파이프라인 시작/종료(성공/실패) 시 Amazon CloudWatch Events에서 해당 이벤트를 감지한 후 AWS Lambda로 트리거 신호를 보내면 AWS Lambda에서 Slack채널로 알람을 보내는 프로세스다. 글의 순서는 다음과 같다. Amazon CloudWatch Events, AWS Lambda란? 실습 전 준비사항 Slack Webhook 생성 AWS Lambda 함수 생성 AWS CloudWatch Events 생성 테스트 위와 같은 방식으로 구축을 하면 최종 프로세스는 다음 그림과 같다 (우리가 이 글에서 진행하는 내용은 빨간색으로 표시된 부분) 1. Amazon CloudWatch Events, AWS Lambda란? 1-1. Amazon CloudWatch Events란? Amazon CloudWatch Event(혹은 AWS CloudWatch Events)는 AWS 상태 변경 등을 감시할 수 있는 기능이다. 만약 사용자가 만든 규칙에 맞는 이벤트가 발생하게 되면 해당 이벤트가 사정에 정의된 규칙과 일치할 경우 하나 이상의 대상 작업을 호출한다. 이벤트 유형에 따라 알람을 보내거나, 이벤트 정보를 캡쳐하거나, 교정작업을 수행하거나, 이벤트를 시작하거나, 기타 작업을 수행할 수 있다. 이벤트가 발생할 경우 대상 작업은 AWS Lambda함수, AWS Kinesis 스트림, AWS SQS, Amazon SNS 등이 있다. 사용되는 사례로는 1) 이벤트가 발생하면 Lambda함수를 사용하여 Slack채널로 알림을 전달하거나, 2) AWS 상태 이벤트가 발생하면 Lambda 및 CloudWatch Events를 사용하여 Amazon SNS로 사용자 지정 텍스트 또는 SMS 알림을 보내는 등

[Mac OS X] 데스크탑 응용프로그램 개발시작

[Mac OS X] 데스크탑 응용프로그램 개발시작 현재 회사에서 다음 프로젝트로 Mac OS X를 개발해야 하는 일정이 생겨 난생 처음 데스크탑 응용프로그램을 개발하기 공부를 시작했고 여러가지 플랫폼이 있다는것을 발견했다. 어떤 플랫폼을 사용해야할 지 먼저 고민해보자. 무엇으로 개발할것인가? Xcode & Swfit or Objective-C Mac OS X 는 objective-c를 기반으로 만들어졌다. apple에서 제공하는 Xcode와 objective-c 혹은 Swift로 응용 프로그램을 만들 수 있다. Electron Electron 프레임워크를 사용하면 javascript, HTML, CSS를 사용하여 크로스 플랫폼 데스크탑 응용 프로그램을 만들 수 있다. react-native-desktop Qt 프레임 워크를 기반으로하는 크로스 플랫폼이다. react-native 와 javascript로 응용 프로그램을 만들 수 있다. Qt는 컴퓨터 프로그래밍에서 GUI 프로그램 개발에 널리 쓰이는 크로스 플랫폼 프레임워크. 각 플랫폼의 장단점은 무엇인가? Xcode & Swfit or Objective-C - 장점 모든 OSX API에 직접 접근할 수 있다. Xcode를 통해 App Store에 쉽게 배포할 수 있다. - 단점 Windows 전용 응용 프로그램을 다시 개발해야한다. Swift언어를 모른다면 새로 공부해야 한다. Electron - 장점 웹스택을 가지고 빠르게 만들 수 있다. 다양한 플랫폼을 지원한다. - 단점 Native언어로 개발할때 보다 성능이 떨어질 이슈가있다. OS X API를 사용하는데 복잡하다. *API에 대한 JavaScript 래퍼가 없으면 자체 래퍼를 작성하지 않는 한 프로젝트에서 사용할 수 없습니다. React-native-desktop - 장점 현재 개발스택과 완전히 동일하므로 더 빠르게 개발 할 수 있다. 다양한 플랫폼을 지원한다. - 단점 N

[Full stack developer] 풀스택 개발자는 다 아는 사람? NO

[Full stack developer] 풀스택 개발자는 다 아는 사람? NO Full stack devloper 연봉과 수요가 높다는 풀스택 개발자란? 개발에대한 모든걸 알아야 될까? 'No'라고 한다 자바스크립트 책을 쓰고 코딩 커뮤니티나 학교에 무료로 나눠주는 외국 자바스크립트 선생님은 풀 스택의 의미는 모든 것을 말하는게 아니라 스택만 알면 된다고 한다. 이 스택은 MERN MERN (MongoDB, ExpressJS, ReactJS, NodeJS) 을 알면 풀 스택이라고 한다. I still get asked what is Full Stack developer? Do you need to know everything? Full...means everything right? No...you just need to know a stack. And it should probably be MERN. — JavaScript Teacher (@js_tut) March 19, 2020 참고 https://www.educative.io/edpresso/what-is-mern-stack?https://www.educative.io/courses/grokking-the-object-oriented-design-interview?aid=5082902844932096&utm;_source=google&utm;_medium=cpc&utm;_campaign=blog-dynamic&gclid;=CjwKCAjwsMzzBRACEiwAx4lLGykB0OJ1XYoz1vq-eARUzUKrN7ievxnrIJMA5hr-Ox4D1g9wlXfjrxoCPfQQAvD_BwE from http://forgottenknowledge.tistory.com/15 by ccl(A) rewrite - 2020-03-20 13:20:07

[MongoDB] CRUD 작업하기

[MongoDB] CRUD 작업하기 1. 자료형 몽고디비는 자바스크립트 문법을 사용하므로 자바스크립트의 자료형을 따릅니다. 그 외에 추가로 몇가지 자료형이 더 있습니다. Date나 정규표현식 같은 자바스크립트 객체를 자료형으로 사용할 수 있고, Binary Data, ObjectId, Int, Long, Decimal, Timestamp, Javascript 등의 추가적인 자료형이 있습니다. ( 추가적인 자료형 중에서 ObjectId와 Binary Data, Timestamp 외에는 잘 사용되지 않습니다. ) 2. Create (생성) 컬렉션에 컬럼을 정의하지 않아도 되므로 컬렉션에는 아무 데이터나 넣을 수 있습니다. 1 ) 다큐먼트 생성 : db.컬렉션명.save(다큐먼트) nodejs 데이터베이스안에 users 컬렉션안에 데이터를 추가하는 예시입니다. 몽고디비 프롬프트를 실행하며 다음 명령어를 실행해봅니다. $ mongo > use nodejs switched to db nodejs > db.users.save({ name: 'hyemin', age: 25, married: false, comment: '안녕하세요', createdAt: new Date() }); WriteResult({ "nInserted" :1 }) > db.users.save({ name: 'tufu', age: 8, married: false, comment: '난 두부', createdAt: new Date() }); WriteResult({ "nInserted" :1 }) 2 ) 아이디 참조 후 데이터 추가 comments 컬렉션에도 데이터를 넣습니다. tufu의 댓글을 추가해봅니다. > db.users.find({ name: 'tufu' }), { _id: 1 }); { "_id"

[2020-angstromCTF] web - A peculiar query write-up

[2020-angstromCTF] web - A peculiar query write-up English write-up UI seems like below. If you click the 'the source' link, you can get back-end source code. const express = require("express"); const rateLimit = require("express-rate-limit"); const app = express(); const { Pool, Client } = require("pg"); const port = process.env.PORT || 9090; const path = require("path"); const client = new Client({ user: process.env.DBUSER, host: process.env.DBHOST, database: process.env.DBNAME, password: process.env.DBPASS, port: process.env.DBPORT }); async function query(q) { const ret = await client.query(`SELECT name FROM Criminals WHERE name ILIKE '${q}%';`); return ret; } app.set("view engine", "ejs"); app.use(express.static("public")); app.get("/src", (req, res) => { res.sendFile(path.join(__dirname, "index.js")); }); app.get("/", async (req, res) => { if (req.query

Node.Js에서 AWS S3버킷에 파일 업로드 및 삭제

Node.Js에서 AWS S3버킷에 파일 업로드 및 삭제 AWS S3란? Simple Storage Service의 약자로 간단히 "저장서비스"라고 부를 수 있다. AWS라는 클라우드 서비스를 하나의 컴퓨터라고 했을 때 S3는 저장장치 라고 할 수 있다. HTTPS 형태의 API로 데이터를 저장하거나 추출하게 해주는 웹서비스 ( S3에 파일 업로드시 해당 파일에 키 값, 객체 URL이 부여된다) AWS S3의 구성요소 버킷 : 하나의 프로젝트를 하나의 버킷 이라고 생각하면 된다. 폴더 : 버킷 내부에는 폴더가 존재하고 , 그 폴더 안에 파일(오브젝트)가 있다. 오브젝트 : 폴더 내부에 존재하고 파일 및 파일에 설정된 내용 간단한 이용 순서 AWS S3 를 사용하기 위해선 당연히 AWS에 회원가입을 해야하고 처음 회원가입시 12개월 프리티어라고 무료로 서비스를 제공해준다. ( 단 제한된 사용량을 초과했을 시에 과금이 적용됨 , 12개월 무료기간이 지나도 마찬가지 ) 회원가입을 했다면 IAM에서 사용자를 추가 하고 KEY와 PRIVATE_KEY를 발급받는다. 그리고 S3 서비스에 들어가 버킷을 생성한다. 절대로 유저 KEY 값과 PRIVATE_KEY값이 깃허브나 외부로 업로드하는 일을 하면 안됨. 깃 커밋하기 전에 한 번더 확인할 것 .gitignore가 잘 됐나 안됐나 공식 문서 s3 버킷에 있는 오브젝트 삭제 / s3.deleteObject \https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#deleteObject-property multerS3를 이용한 업로드 https://www.npmjs.com/package/multer-s3 multerS3 acl option : https://www.npmjs.com/package/multer-s3 코드의 일부분만 작성한걸로 환경이 저와 같지 않으므로 복붙 하시면 안됩

[LINUX] EC2 처음 설정

[LINUX] EC2 처음 설정 Node 설치 curl -sL https://rpm.nodesource.com/setup_10.x | sudo bash - sudo yum install nodejs npm cache clean --force npm install -g n n stable from http://emessell.tistory.com/136 by ccl(A) rewrite - 2020-03-18 16:54:05

[MongoDB] 몽고디비 시작하기

[MongoDB] 몽고디비 시작하기 Mac을 사용하고 있어서 macOS기준으로 포스팅을 작성합니다. 1. 몽고디비란? MongoDB 는 무료 오픈 소스 플랫폼 문서 지향 데이터 베이스(Cross-Platform Document-Oriented)입니다. NoSQL의 일종으로 확장성이 좋고 성능이 우수합니다. JSON과 같은 동적 스키마(Schema)형 문서들을 선호함으로써 전통적인 테이블 기반 관계형 데이터베이스들(RDMS)과는 차별화 됩니다. 1) NoSQL이란? NoSQL 데이터베이스는 전통적인 관계형 데이터베이스 보다 덜 제한적인 일관성 모델을 이용합니다. 때문에 NoSQL데이터베이스는 단순 검색 및 추가 작업이 쉬워서 빅데이터(Big Data) 및 실시간 웹 애플리케이션(Web Application)에 자주 쓰입니다. NoSQL이란 이름은 "SQL을 사용하지 않는다(No SQL)" 라는 의미가 아니고, SQL 계열 쿼리 언어를 사용 할 수도 있다는 사실을 강조하기 위한 이름으로 "Not only SQL" 의 약어입니다. 2) NoSQL vs SQL SQL (MySQL) NoSQL(MongoDB) 규칙에 맞는 데이터 입력 자유로운 데이터 입력 테이블 간 JOIN 지원 컬렉션 간 JOIN 미지원 트랜잭션 지원 트랜잭션 미지원 안정성, 일관성 확장성, 가용성 용어 (테이블, 로우, 컬럼) 용어 (컬렉션, 다큐먼트, 필드) 2. 몽고디비 설치하기 공식 사이트의 메뉴얼을 따라해봅니다. https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/ Homebrew를 활용해서 설치하는 방법을 그대로 따라했습니당ㅇㅅㅇ (Homebrew를 설치하지 않았다면 설치한 후에! 진행하면 됩니다) 터미널 창에 순서대로 실행 brew tap mongodb/brew brew install mongodb-community@4.2 brew s

[ 코드보며 배우는 NodeJS ] 초기 코드 세팅

[ 코드보며 배우는 NodeJS ] 초기 코드 세팅 기다릴 시간도 없습니다. #001 "기다릴 시간도 없습니다" 시리즈의 첫 번째 강좌입니다. 다른 강좌와는 다르게 코드만 보여주고 끝납니다. 설명이 없다고요? 하하, 이 강좌는 이론 따윈 씹어먹습니다. 이론은 널리고 널렸으니 지금 바로 시작합니다. (구글링 조금만 하시면 NodeJS 설치하는건 금방 나옵니다) 처음에는 npm install express 를 NodeJS 커멘드 창에 입력합니다. var express = require('express'); var http = require('http'); var app = express(); var server = http.createServer(app); app.get('/', function(req, res) { res.send("Hello World"); }); server.listen(4000); 초기 코드 입니다. 접속은 localhost:4000 으로 접속하시면 됩니다. 이렇게 나옵니다. 감사합니다 from http://devent.tistory.com/36 by ccl(A) rewrite - 2020-03-17 20:20:06

[plc&pc 연동] nodejs를 이용한 modbus RTU 구현

[plc&pc 연동] nodejs를 이용한 modbus RTU 구현 plc와 pc 연동을 C#, python으로 구현해보고, npm에 modbus-serial 모듈이 있는 것을 알고 난 후 nodejs를 활용하여 plc와의 연동을 테스트해보았다. 예제 코드도 가지고 있었던 터라 아무 문제 없이 해결할 수 있을 줄 알았지만 예상치 못한 문제가 발생하였다. Issue 콜백 함수의 향연으로 Thread를 신경쓰지 않아도 되는 nodejs 특성상 어떤 놈이 먼저 실행이 될 지 알 수가 없다...ㅋ 그러다 보니 serial 통신을 이용해서 하나의 데이터만 가져오는 것은 아무 상관이 없었는데, read를 두 번 이상 하니 이 함수 놈이 요청하고, serial통신 버퍼에 있는 데이터를 몽땅 가져오는 바람에 뒤에 실행되는 read함수에서 데이터가 없다며 에러를 토해내는 것이 아닌가.. 그렇다면 내가 할 수 있는 최선은 이 중구난방으로 실행되는 비동기 함수들을 순차적으로 실행시켜주면 되는 일.. 그래서 Async.series를 사용해서 문제를 해결하였다. p.s. series는 단순 순차 실행, waterfall은 순차 실행인데 결과를 다음 콜백 함수에 전달 할 수 있다고 한다더라. 해결 개발 환경 : Ubuntu 64bit 16.04 IDE : vscode nodejs version : v13.11.0 npm package : modbus-serial, async 더보기 코드 const ModbusRTU = require("modbus-serial") var async = require("async"); var client = new ModbusRTU(); var timeoutConnectRef = null function connect(){ console.log("Connecting..!!"); clearTimeout(timeoutConnectRef); if(cli

See markdown preview in vim: vim에서 마크다운 미리보기

See markdown preview in vim: vim에서 마크다운 미리보기 나는 블로그 포스트 등 거의 모든 텍스트를 vim으로 작성한다. 그러다 보니 typora, marked 등 마크다운 편집기들이 제공하는 프리뷰 기능을 사용하지 못했는데, 찾아보니 vim에서도 동일하게 preview를 제공해주는 괜찮은 플러그인이 있어서 소개한다. 많은 플러그인이 있는데, 내가 선택한 플러그인은 vim-markdown-preview 이름은 nvim이지만 neovim 말고 vim8.1 이상에서도 사용 가능하다. 나는 vim8이상을 사용중이며 설치 방법도 쉬워 보이고, 다양한 기능을 제공하며 실시간 수정이 반영되는 점에서 해당 플러그인을 선택하였다. (github star 수도 많았다) 예시: 상당히 화려하게 사용하는데 사실 나는 header, list, image, code block 이외에는 잘 사용하지 않는다. 설치 (vim-plug로 설치하는 방법: vim-plug 사용법에 대한 포스트는 여기 참고) 다음을 ~/.vimrc 에 추가한다. " nodejs와 yarn이 설치되어 있다면 아래 라인 추가 " 아마 대부분의 웹 개발자는 있을 것(?) Plug 'iamcco/markdown-preview.nvim', { 'do': 'cd app & yarn install' } " nodejs, yarn이 설치되어 있지 않으면 다음 라인을 추가 Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install() } } 플러그인 설치하기 :source ~/.vimrc :PlugInstall Command 현재 버퍼의 프리뷰를 보려면 다음 명령어를 실행하면 된다. 자동으로 브라우저에 localhost로 프리뷰를 띄워준다. :MarkdownPreview 프리뷰를 종

카카오 오픈빌더와 외부 API 연동(feat.Nodejs)

카카오 오픈빌더와 외부 API 연동(feat.Nodejs) 이전에 플러스 친구와 외부 API 연동에 관한 글을 작성한 적 있습니다. 하지만 지난 2년동안 플러스 친구에 많은 변화가 생겼는데요. 카카오 플러스 친구의 명칭이 카카오 채널로 바뀌고, 챗봇 세팅 방식이 기존 [카카오 플러스 친구 - 외부 API 연동] 구조에서 오픈빌더가 추가되어 [카카오 채널(구 플러스 친구) - 카카오 i 오픈빌더 - 외부 API 연동] 구조로 바뀌었습니다. 이번 글에서는 오픈빌더의 챗봇 시나리오 관리 기능을 간단히 소개하고 외부 API를 연동하는 예제를 다뤄보겠습니다. (연동파트는 5번 항목부터 보시면 됩니다.) 1. 블록 블록은 오픈빌더에서 질의/응답을 관리하는 최소 단위로, 사용자의 발화와 챗봇의 대답을 입력할 수 있습니다. 예를들어 인사라는 블록을 만들고 인사에 해당하는 사용자 발화 패턴들을 입력해두면, 실제 채널 톡방에서 그에 해당하는 발화가 들어왔을때 입력해둔 응답이 나오는 형식입니다. 예전에는 패턴과 발화 키워드가 1:1 매칭, 즉 입력해둔 패턴과 사용자 발화의 string이 정확히 일치할때만 블록이 실행됐었는데, 발화 패턴을 20개 이상 등록하면 머신러닝 기능을 이용할 수 있도록 기능이 생겼습니다. 아마 유사도 분석 개념이 기본으로 들어가있을 것이기 때문에 블록의 주제와 벗어나는 너무 뜬금없는 발화패턴들을 많이 넣지 않도록 하는걸 권장하겠습니다. 2. 시나리오 시나리오는 '블록'들을 묶어서 관리할 수 있는 단위로, 일종의 폴더 구조라고 생각하면 쉽습니다. 오픈빌더에서 좌측 상단에 파란 버튼을 클릭하여 시나리오를 생성할 수 있습니다. 하나의 시나리오에서 모든 블록을 관리하면 챗봇 도메인이 커질수록 관리가 어려워지니 아래 같은식으로 시나리오를 사용하여 블록을 구조화하면 운영 측면에서 수월해집니다. 3. 컨텍스트 컨텍스트는 맥락이라는 뜻 입니다. 오픈빌더에 존재하는 컨텍스트는 자연어 분석을 통해서 맥

코딩 프로젝트 작업순서 정하기

코딩 프로젝트 작업순서 정하기 프로젝트/암기왕 project 코딩 프로젝트 작업순서 정하기 혼자만의 프로젝트로 암기왕 프로젝트를 시작하려 한다. 암기를 도와주는 프로그램같은 것인데 이전 본과 1, 2학년 때 암기를 하며 괴로웠던 기억이 지금까지 진하게 남아 있어서 이런 친구들에게 도움이 되고자 만들어보려 한다. 본과때 괴로워하며 병원 주차장을 걸어다니던 때는 내 인생 중 가장 괴로웠던 순간들중 하나였다. ㅠㅠ 코드스테이츠에서 동료들과 같이 작업을 할 때는 그래도 심적으로 기댈 수가 있었는데 혼자 프런트와 서버를 다 하려니 시작하기 전부터 두려움이 있는 것이 사실이다. 하지만, 망해도 시간 말고는 날리는 것이 없다. 여태까지 프로젝트를 할 때마다 많이 배웠으니 이번에도 배우는게 많기를 기대해 본다. 프로젝트를 완성 못해도 코딩 관련하여 배우는게 1가지라도 있다면 실패한 프로젝트가 아니다. 코드스테이츠에서 하며 느낀것이 있다면 코딩은 일단 무조건 들이대는 것이고, 프로젝트를 많이 만들어볼수록 실력이 는다는 것이다. 게다가 이번엔 내가 진정 만들고 싶고, 가능하다면 사업화까지 해보고 싶던 프로젝트이니 더욱 흥미를 가지고 할 수 있을 것 같다. 새롭게 프로젝트를 할 때마다 항상 새로운 기술 스택을 하나씩 추가해왔다. 이전 프로젝트 때는 프런트엔드의 Apollo client만 사용해봤으므로 이번에는 Apollo server 쪽을 작업하는 것을 연습해봐야겠다. 따라서 기본적으로 사용할 기술 스택으로는 기존과 같이 Frontend: Typescript, React, Antd, Emotio, Apollo client BackEnd: Typescript, Nodejs, Express, TypeORM, Apollo server, Passport, JWT, MySQL 을 사용해보려 한다. 작업 순서는 기획 -> 프런트엔드 기본 -> 백엔드 기본 -> 동시 진행 순서로 하려고 하며, 구체적으로는 Figma에 대략적인 기획

[실습]NodeJS + EXPRESS + MySQL 을 이용한 게시판 만들기 3(MVC)

[실습]NodeJS + EXPRESS + MySQL 을 이용한 게시판 만들기 3(MVC) 실습2 이후 나머지 부분들 까지 라우터 모두 작성함 app/routes/posts.js app/controllers/postsController.js 현재까지의 소스 app/models/postsModel.js 현재까지의 소스 from http://thisblogbusy.tistory.com/139 by ccl(A) rewrite - 2020-03-15 09:20:05

[Vue Native] Vue-Native 설치(React-Native-Cli)

[Vue Native] Vue-Native 설치(React-Native-Cli) Vue-Native를 설치하기위해서는 먼저 Reactive-Native를 설치하여야 합니다. React-Native는 nodejs, yarn, jdk8 를 기본 환경으로 제시하고 있습니다. Cholatey를 사용하면 이러한 프로그램들의 설치가 용이합니다. Windows Powershell 관리자 권한으로 오픈하여 스크립트 실행권한 설정 Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force cholatey 설치 Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) yarn 1.22.0 설치 choco install yarn --version=1.22.0 nodejs-lts 10.16.3 설치 choco install nodejs-lts --version=10.16.3 vue-native-cli 설치 npm install --global vue-native-cli react-native-cli 설치 npm install --global react-native-cli 프로젝트 생성 vue-native init projectName --no-expo 프로젝트 경로로 이동 cd projectName vue-native-scripts 설치(package.json에 없는 경우에만 설치) npm install vue-native-scripts --save-dev App.js 삭제 rm App.js 안드로이드 테스트 환

[Node.js] Mongoose 사용하기

[Node.js] Mongoose 사용하기 MySQL에 시퀄라이즈가 있다면 몽고디비에는 몽구스가 있습니다. 몽구스에는 스키마가 있습니다. 몽고디비는 테이블이 없어서 자유롭게 데이터를 넣을 수 있지만, 때로는 이런 점이 단점으로 작용할 수 있습니다. 몽구스는 몽고디비에 데이터를 넣기 전 노드 서버 단에서 데이터를 한 번 필터링하는 역할을 해줍니다. 또한, MySQL에 있는 JSON 기능을 populate라는 메서드로 어느 정도 보완해줍니다. 따라서 관계가 있는 데이터를 쉽게 가져올 수 있습니다. 먼저 express로 learn-mongoose 폴더를 생성한 후 mongoose를 설치합니다. express learn-mongoose 명령 폴더 이동 npm i mongoose 명령 몽고디비는 주소를 사용해 연결합니다. 주소 형식은 mongodb://[username:password@]host[:port][/[database][?options]] 와 같습니다. [] 부분은 있어도 되고 없어도 됨을 의미합니다. 먼저 schemas 폴더를 루트 디렉터리에 생성합니다. 그리고 index.js 파일을 생성합니다. // schemas/index.js const mongoose = require('mongoose'); module.exports = () =>{ const connect = () =>{ if(process.env.NODE_ENV !== 'production'){ mongoose.set('debug',true); } mongoose.connect('mongodb://root:1234@localhost:27017/admin',{ // 접속을 시도하는 주소의 데이터베이스는 admin이지만, 실제 사용할 데이터베이스는 nodejs이다. dbName: 'nodejs', },(error)=>{ if(error){ console.log('몽고디비 연결 에러

[실습]NodeJS + EXPRESS + MySQL 을 이용한 게시판 만들기 1

[실습]NodeJS + EXPRESS + MySQL 을 이용한 게시판 만들기 1 라우터 파일에 테스트연결(app/routes/users.js) const express = require('express'); const router = express.Router(); // mysql 연결 const mysqlConnObj = require('../config/mysql'); const mysqlConn = mysqlConnObj.init(); mysqlConnObj.open(mysqlConn); // 정상적으로 연결되었는지 확인 /* GET users listing. */ router.get('/', function(req, res, next) { res.send('respond with a resource'); }); /* post로 넘어온 값은 req.body 로 받을 수 있다. get 으로 넘어온 값은 req.query 로 받을 수 있다. */ router.post('/signUp', function (req, res, next) { const user = { 'userid': req.body.user.userid, 'name': req.body.user.name, 'password': req.body.user.password }; // 값 이스케이프 처리 let query = 'SELECT userid FROM users WHERE userid = ?'; let bindParam = [ user.userid ]; mysqlConn.query(query, bindParam, function (err, results, fields) { if (err) throw err; if (results[0] === undefined) { // 동일한 아이디가 없을 경우 //const salt = bcrypt.genSaltSync(); }

[서버개발캠프] 서버개발캠프 4기 활동을 마무리하며

[서버개발캠프] 서버개발캠프 4기 활동을 마무리하며 저번에도 마무리 글을 썼었는데 학교 프로젝트 하느라 바빠서 너무 급하게 적은게 아닌가 생각하고 있었다. 대충 프로젝트도 마무리 된 겸 대리님께서 보내주신 질문리스트가 내용이 좋은 것 같아서 다시 한번 작성하기로 했다. [주제1] 서버개발캠프 전체 회고 (feat. 나에게 서버개발캠프란..?) ü 앞으로 개발자로서 본인의 방향과 진로 : 이번 경험을 살려 서버 개발쪽으로 갈 수 있으면 좋겠지만 ü 프로젝트 경험을 통한 협업/동료 : 마지막엔 마무리 할 것이 많아 분담이 잘 안됬는데 간만에 정말 분담도 잘 되고 척척 진행되서 재미있는 프로젝트였다. 많이 도움도 받고 배워가서 좋았다. 이런 팀원들 또 만날 수 있을지 모르겠다!! ü 스마일게이트에서 직/간접적으로 생활하며 느낀 회사의 이미지 (신입 개발 인재들의 성장 및 지원, 내부 구성원 창의/창작 활동 장려 문화 등) : 사실 스마일게이트라는 곳을 게임하면서 들어본 것이 끝이라서 잘 몰랐는데 일단 식당 밥이 너무 맛있어서 좋았다. 밥이 맛있으니까 프로젝트 할 맛도 나고 통근 버스라던지 헬스장이라던지 사원들을 위한 복지 시설이 많아서 먼 거리여도 회사 다닐 맛이 날 것 같았다. 보컬 트레이닝이라던지 사원들 취미 개발을 위한 프로그램도 있고 회사 분위기도 경직된 분위기가 아니라 개발할 맛 날 것 같아보였다. [주제2] 기술/개발 내용 (서버개발캠프 참여하기 전과 참여 과정) ü 서버 개발 캠프 참여하기 전 1. 가장 많이 공부한 프로그래밍 언어? : C, 파이썬 2. 1번에서 그 언어를 주로 공부했거나 사용한 이유 : 학교 과제 3. 1번의 언어를 어떤 식으로 공부했나? : 2번을 하기 위해서 공부했다. 4. 프레임워크는 무엇을 사용해봤나? : 경험이 없었다.. 5. 본인이 생각할 때 4번의 프레임워크의 장단점은? : 없었다.. 6. 4번의 프레임워크

[Node.js] Node.js란?

[Node.js] Node.js란? 1. Node.js 란? 공식 사이트의 정의는 아래와 같습니다. NodeJS 는 구글 크롬의 자바스크립트 엔진 (V8 Engine) 에 기반해 만들어진 JavaScript 런타임입니다. Node.js는 이벤트 기반, 논 블로킹 I/O 모델을 사용해 가볍고 효율적입니다. Node.js의 패키지 생태계인 npm은 세계에서 가장 큰 오픈 소스 라이브러리이기도 합니다. 위의 설명으로 보면 자바스크립트 런타임이라는 표현이 보입니다. 알고 넘어가야 할게 Node는 웹서버가 아닙니다. 노드는 자바스크립트 애플리케이션이 서버로서 기능하기 위한 도구를 제공하므로 서버역할을 수행할 수 있는 것 뿐입니다. 아파치 웹서버처럼 HTML 파일 경로를 지정해주고 서버를 열고 그런 설정이 없습니다. HTTP 서버를 직접 작성해 서버 역할을 수행할 수 있게 하는 것 뿐입니다. 2. Node.js 장점 비동기 I/O 처리 / 이벤트 위주: Node.js 라이브러리의 모든 API는 비동기식입니다, 멈추지 않는다는거죠 (Non-blocking). Node.js 기반 서버는 API가 실행되었을때, 데이터를 반환할때까지 기다리지 않고 다음 API 를 실행합니다. 그리고 이전에 실행했던 API가 결과값을 반환할 시, NodeJS의 이벤트 알림 메커니즘을 통해 결과값을 받아옵니다. Node.js 라이브러리의 모든 API는 비동기식입니다, 멈추지 않는다는거죠 (Non-blocking). Node.js 기반 서버는 API가 실행되었을때, 데이터를 반환할때까지 기다리지 않고 다음 API 를 실행합니다. 그리고 이전에 실행했던 API가 결과값을 반환할 시, NodeJS의 이벤트 알림 메커니즘을 통해 결과값을 받아옵니다. 빠른 속도: 구글 크롬의 V8 자바스크립트 엔진을 사용하여 빠른 코드 실행을 제공합니다. 구글 크롬의 V8 자바스크립트 엔진을 사용하여 빠른 코드 실행을 제공합니다. 단일 쓰레드 / 뛰어난 확장성: No

[NodeJS 링크] express exception handling

[NodeJS 링크] express exception handling Express 오류 처리 오류 처리 다른 미들웨어 함수와 동일반 방법으로 오류 처리 미들웨어 함수를 정의할 수 있지만, 오류 처리 함수는 3개가 아닌 4개의 인수, 즉 (err, req, res, next)를 갖는다는 점이 다릅니다. 예를 들면 다음과 같습니다. app.use(function(err, req, res, next) { console.error(err.stack); res.status(500).send('Something broke!'); }); 오류 처리 미들웨어는 expressjs.com from http://jwkim96.tistory.com/124 by ccl(A) rewrite - 2020-03-11 13:54:05

AWS - 인스턴스 생성

AWS - 인스턴스 생성 회사 업무로 AWS 서버에 nodejs 애플리 케이션과 docker 를 올리게 되어 그 과정을 정리해봤습니다. 인스턴스 생성 aws를 사용하려면 서버 인스턴스를 생성해야 합니다. 서버 인스턴스 생성 방법은 다음과 같습니다. 1. AWS에 가입을 합니다. 처음 가입을 하면 12개월 무료로 일부 서비스들을 사용할 수 있으며, 몇몇 항목들을 계속 무료입니다. 그리고 가입시 아래와 같이 카드를 등록해야 합니다. 카드 등록이 필요한 이유는 하루 무료 사용 한계가 있는데, 그 이상 사용시 이용료가 나가기 때문 입니다. 2. 카드 등록 후 인증 후 지원 플랜 선택 화면이 있습니다. 필요한 플랜을 선택하시면 됩니다. (저는 우선 무료를 선택하였습니다.) 3. 상단 우측에 있는 콘솔에 로그인을 클릭 합니다. 4. "EC2를 사용하여"를 클릭합니다. EC2란 Amazon Elastic Compute Cloud(EC2)로 안드로이드 가상 클라우드 컴퓨터를 말합니다. 자세한 사항은 여기서 확인하시면 됩니다. 5. "EC2를 사용하여"를 선택하면 단계 1 : Amazon Machine Image(AMI) 선택이 뜹니다. 이 곳에서 다양한 OS와 서버 각종 어플리케이션을 선택할 수 있는데, 저는 Amazon Linux AMI 를 선택했습니다. (ubuntu로 하려 했으나, yum 등 다양한 설정을 Amazon Linux AMI는 대부분 되어 있어서 선택했습니다.) 6. 그 다음 단계 2: 인스턴스 유형 선택입니다. 여기서는 성능이 높을수록 가격도 올라갑니다. 하지만 저는 우선 무료인 프리티어 이므로 프리티어를 선택하였습니다. 이렇게 선택 후 아래 검토 및 시작 버튼을 누릅니다. 7. 검토 및 시작을 누르면 3,4,5,6단계는 건너뛰고 바로 단계 7: 인스턴스 시작 검토가 뜹니다. 이때 세부 정보 인스턴스 유형 보안 그룹 등 중간에 건너뛴 단계에 대하여 확인 후 다시 설정

카카오 챗봇 기본 API 작성

카카오 챗봇 기본 API 작성 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 //express 모듈 로드 var express = require( 'express' ); //http 모듈 불러온 후 http 변수에 저장 var http = require( 'http' ); //express 객체 app 변수에 저장 var app = express(); //http://서버주소/keyboard /* 라우팅 처리 */ app.get( '/keyboard' , function (req,res){ (req,res){ //전달할 데이터 var data = { 'type' : 'buttons' , 'buttons' : [ '과일' , '채소' , '정보' ] }; res.json(data); }); //9090포트로 서버 실행 http.createServer(app).listen( 9090 , function (){ console .log( '서버 실행 중..' ); }); http://colorscripter.com/info#e " target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter from http://not-null.tistory.com/9 by ccl(S) rewrite - 2020-03-11 05:54:05

Express + Socket.IO, 간단한 채팅 만들기

Express + Socket.IO, 간단한 채팅 만들기 안녕하세요 〰️ 오늘은 NodeJS + Express + Socket.io 를 사용해서 정말 - 간단한 단체 채팅방을 만들어보겠습니다. 일단 제가 보이는 부분을 많이 신경쓰다 보니,,, 요즘 유행한다는 'neumorphism'을 사용하여 채팅창을 제작해보았습니다. 일단 결과창부터 볼까요? 오늘 만들어볼 채팅창입니다 〰️ 일단 소켓이 뭔지 조금 알아볼까요? 아는 분들은 그냥 넘어가시면 됩니다 ! 모든 소스는 깃허브에 올려두었으니 참고되셨으면 합니다^~^ Socket 통신 ? HTTP통신은 클라이언트가 요청을 보내는 경우에만 서버가 응답하는 단방향 통신입니다. Socket 통신은 Http 통신과 달리 서버와 클라이언트가 연결을 유지하며 실시간 양방향 통신으로 데이터를 주고 받는 방식입니다. http 통신은 클라이언트가 요청을 보내면 서버가 응답을 하고 연결을 끊어버립니다. 반면, Socket 통신은 연결은 서버와 클라이언트의 지속적인 연결을 이어나갑니다. 보통 특정 시간동안 통신을 하지 않으면 서버와 클라이언트의 연결을 끊습니다. 또, 연결을 지속적으로 하기 때문에 서버에서 요청을 먼저할 수 있다는 특징이 있습니다. 그럼 이러한 Socket 통신은 언제 사용이 될까요? HTTP 통신은 거의 대부분의 통신에 해당합니다. 예를 들어, 어떤 블로그에 접속하기 위해 링크를 클릭하면 클라이언트는 주소를 옮겨달라는 요청을 하고, 서버는 그 요청을 받아 그에 해당하는 url로 응답을 줍니다. 이 때에는 단순히 데이터를 요청하고 응답하기만을 하는 단순한 요청을 하게 되죠. Socket 통신은 HTTP 통신에 지속적인 연결성을 더합니다. 예를 들어 메신저를 통한 연락을 할 때, 채팅방에 들어서는 순간부터 "실시간"으로 메세지를 전달해야합니다. Socket 통신은 이러한 실시간 통신을 할 때 필요하게 됩니다. CHATTI

Mac OS에서 NVM 으로 Node JS 버전 관리 하기

Mac OS에서 NVM 으로 Node JS 버전 관리 하기 노드를 사용하다 보면 버전 관련한 문제를 자주 만나게 됩니다. 그때문에 우리는 노드의 버전을 때때로 바꾸면서 사용할 필요가 있죠. 그럴때를 위해 좀더 편리하게 사용할 수 있도록 노드 버전관리 매니저 프로그램을 사용할 수 있습니다. ▲노드 JS 로고(출처 : https://nodejs.org/en/about/resources/) 1단계: NVM (Node Version Manager) 설치 ( https://github.com/nvm-sh/nvm ) $ sudo curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash 2단계: NVM 환경 변수 설정 $ vi ~/.bash_profile export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm 위와 같이 입력하고 누르고 <:wq> 눌러 저장 합니다. (.bash_profile 파일이 설치전에 미리 존재한다면 설치중 자동 입력 되는 것 같습니다. 업데이트 할 때 보니 프로파일이 업데이트 되어 있더군요.) 3단계: 환경변수 설정후 터미널 프로파일 적용 $ source ~/.bash_profile 적용 되었는지 확인 $ nvm ls -> system node -> stable (-> N/A) (default) iojs -> N/A (default) 4단계: NodeJS 최신 안정화 버전 설치 $ nvm install stable 5단계: NVM 활용 NodeJS 특정 버전 설치 $ nvm install 13.10.1 NodeJS 사용 버전 변경 $ nvm use 13.10.1 이제 노드와의 싸

실행 중간에 프로세스 멈추기

실행 중간에 프로세스 멈추기 PHP의 경우 실행 중간에 멈추게 하려면 die() , exit() 같은 함수를 이용하면 되었는데 NodeJS는 어떻게 처리하는지 몰라 헤맸다. nodejs 실행중 프로세스 강제로 멈추기 출처 - stackoverflow process.exit() from http://thisblogbusy.tistory.com/132 by ccl(A) rewrite - 2020-03-11 04:20:06

파이썬 웹스크래핑with nomad coders[10]끝!!!

파이썬 웹스크래핑with nomad coders[10]끝!!! 4. 요소들 리스트 화하기 이 단계에서는 전체 데이터를 jobs라는 리스트에 담는 것을 진행했었다 원래 title요소를 찾을 때 했었지만 20페이지 모두 매번 볼 수 없었기 때문에 니꼬쌤은 다른 함수로 옮겼다 def extract_jobs(last_page): #모든데이터 추출하는 함수 jobs = [] #빈 리스트 jobs만들기 for page in range(last_page): #마지막페이지까지 아래를 실행하는 반복문 print(f"Scrapping Indeed: Page: {page}") #되는지 안되는지 보기위한 출력문장 result = requests.get(f"{URL}&start;={page*Limit}") s = BeautifulSoup(result.text, "html.parser") results = s.find_all("div", {"class": "jobsearch-SerpJobCard"})#모든 페이지 jobcard가져오기 for result in results: job = extract_job(result)#제목,회사명,위치,링크추출하는 함수 실행 jobs.append(job) #리스트에 넣기 return jobs #반환값 마지막으로 get_jobs함수를 만들어 나머지 세 개의 함수를 잘 정리했다 def get_jobs(): last_page=get_last_pages() jobs=extract_jobs(last_page) return jobs 인디드는 끝!! 스택오버플로우는 이와 같이 반복 진행하므로 생략한다(물론 약간씩 다른 부분도 있어서 영상을 보는 것이 훌륭하다) https://academy.nomadcoders.co/courses/ 노마드 코더스 아카데미에서 파이썬으로 웹 스크래핑 영상이 있다 무료이다 (20년 3

[번역글] 자바스크립트에서 this 키워드 이해하기(this 키워드가 할당...

[번역글] 자바스크립트에서 this 키워드 이해하기(this 키워드가 할당... 이번 포스팅에서 자바스크립트의 this 키워드와 this가 할당되는 시나리오들에 대해서 살펴볼 것입니다. 이번 포스팅을 이해할 가장 좋은 방법은 예제로 드리는 코드들을 직접 브라우저의 콘솔탭에서 실행해보는 것입니다. 아래 단계를 확인하시고 크롬 브라우저에서 따라해보시기 바랍니다. 1. 크롭에서 새탭을 켠다! 2. F12를 눌러 개발자도구를 켠다! 3. 콘솔탭으로 간다. 4. 예제코드를 실행한다. Objects는 자바스크립트의 기본구성요소입니다. 자바스크립트에서 사용할 수 있는 하나의 특수객체인 this 객체가 있습니다. 자바스크립트 소스에서 매번 봐왔을 코드입니다. 자바스크립트의 this 키워드의 값은 코드가 어떻게 실행되 는지에 따라서 결정될 것입니다. this에 대해서 살펴보기전, 먼저 자바스크립트 런타임 환경에 대해서 이해하고 어떻게 자바스크립트 코드가 실행되는지 이해해야할 필요가 있습니다. Javascript 인터프리터 and Execution Context 자바스크립트는 스크립트언어입니다. 그 말은 즉, 코드의 실행에 있어서 컴파일이 없다는 뜻입니다. 인터프리터가 코드를 읽어들일때마다 소스를 해석하고 실행합니다. 이러한 코드의 라인이 실행되는 환경(혹은 스코프)을 Context 라고 합니다. 자바스크립트 런타임은 이러한 실행 컨텍스트의 스택을 유지관리하며 이 스택의 맨 위에있는 실행컨텍스 트는 현재 실행중인 컨택스트가 됩니다. this 객체는 이런 실행컨텍스트(스코프)가 변경될 때마다 바뀌는 값입니다. this는 Global 객체를 나타냅니다("this" Refers to a Global Object) 기본적으로 실행에 대한 스코프는 전역적입니다. 즉, 간단한 함수 호출의 일부로 코드가 실행되는 경우 Global 객체를 나타냅니다. window 객체는 브라우저에서 지칭할 수 있는 Global