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

정보 입력 후 앱 등록



@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을 허용해둬야한다.
