노드는 자바스크립트 문법을 사용하므로 웹 API 서버에서 데이터를 전달할 때 사용하는 JSON을 100%활용하기에 좋다.
API 서버는 프런트엔드와 분리되어 운영되므로 모바일 서버로도 사용할 수 있다. 노드를 모바일 서버로 사용하려면 REST API 구조로 구성하면되는데 특히 JWT 토큰은 모바일 앱과 노드 서버 간에 사용자 인증을 구현할 때 자주 사용한다.
Application Programming Interface의 두문자어로, 다른 애플리케이션에서 현재 프로그램의 기능을 사용할 수 있게 허용하는 접점을 의미한다.
다른 웹 서비스의 기능을 사용하거나 자원을 가져올 수 있는 창구.
서버에 API를 올려서 URL을 통해 접근할 수 있게 만든 것.
웹 사이트가 자체적으로 제공하는 API가 없거나 API 이용에 제한이 있을 때 사용하는 방법
10장의 프로젝트는 NodeBird 서비스와 데이터 베이스를 공유한다. 새로 추가된 패키지는 uuid
이며, 고유한 랜덤 문자열을 만들어내는데 사용한다.
** type : Sequelize.ENUM('free', 'premium')
ENUM 이라는 속성은 넣을 수 있는 값을 제한하는 데이터 형식이다. 현재 위의 문장은 'free' or 'premium' 중에서 하나만 선택할 수 있게 지정한 것이며, 이를 어길경우 에러가 발생한다.
JSON Web Token의 약어로 JSON 형식의 데이터를 저장하는 토큰.
JWT는 내용을 볼 수 있어서 민감한 내용을 넣으면 안된다. JWT는 다음과 같이 세 부분으로 구성되어 있다.
API를 사용하는 서비스인 API 사용자의 입장에서 진행하는 서비스 만들어 보기.
가져온 데이터가 JSON 형태라면 퍼그나 넌적스 같은 템플릿 엔진으로 데이터를 렌더링 할 수 있다.
토큰에는 유효 기간이 있는데, 토큰을 발급해줄 때, 토큰이 만료되었을 경우 갱신하는 코드를 추가적으로 넣어줘야한다.
GET /post/my router : 내가 올린 포스트를 가져옴
GET /posts/hashtag/:title : 해시태그 검색 결과를 가져옴
인증된 사용자여도 과도하게 API를 사용하면 API서버에 무리가 간다. 이를 해결하기 위해서 일정 기간 내에 API를 사용할 수 이쓴 횟수를 제한하여 서버의 트래픽을 줄이는 것이 좋다.
이런 기능이 npm 패키지로 만들어져 있다. 바로 express-rate-limit 패키지.
// express-rate-limit 패키지 설치
$ npm i express-rate-limit
API 응답 목록
실제 서비스에서는 서버에 사용하는 비밀키와 프런트에서 사용하는 비밀키를 따로 두는 것이 좋다. 보통 서버에서 사용하는 비밀키가 강력하기 때문이다. 프런트에서 사용하는 비밀키는 모든 사람에게 노출된다.
브라우저와 서버의 도메인이 일치하지 않으면 기본적으로 요청이 차단된다. 이 현상은 브라우저에서 서버로 요청을 보낼 때만 발생하고, 서버에서 서버로 요청을 보낼 때는 발생하지 않는다.
응답 헤더에 Access-Control-Allow-Origin 헤더를 넣어야한다. 이 헤더는 클라이언트 도메인의 요청을 허락하겠다는 뜻을 가지고 있다. res.set 메서드로 직접 넣어도 되지만, npm에는 편하게 설치할 수 있도록 cors 패키지가 있다.
// cors 패키지 설치 명령어
$ npm i cors