깃허브 로그인 구현 (GitHub oAuth)

icebox127·2026년 4월 8일

우리 조 졸업프로젝트는 깃허브를 분석하여 개발자 취준생에게 도움을 주는 서비스 개발이다.
내가 회원가입/로그인 부분을 담당하게 되어 깃허브 로그인 구현을 해보았다.

깃허브 앱 등록

  1. Setting> Developer Setting> OAuth Apps 이동

  2. New OAuth app 선택

  3. 정보 입력 후 앱 등록

  • Application name: 앱 이름
  • Homepage URL: 서비스 url (아직 배포 안 해서 로컬로 등록)
  • Application Description: 앱 설명 (생략함)
  • Authorization callback URl: 인증 완료 후 github 서버가 보낼 콜백 주소
  1. 생성 완료


    이후 과정도 다른 oAuth 소셜로그인 구현과 거의 동일하다

CustomOAuthService

@Service
@RequiredArgsConstructor
public class CustomOAuthService extends DefaultOAuth2UserService {

    private final MemberRepository memberRepository;

    @Override
    public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {

        OAuth2User oAuthMember = super.loadUser(userRequest);
        Map<String, Object> attributes = oAuthMember.getAttributes();

        return saveOrUpdate(attributes);
    }

    private OAuthMember saveOrUpdate(Map<String, Object> attributes) {

        String socialUid = String.valueOf(attributes.get("id"));
        String login = (String) attributes.get("login");
        String profileImage = (String) attributes.get("avatar_url");
        String email = (String) attributes.get("email");

        return memberRepository.findBySocialUid(socialUid)
                .map(existingMember -> {
                    existingMember.updateGithubInfo(login, profileImage, email);
                    memberRepository.save(existingMember);
                    return new OAuthMember(existingMember, false);
                })
                .orElseGet(() -> {
                    Member newMember = Member.builder()
                            .socialUid(socialUid)
                            .githubId(login)
                            .profileImage(profileImage)
                            .email(email)
                            .build();

                    Member savedMember = memberRepository.save(newMember);
                    return new OAuthMember(savedMember, true);
                });
    }
}

https://docs.github.com/ko/rest/users/users?apiVersion=2026-03-10#get-a-user
해당 링크의 응답 스키마를 참고하여 깃 소셜 id(id)와 프로필 사진(avatar_url)과 깃 아이디(login), 이메일(email)을 받아왔다.
참고로, email은 사용자가 비공개 설정해두면 받을 수 없어, nullable을 허용해둬야한다.

참고자료

https://dev-watnu.tistory.com/58

profile
감자의 공부기록🥔

0개의 댓글