2015년 11월 20일 금요일

Node.js 프로그래밍 과정 5일차

2015.11.20 T아카데미 Node.js 프로그래밍 강좌를 수강하면서 필기.

소스자료 : http://nashorn.tistory.com/entry/TNODE

Node.js 프로그래밍 샘플 예제

Redis (NoSQL)

https://github.com/dmajkic/redis/downloads 설치파일 다운 받아 압축 풀고 실행

Redis 접속. Redis는 Key:Value 형식으로 데이터가 구성되는 NoSQL이다.

  • set foo bar → {foo:'bar'} 데이터 생성
  • get foo → key:'foo'인 데이터 조회 subscribe chat → subcribe 객체를 생성(publish되는 메시지를 받는다)

다른 프롬프트 창으로 Redis에 접속하여 publish 객체를 생성하고 hello 메시지 전송

메시지가 subcribe객체로 수신된 것을 알 수 있다.

Mongoose : 다른 방식으로 MongoDB와 연결, 스키마를 만들어서 쓰기/읽기를 한다.

2015년 11월 19일 목요일

Node.js 프로그래밍 과정 4일차

2015.11.19 T아카데미 Node.js 프로그래밍 강좌를 수강하면서 필기.

NoSQL

  • 데이터 비정규화
  • 어그리게이션
  • 어플리케이션 사이드 조인 → 연산을 단순화하여 속도를 빠르게 한다. 

RDBMS(MySql) 연결

MariaDB 실행 후 테스트 데이터 삽입

Node.js를 통한 INSERT 문 수행시 결과값인 results 객체에 아래와 같이 primary key값이 나온다.

MongoDB

1. MongoDB 설치 후 저장소로 쓸 디렉터리를 생성한다.

2. 저장소 디렉터리를 지명하고 MongoDB를 실행한다.

3. 아래와 같이 실행된다.(프롬프트창 유지)

4. MongoDB Shell 실행

  1. show dbs; - DB용량 체크
  2. use moviest; - ‘moviest’라는 이름의 데이터베이스를 사용하거나 없으면 새로 만든다.
  3. db.users.save({a:99}); - ‘users’라는 이름의 Collection에 {a:99}라는 값을 갖는 객체를 저장한다.(‘users’ Collection이 없으면 새로 만든다.)
  4. db.users.find(); = ‘users’ Collection의 데이터를 조회.

5. 명령어는 자바스크립트 문법과 유사하다. for 순환문을 이용하여 10개의 데이터를 생성하여 ‘users’ Collection에 INSERT하는 예제.

6. 데이터를 찾는 예제이다.(RDBMS의 SELECT에 해당)

  1. a = 2 조건에 해당하는 데이터
  2. a의 값이 2보다 크고 8보다 작은 데이터 (AND)
  3. a의 값이 [3,4,5,6,7] 범위에 해당되는 데이터 (IN조건)
  4. a의 값이 3보다 작거나 7보다 큰 데이터 (OR)
  5. a의 값이 [3,4,5,6,7] 범위에 해당하지 않는 데이터 (NOT IN조건)

7. 데이터를 갱신하는 예제. ‘a = 3’ 조건에 해당하는 데이터의 temp 항목 값을 10으로 업데이트.

스키마에 구애받지 않기 때문에, 아예 항목 명을 바꿔버리는 것도 가능하다. ObjectId의 값은 그대로 유지된다.

8. 데이터 삭제 예제.

  1. a의 값이 5보다 크면 삭제
  2. 전체 데이터를 삭제
  3. Collection 자체를 삭제


9. MongoDB 종료 - 정상종료가 아닐 때 데이터가 깨질 위험이 있다.

MongoDB의 ObjectId

데이터에는 저마다의 고유한 ObjectId가 있는데 이 값을 프런트엔드 <-> 백엔드 사이에 전송할 경우 String객체로 전송이 되며, 이럴 때는 createFromHexString 메서드를 이용해 다시 객체화 해줘야 쿼리에 사용할 때 제대로 적용이 된다.

Node.js 소스코드에서 ObjectId 객체를 생성하여 createFromHexString 메서드로 객체화 해주는 예제.

2015년 11월 18일 수요일

Node.js 프로그래밍 과정 3일차

2015.11.18 T아카데미 Node.js 프로그래밍 강좌를 수강하면서 필기.

RESTful API

Http Method : ‘PUT’

아래와 같이 JSON 형태로 데이터를 보내 전체 수정을 한다.

[{"title":"마션","director":"리들리스콧"},{"title":"토토로","director":"미야자키 하야오"}]​

아래는 일부 수정의 예제.

응답 Action을 Redirect로 지정하면 무한 반복으로 오류가 나므로, res.send() 혹은 res.end() 로 마무리 해야한다. (DELETE도 동일한 현상)

위 현상에 대한 해결책으로, response 객체의 상태값을 ‘301’로 지정해주면 된다.

  • 301 : 신규 load
  • 302 : Cash 데이터 사용

동적 파라메터 사용 시의 주의점

1
2
3
app.get('/movies', function1);
app.get('/movies/list', function2);
app.get('/movies/:id', function3);
cs

위 코드라인에서 app.get('/movies/:id', function3); 구문이 app.get('/movies/list', function2); 구문보다 먼저 있을 경우, URL '/movies/list'를 호출하여도 callback 메서드 function2는 작동하지 않는다.

