[giruboy] Express의 이해와 서버 생성하기

최길우·2022년 11월 23일
0

Express

목록 보기
1/1

개요


: Node.js 환경의 서버 프로그램을 만들때 사용하는 프레임워크

특징

  • 어떤 프레임워크는 서버의 전체적 틀이 마련돼있는 반면 express는 서버 프로그램에 필요한 최소한의 기능만 제공 = 자유도가 높은 프레임워크
  • 추가적인 필요 기능이 있다면 직접 라이브러리를 만들거나 외부에서 라이브러리를 가져와야한다.
  • 빠르고 쉽게 서버 프로그램을 만들 수 있다.
  • express는 node.js 생태계에서 아주 중요한 위치이다.
  • 핵심적인 3가지 특징이 있다. 1)쉬운 미들웨어 설정 2)쉽게 설정할 수 있는 라우팅 3)쉽게 설정하는 정적 자원 제공 서버


Express로 서버 구축하기


express로 서버를 구축하기 위한 준비과정과 코드를 살펴보자

준비과정

  1. directory를 생성한다. 파일 하나를 생성 후 터미널을 실행한다.
  2. 명령어 : npm init 으로 해당 directory를 package로 만들어 준다.
  3. express package를 설치한다. 명령어 : npm install express
  4. 해당 디렉토리는 하나의 package가 되었다.

서버 구축

// 파일명: main.js
const express = require('express'); // 1
const app = express(); //2
const PORT = 3000;

app.get('/hello', (req, res) => { //3
	res.send('<h1>Hello Express</h1>'); //4
});

app.listen(PORT, () => { //5
	console.log(`서버가 생성되었습니다.${PORT}`)
});

위의 코드를 살펴보자

  1. express 모듈을 로드한다.

  2. express 모듈의 하나의 함수를 실행한다(express()) 그리고 해당 객체에 app 이라는 변수에 담는다. express를 이용한 앱들은 관습적으로 app 변수를 사용한다.

  3. 외부의 클라이언트가 보낸 request의 url path 부분이 ‘/hello’ 라면 옆의 콜백이 실행 되는것 이다. 이때, 특정 path에 대응하는 callback을 route handler 라고도 한다.

    route handler의 파라미터를 보면 첫번째 파라미터는 request 객체로 클라이언트가 보낸 request를 다룰 수 있고, 두번째 파라미터인 response 객체로 적절한 response를 보낼수 있다.

  4. response 객체의 send 라는 메서드로 응답을 준다. 앞으로 ‘/hello’라는 path에 대한 request가 오면 해당 프로그램은 ‘Hello Express’ 를 response의 body에 담아 보내게 된다.

  5. 클라이언트 요청을 듣는 역할을 한다. 해당 메서드에 대한 자세한 설명은 참조

서버 실행

명령어: node main.js 로 서버를 구동시켜보자. 브라우저 주소창에 http:127.0.0.1:3000/hello 를 입력 시 문구가 보일 것이다.

+)route handler

route handler는 각각 서버가 각 request의 path를 보고 알맞은 작업을 수행하는 route와 그 작업을 담당하는 존재인 handler를 합친 말이다.


1)쉬운 미들웨어 설정



2)쉽게 설정할 수 있는 라우팅


라우팅(routing)

: ‘경로 배정’이란 의미로, 클라이언트의 요청에 대해 서버가 그 URL을 보고 적절하게 분리하여 처리하여 주는 것이다.

express에서 쉽게 라우팅 설정하기

어떻게 하면 쉽게 라우팅을 설정할 수 있다는 것일까? 아래의 url path 예시를 보자

ex)

/api/topics/101
/api/topics/105
/api/topics/200
/api/topics/201
/api/topics/203

예시처럼 여러 path를 가진 웹 페이지의 경우, 다시 말해 path 부분에 가변적인 값이 있을 때는 가변적인 값 앞부분에 : 을 붙여 라우팅을 할수 있다. 그리고 : 을 Route Parameter 라고 한다.

이제 라우팅을 설정 해보자. 아래 예시 참조

ex)

app.get('/api/topics/:id', (req, res) => {
	const id = req.params.id;
});

app.get('/api/topics/:id', (req, res) => {
	const { id } = req.params;
});

// 두 코드는 같은 기능을 한다. 다만 아래의 코드가 moder javascript의 object destructuring에 의해 다음과 같이 표현된 것이다.

라우트 파라미터의 값은 위와 같이 req 객체의 params라고 하는 객체의 프로퍼티로 설정해서 id 값을 가져올 수 있다. 아주 중요한 내용!


3) 쉽게 설정하는 정적 자원 제공 서버



+) Server의 종류


서버의 여러가지 종류 중 클라이언트에게 리스폰스를 주는 서버에서 한 가지 분류법은 서버의 역할과 리스폰스의 내용을 기준으로 크게 2가지로 나누어 볼 수 있다.

1) Web Server

: 화면을 그리는데 필요한 데이터(HTML, CSS, JavaScript 코드, 이미지 등)를 Response의 Body에 담아주는 서버

2) API Server

: 클라이언트가 요청한 작업을 처리하고 처리한 결과를 Response의 Body에 JSON ,XML등의 형식으로 담아주는 서버 → express로 api server를 만들예정.

→ 웹 서비스를 만들기 위해선 web server, api server를 만드는 방법 2가지를 모두 알아야한다.


profile
성장하는 개발자

0개의 댓글