Jveloper

2019. 06. 18 이머시브 수업 4주차 - 2일(Event Loop, Node.js (Mini-node-server)) 본문

CodeStates Immersive 13기

2019. 06. 18 이머시브 수업 4주차 - 2일(Event Loop, Node.js (Mini-node-server))

Jveloper 2019. 6. 18. 21:20

JavaScript - 싱글스레드 기반의 언어(코드를 순서대로 읽어나간다)

EventLoop : https://www.youtube.com/watch?time_continue=747&v=8aGhZQkoFbQ

- 콜백함수는 Callback Queue를 돌고 나오고 그냥 함수는 call Stack으로 들어갔다가 나온다

- 위에서 말했듯 자바스크립트는 싱글쓰레드기반의 언어라 순서대로 읽어나가기 때문에 예상대로라면 하나의 함수(또는 라이브러리같은    것) 다 실행이 될때까지 아무것도 못하는 상태여야하는데,

  그것을 비동기(논블로킹)를 씀으로써 queue로 넘겨서 실행하고 있게하고 나머지 함수들은 다 실행을 시키고

  마지막에 기본함수들이 다 호출되는 시점에 queue에서 다 실행된 비동기를 꺼내줌으로써 호출시점을 다르게 줄 수가있다

 

- Settimeout함수(비동기) 1초짜리 4개를 주면 1초뒤에 전부 실행되어야할것으로 기대를하지만 그렇지가 않다

  영상을 보니 총 1초씩 4초가 걸리는것같아보인다

why?

   스택이 깨끗해야 렌더가 되기때문


Node.js Mini-node-server(기초개념) solo sprint

클라이언트 ⇣

서버 

[search input : node.js event handling, https://nodejs.org/ko/docs/guides/anatomy-of-an-http-transaction/]

서버단에 end() 두번쓰면 안됨 - request 요청은 한번씩 들어오니 당연히 end로 response보내주는것도 한번씩 가야한다 !


  • options 무엇인가? 어떻게 처리해야하는가?

 우선 CORS를 먼저 알아봐야한다

[search : https://developer.mozilla.org/ko/docs/Web/HTTP/Access_control_CORS#%EC%A0%91%EA%B7%BC_%EC%A0%9C%EC%96%B4_%EC%8B%9C%EB%82%98%EB%A6%AC%EC%98%A4_%EC%98%88%EC%A0%9C]

CORS(Cross-Origin Resource Sharing) :

다른집에 있는사람이 우리집에 있는걸 가져감

 

서버는 물음에 대해서 가져가도된다 안된다고 하는것(이 부분이 이런사람만 가져가라 범위를 설정해준것)


Options 그거가져가도되요? 하고 물어보는거

- 한줄정리 : cors => 다른집 리소스를 가져오는것

- 한줄정리 : options => 가져가도 되는지 물어보는것

 

options 라는 요청(request)은 브라우저에서 자동으로 하는것

응답(response)을 준다면 다음에야 post 요청을 다시함


클라이언트가 10 글자를 한꺼번에 보낸다면?

서버측에서 데이터가 들어올때 잘게잘게 찢어진 Chunk 라는 개념으로 들어옴

 

그럼 req.on()은 뭘까? 

조각조각 찢어진 스트링들을 하나로 합쳐줌

message = ‘’ 라는것으로 합쳐주는 역할을 시킴

합쳐준다 해도 buffer 05 34 35 54 32 이런식으로 뜨게되는데 이거를 해결하는 방법이 3가지정도 있는것같다

1) 위에 적힌것처럼 setEncoding('utf-8')

2) 아래서 두번째줄을 chunk => chunk.toString()

3) message를 [] 로 바꿔주고, []에 concat을 쓰는방법

(이제 서버쪽으로와서 그런지 자바스크립트 컴파일? v8? 자바스크립트엔진 아직 개념이 잘 서지않음)


If, else if, else 까지 설정을 해줘야한다

무조건 한번의 응답이 갈수있도록 else까지 설정을 해줘야함


결론 : 

 

OPTIONS 에 대해서 아예 개념이 안잡혀있었는데

이런식으로 headers를 이용해서 이런애들만 post보내 ~~ 이런 느낌이었고, 

end 항상 끝맺음을 맺어줘야하는구나..라는것을 느꼈다

 

response.end() return 다르다

response.end()는 return 과는 다르게 뒤에줄까지 계속 실행이된다

 

Comments