항해99 코딩 부트캠프를 시작하고 그야말로 폭풍과 같던 1주일이 지났다. 아직은 많은 것이 부족한 자신이기에 모자란 지식을 총동원하여 지낸 1주일은 '더 잘할 수 있었을텐데'의 향연이었던 것 같다. 그리고 고작 1주일이 지났을 뿐인데, 너무나 많은 일들이 몰아쳐서 마치 몇 주는 금새 지나간 기분도 든다. 하지만, 이 시간이 지나면 분명 더 발전한 나 자신과 마주하리라 믿고 1주차 WIL을 작성해보고자 한다.
JWT (Json Web Token)
▶JWT는 세션/쿠키와 함께 모바일과 웹의 인증을 책임지는 대표주자로서, 인증에 필요한 정보들을 암호화시킨 토큰.
▶사용자는 Access Token(JWT 토큰)을 HTTP 헤더에 실어 서버로 보냄.
토큰을 만들기 위해 필요한 3가지!
- Header : Header, Payload, Verify Signature의 정보를 암호화할 방식(alg), 타입(type) 등이 들어감.
- Payload : 서버에서 보낼 데이터가 들어가며, 일반적으로 유저의 고유 ID값, 유효기간이 들어감.
- Verify Signature : Base64 방식으로 인코딩한 Header,payload 그리고 SECRET KEY를 더한 후 서명됨.
JWT가 인증에 사용되는 방식
세션/쿠키 방식과 가장 큰 차이점과 장단점
▶세션/쿠키는 세션 저장소에 유저의 정보를 넣는 반면, JWT는 토큰 안에 유저의 정보들을 넣는다는 점이 큰 차이!
(장점)
- 간편함. 세션/쿠키는 별도의 저장소의 관리가 필요하나, JWT는 발급한 후 검증만 하면 되기 때문에 추가 저장소가 필요없고 이는 Stateless 한 서버를 만드는 입장에서는 큰 강점이 될 수 있음. 여기서 Stateless는 어떠한 별도의 저장소도 사용하지 않는, 즉 상태를 저장하지 않는 것을 의미하며, 이는 서버를 확장하거나 유지,보수하는데 유리함.
- 확장성이 뛰어남. 즉, 토큰을 기반으로 하는 다른 인증 시스템에 접근이 가능함. 예를 들어 Facebook 로그인, Google 로그인 등은 모두 토큰을 기반으로 인증을 하며, 선택적으로 이름이나 이메일 등을 받을 수 있는 권한도 받을 수 있음.
(단점)
- 이미 발급된 JWT에 대해서는 돌이킬 수 없음. 세션/쿠키의 경우 만일 쿠키가 악의적으로 이용된다면 해당하는 세션을 지워버리면 되지만, JWT는 한 번 발급되면 유효기간이 완료될 때 까지는 계속 사용이 가능함. 따라서 악의적인 사용자는 유효기간이 지나기 전까지 신나게 정보들을 털어갈 수 있음.
- Payload 정보가 제한적임. 위에서 언급했다시피 Payload는 따로 암호화되지 않기 때문에 디코딩하면 누구나 정보를 확인할 수 있고, 따라서 유저의 중요한 정보들은 Payload에 넣을 수 없음. (세션/쿠키 방식에서는 유저의 정보가 전부 서버의 저장소에 안전하게 보관됨)
- JWT의 길이. 세션/쿠키 방식에 비해 JWT의 길이는 김. 따라서 인증이 필요한 요청이 많아질 수록 서버의 자원낭비가 발생하게 됨.
API (Application Programming Interface)
▶ API는 애플리케이션 소프트웨어를 구축하고 통합하기 위한 정의 및 프로토콜 세트
API 쉽게 이해하기
▶ API는 손님(프로그램)이 주문할 수 있게 메뉴(명령 목록)를 정리하고, 주문(명령)을 받으면 요리사(응용프로그램)와 상호작용하여 요청된 메뉴(명령에 대한 값)를 전달.
▶ 쉽게 말해, API는 프로그램들이 서로 상호작용하는 것을 도와주는 매개체.
API의 역할
- API는 서버와 데이터베이스에 대한 출입구 역할을 하며, 데이터베이스에 저장된 민감한 정보들을 보호하기 위해 허용된 사람들에게만 접근성을 부여함.
- API는 애플리케이션과 기기가 원활하게 통신할 수 있도록 하며, 여기서 애플리케이션이란 우리가 흔히 알고 있는 스마트폰 어플이나 프로그램을 말함.
- API는 모든 접속을 표준화하기 때문에 기계/ 운영체제 등과 상관없이 누구나 동일한 액세스를 얻을 수 있음. 즉, API는 범용 플러그처럼 작동함.
API의 유형
- private API : 내부 API로, 회사 개발자가 자체 제품과 서비스를 개선하기 위해 내부적으로 발행하며 제 3자에게 노출되지 않음.
- public API : 개방형 API로, 모두에게 공개되며 누구나 제한 없이 API를 사용할 수 있는 것이 특징임.
- partner API : 기업이 데이터 공유에 동의하는 특정인들만 사용할 수 있음. 비즈니스 관계에서 사용되는 편이며, 종종 파트너 회사 간에 소프트웨어를 통합하기 위해 사용됨.
API의 장점
▶ Private API를 이용할 경우, 개발자들이 애플리케이션 코드를 작성하는 방법을 표준화함으로써 간소화되고 빠른 프로세스 처리를 가능하게 함. 또한, 소프트 웨어를 통합하고자 할 때는 개발자들 간의 협업을 용이하게 만들어줄 수도 있음.
▶ public API와 partner API 를 사용하면, 기업은 타사 데이터를 활용하여 브랜드 인지도를 높일 수 있으며 고객 데이터베이스를 확장하여 전환율까지 높일 수 있음.