본문 바로가기
NodeJS, NPM, Koa

Koa JS FrameWork을 이용한 RestAPI 만들기 # NodeJS

by Developer88 2021. 5. 1.
반응형

오늘은 Koa JS 프레임웍을 이용해서,

UI없이 Get과 Post를 구현한 RestAPI서버를 만드는 방법에 대해서 알아보도록 하겠습니다.

먼저, Koa에 대해서 알아보도록 하겠습니다.

 

1. Koa

Koa는 Express를 만들던 팀에서 개발한 새로운 웹프레임워크입니다.

좀더 경량의, 빠른 웹앱과 API를 지향한다고 하는군요.

 

공식페이지의 소개에도 나와있지만,

Koa는 async function을 이용해서, 콜백헬에서 벗어나고, error핸들링을 원활하게 해준다고 합니다.

Babel없이도 이용할 수 있는 async function과 await, 그리고 ES6를 바로 사용할 수 있는 프레임워크라는 점에서 매력적이라고 할 수 있을 것 같습니다. 

위에서 언급한 것처럼, Expresss를 만들던 팀에서 만들었으므로 기존 Express사용자에게 API가 상당히 익숙합니다.

 

2. 모듈 설치

이제 koa를 설치해야 할 시간입니다.

먼저 koa를 설치하기 전에 NodeJS의 버전을 확인해 주어야 합니다.

"node -v"로 nodeJS의 버전을 확인해 주시구요. 

버전이 7.6 이하라면 업데이트를 먼저 해 주셔야합니다.

 

Koa의 장점인 async함수와 es6를 사용하기 위해서는 node7이상의 버전이 필요합니다.

그리고, koa-logger라는 logger도 같이 설치합니다.

무슨 일이 일어나는지 알아야 작업하기도 편하겠지요.

 

npm install koa --save

 

3. Hello World

이제 가장 먼저 할 것은 "Hello World"를 출력하는 것 이겠지요.

아래와 같이, async함수를 이용해서 "Hello World"를 출력해 줍니다.

 

Koa allication은 request에 따라서, stack과 비슷한 형태로 처리되는 middle ware들의 array를 포함하는 객체입니다.

제일먼저, 이 객체를 사용해 주구요.

app.use()함수에서 알수 있듯이, express와 API들이 매우 비슷한데요.

이 함수를 이용해서 middleware를 사용해 줄 수 있습니다.

 

 

 

4. ctx

위의 코드를 보면서 가장 궁금한 것은 ctx가 무엇이냐는 것 인데요.

Koa에는 Context라는 것이 있습니다.

공식문서에의 설명을 보면, Node의 request와 response객체를 하나의 객체로 캡슐화한것이라고 하는군요.

Context는 request당 생성이 되구요.

middleware에서는 receiver로서 reference되어집니다.

 

 

5. bodyParser 사용

koa-body는 body parser 미들웨어입니다.

express의 multer같은 bodyParser역할을 해 주는데요.

아래와 같은 type들을 지원해 줍니다.

 

  • multipart/form-data
  • application/x-www-urlencoded
  • application/json
  • application/json-patch+json
  • application/vnd.api+json
  • application/csp-report
  • text/xml

 

이제 모듈 설치를 해 주겠습니다.

 

npm install koa-body --save

 

그리고 use() 함수를 이용해 줍니다.

 

 

6.  Router사용하기

6-1. 모듈 설치

이번에는 koa-router를 설치하고 사용해 보겠습니다.

이 router를 사용하는 방법은 express에서의 방법과 매우 유사해서, express의 경험이 있으신 분들은 쉽게 사용할 수 있습니다.

공식문서에조차, Express-style routing이라고 나와있습니다.

다만, async/await를 사용할 수 있다는 점은 매우 큰 장점이라고 할 수 있겠지요.

 

npm install koa-router --save

 

6-2. route 파일 movie.js 작성

 

 

이제 프로젝트 폴더에서, routes폴더를 만들고,  test.js파일을 만들어 줍니다.

이제 여기에 router객체를 만들어서, http메소드들을 사용해 줄 텐데요.

사용할 수 있는 html함수들은 아래와 같습니다.

  • get(), post()
  • put(), patch()
  • delete(), del()

 

