
이번에는 기존 JWT 로그인 방식에 더해,
소셜 로그인(Google, Kakao) 기능을 추가해보았습니다.
위 두 사이트에서 애플리케이션을 등록하고, Client ID/Secret 발급을 받아
application.properties에 등록해주었습니다.
📄 참고한 글:
필요한 의존성도 추가 완료:


Spring Security는 보안의 모든 것을 대신 처리해주는 보안 프레임워크입니다.
이 모든 걸 개발자가 직접 구현하지 않고도 처리할 수 있게 해주는 강력한 도구입니다.
처음엔 JWT만 사용했기 때문에 로그인 로직도 수동으로 구현했었습니다.
하지만 소셜 로그인을 적용하려다 보니 인증 흐름이 더 복잡해졌고,
이제는 Spring Security의 OAuth2 흐름에 따라 처리하게 되었습니다.
"소셜 로그인 사용자 인증은 Security가 처리,
기존 JWT 방식은 내 커스텀 필터가 처리"
두 방식이 공존하는 구조입니다.
소셜 로그인 성공 시, 구글/카카오에서 사용자 정보를 JSON으로 넘겨줍니다.
하지만 이 정보는 우리 서비스에서 사용하는 MemberEntity 형태와 다르기 때문에
중간 가공 과정이 필요합니다.
그래서 등장한 것이 바로...

OAuth2UserService를 상속받아 만든 커스텀 클래스입니다.
소셜 사용자 정보를 우리가 원하는 형식으로 변환하고
DB에 저장하거나 기존 회원과 연결하는 역할을 합니다.
OAuth2User 객체 생성하여 반환if (optionalMember.isEmpty()) {
MemberDTO dto = new MemberDTO();
dto.setMemberEmail(email);
dto.setMemberName(name);
dto.setMemberPassword(UUID.randomUUID().toString()); // 임시 비밀번호
MemberEntity newMember = MemberEntity.toMemberEntity(dto);
memberRepository.save(newMember);
}
이렇게 하면 구글/카카오로 로그인한 사용자도
자동으로 회원가입 → 로그인 → 글 작성까지 가능해집니다.
구글 로그인 성공 화면 👇


DB에도 정상적으로 저장됨 👇

글 작성까지 문제없이 완료 👇

과제는 구글 로그인만 구현하는 것이었지만,
현재 진행 중인 프로젝트에서 구글과 카카오 로그인을 함께 적용한 경험이 있어서
이번 과제를 비교적 수월하게 진행할 수 있었습니다.
다만, 기존의 JWT 방식 로그인 흐름에 소셜 로그인 로직을 자연스럽게 녹여 넣는 과정은 쉽지 않았고,
두 방식이 충돌하지 않도록 보안 필터를 따로 분리하고 조율하는 데 많은 고민이 필요했습니다.
그리고 문득, 두 달 전 스터디 초반에
Spring Boot로 CRUD 게시판 하나 만드느라 하루 종일 붙잡고 있었던 기억이 떠올랐습니다.
이제는 소셜 로그인까지 붙이고 DB 연동도 직접 설계하고 있는 걸 보니,
확실히 성장했다는 걸 새삼 느낍니다. 💪
카카오톡 로그인 기능은 아직 구현해보지 않았는데 해봐야겠어요 네이버 로그인 기능도 구현해보면 좋을 것 같아요!