정신없이 지나간 한주였다.
항해 필수 키워드 먼저!
키워드 JWT, API
쉽게 말하면 보안을 위해 주고 받는 제한된 형태의 데이터를 형식화 한 것이다.
JWS, JWE, JWK... 모두 json 형태로 된 웹에서 쓰는 토큰들이다. 인증을 위해 쓰는 JSON 형태로 된 토큰이라는 큰 개념을 JWT라고 하고 그 하위개념으로 실제로 사용하는 분야에 따라 JW~ 용어들이 있다.
그러니까 우리가 JWT 기능을 프로젝트에 넣는다고 하면 실제로는 JWS와 JWE를 적절히 사용하는 거다.
헤더(Header)
JWT를 '검증'하는데 필요한 정보를 가진 JSON객체.
입장키라고도 볼 수 있겠다.
JSON객체를 만든 다음 UTF-8 + Base64URLSafe로 인코딩하면 헤더를 생성할 수 있다. 라이브러리를 이용하면 편리하다.
페이로드(Payload)
제이슨 웹 토큰의 실제 컨텐츠. 페이로드에 있는 속성들을 Claim Set이라고 부른다. 토큰생성자의 이름이나 권한등의 정보, 토큰생성일시, 기타 미리 정의된 값들이 들어간다. Base64URLSafe로 인코딩 -> 암호화된다.
서명(Signature)
헤더와 페이로드는 인코딩된 다음 온점(.)을 구분자로 하여 한줄로 합쳐지는데 이때 헤더에 정의되어 있던 입장키를 이용하여 한번 더 덮어씌워주는데 이게 서명.
직접 만들 수도 있지만 JWT 관련 라이브러리가 잘 되어 있는게 많다! 서버와 클라이언트 간의 흐름을 파악하고 API를 잘 짜주면 되겠다.
Application Programming Interface
API는 사실 추상적인 개념이다.
개발자와 컴퓨터 간에 어떤 작업을 해야 한다고 했을 때, 메모리 주소 하나하나들에 접근해서 작업하기는 무척 힘드니까 중간에 플러그인을 하나 만들어서 low레벨의 작업들은 자동화시키자! 라는 의미의 개념이다.
내가 제작하는 API는 프라이빗 API. 내 서버에서만 쓰이고, 나의 코드나 라이브러리간 소통을 위해 쓰이는 것이다. 다른 사람과 공유되지 않는다.
open API는 개발자들이 자사 제품을 사용할 수 있게 기업이나 단체가 제작하여 배포하는 API! 단순히 데이터를 요청하는 API(REST API)에서부터, 그 제품과 실시간 상호작용을 할 수 있게 도와주는 API까지 다양하다.
악의적인, 무분별한 사용을 막기 위해 API키를 발급받아야 사용할 수 있는 경우가 많다.
REST API는 네트워크에서 REST를 준수하여 'JSON 또는 XML로 된 데이터 묶음'만을 받아오는 웹 API를 의미한다. 단순 데이터 열람시에 사용할 수 있는 API이고 http에 최적화 되어있다.
RESTfulAPI는 REST를 아주 잘 준수하는 API를 말한다. 요즈음은 완벽하게는 아니더라도 거의 모든 API가 REST를 따르고 있기에 API = REST API라고 칭하는 사람도 적지 않다.