OAuth란?
인증을 중개해주는 매커니즘으로, 보안된 리소스에 액세스 하기 위해 클라이언트에게 제공하는 프로세스를 단순화하는 프로토콜이다.
다른 인터넷 서비스의 기능을 다른 어플리케이션에서도 사용할 수 있게 해준다.
OAuth는 인증(Authentication)과 인가(Authorization)를 모두 포함하고 있다. 그중 OAuth는 인가에 좀 더 초점을 맞추고 있다.

프론트엔드 역할
- OAuth 서버로 github 로그인 요청 후, Authorization code 발급 받아, 백엔드에 전달
- 백엔드에서 응답 받은 access token, refresh token 저장해두기
- 권한이 필요한 요청마다 Authorization 헤더에 access token 같이 보내주기
- access token이 만료되었다면, refresh token 보내서 갱신하기(프론트에서 요청 날릴 때 access token이 만료됨을 미리 판별하여 갱신 요청을 보낼 수 있음)
- refresh token 만료 기간이 7일 이내면, refresh token 재발급 요청
백엔드 역할
- Authorization code로 github OAuth 서버에 토큰 요청
- (로그인 할 때 이외에 OAuth 서버와 통신이 필요한 경우 발급 받은 토큰 저장해야 할듯)
- Access token으로 이름, 이메일, 프로필 URL 정보 요청
- db에 존재하지 않는 유저라면, 새로 등록. db에 존재하는 유저라면 정보 업데이트
- 유저의 primary key 값으로 JWT 토큰(access token & refresh token) 생성. 일반적으로 access token은 한 시간, refresh token은 2주로 생성(본인 애플리케이션에 맞게 변경하여 사용)
- refresh token은 DB나 Redis에 저장
- 유저 정보, access token, refresh token 프론트로 전달
- access token 만료시 refresh token 검증 후, 재발급
reference
https://velog.io/@max9106/OAuth