router객체를 만들때 인자에 들어간, prefix는 말 그대로, 앞에 항상 붙는 route입니다.

"/movies"로 시작하는 것은 여기로 온다는 의미이지요.

router객체를 만들어서, get()함수를 사용했다는 것 말고는 크게 특이한 점은 없습니다.

위에서 언급한 Context와 콜백인 next를 인자로 한 람다식이 들어가 있습니다.

movies 를 간단한 array에 저장해서 불러다 사용해 보겠습니다.

 

 

 

같이 모든 경우에 매칭이 되는 all()도 사용할수 있는데요.

아래는 모든 Http메소드에 대해서 redirect 를 해 주는 경우입니다.

 

 

6-3. app.js 작성

이제, app.js에서 이 파일을 require해서 아래와 같이, use함수를 이용해 사용해 줍니다.

 

 

 

이제 postman을 이용해서, "http://localhost:3000/movies"로 접근하면 아래와 같은 화면을 볼 수 있습니다.

 

 

6-4. logger 설치

logger도 같이 설치해 주면 어떻게 돌아가고 있는지 더욱 잘 볼수 있겠지요.

먼저 아래 명령어로 설치를 해 주구요.

 

npm install koa-logger --save

 

아래와 같이 logger를 use()함수를 이용해 사용해 줍니다.

 

 

 

다시 실행해 보면, 아래와 같은 화면을 볼 수 있습니다.

 

 

7. Post 파라미터 받아오기

Get을 해 보았으니, Post도 어려울 것은 없습니다.

아래와 같이 post로 insert를 만들어 주었습니다.

새로운 영화제목을 생성하면, id를 지난 영화객체의 id보다 1을 더한 값을 추가해 주었네요.

 

 

 

postman으로 movieTitle을 "내가만든영화"로 입력하였더니, 아래와 같이 출력되는 것을 볼 수 있습니다.

 

 

 

이제 localhost:3000/movies로 늘어난 영화목록을 확인해 줍니다.

정상적으로 추가된 것을 볼 수 있습니다.

 

 

 

8.  Get파라미터 받아오기

단순한 get호출도 해 보았고, post 파라미터도 받아와보았는데요.

get의 url로 route값을 받아오고, queryString을 받아오는 것 까지 해보겠습니다.

 

8-1. get Route Parameter 받아오기

id 값을 받아와보도록 하겠습니다.

express에서도 params에 접근해서 route parameter를 받아왔었는데요.

koa에서도 마찬가지입니다.

 

 

 

id를1로 넣어서 url로 값을 넘겨주면, 

아래와 같이, "Leogent2"가 나오는 것을 알 수 있습니다.

 

 

8-2. QueryString 받아오기

이번에는 QueryString을 받아와 보도록 하겠습니다.

queryString은 Context에 접근해서 사용할 수 있는데요.

"ctx.query"를 통해서 객체의 형태로 가져올 수 있는데요.

 

예를 들어, "localhost:3000/movies?client=postman" 으로 접근한다고 가정해 보겠습니다.

"ctx.query"에 들어오는 객체는 아래와 같은 형태입니다.

 

{ client: "postman" }

 

그럼 아래와 같이, "ctx.query.client"로 접근할 수 있습니다.

 

 

 

아래와 같이, client명이 yourClient로 들어온 것을 알 수 있습니다.

 

 

9. 이 밖의 모듈들

Koa를 이용해서 RestAPI서버를 만드는데 필요한 여러가지 middleware가 있을텐데요.

위에서는 다음과 같은 모듈들을 추가로 사용해 보았습니다.

  • koa-logger
  • koa-router
  • koa-body

아래는 추가적으로 도움을 줄 수 있는 모듈들인데요.

보안이나 DB 또는 개발을 좀 더 효율적으로 할 수 있도록 도와주는 모듈들입니다.

  • helmet js
  • jsonwebtoken
  • kompression
  • cors설정을 위한 cors
  • mongoose
  • dotenv
  • pm2

 

위의 모듈들에 관한 것들은 다른 글에서 정리해 보도록 할 예정입니다.

이상으로 Koa Framework을 이용한 Rest-API를 제작하는 방법에 대해서 정리해 보았구요.

좀 더 좋은 방법이 있다면, 이 글을 통해서 업데이트 하도록 하겠습니다.

 

728x90

댓글