부트캠프도중 진도를 못따라가고있어서 힘들어하던차에 매니저님께 내상황을알리고 도움을 청하니

강의진도를 정해주시고 질문거리를 가져오라하셔서 오늘 질문드리고 정리한걸로 TIL 을 쓰자고한다.

(베이직반과제 마무리하고잘랬는데 도저히 에러가 너무많이떠서 내일하자..ㅠㅠ2:26am)

 

1.싱글스레드 차이?? - 이벤트루프는 어떤점때문에 알아야하는가..?(개념너무어려움)

동기 - 요청과 결과(응답)가 반드시있어야한다. 결과나오기까지 무조건대기해야한다(다른것들이)
비동기 - 응답이오기전에 또다른 요청을 보낼수있다. 결과나오기 전 까지 다른요청을 또 수행할수있다.
싱글스레드 - 작업을 할당하는 공간이 1개(작업속도가 느릴것이라고예상)/
                  node.js 에서 JS의특징이 싱글스레드이면서 비동기동작을한다.
*Nodejs는 JS를 브라우저가아닌 외부에서 실행할수있게 하는 런타임환경 ☆비동기처리를 지원☆하기때문에
싱글스레드임에도 불구하고 멀티스레드처럼동작하게 보인다. (*스레드 - 작업을 할당하는 공간)
I/O작업이발생했을때 비동기적으로 처리한다.

멀티스레드가 효율이 좋음에도 불구하고 Nodejs가 싱글스레드를 고집하는 이유는 
멀티스레드는 같이 처리할려면 모든공간에 Data(자원)를 공유해야하기때문에 충돌을 유발할수있어서 부담이크다.
(멀티스레드로)코딩으로 프로그램을만드는게 난이도가 어렵다.
하나의웹서버에서 요청을 많이하면 멀티스레드에서는 오버헤드가 크게발생한다.

그러므로 싱글스레드로 쓰되 비동기처리로 처리한다. (결국 효율적으로 동작하게할려고)

그럼 어떻게 비동기처리를 하는가?
☆libuv☆에서 비동기적으로 I/O작업을 라이브러리로 처리

Nodejs는 eventloop라는걸 제공한다.

참조 블로그 https://velog.io/@eamon3481/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%8B%B1%EA%B8%80%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%B8%EB%8D%B0-%EC%99%9C-%EB%B9%84%EB%8F%99%EA%B8%B0%EC%A0%81-%EC%9D%BC%EA%B9%8C

v8 은 (브라우저라고  생각)
Binding(은 서버라고생각)에서 운영체제를 결정한다.

Call stack에서 Web APIs로는 비동기 I/O를 모으고 나머지는 실행한다.
Web APIs에있는것들은 =>  CallStack Que로  실행컨텍스트가 비면 옮겨준다.

2.컨트롤러와 미들웨어의 차이?
컨트롤러 - 디자인패턴의개념(MVC패턴) , 3계층 아키텍쳐구조  
MVC - [Model] - [View(front개념)] - [Control(요청을보내면받는곳)]
Model - data구조(ex- 회원데이터)
View - 요청을보냄 
Control - 어떤동작을 수행할지 지휘

*3계층 구조 
-Contoller : 요청을받아서 어떤동작을 수행하고 어떤응답을 할지 정해주는 곳
-Service : Controller가 정한 응답을 수행하는곳(=business logic)
-repository : DataBase랑 연결이 되서 동작하는 곳(DB관련작업하는곳)

**미들웨어는 전체적인개념
컨트롤는 세부적인거 **

미들웨어 : Nodejs에서 파일이나 모듈이 서버에서 동작하는 방식. 
              한마디로 축약하자면 :"요청과 응답사이에서 실행되는 함수"
              Nodejs에서는 수많은 미들웨어의 조합으로 요청과 응답이 구성된다.

3.`CommonJS`와는 다르게 **정적(Static)**으로 모듈을 가져오며 
**비동기적 모듈 로딩과 순환 종속을 처리**합니다.
3-1.정적로딩과 동적로딩?            // 이부분은 지금 깊게들어가기보다는 우선은 차후에 자연스럽게 알아가기

4.export 뒤에 default가 왜붙는지
-그냥 export는 함수 하나하나를 내보내겠다
-export default는 모듈전체를 내보내겠다
** 일단 이정도로 대충이렇게 흘러간다/이렇게 쓸수있다고 알아가자 **

+ Recent posts