티스토리 뷰

express.js는 Node.js를 위한 웹 프레임워크이다.

node.js만으로도 웹 어플리케이션 및 API 서버 개발이 가능하지만 express를 이용한다면 좀 더 손쉽게 API 서버를 구현할 수 있다.

이 글에서는 간단한 API 서버를 구현해보도록 하겠다.

 

HTTP의 4가지 주요 메서드 [GET, POST, PUT, DELETE]라우팅을 이용한 버저닝(versioning)을 구현해보겠다. 

우선 로컬 PC에 node js를 설치해 준 뒤 작업을 위한 디렉토리[testapi]를 생성해준다.

이후 npm init 커멘드로 package.json 파일을 초기화해준다.

npm init 커멘드를 입력하면 몇가지를 묻는데 그냥 엔터키를 난사해서 우선은 기본설정으로 세팅하자.

전부 입력이 끝나면 package.json 파일이 생성되고 해당 파일에는 default로 생성했던 내용들이 입력되어 있다.

이제 익스프레스를 설치해주자.

npm install express --save

설치가 완료 된 뒤 package.json 파일을 열어보면 dependencies 항목에 express 버전이 추가된 걸 확인할 수 있다.

 

이제 준비는 완료되었고 서버를 실행할 파일을 만들어보자. json 파일의 main에 index.js가 적혀있으므로 index.js를 생성해준 뒤 아래와 같이 작성하자.

app.get 함수를 이용하여 get api를 열어준다. url은 sayHello로 그리고 Hello World라는 text message를 반환하도록 해주자.

그리고 에러처리를 위해 app.use를 이용하여 status 404 그리고 메세지는 NOT FOUND로 설정해준 뒤

app.listen을 통하여 5000번 포트에 서버를 열어준다.

node index.js

로그 메세지와 함께 서버가 open 되었다. 

이제 postman이나 curl을 이용하여 localhost의 5000번 포트에서 api가 잘 동작하는 지 테스트 해보자.

sayHello에 get 요청을 할 경우 소스에 적어준대로 Hello World를 반환, 정의되지 않은 다른 url을 호출할 경우 404에러를 반환한다.

 

자 이번에는 아까 작성한 소스코드의 app.get 함수와 app.use 함수의 순서를 바꿔보자.

이후 아까와 같이 curl을 이용하여 api가 잘 동작하는 지 테스트 해보자.

아까와는 달리 모두 404에러를 반환하는 걸 확인할 수 있다.

이유를 확인하기전에 우선 express의 동작에 대해서 알아보자

- 요청(requeset) => middleware (app.use, app.get, app.post ... etc) => 응답(request)

- index.js(main)은 라우터들을 연결하여 위의 흐름대로 요청을 처리한다.

 

- 미들웨어 설정 시 app.use는 모든경우에 대한 적용(default), app.get app.post app.put app.delete등(라우팅 미들웨어)은 HTTP 메서드 처리와 같은 특수한 경우에 적용된다.

 

- app.use안의 req.res는 모든 미들웨어를 차례대로 거쳐가면서 요청과 응답을 조작한다.

- 다음 미들웨어로 넘어가기 위해서 next()를 호출할 경우 다음 미들웨어로 넘어가고 res.send로 응답을하면 리턴된다.

위의 규칙대로면 우선 index.js는 모든 미들웨어들을 차례대로 거쳐가기 때문에 localhost로의 모든 요청은 app.use함수에서 NOT FOUND를 return 하게된다.

따라서 /sayHello로의 요청은 app.get에 의하여 처리되지 못한채 첫번째 app.use 미들웨어에서 return되고 끝이난다.

순서를 그대로 유지하면서 /sayHello로의 요청에 Hello World를 반환받고싶다면 app.use router에서 send로 return하지 않고 next()를 호출하여 다음 미들웨어로 요청을 넘겨주어야 한다

다음과 같이 소스코드를 수정한 뒤 curl으로 localhost:5000/sayHello에 다시 요청한다면 Hello World를 반환 받을 수 있다. 

console에는 middleware를 통과한 log가 남아있다.

이번에는 CRUD를 담당하는 HTTP의 4가지 메서드를 구현해보자.

express에서는 이미 GET/POST/PUT/DELETE의 HTTP 메서드가 미들웨어 함수로 구현되어 있으므로 다음과 같이 작성해준 뒤 실행시켜주면 된다. (JSON등으로 req,res를 처리할수도 있으니 구글링을 해보자)

다음과 같이 잘 동작하는걸 확인할 수 있다.

 

자 이제 마지막으로 라우팅을 이용한 버저닝을 해보자.

API를 개발하다보면 사용자의 요구나 어드밴스드 된 API를 위하여 완성 된 소스코드를 손을 봐야할 경우가 있다.

이 때 버저닝을 이용하여 몇가지 장점을 얻을 수 있다.

  • 기존 버전이 필요할 수도 있기 때문에 새로운 버전과 기존 버전 두 API를 모두 OPEN 할 수 있다.
  • 새로운 버전을 만들 때 소스코드 전체를 수정하지 않고, 새로운 버전에 대한 소스코드만 작성해주면 된다.
  • 만약 문제가 생길 경우 이전 버전으로의 롤백이 용이하다.

다음과 같은 이유로 버저닝을 하게 된다.

 

이제 appv1.js 와 appv2.js라는 파일을 생성하여 다음과 같이 작성해보자.

appv1.js
appv2.js

이후 index.js 를 다음과 같이 수정하여 주자.

index.js

라우터를 이용하여 각각 v1, v2로 버저닝을 한 모습이다.

curl을 통하여 호출하면 다음과 같은 결과를 얻게된다.

지금까지 express framework를 이용한 간단한 API 구현을 해보았다.

댓글
댓글쓰기 폼