express routing 원리
안녕하세요. 개발자 개발 까마귀입니다.
오늘은 express routing 의 원리에 대해 알려드리겠습니다.
Routing이란?
라우팅은 URI(또는 경로) 및 특정한 HTTP 요청 메소드(GET, POST 등)인 특정 엔드 포인트에 대한 클라이언트 요청에대한 응답을 말합니다.
그럼 express 라우팅 원리를 코드를 보면서 배워보죠
const main = require("./routes/main");
const express = require("express");
const app = express();
function routesCallback() {
main.main(app);
}
app.listen(8082, function () {
console.log('server start');
routesCallback();
})
function main(app) {
console.log("111");
app.get('/', function (req, res) {
res.send('hi')
});
app.get('/hi', function (req, res) {
console.log("apapap");
res.send('hi2');
});
console.log("2222");
}
exports.main = main;
코드를 보면 간단합니다. 서버가 생성이되면 routes를 담은 main 함수를 routesCallback 이 실행이됩니다.
그런 다음 '/' 주소를 가면 실행이될까요?
신기하게도 실행이됩니다. 왜 실행이되는게 신기하냐고요? 일단 8082 서버가 생성된 후 저희는 routesCallback를 실행시키고 그 다음 main이라는 함수가 실행이 됐습니다. 그 main 함수는 실행이 된후 이벤트 루프 담겨지고 사라집니다.
그렇게되면 안에 있는 routes는 실행이 안되는게 정상인거죠 보통 node 초보 분들이랑 다른 코드를 참고하실 때 routes를 function 안에 담은거를 거의 보신적이 없을겁니다. routes를 global 영역에 넣어서 하기 때문에 주소 진입시 node에 작성한 글로버 영역에 있는 routes 코드가 실행이되는걸로 착각하시는 분들이 많습니다. 하지만 그거는 완벽히 틀린 방식입니다. 일단 저희가 서버를 뭐로 생성하고 routes를 뭐로 이용해서 코드를 짰죠? 바로 express는 입니다. 이쯤 되면 express를 까보면 알겠지라고 해서 console.log(app); 이런식으로 확인해보시면 알겠지만 별다를 정보가 없습니다. 저희가 궁금한 답을 제대로 알기위해서는 cmd 창에 "set DEBUG=express:* & node index.js" 라는 거를 입력하시고 엔터를 치신 후 node index.js를 실행시켜보세요.
보이시나요? 저희가 등록한 '/', '/hi '가 있습니다. 그러니 한 마디로 main이라는 함수가 실행시 그 안에 있는 routes는 express에 담겨져서 등록한 주소로 접근시 express에 등록된 주소로 접근한거죠 쉽게 말해 저희가 등록한 routes가 express에 메모리로 등록이 되어 함수의 생명이 끝나도 접근이 가능하게 바로 이것 때문입니다.
어때요? 모르고 routes를 쓴거보다는 알고 쓰면 더욱 더 많은 곳에 활용할 수 있습니다. 이러면 hook 3차원적인 코드를 짤 수도 있고 더욱 더 스펙트럼이 넓은 코드를 짤 수 가 있죠
감사합니다.
'프로그래밍 > Backend' 카테고리의 다른 글
[Backend] Nodejs router (0) | 2021.03.29 |
---|---|
[Backend] Nodejs ejs 적용 (0) | 2021.03.29 |
[Backend] Nodejs MVC 패턴 (0) | 2021.02.14 |
[Backend] Nodejs Express로 웹 서버 만들기 (0) | 2021.02.07 |
[Backend] Nodejs 웹 서버 만들기 (2) | 2021.01.31 |
댓글