오늘은 한 주를 마무리하며 JWT / API 에 대해 공부해보았다. 😊
먼저 JWT를 알기 위해선 COOKIE와 SESSION에 대해 알 필요가 있다( ̄︶ ̄)↗
CLIENT <==> SERVER INTERFACING (FIRST)
- CLIENT ==> SERVER (REQUEST)
- CLIENT <== SERVER (RESPONSE with COOKIE)
CLIENT <==> SERVER INTERFACING (AFTER FIRST)
- CLIENT ==> SERVER (REQUEST with COOKIE)
- CLIENT <== SERVER (RESPONSE)
이렇게 SERVER는 CLIENT의 COOKIE를 받음으로써 CLIENT의 정보를 받아 바로바로 CLIENT가 원하는(이전에 설정했던) 정보들을 RESPONSE한다.
EX) 유튜브에서 발급된 COOKIE는 유튜브 DOMAIN으로만 전송된다.
COOKIE는 SERVER에서 정한 유효 기간이 존재하고 해당 유효기간이 만료될 때 까지 유효하다.
EX) 도메인 언어설정
- CLIENT ==> SERVER (REQUEST about language: Korean)
- CLIENT <== SERVER (RESPONSE with COOKIE(INFO includes language info)
그 후,
- CLIENT ==> SERVER (REQUEST with COOKIE(INFO includes language info)
- CLIENT <== SERVER (RESPONSE)
SESSION에 대해 알기 위해서
웹 사이트를 이용할 때 쓰는 PROTOCOL ==> HTTP에 대해 먼저 알아야한다.
STATELESS 란??
- SERVER로 가는 모든 REQUEST들이 이전 REQUEST와 독립적으로 다뤄진다.
- REQUEST들 끼리 CONNECTION이 없다 ==> NO MEMORY
- REQUEST DONE, SERVER forgets YOU
===> 즉, CLIENT는 REQUEST를 보낼 때 마다 스스로를 증명해야 한다.
이러한 부분에 대한 SOLUTION 들이 바로 SESSION🎁 과 TOKEN📀 이다
( ̄︶ ̄)↗
두 줄 요약
- 중요한 CLIENT INFO는 모두 DB에 저장되어 있다.
- CLIENT가 갖고 있는 건 ONLY SESSION ID
CLIENT <==> SERVER INTERFACING (FIRST)
- CLIENT ==> SERVER (REQUEST with username/password)
- SERVER checks your request
IF REQUEST IS TRUE ==> SAVE in SESSION DB
SESSION DB에는 별도의 SESSION ID가 존재
- CLIENT <== SERVER (RESPONSE with COOKIE contains SESSION ID)
CLIENT <==> SERVER INTERFACING (AFTER FIRST)
- CLIENT ==> SERVER (REQUEST with COOKIE)
- SERVER checks your request
IF REQUEST IS TRUE ==> FIND WHO YOU ARE with SESSION ID
COOKIE에 있는 SESSION ID가 유효하다면
- CLIENT <== SERVER (WELCOME CLIENT)
이렇듯 SESSION 방식에서는 매번 요청마다 위 프로세스를 반복해야 한다.
여기서는 COOKIE를 활용한 SESSION 방식을 설명했다.
그런데 COOKIE는 웹 환경에서만 동작한다.
모바일에서 작동하는 COOKIE NATIVE 같은 건 없다
===> 이러한 이유 때문에 생겨난 게 바로 TOKEN📀 이다 ( ̄︶ ̄)↗
왜일까?? 아래 예시를 보자😉
CLIENT <==> SERVER INTERFACING (FIRST)
- CLIENT ==> SERVER (REQUEST with username/password)
- SERVER sign in to INFORMATION
SAVE in TOKEN
(서버에서 유저를 인증하는데 필요한 정보를 저장)
- CLIENT <== SERVER (RESPONSE with TOKEN)
CLIENT <==> SERVER INTERFACING (AFTER FIRST)
- CLIENT ==> SERVER (REQUEST with TOKEN)
- SERVER
JUST VERIFY TOKEN
- CLIENT <== SERVER (RESPONSE)
이렇 듯 JWT 인증 절차는 매우 간편하다
하지만
JWT가 킹왕짱인 것은 아니다.🤣
유명한 서비스 들에서 어떻게 쓰는지 볼까??
- 인스타그램
1) 로그인 된 모든 디바이스들을 보여준다
2) 원하지 않는 디바이스를 강제 로그아웃할 수 있다.- Netflix
1) 계정 공유 숫자를 제한한다.
==> SERVER가 누가 로그인했는지 TRACKING / SAVING
==> HAVE SESSION DB
유명한 서비스 들에서 어떻게 쓰는지 볼까??
- 코로나 QR 인증 코드
API라는 개념은 설명하는 사람에 따라 여러 방식으로 비유되곤 한다
공통점이 있다
즉 CLIENT는 데이터를 요청하기 위해서는 API가 정한 규칙에 따라 REQUEST를 해야한 다는 것이다. ( ̄︶ ̄)↗
1. 요청 방식(METHOD)
- GET (읽어 오기)
- POST (저장 하기)
- PUT (주로 수정하기)
- DELETE (삭제하기)
- 어떤 자료(ENDPOINT)
- 파라미터(PARAMETER)
- 추가적인 정보들( ID / USERNAME / DETAILS ... )
- ? 뒤에 작성됨
https://github.com/zerovodka?tab=repositories
이 주소를 보면,
ENDPOINT
com/zerovodka
PARAMETER
?tab=repositories
로 주소창에 넣고 ENTER ( GET 요청 ) 하면 API 사용한 거다 😁
NOPE 절대 아닙니다 ❌
이렇게 유용한 API들은 이미 상품으로서 가치를 나타내고 있다 ( ̄︶ ̄)↗
팀 미니프로젝트를 진행하면서, 팀원들과 하나의 프로젝트를 완성해나가기 위해 4일을 몰입해 공부하고 코딩하고 회의하고 협업해나가면서 역시 개발자는 서로의 프로젝트 진행 상태, 공부된 내용부터 세세하게는 오늘의 컨디션까지 하나하나 TMI 처럼 공유하는게 정말 중요하구나 라는 것을 깨달았다.
그렇게 4일 동안 밤새가며 프로젝트를 완성하고 배포단계까지 밟아 나가면서 스스로가 뿌듯하기도 하고 팀원들과 정도 많이 들었다.
팀 미니프로젝트 완료 후, JS를 이용한 알고리즘 문제풀이를 진행하였고 알고리즘 문제를 풀어나가면서 JS 내장 객체 메서드와 내장 함수들을 배워나가는 중이다.
코딩이 재밌어지고 있다
다시 한 주를 시작하면서 좋은 기억들을 안고 가는 것 같아 기분이 좋다 ╰(°▽°)╯
"코딩이 재밌어지고 있다" 아 뭔가 감동적이네요... 찡했어요. 멋지세요!!!