API 제공 서버를 만들었으니 API를 사용하는 서비스도 만들어봅시다.
이 서비스는 다른 서버에게 요청을 보내므로 클라이언트 역할을 하게 됩니다.
API 제공자가 아닌 API 사용자의 입장에서 진행하는 것이며, 바로 NodeBird 앱의 데이터를 가져오고 싶어하는 사용자입니다.
이 사용자는 주로 데이터를 가공해 2차적인 서비스를 제공하는 회사나 개인일 수 있습니다.
예를 들어 쇼핑몰들의 최저가를 알려주는 서비스가 2차 서비스가 될 수 있습니다.
이제 우리의 2차 서비스 이름은 "NodeCat"이라고 해보겠습니다.
nodebird-api 폴더와 같은 위치에 nodecat이라는 새로운 폴더를 만듭니다.
이는 별도의 서버이므로 nodebird-api와 코드가 섞이지 않도록 주의합니다.
이 서버의 주 목적은 nodebird-api의 API를 통해 데이터를 가져오는 것입니다.
가져온 데이터는 JSON 형태이므로 퍼그나 넌적스 같은 템플릿 엔진을 사용하여 데이터를 렌더링할 수도 있습니다.
사용하지 않는 미들웨어는 걷어내고 최소한으로 app.js를 구성
API를 사용하려면 먼저 사용자 인증을 받아야하므로 사용자 인증이 원활하게 진행되는지 테스트하는 라우터를 만들어봅시다.
조금 전에 발급받은 clientSecret을 .env에 넣습니다.
여러분이 발급받은 클라이언트 비밀키는 이 책과 다를 것입니다.
이 책에 적힌 비밀키 대신 여러분이 발급받은 clientSecret 키를 .env에 넣으세요.
GET /test 라우터는 NodeCat 서비스가 토큰 인증 과정을 테스트하는 라우터입니다.
이 라우터의 동작 과정은 다음과 같습니다.
요청이 왔을 때 세션에 발급받은 토큰이 저장되어 있지 않다면,
POST http://localhost:8002/v1/token 라우터로부터 토큰을 발급받습니다.
이때 HTTP 요청의 본문에 클라이언트 비밀키를 실어보냅니다.
발급에 성공했다면 (응답 데이터의 code 속성이 200이면 성공한 것이라고 약속함),
발급받은 토큰으로 다시 GET http://localhost:8002/v1/test에 접근하여 토큰이 유효한지 테스트해봅니다.
이때는 JWT 토큰을 요청 본문 대신 authorization 헤더에 넣었습니다.
보통 인증용 토큰은 이 헤더에 주로 넣어 전송합니다.
실제로 GET /test 라우터를 사용해봅시다.
콘솔을 하나 더 띄워 서버 (localhost:4000)를 실행합니다.
nodebird-api (localhost:8002)도 실행 중이어야 합니다.
http://localhost:4000/test로 접속하면 됩니다.
요청을 받는 http://localhost:8002 와 다른 주소임을 기억하세요.
localhost:8002 는 API 서비스를 제공하는 nodebird-api 서버고,
localhost:4000 은 API 서비스를 사용하는 NodeCat 서버입니다.
접속하면 다음과 같이 발급 받은 토큰의 내용이 표시됩니다.
잘 동작하는 것 같지만 아직 코드에 부족한 부분이 있습니다.
1분을 기다린 후 http://localhost:4000/test 라우터에 다시 접속하면, 토큰이 만료되었다는 메시지가 뜹니다.
토큰의 유효기간이 1분이었으므로 1분 후에는 발급받은 토큰을 갱신해야 합니다.
API 서버에서 에러 코드와 에러 메시지를 상세하게 보내줄수록 클라이언트가 무슨 일이 일어났는지 이해하기 쉽습니다.
토큰이 만료되었을 때 갱신하는 코드를 추가해야한다는 것을 잊지말길 바랍니다.
차후 다음 절에서 작성.
'clone toy projects > node_express_sns' 카테고리의 다른 글
사용량 제한 구현하기 (0) | 2023.08.25 |
---|---|
SNS API 서버 만들기 (0) | 2023.08.25 |
JWT 토큰으로 인증 하기 (0) | 2023.08.25 |
프로젝트 구조 갖추기 (0) | 2023.08.25 |
API 서버 이해 (0) | 2023.08.25 |