728x90
Axios가 뭐야?
Axios는 REST API랑 통신할 때 쓰는 라이브러리야.
쉽게 말해서 클라이언트(프론트엔드)가 서버로 데이터를 보내거나 받을 때 쓰는 도구지.
기본적으로 HTTP 요청을 보내는 데 쓰이는 함수 모음집이라고 보면 돼.
"야 서버야! 나 이거 좀 줘!" 혹은 "야 서버야! 이거 좀 저장해!" 같은 걸 쉽게 할 수 있게 해주는 거야.
REST API가 뭐야?
REST API는 서버랑 클라이언트가 데이터를 주고받는 규칙이야.
서버는 데이터를 주고받을 때 상태를 기억하지 않아서 무상태성을 가지지.
"한 번 요청하고 끝! 다음 요청 올 때는 몰라~"
이게 바로 무상태성이라는 건데,
그래서 매번 서버한테 "나 진짜 맞아, 이거 내가 요청하는 거야!"라고 증명해야 돼.
그걸 하기 위해서 JWT 토큰을 쓰는 거야.
근데 그 전에, 왜 JWT토근을 쓰는걸까?
HTTP의 특성을 알면, 이유를 알 수가 있어.
💡 HTTP의 2가지 특성 Stateless, Connectionless
1. 무상태성 (Stateless)
- HTTP는 무상태성을 가지는 프로토콜이야.
- 이게 무슨 말이냐면, 서버가 클라이언트의 상태를 기억하지 않는다는 거야.
- 매번 요청할 때마다 처음 보는 사람처럼 대해야 해.
- 예를 들어, 로그인을 한 상태라고 해서 다음 요청에서도 "이 사람은 로그인 상태다"를 기억하지 못함.
🚀 비유하자면?
네가 편의점에 들어갈 때마다 직원이 널 처음 보는 사람처럼 대하는 거야.
"어? 너 누군데 여기 들어왔어? 신분증 보여줘!" 이런 식이지.
2. 연결 끊김 (Connectionless)
- HTTP 요청과 응답이 끝나면 연결이 바로 끊겨.
- 한 번의 통신이 끝나면 그걸로 끝!
- 이후 요청이 다시 오면 새로운 연결로 취급함.
🤔 그러면 문제가 뭐야?
- 클라이언트가 서버에 로그인 요청을 해서 인증이 완료되었다고 하자.
- 그다음에 다른 페이지로 이동해서 서버에 또 요청을 보내면,
- 서버는 "어? 넌 누구냐?" 라고 하는 거지.
- 왜냐면 무상태성 때문에 "아까 로그인했었지?"를 기억 못 하거든.
- 로그인 상태를 유지하려면 매번 아이디와 비밀번호를 다시 보내야 함.
- 이게 매우 불편하고 보안에도 위험하지.
여기서 JWT 토큰이 등장!
JWT 토큰은 뭐냐면?
- 인증 정보를 담고 있는 암호화된 문자열이야.
- 로그인할 때 서버가 클라이언트한테 하나 발급해 줌.
- 클라이언트는 이 토큰을 로컬 스토리지나 쿠키에 저장해 두고,
- 매번 요청할 때마다 헤더에 토큰을 넣어서 서버로 보내.
🔑 이렇게 하면 서버는 "오! 이 토큰 맞네!" 하고 바로 인증 처리해줌.
여기서 중간점검 한번 하면
- HTTP는 무상태성이라 로그인 상태를 기억 못 함.
- 그래서 매번 인증 정보(아이디/비번)를 보낼 수는 없잖아?
- 그래서 서버가 JWT 토큰을 발급해주고,
- 클라이언트는 그 토큰을 매번 요청할 때 헤더에 실어서 보냄.
- 서버는 토큰을 확인하고 유효하다면 신원을 확인해서 데이터를 주는 거지.
JWT 토큰의 유효기간 문제
자, 이제 JWT 토큰으로 인증 문제를 해결했어.
근데 여기서 또 다른 문제가 생겨.
JWT 토큰의 유효기간이 짧아야 하는 이유
- 만약 토큰이 유효기간 없이 영원히 사용 가능하다면?
- 누군가 토큰을 탈취하면 평생 사용할 수 있는 위험이 있음.
- 그래서 보통 JWT 토큰은 짧은 유효기간(예: 15분, 30분)을 줘.
- 근데 이러면 또 문제가 뭐냐면...
- 유효기간이 짧아서 로그인 상태가 자주 풀리게 돼!
- 사용자가 "왜 자꾸 로그인 풀리냐고!" 하면서 짜증 낼 수 있음.
그래서 등장하는 게 두 개의 토큰 전략: Access Token과 Refresh Token
- Access Token: 실제로 API를 사용할 때 인증 용도로 쓰는 토큰 (유효기간 짧음)
- Refresh Token: Access Token이 만료됐을 때, 새로운 Access Token을 발급받기 위한 토큰 (유효기간 김)
Access Token과 Refresh Token의 역할
구분 | Access Token | Refresh Token |
용도 | API 호출 시 인증 | 새로운 Access Token을 발급받기 위해 사용 |
유효기간 | 짧음 (몇 분 ~ 몇 시간) | 김 (며칠 ~ 몇 주) |
저장 위치 | 브라우저 메모리 또는 로컬 스토리지 | HttpOnly 쿠키 또는 서버 DB |
탈취 시 위험 | 비교적 적음 (짧은 유효기간) | 매우 큼 (유효기간 길어서) |
728x90
'웹개발 > JavaScript' 카테고리의 다른 글
Promise로 resolve, reject 사용하기 (0) | 2024.11.12 |
---|---|
undefined가 나타나는 세 가지 경우 (0) | 2024.11.12 |
콜백(CallBack)함수 이거 보고도 모르면 바보 (0) | 2024.11.12 |
JavaScript 함수의 호이스팅 (0) | 2024.11.12 |
null의 typeof가 object인 이유 (0) | 2024.11.12 |