Github Oauth2.0 구현 자체는 이전의 블로그 포스팅을 참고하자!
전체적인 플로우는 아래 이미지와 같다

Github에서 해당 유저가 아래 이미지처럼 이메일을 public으로 풀어두지 않으면 OAuth 정보를 받아올 때 null 값으로 들어온다

나는 인터페이스를 통해 다양한 OAuth 정보를 관리하고 있었기 때문에 이를 따로 설정해주는 것이 중요하다
만약 유저의 정보가 넘어올 때, 이메일이 null인 경우에 처리해주는 메서드를 꼭 넣어주자
//깃허브 이메일 처리 (GitHub 이메일이 null일 경우 처리)
String email = attributes.get("email");
if (email == null) {
Long githubId = (Long) attributes.get("id");
email = githubId + "@github.com"; // 고유 ID 기반 이메일 생성
}
유저의 깃허브에 접근하려면 깃헙에서 발급해주는 accessToken이 반드시 필요하다.
근데 이를 날 것 그대로 DB에 저장하면 보안상의 문제가 생길 수 있다,,,
➡ 반드시 암호화를 통해 저장하자
: 암호화는 중요한 데이터를 권한이 없는 사람이 읽을 수 없도록 정보를 잠그는 과정입니다.
정보보안의 3요소에는 기밀성 무결성 가용성이 있다
: 데이터를 암호화하고 복호화(원상복귀)할 때 동일한 하나의 '비밀키'를 사용하는 방식
작동 방식
1. A가 '비밀키'로 데이터를 암호화합니다.
2. 암호화된 데이터를 B에게 전달합니다.
3. B는 A와 미리 공유했던 똑같은 '비밀키'로 데이터를 복호화하여 원본을 확인합니다.
장점
: 암호화 및 복호화 속도가 매우 빠르다
단점
:'키 배송 문제'를 고려해야함
만약 키가 중간에 탈취되면 암호는 무용지물이 된다,,,,,,
대표적인 예
AES, DES, ARIA
: 서로 다른 두 개의 키가 한 쌍으로 동작하는 방식
하나는 모두에게 공개해도 되는 '공개키(Public Key)'
다른 하나는 자신만 안전하게 보관해야 하는 '개인키(Private Key)'
장점
: 키를 안전하게 배송해야 하는 문제가 해결!
공개키는 유출되어도 상관없ㅋㅋ
단점
: 대칭키 방식에 비해 암호화 및 복호화 속도가 현저히 느림
대표적인 예
RSA, ECC
이 질문에 답하려면 "암호화(Encryption)"와 "해싱(Hashing)"의 차이를 이해하는 것이 중요하다!
결론적으로, "원래 값을 복원할 필요가 있을 때"는 반드시 키를 통해 복호화가 가능한 양방향 방식인 AES와 같은
암호화 알고리즘을 사용해야 합니다. 만약 복원이 필요 없고 데이터의 동일성만 확인하면 된다면 해싱을
사용합니다.