Node.js 14.19.1
npm 6.14.16
에러가 If 조건문에서 발생했다면, return
명령문을 붙여서 해결할 수도 있다. 마찬가지로 코드가 종료된다. (미검증)
app.post('/test', (req, res) => {
if (!req.body.name) {
return res.status(400).json({ // return을 붙이면 Response가 클라이언트에 전송되고 코드가 종료된다.
status: 'error',
error: 'req body cannot be empty',
});
}
res.status(200).json({
status: 'succes',
data: req.body,
})
});
위 이슈의 원인과 해결책을 찾다가 알게 된 지식에 대하여 정리해 보았다. 주로 JavaScript, HTTP 관련이다.
Memory Heap
과 CallStack
으로 구성되어 있다.CallStack
에 순차적으로 들어가고, 종료되면 빠진다.Single Thread
)Web API
로 처리한다.CallBack
함수는 실행 시점이 되면 CallBack Queue
에 저장된다. 아래는 예시.setTimeout(
function() { // 이 부분이 CallBack 함수
console.log("Hungry");
}, 0);
Event Loop
는 CallStack이 비어 있는지 주기적으로 확인하여, CallBack Queue에서 CallBack 함수를 CallStack
에 옮겨다 준다.브라우저
나 Node.js
에서 제공하는 것이다. (Multi Thread
)async & await
으로 비동기 처리를 동기 처리처럼 쓸 수 있다.실행컨텍스트 렉시컬 환경
(후일 보충)에 { name: value }로 저장된다.원시 타입
값은 CallStack
에 저장된다.참조 타입
값은 Heap
영역에 저장된다.CallStack
값을 기준으로 판단한다.const
로 선언된 참조 타입의 경우, 값을 변경할 수 있다. (상세: 아래쪽)원시 타입
변수이든 참조 타입
변수이든, 처음엔 CallStack
주소를 읽는다. let
은 CallStack(메모리) 주소를 변경할 수 있고, const
는 변경할 수 없다.let
이 붙은 변수 값은 원시 타입이든 참조 타입이든 수정이 가능하고, const
가 붙은 변수 값은 원시 타입은 수정할 수 없으나 참조 타입은 수정이 가능하다.return
명령문에 도달하면, 함수의 실행은 그 지점에서 중단된다.return undefined
하는 것과 같다.HTTP Protocol
은 현재 상태를 저장하지 않는다. (Stateless)Request
1개에 Response
1개를 보낼 뿐이다.Cookie
나 Session
으로 Stateless를 극복할 수 있다.1 Request 2 Response는 불가능하다. HTTP는 Stateless
이기 때문이다.
일반 함수는 CallStack
에서 바로 실행되고, CallBack 함수는 일단 CallBack Queue
에 넣었다가 나중에 CallStack으로 옮겨 처리한다.
원시 타입 값은 CallStack
에, 참조 타입 값은 Heap
영역에 저장된다.
데이터 변경 유무는 CallStack
값을 기준으로 판단한다. 때문에 const
로 선언된 참조 타입의 경우, 값을 변경할 수 있다.
함수에서 return
명령문을 쓰면 코드가 종료된다.
동기 vs 비동기
구분 | 처리 방식 | 지원 | 연관 키워드 |
---|---|---|---|
동기 | 될 때까지 기다렸다가 처리 | JS 엔진 | Single Thread |
비동기 | 되는 것부터 처리 | 브라우저, Node.js | CallBack, async & await, Multi Thread |
HTTP에서 1 Request 2 Response를 해결하는 방법
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
ERR_HTTP_HEADERS_SENT : Client 요청에 두 번 이상 응답할 때 발생하는 에러
[Solved] Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
HTTP는 Stateless
HTTP의 특징과 메시지 주고 받는 방법(헤더와 바디)
JavaScript: Return 명령문으로 코드 종료
MDN 문서 > return
MDN 문서 > 함수 선언
JavaScript 동작 원리(전반)
진짜 ! 쉽게 알아보는 자바스크립트 동작 원리
JavaScript 동작 원리를 살펴봅시다
호출 스택과 이벤트 루프
JavaScript 동작 원리 Overview 이미지
How JavaScript works: an overview of the engine, the runtime, and the call stack
JavaScript 동작 원리(Heap)
javascript 동작 원리
[Javascript] 콜스택(Call Stack), 메모리힙(Memory Heap), 가비지컬렉션, 메모리릭 그림으로 이해하기
JavaScript의 const/let 비교
[javascript] 콜스택/메모리힙 구조, 데이터 저장/참조 원리
JavaScript의 async/await은 비동기 처리를 동기 처리처럼 해줌
[Javascript] 비동기, Promise, async, await 확실하게 이해하기
[자바스크립트] 비동기 처리 3부 - async/await