const express = require('express');
const app = express();

app.get('/', function(req, res) {
	res.send('Welcome');
 });
 
app.get('/login', function(req, res) {
	res.send('login page');
    });
    
app.listen(3000, function() {
	console.log('Connected 3000 port')
    });
const express = require('express');
const app = express();

app은 express에서 권장하는 명칭이라고 한다. 스프링에서 썼던 index와 비슷한 맥락인듯 하다. express()로 app 객체를 가져오는 것도 express에서 그렇게 설정해둔 것이라 한다. 생성자의 개념으로 이해했다.

app.get('/', function(req, res){
  res.send('Welcome');
});

app.get('/login', function(req, res){
  res.send('login page');
});

이 부분이 라우터 부분이다. 내가 코드로 '라우팅'을 한 것이라고 보면 된다. 첫번째는 모든 요청에 대한 라우팅이고 두번째는 '/login' 이라는 접근에 대한 라우팅이다.

route : (특정한 루트를 따라 무엇을) 보내다 [전송하다]

app.listen(3000, function(){
  console.log('Connected 3000 port!')
});

node app.js 하는 순간 사실 라우팅 부분 이후에 있는 app.listen까지 쭉 발동되게 된다. IP 주소가 없으니 localhost로 동작하고 3000번 포트에 listen이 걸리며 listen 상태가 되고 나서는 callback 함수가 발동되면서 console에 'Connected 3000 port!'가 찍히게 된다.

Callback(콜백) 함수

Callback(콜백) 함수란 이벤트 핸들러(함수)가 특정 이벤트가 발생 했을때 Call 당하는 함수를 의미한다. 중요한 것은 콜백 함수가 실행되는 시점이다. 콜백 함수의 실행 시점은 콜백 함수를 파라미터로 사용한 원래 함수가 끝난 시점이다. 즉, 원래 함수의 body가 끝나고서 콜백 함수가 실행된다는 의미이다. 그런 의미에서 Callback 함수는 "Call at the back" 함수라고 할 수 있다. 비동기로 뒤에서 멀티 쓰래드로 실행된다는 것이다. 적절한 설명이 stackoverflow에 있었다.

정적 파일 서비스

const express = require('express');
const app = express();

app.use(express.static('public'));

app.get('/home', function(req, res){
  res.send('Welcome! <img src="/starbucks.png">');
});

app.listen(3000, function(){
  console.log('Connected 3000 port!')
});

Node.js 에서 정적인 파일을 서비스하고 싶을 경우 Express에서 기본으로 제공하는 미들웨어 함수인 express.static을 사용하면 된다. 아래 코드와 같이 express.static()의 파라미터로 '폴더'를 설정한다. 경로를 설정한다는 것이다. 그러면 웹 상에서 파일 명을 주소창에 쳐서 직접 접근이 가능해진다. (예시 : http://localhost:3000/starbucks.png)

혹은 아래와 같이 특정 경로에 대한 접근을 하는 대신 내가 태그상에서 이미지 혹은 파일을 태그를 통해 보여줘도 된다. 핵심은 이렇게 할 수 있는 이유가 express.static() 에서 파라미터로 해당 경로를 잡아뒀기 때문이라는 것이다.

app.get('/home', function(req, res){
  res.send('Welcome! <img src="/starbucks.png">');
});

링크

profile
나를 위한 업그레이드 아자아자

0개의 댓글