사이드 프로젝트에 구글 로그인 붙이는 중인데 OAuth 2.0 문서 읽다가 개념이 헷갈려서 질문 올립니다.


예전에는 그냥 "구글 계정으로 로그인" 누르면 우리 서비스가 어딘가에서 그 사람 구글 아이디/비번을 받아서 대신 확인하는 건 줄 알았어요. 근데 그게 아니라 우리 앱은 사용자 비밀번호를 아예 못 본다고 하더라고요. 그럼 대체 어떻게 "이 사람이 진짜 이 구글 계정 주인이다"를 우리가 믿을 수 있는 거죠?


문서에 나온 흐름을 제 나름대로 적어보면 이런데, 중간중간이 비어요.


1. 사용자를 구글 로그인 페이지로 보냄 (로그인은 구글에서 함, 우리 앱은 비번 안 봄)
2. 성공하면 구글이 우리한테 임시 code를 줌
3. 우리 백엔드가 그 code를 access token으로 교환
4. 그 토큰으로 허용된 정보만 가져옴 (이름, 이메일 정도)


궁금한 건, 2번에서 그냥 토큰을 바로 주면 되지 왜 code를 한 번 거쳐서 다시 토큰으로 바꾸는 귀찮은 단계가 있는 건가요? 뭔가 보안상 이유가 있을 것 같은데 감이 안 와요. 그리고 scope라는 것도 나오던데 이게 "허용된 자원만"이랑 관련된 개념 맞나요? 토큰 만료도 그렇고요. 이 위임 인가라는 게 왜 표준으로 자리잡았는지 큰 그림으로 좀 알려주세요.