node.js

[Node.js] #10 웹 API 서버 만들기

로춘남 2021. 11. 22. 11:33
728x90


1. API 서버 이해하기

API(Application Programming Interface)

다른 애플리케이션에서 현재 프로그램의 기능을 사용 할 수 있게 허용하는 접점을 의미. 웹 API는 다른 웹 서비스의 기능을 사용하거나 자원을 가져올 수 있는 창구. 서버에 API를 올려서 URL을 통해 접근 할 수 있게 만든 것을 웹 API 서버라고 부른다.

 

2. JWT 토큰으로 인증하기

JWT는 JSON Web Token의 약어로, JSON 형식의 데이터를 저장하는 토큰.

JWT의 구성요소

- 헤더(Header): 토큰 종류와 해시 알고리즘 정보가 들어있음.

- 페이로드(Payload): 토큰의 내용물이 인코딩된 부분.

- 시그니처(Signature): 일련의 문자열이며, 시그니처를 통해 토큰이 변조되었는지 여부를 확인 가능. 시그니처는 JWT 비밀키로 만들어진다.

 

JWT토큰의 장점

: JWT 비밀키를 알지 않는 이상 변조가 불가능. 변조한 토큰은 시그니처를 비밀 키를 통해 검사할때 들통나며, 변조 할 수 없으므로 내용물이 바뀌지 않았는지 걱정할 필요가 없다. 다시 말해 내용물을 믿고 사용 할 수 있으나, 외부에 노출되어도 좋은 정보에 한해서이다. 비밀번호를 제외하고 사용자의 이메일이나 사용자의 권한같은것을 넣어두면 데이터베이스 조회없이 그 사용자에게 믿고 권한을 줄 수 있음.

 

JWT토큰의 단점

: 용량이 크다. 내용물이 들어있으므로 랜덤한 토큰을 사용할때와 비교해서 용량이 클 수 밖에 없음. 따라서 적절한 경우에 사용을 해야한다. 비용을 생각해보면되는데, 랜덤 스트링을 사용해서 매번 사용자 정보를 조회하는 작업의 비용이 더 큰지. 내용물이 들어있는 JWT 토큰을 사용해서 발생하는 데이터 비용이 더 큰지 비교.

 

• API는 다른 애플리케이션의 기능을 사용할 수 있게해주는 창구

• 모바일 서버를 구성할 때 서버를 REST API방식으로 구현

• API 사용자가 API를 쉽게 사용할 수 있도록 사용방법, 요청 형식, 응답 내용에 관한 문서 준비

• JWT토큰의 내용은 공개되며 변조될 수 있다는것을 기억. 단, 시그니처를 확인하면 변조되었는지 체크 가능

• 토큰을 사용하여 API의 오남용을 막음. 요청 헤더에 토큰이 있는지를 항상 확인하는것이 좋음

• app.use외에도 router.use를 활용하여 라우터 간에 공통되는 로직 처리 가능

• cors나 passport.authenticate처럼 미들웨어 내에서 미들웨어를 실행 할 수 있음. 미들웨어를 선택적으로 적용하거나 커스터마이징할 때 이 기법 사용

• 브라우저와 서버의 도메인이 다르면 요청이 거절된다는 특성(CORS)을 이해. 서버와 서버 간의 요청에서는 CORS문제가 발생하지 않음.


참 조 : Node.js 교과서(개정 2판)

728x90