Recap from yesterday
1. 저평가되던 Javascript 의 위상 변화
**왜 Javascript 의 위상이 바뀌었을까?**
-> 웹 개발 환경의 변화로 인한 결과
2. 과거에는 웹 베이스 프로그램을 할 때
서버에서 모든 프로그램을 수행 결과만
클라이언트에게 전달
-> 서버에 부하가 너무 가중
-> 네트워크를 통해서 전달되는 데이터량이 증가
e.g.
사용자가 많이 몰릴 때 단순한 해결책은, 비용을 들여 서버를 더 증설하는 것이다
하지만, 특정 기간에만 사용자가 증가하는 경우엔 서버를 증설하기도 뭐하다.
예를 들어, 추석 기간에 기차 예매 홈페이지에 특별히 사용자들이 몰리는 경우
추석 기간에 사람들이 많이 몰리니까 서버를 증설하기도 참 애매하다..
추석 기간 외에는 서버가 그렇게 많이 필요하진 않으니까
Front-End Web Application
(Ajax을 이용해서 서버로부터 데이터만 가져오는 방식. 즉, 필요한 데이터만 가져와 서버 부하를 줄이는 통신 방식. 이 때, 자바스크립트가 이용된다.)
Back-End Web Application
Idea!
"이 좋은 Javascript 를 Client 에서만 쓸 필요 있어?"라는 질문을 하며 이것을
서버 쪽으로 가져온다.
Javascript 는 객체 기반언어
(Prototype 기반언어)
jQuery (가장 대중적인 Library) <- Javascript 를 할 줄 아는 사람들 90% 는 다 jQuery 를 쓴다.
여기서 한 가지! jQuery 는 오픈소스이다. 하지만 기업 상에서 쓸 때는 고려해야 할 부분들이 있다.
오픈소스가 가지는 한계는 명확.
회사마다 각자 나름대로의 framework 이 있다. 작은 회사의 경우엔, 그냥 framework 를 가져오고,
혹여나 회사 자체적인 framework 가 필요한데, 본인이 그걸 담당해야 한다면, Javascript 를 많이 파야 한다.
그렇지 않은 경우, 일반적으로는 그렇게까지 팔 필요는 없다.
Javascript 는 모든 걸 함수로 표현해요!
1. 우리가 알고 있는 함수 - 선언적 함수 (코드 단위의 함수)
2. 함수가 값으로 사용이 될 수 있어요
(이름이 없는 함수로 사용 - 익명함수, 람다함수)
값이 사용이 될 곳에 함수가 들어갈 수 있어요
(변수에 함수를 저장, 다른 함수의 인자로 함수를 사용, 다른 함수의 return 값으로 사용)
3. 객체를 만들어내는 용도의 함수
Node 는 서버쪽 플랫폼.
플랫폼: 다른 프로그램을 실행시켜주는 실행 환경
기반: V8 엔진 (Chrome browser 안에 있는 Javascript engine)
용도: Network 프로그래밍 (HTTP protocol)
특징: Non-blocking I/O 지원
I/O : 파일처리, 네트워크 소켓, DB 처리
-> Event Driven 방식의 Programming Multi Thread 기반의 프로그래밍을 했었는데 Node 는 Single Thread 를 이용
=> CPU Intensive 한 작업(데이터베이스에서 데이터를 가지고 와 빼고 곱하고 더하는 등)에는 사용을 하지 않는게 좋아요!!
기본 Node 시스템은 V8 엔진 + 기본 API 만 가지고 있어요 (8.8 Mb 정도밖에 안됨..)
프로그램을 작성하기 위해서는 Module 이란게 필요하게 되요!!
그런데 굉장히 많은 (40,000) 외부 module 이 존재해요!
Module 을 관리하는 용도의 Module 을 기본적으로 Node 가 제공 ( NPM - Node Package Manager )
Module 은 크게 몇 가지 카테고리로 분류
설치를 어떻게 하느냐에 따라서 분류
global module ( 시스템에 설치 )
local module ( 우리 프로젝트에서만 사용 )
Module 의 구현이 어떤 언어로 되어 있느냐 (즉, 꼭 Javascript 로 만들 필요는 없다)
Javascript Module
Native Module
기본적으로 제공되느냐, 다운로드 받아야 되느냐
기본 module, 확장 module
NPM 을 이용해서 확장 module 을 설치할 때
package.json 이라는 파일을 만들어서 여기에 명시한다.
Module 은 파일로 구성
function myInfo() {
console.log("홍길동이예요!!");
}
var myAge = 30;
// 여러개의 값을 return 시킬 때 exports 를 일반적으로 사용
exports.hahaha = { myName : "홍길동"}; // 가리키고 있는 module.exports 에 hahaha 라는 객체를 만든다.
exports.hohoho = 100; // 가리키고 있는 module.exports 에 100 이라는 값을 가진 hohoho 라는 객체를 만든다.
var module1 = require("./moduleTest");
// 현재 폴더 밑에서 moduleTest.js 를 실행해서
// 그 결과를 가져와!!
console.log(module1.hohoho);
module1 은 exports 를 받지 안는다.
module.exports 를 받는다.
(i.e. module1 = module.exports)
그러나, module.exports 내부에 myName 과 hohoho 가 생성되었기 때문에
module1.hohoho 로 module.exports 내부의 변수를 마음대로 사용할 수 있다.
express 가 해주는 것
routing!
원래,
http://localhost:5000/
로 접속한 경우와
http://localhost:5000/hello
로 접속한 경우에 반응하는 결과는 서로 달라야 한다.
URL 에 따라 다른 값을 내주는 이것을 routing 이 해준다.
WRITTEN BY