HTML 렌더링 : Jade

  • 마크업태그 체계에 맞춰 줄바꿈과 들여쓰기를 제대로 해줘야 인식한다.
  • ‘Tab’과 ‘Space’를 혼용하면 안된다.

form을 통해 delete, put 메서드를 보내려면 ‘_method’라는 이름의 입력컨트롤을 생성한 다음 value에 메서드 명칭을 지정하여 전송한다.

2015년 11월 17일 화요일

Node.js 프로그래밍 과정 2일차

2015.11.17 T아카데미 Node.js 프로그래밍 강좌를 수강하면서 필기.

1
var obj = {name:'John'};
cs

JSON(Javascript Object Notation)

  • HTML → XML → JSON
  • JAVA의 Map과 같은 key:value 형태
    • Node.js의 모든 데이터는 JSON 형태로 다루어진다. → 데이터 핸들링이 쉽다.

분산처리시스템

분산저장을 하고, 분산연산을 할 수 있어야 한다. RDBMS의 구조로는 분산처리가 어렵다.

스키마에서 필요한 정보만을 분리하여 처리할 수 없기 때문

→ 즉, 분산처리를 하기 위해 모든 데이터는 key:value 형태로 저장된다.(NoSQL DB의 등장 배경)

Hadoop

JAVA로 구현된 빅데이터 분산처리. map() 메서드와 reduce() 메서드 두개의 메서드만 사용.

WORD COUNT

  • map() -> {read:1} {a:1} {book:1} {write:1} {a:1} {book:1}
    • key:value형태로 데이터를 매핑.
  • reduce() -> {a:2} {book:2} {read:1} {write:1}
    • key별로 묶어서 더하기만 한다.

교재 샘플코드 : https://github.com/wannabewize/node-samples 

JSON 다루기

1
2
3
4
5
var str = "{'name':'John'}";
JSON.parse(str); //String 객체를 JSON 객체로 변환
 
var obj = {name:'John'};
JSON.Stringify(obj); //JSON 객체를 String 객체로 변환
cs

2015년 11월 16일 월요일

Node.js 프로그래밍 과정 1일차

2015.11.16 T아카데미 Node.js 프로그래밍 강좌를 수강하면서 필기.

패러다임의 변화 - 2008년 NYT 130여개 컨텐츠 PDF로 이전시

  1. 기존 패러다임으로 할 때 소요기간 14년 예상
  2. Hadoop, AWS로 수행 : 1일 200만원 소요

Node.js의 특징

  • DB연동이 쉽다
  • 2009년 라이언 달 제작
  • C++기반의 자바 스크립트 엔진
  • 이벤트에 반응하는 이벤트 리스너로 구현
  • Non-blocking I/O

애플리케이션 서버 작성

  • Apache + PHP
  • 자바 - 스프링
  • 파이썬 - 장고
  • 루비 - 레일즈
  • 자바스크립트 - node.js 

TCP통신과 HTTP통신의 차이

  • TCP통신 : 계속 connection을 유지해야 한다
  • HTTP통신 : 필요할 때만 connection이 유지되어도 된다. 요청을 보내서 응답을 받을 수 있기만 하면 된다.

Node.js를 도입한 곳

  • 링크드인
  • 이베이
  • 페이팔
  • 월마트
  • 페이스북
  • MS

서버에서의 동기식
하나의 서버로 다수의 클라이언트 요청 처리

  • 입출력 처리 병목 현상
    • 디스크 접근
    • 네트워크 접근
  • 서버 성능 향상 노력
    • 멀티 쓰레드를 이용한 성능 향상 노력
    • 멀티 쓰레드 프로그래밍의 난이도 + 자원동기화에 어려움

함수를 다루는 방법

1
2
3
4
5
function sayHello(who){
    console.log('Hello' + who);
}
var func = sayHello;
func('IU');
cs

콜백 - 인라인 방식으로 다시 작성하기

1
2
3
4
5
6
7
8
9
var fs = require("fs");
function readingfile(callback){
    fs.readFile("readme.txt","utf-8",function(err,content){
        callback(content);
    })
};
readingfile(function(fcontent){
    console.log(fcontent);
});
cs

아키텍처

  • 상위 - 자바스크립트
  • 하위 - C

Node.js 설치 후 Hello World 찍기

node.js 설치된 디렉터리에서 js파일 작성 후 실행

웹서버를 작성하여 실행하는 예제

Eclipse를 활용한 개발환경 셋팅

1. nodeclipse plug-in 설치 

2. Perspective를 ‘Node’ 로 변경 

3. 신규 프로젝트 생성 시 Node.js 프로젝트 선택

4. 템플릿을 선택하고 생성 

express와 nodemon 모듈의 전역설치

nodemon의 실행예제 : 서버 restart를 수동으로 할 필요없이 변경내용이 자동 적용됨

필요한 외부 모듈은 npm을 통해 설치 후 사용한다.

Kotlin, SpringBoot 3, GraalVM 환경에서 Native Image로 컴파일하여 애플리케이션 실행

Spring Boot 3부터, GraalVM Native Image를 공식 지원하여 애플리케이션의 시작 속도와 메모리 사용량을 크게 줄일 수 있다. Native Image란 기존의 JVM 기반 위에서 돌아가는 Java 애플리케이션과는 달리 JVM 없이...