이번 프로젝트는 NodeBird 서비스와 데이터베이스를 공유합니다. 다른 서비스가 NodeBird의 데이터나 서비스를 이용할 수 있도록 창구를 만드는 것이 목표로, 프론트 쪽은 거의 루즈하지 않습니다.
우리는 다른 서비스에 NodeBird 서비스의 게시글, 해시태그, 사용자 정보를 JSON 형식으로 제공할 것입니다.
단, 인증을 받은 사용자에게만 일정량 안에서 API를 호출할 수 있도록 허용할 것입니다.
package.json
NodeBird에서 config, models, passport 폴더와 그 내용물들을 모두 복사해서 nodebird-api 폴더에 붙여넣습니다.
routes 폴더에 서는 auth.js와 middlewares.js 만 그대로 사용합니다. 마지막으로 .env 파일을 복사합니다.
다른 폴더와 파일은 새로 나올 때마다 직접 생성하면 됩니다.
다음은 에러를 표시할 파일입니다. views 폴더를 만들고 그 폴더 안에 error.html 파일을 생성합니다.
app.js 에서는 포트를 8002 로 열어서 이전에 만든 nodeBird(8001)과
차후에 만들 클라이언트인 NodeCat 서버(4000)와 같이 실행할 수 있다.
도메인 모델에는 인터넷 주소 (host)와 도메인 종류 (type), 클라이언트 비밀키 (clientSecret)가 들어갑니다.
type 컬럼을 보면 처음 보는 ENUM이라는 속성을 갖고 있습니다.
넣을 수 있는 값을 제한하는 데이터 형식입니다.
무료 (free)나 프리미엄 (premium) 중에서 하나의 종류만 선택할 수 있게 했고, 이를 어겼을 때 에러가 발생합니다.
클라이언트 비밀키는 다른 개발자들이 NodeBird의 API를 사용할 때 필요한 비밀키입니다.
이 키가 유출되면 다른 사람을 사칭해서 요청을 보낼 수 있으므로, 유출되지 않도록 주의해야합니다.
한 가지 안전장치로서, 요청을 보낸 도메인까지 일치해야 요청을 보낼 수 있게 제한을 둘 것입니다.
clientSecret 컬럼은 UUID라는 타입을 가집니다. UUID는 충돌 가능성이 매우 적은 랜덤한 문자열입니다.
이제 새로 생성한 도메인 모델을 시퀄라이즈와 연결합니다. 사용자 모델과 일대다 관계를 가지는데,
사용자 한 명이 여러 도메인을 소유할 수도 있기 때문입니다.
로그인 화면에서 카카오 로그인은 제외했습니다.
또한 도메인을 추가하는 화면을 추가 하였다.
로그인하지 않았다면 로그인 창이 먼저 뜨고, 로그인한 사용자에게는 도메인 등록 화면을 보여줍니다.
GET / 라우터와 도메인 등록 라우터 (POST /domain) 입니다.
GET / 는 접속 시 로그인 화면을 보여주며, 도메인 등록 라우터는 폼으로부터 온 데이터를 도메인 모델에 저장합니다.
도메인 등록 라우터에서는 clientSecret의 값을 uuid 패키지를 통해 생성합니다.
이제 서버를 실행하고 http://localhost:8002 로 접속합니다.
이제부터 여러분은 NodeBird API가 아니라 API 서비스를 이용하는 사용자의 입장입니다.
API를 사용하기 위해서는 허가를 받아야 합니다.
카카오 로그인을 하기 위해 카카오 개발자 사이트에 애플리케이션을 만들었던 것과 비슷한 상황입니다.
사용자 정보는 NodeBird 앱과 공유하므로 NodeBird 앱의 아이디로 로그인하면 됩니다.
카카오 로그인은 제외했으니 로컬로 가입한 이메일을 통해 로그인합니다. 로그인 후에는 도메인 등록 화면이 뜹니다.
도메인을 등록하는 이유는 등록한 도메인에서만 API를 사용할 수 있게 하기 위해서입니다.
웹 브라우저에서 요청을 보낼 때, 응답을 하는 곳과 도메인이 다르면 CORS 에러가 발생할 수 있습니다.
브라우저가 현재 웹 사이트에서 다른 서버에 접근하는 것을 막는 조치입니다.
CORS 문제를 해결하려면 API 서버 쪽에서 미리 허용할 도메인을 등록해야 합니다.
서버에서 서버로 요청을 보내는 경우에는 CORS 문제가 발생하지 않습니다.
CORS는 브라우저에서 발생하는 에러이기 때문입니다. 이에 대해서는 10.7절에서 자세히 다룹니다.
무료와 프리미엄은 나중에 사용량 제한을 구현하기 위한 구분값입니다.
프리미엄 도메인에는 더 많은 사용량을 허가할 것입니다. 이제 localhost:4000 도메인을 등록합니다.
NodeBird API를 사용할 도메인 주소이며, 다른 개발자들이 만든 서버라고 생각하면 됩니다.
클라이언트 비밀키는 랜덤한 문자열이므로 이 책과 다를 수 있습니다.
발급받은 비밀키는 localhost:4000 서비스에서 NodeBird API를 호출할 때 인증용도로 사용합니다.
비밀키가 유출되면 다른 사람이 마치 여러분이 호출한 것처럼 API를 사용할 수 있으므로 조심해야합니다.
'clone toy projects > node_express_sns' 카테고리의 다른 글
다른 서비스에서 호출하기 (0) | 2023.08.25 |
---|---|
JWT 토큰으로 인증 하기 (0) | 2023.08.25 |
API 서버 이해 (0) | 2023.08.25 |
팔로잉과 해시태그 (0) | 2023.08.24 |
multer 패키지로 이미지 업로드 구현하기 (0) | 2023.08.24 |