javascript 라이브러리 검색할 때마다

require를 많이 본다.

라이브러리를 도대체 어디서 구해야 하는 지

npm으로 install해도 어떻게 사용해야 하는지 몰라서 한참 해맸다.

일단 저 require어는 require.js 가 아니다.

그리고 apache나 tomcat같은거로 백날 올려봤자 안된다.

nodeJs서버로 돌려야 사용가능하다.


기존 서버스크립트 개발 관점에서 nodeJs 라이브러리만 껴놓으려고 생각한거 자체가 잘못이다.


nodeJs는 자바스크립트를 해석하는 도구다.

html을 파싱하지 못한다.

javascript파일을 실행한다고 생각하면 된다.

node main.js

CLI에서 이와 같이 실행하는게 끝이다.

java 클래스 실행하는 것하고 똑같다.

그러니 당연히 http서버가 아니다.

java로 서버 만들듯이 라이브러리 임포트해서 해야한다.

하지만 훨씬 쉽다.

const http = require("http")
const fs = require('fs')

const header = {
    "Content-Type": "text/html charset=utf-8"   
}

http.createServer(function (req, res) {
    
    function route(resources) {
        fs.readFile( resources, function(err, data) {           
            res.writeHead(200, header)
            if(err === null) {
                res.write(data)         
            }else {
                console.log("not found")
            }
            res.end()
        })
    }
    
    route(req.url)
    
}).listen(8080)
console.log("welcome nodeJs HTTP SERVER")


http와 fs가 없다고 뜨면

node i http fs

하고 모듈을 설치하면 된다.

html파일로 forward한다는 개념이 아니라

그냥 파일 읽어서 스트링을 브라우저에 던져준다고 생각하면 된다. (실제로는 binary로 간다.)

resources는 실제 파일 경로를 찾아간다. 이부분은 각자 편하게 해결해주면 된다.


위 파일을 main.js로 저장했다면 node main.js로 서버를 돌릴 수 있다.

nodeJs는 가장 많은 javascript 라이브러리를 가지고 있으니 프론트엔드 개발자는 nodeJs를 쓰면 많이 이점이 있다.



'javascript' 카테고리의 다른 글

javascript] bind vs wrapper  (0) 2018.11.17
callback 패턴 함수를 await로 쓰는 방법  (0) 2018.05.01
함수형 프로그래밍 : reduce  (0) 2018.04.07
promise 대신 async, await를 사용하자  (0) 2018.03.22
let의 필요성  (0) 2018.03.20

함수형 프로그래밍에는 여러 공통 함수들이 있다.

예시만 보면 파악할 수 있는 것들이 많은데

reduce는 예시만 봐서는 도대체 뭔지 하나도 모르겠다.

그리고 객체 지향 프로그램에서는 reduce와 같은 패턴을 쓸 경우가 많이 없어서 생각해 내기 쉽지 않다.

하지만 가장 기초적인 최대, 최소값을 구하는 경우 대표적으로 reduce 함수를 사용한다.


function getMax(numbers) {
var max = numbers[0];
numbers.forEach(number => {
max = max < number ? number : max;
});
return max;
}


getMax함수는 numbers라는 숫자로 구성된 배열을 넣으면

max값과 다음 배열값을 계속 비교한 후

max값을 반환한다.


배열을 넣었더니 number로 줄어든 값을 반환했다.

reduce라는 것은 이렇게 뭔가 나열된 것을 하나로 줄여서 반환한다는 뜻이다.


그리고 reduce는 함수를 인수로 받는다.

그리고 이 함수는 이항함수이고 max와 number가 인수가 된다.

자바스크립트는 첫번째 인자에 reduce값을 반환한다.

이를 람다식으로 표현하면 아래와 같다.

(max, number) => max

이게 기본적으로 reduce에 들어가는 함수 형식이다.

return값만 필요한 알고리즘으로 구현해 주면 된다.


var max = numbers.reduce( (max, number) => {
max = max < number ? number : max;
return max;
});


아래와 같이 더 줄여 쓸 수 있다.

var max = numbers.reduce( (max, number) => max < number ? number : max);


추가로 reduce를 사용할 때 초기값 설정이 필요한 경우가 있다.

javascript에서는 reduce의 두번째 인자가 초기값인데

reduce( function, initialValue) 다.

function의 두번째 인자랑 헷갈리지 말긴 바란다.

초기화된 객체가 필요한 경우

reduce( function, {} )

이렇게 해주면 된다.


'javascript' 카테고리의 다른 글

callback 패턴 함수를 await로 쓰는 방법  (0) 2018.05.01
nodeJs require  (0) 2018.04.13
promise 대신 async, await를 사용하자  (0) 2018.03.22
let의 필요성  (0) 2018.03.20
async function 과 await  (0) 2018.03.10

동시성 관련 좋은 링크가 있다.
http://winterbe.com/posts/2015/04/07/java8-concurrency-tutorial-thread-executor-examples/

stream을 배우고 parellal을 배우다보면 동시성 문제를 만난다.

두가지 해결 방법이 있다.

  1. atomic 클래스를 써서 쓰레드 세이프를 확보하는 방법
  2. reduce사용

IntStream의 sum 메서드를 타고 들어가면 reduce쓰는데 까지 나온다.

stream 방식은 reduce가 어울린다고 생각하지만 1,2 의 특성적 차이점이 뭔지 잘 모르겠다.

'Java' 카테고리의 다른 글

java bytecode  (0) 2018.04.01
Java Applet ReflectPermission  (0) 2018.03.28
Java Applet 이런 젠장  (0) 2018.03.28
BigDecimal을 사용하는 이유  (0) 2018.03.18
autoclose resource : try-with-resource  (0) 2018.03.09

+ Recent posts