728x90
수업내용
1교시 (09:30-10:20)
JavaScript
- script_01.html (미완성)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
</head>
<body>
<script type="text/babel">
var pizza = true
pizza = false
console.log(pizza);
</script>
</body>
</html>
2교시 (10:30-11:20)
- script_01.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
</head>
<body>
<!--
ECMAScript3 ES3: 1999년 : 우리가 이야기 하는 자바스크립트
ECMAScript5 ES5 : 2009년
react, vue 사용
ECMAScript6 ES6 : 2015년 : const, let 키워드 추가, arrow 문법 지원
const : 상수 : 변경하면 안되는 수
-->
<script type="text/babel">
var pizza = true
pizza = false
console.log(pizza);
const p = true;
p = false;
console.log(p);
</script>
</body>
</html>
- Node.js란
3교시 (11:30-12:20)
- Node.js
----------------
https://nodejs.org/dist/
https://nodejs.org/dist/v14.16.0/
node-v14.16.0-x64.msi
C:\Users\kosmo>node -v
v14.16.0
C:\Users\kosmo>npm -v
6.14.11
npm : Node Package Manager
-------------------------------------
현재 디렉토리에 NPM 기반으로 프로젝트를 생성
패키지이름, 버전, 설명등 입력 package.json 생성
npm init
npm init -y (--yes) : 디폴트 값으로 프로젝트 생성
패키지 설치
node_modules 디렉토리 생성
package-lock.json 파일 생성
npm install 패키지이름
npm install 패키지이름 -g (--global) : 전역 설치
npm instal 패키지이름 --save(devDependencies 추가, npm5 기본옵션으로 추가)
npm install 패키지이름
-P (--save-prod) : package.json의 dependencies에 패키지를 등록합니다.(default)
-D (--save-dev) package.json의 devDepndencies에 패키지를 등록합니다.
-O (--save-optional) : package.json의 optionalDependencies에 패키지를 등록합니다.
--no--save : dependencies에 패키지를 등록하지 않습니다.
버전은 세 자리로 구성
----------------------------
major 버전
하위 버전이 호환이 안될 정도로 패키지의 내용 수정
주 버전이 0 이면, 초기 개발 중
1부터는 정식 버전이다.
minor 버전
하위 버전이 호환이 되는 업데이트
patch 버전
새로운 기능이 추가되었다기 보다는
기존 기능에 문제가 있어 수정한 것을 내놓았을 때
‘^’, ‘~’
^(캐럿): minor 버전까지만 설치 또는 업데이트한다.
~(틸트): patch 버전까지만 설치 또는 업데이트한다.
C:\00.KOSMO108\40.node
C:\00.KOSMO108\40.node\node_test
C:\00.KOSMO108\40.node\node_test>node init -y
C:\00.KOSMO108\40.node\node_test\01_js
Template literals
-----------------------------
탬플릿 리터럴은 내장된 표현식을 허용하는 문자열 리터럴입니다.
여러 줄로 이뤄진 문자열과 문자 보간 기능을 사용할 수 있습니다.
백틱(``) (grave accent)을 사용할 수 있습니다.
플레이스 홀더를 이용하여 표현식을 넣을 수 있는데
이는 $와 중괄호( ${expression} )로 표기할 수 있습니다.
- js_01.js
console.log('Node.js Hello');
4교시 (12:30-13:20)
- sublimetext 다운로드
- js_02.js
var name = '1234name';
var str = 'Dear' + name + '\n\n Lorem ipsum doloar sit amet,';
var str_template = `Dear ${name} Lorem ipsum
doloar sit amet,`;
console.log(str);
console.log(str_template);
5교시 (14:30-15:20)
- 자바는 클래스 단위, Node.js는 모듈 단위로 프로그램 실행
- c_module_01.js
exports.add = function(a, b){
return a + b;
}
exports.multiply = function(a, b){
return a * b;
}
- c_module_02.js
var calc = {};
calc.add = function(a, b){
return a + b;
}
calc.multiply = function(a, b){
return a * b;
}
module.exports = calc;
- js_03.js
// require() 함수 : 모듈을 불러올 때 사용하는 함수
// c_module_01.js 모듈 파일을 불러와서 사용
// require() 함수의 파라미터로 모듈 파일의 이름을 전달하는 데
// 확장자를 뺀 파일이름 c_module_01 만 사용한다.
// 파일이름 앞에 ./ 는 상대경로를 지정한 것
var calc = require('./c_module_01');
console.log('calc : %s ', calc);
/*
exports.add = function(a, b){
return a + b;
}
exports.multiply = function(a, b){
return a * b;
}
*/
// c_module_01.js 모듈 파일에서 exports.add 로 추가한 add 속성을
// js_03.js 메인 파일에서 calc 객체로 접근해서
// calc.add() 코드로 함수를 호출할 수 있다.
var calc_add = calc.add(10, 20);
console.log('모듈 테스트 :: calc.add : %d ', calc_add);
var calc_multiply = calc.multiply(10, 20);
console.log('모듈 테스트 :: calc.multiply : %d ', calc_multiply);
var calc2 = require('./c_module_02');
/*
var calc = {};
calc.add = function(a, b){
return a + b;
}
calc.multiply = function(a, b){
return a * b;
}
module.exports = calc;
*/
console.log('calc2 : %s ', calc2);
var calc2_add = calc2.add(10, 20);
var calc2_multiply = calc2.multiply(10, 20);
console.log('모듈 테스트 :: calc2.add : %d ', calc2_add);
console.log('모듈 테스트 :: calc2.multiply : %d ', calc2_multiply);
var getipaddress = require('./ip_module');
var ip = getipaddress.getIp();
console.log('모듈 :: ip 함수 호출 결과 : %s', ip);
6교시 (15:30-16:20)
- Node.js
노드에서 모듈
-------------------
exports 전역 객체
require() 함수
module 객체
하나의 함수 안에 모든 기능을 여러개의 함수(독립적인 기능)로 나눈 후
각 함수를 별도의 파일로 분리 후 메인 파일에서 전체적인 실행 순서나 흐름만을 제어
별도로 분리된 파일을 노드에서는 모듈이라고 부름
===================
노드는 CommonJs의 표준 스펙을 따라 모듈을 사용
===================
exports 전역 객체 사용
모듈을 만들 때는 module1.js 처럼 별도의 자바스크립트 파일을 만든 후
그 코드에서 exports 객체를 사용
exports 객체의 속성으로 변수나 함수를 지정하면
그 속성을 main.js와 같은 메인 자바스크립트 파일에서 불러와 사용
모듈을 불러올 때는 require() 메소드를 사용
모듈로 만들어 둔 파일의 이름을 require() 메소드의 파라미터로 전달한다.
require() 메소드를 호출하면 모듈 객체가 반환된다.
모듈에서 exports 객체에 설정한 속성들은 이 모듈 객체를 통해 접근 할 수 있다.
exports : 여러 개의 변수나 함수를 각각의 속성으로 추가할 수 있다.
exports.add = function(a,b){
return a + b;
}
exports.multiply = function(a,b){
return a * b;
}
module.exports : 하나의 변수나 함수 또는 객체를 직접 할당한다.
일반적으로는 객체를 그대로 할당
이렇게 할당한 객체 안에 넣어 둔 변수나 함수를
메인파일에서도 사용할 수 있다.
var calc = {};
calc.add = function(a,b){
return a + b;
}
clac.multiply = function(a,b){
return a * b;
}
module.exports = calc;
require() : 모듈을 불러올 때 사용하는 함수 - ip_module.js
var os = require('os');
exports.getIp = function () {
let IPAddress = '';
var interfaces = os.networkInterfaces();
for (var devName in interfaces) {
var iface = interfaces[devName];
for (var i = 0; i < iface.length; i++) {
var alias = iface[i];
if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) {
IPAddress = alias.address;
}
}
}
return IPAddress;
};
7교시 (16:30-17:20)
- http_01.js
var http = require('http');
var server = http.createServer();
var host = '192.168.219.109';
var port = 3000;
server.listen(port, function(){
console.log('웹 서버가 시작되었습니다. : %s %d', host, port);
});
- http_03.js
var http = require('http');
// 웹 서버 객체를 만든다.
var server = http.createServer();
// 웹 서버를 시작하면 3000번 포트에서 대기하도록 설정한다.
var port = 3000;
server.listen(port, function() {
console.log('웹 서버가 시작되었습니다. : %d', port);
});
// connection 이벤트로 클라이언트 연결 이벤트 처리
server.on('connection', function(socket) {
var addr = socket.address();
console.log('클라이언트가 접속했습니다. : %s, %d', addr.address, addr.port);
});
// request 이벤트로 클라이언트 요청 이벤트 처리
server.on('request', function(req, res) {
console.log('클라이언트 요청이 들어왔습니다.');
// console.dir(req);
res.writeHead(200, {"Content-Type": "text/html; charset=utf-8"});
res.write("<!DO/CTYPE html>");
res.write("<html>");
res.write("<head>");
res.write("<title>응답 페이지</title>");
res.write("</head>");
res.write("<body>");
res.write("<h1>노드제이에스로부터의 응답페이지</h1>");
res.write("</body>");
res.write("</html>");
res.end();
});
// close 이벤트로 서버 종료 이벤트 처리
server.on('close', function() {
console.log('서버가 종료됩니다.');
});
- Node.js를 배우는 이유
- 가벼운 웹 서버를 만들어 컨트롤 할 수 있음
- push 서비스에 많이 쓰임 (빨리 죽지만 빨리 살아남)
8교시 (17:30-18:30)
- 스프링 코드 버전업하기
Notes
- 내일부터 오전에는 Node.js, React 오후에는 Python
- Node.js는 3일만 가볍게 다룰 예정
728x90
'국비지원교육 (22.01-22.07) > 강의노트' 카테고리의 다른 글
22-06-09(목) 091일차 [JavaScript, Node.js, Python] 템플릿 문자열, 파이썬 문법 (0) | 2022.06.24 |
---|---|
22-06-08(수) 090일차 [JavaScript, Node.js, Python] http-server, python 설치 및 자료형 (0) | 2022.06.23 |
22-06-03(금) 088일차 [EL, JSTL] EL, JSTL을 이용하여 데이터 표시 (0) | 2022.06.23 |
22-06-02(목) 087일차 [JSON, EL, JSTL] 차트 시각화, EL 기초 (0) | 2022.06.23 |
22-05-31(화) 086일차 [JSON] 인코딩과 JSON의 활용 (0) | 2022.06.23 |