삶 가운데 남긴 기록 AACII.TISTORY.COM
스프링 부트 웹 애플리케이션에서 카카오 로그인 처리 본문
카카오 로그인 설정
우선 카카오 계정이 필요합니다.
카카오 로그인 준비를 위해서 카카오 디벨로퍼 사이트에 가서 로그인 합니다.(카카오 계정으로 로그인 됩니다.)
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해 보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
로그인 한 뒤 상단에 앱 메뉴를 누르고 + 앱 생성 버튼을 클릭합니다.
필수 입력 정보를 입력한 뒤 저장 버튼을 누르면 앱이 추가됩니다.
방금 추가한 앱을 눌러보면 좌측에 메뉴가 나오는데
앱 > 플랫폼 키 메뉴로 들어갑니다.
이 중 REST API키는 따로 보관해둡니다.
REST API키 항목 근처에 클라이언트 시크릿 버튼을 누릅니다.
카카오 로그인 리다이렉트 URI를 설정해줍니다.
예) http://localhost:8080/login/oauth2/code/kakao
필요한 정보를 입력하고 카카오 로그인 클라이언트 시크릿 코드를 따로 보관해 둡니다.
다시 좌측 메뉴에서
제품 설정 > 카카오 로그인 > 일반 메뉴로 들어갑니다.
카카오 로그인의 사용여부를 ON으로 바꿉니다.
제품설정 > 카카오 로그인 > 고급 메뉴로 들어갑니다.
로그아웃 리다이렉트 URI를 등록합니다.
제품설정 > 카카오 로그인 > 동의항목 메뉴로 들어갑니다.
여기에서 개인 정보 항목에서 닉네임 항목의 설정 버튼을 누르고 동의 설정을 합니다.
이때 닉네임 항목의 ID 값이 보통 profile_nickname 인데 이 것은 아래에서 application.properties에서 사용합니다.
build.gradle
스프링 시큐리티와 OAuth2 클라이언트가 필요합니다.
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
OAuth2
대부분의 소셜 로그인은 OAuth2 방식으로 처리합니다.
OAuth2는 문자열 토큰을 주고 받는 방식으로 토큰을 발행하거나 검사하는 방식을 통해서 서비스 간 데이터를 교환합니다.
OAuth2는 기존 OAuth 보다 단순해진 형태로 통신합니다.
1. 애플리케이션이 /oauth/authorize 로부터 위에서 받은 REST API키를 통해 인가 코드를 받습니다.
2. 인가 코드는 위에서 리다이렉트 URI로 저장한 곳으로 전달됩니다. 스프링 부트의 OAuth2 client를 사용하는 경우 리다이렉트 URI는 정해진 패턴을 사용합니다. 이 인가 코드는 https://kauth.kakao.com/oauth/token 에서 자신의 비밀키(클라이언트 시크릿)와 같이 사용되어 엑세스 토큰을 생성할 때 사용됩니다. 엑세스 토큰이 외부에 탈취당하면 위험하기 때문에 유효기간을 짧게 설정합니다.
3. 애플리케이션이 카카오로부터 엑세스 토큰을 받으면 https://kapi.kakao.com/v2/user/me 으로 사용자 정보를 요청합니다. 이때 사용자가 동의했던 정보(이메일)들을 얻어옵니다.
application.properties
스프링 부트의 application.properties에 다음과 같은 설정들을 추가해줍니다.
spring.security.oauth2.client.provider.kakao.authorization-uri=https://kauth.kakao.com/oauth/authorize
spring.security.oauth2.client.provider.kakao.user-name-attribute=id
spring.security.oauth2.client.provider.kakao.token-uri=https://kauth.kakao.com/oauth/token
spring.security.oauth2.client.provider.kakao.user-info-uri=https://kapi.kakao.com/v2/user/me
spring.security.oauth2.client.registration.kakao.client-name=kakao
spring.security.oauth2.client.registration.kakao.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.kakao.redirect-uri=등록했던 로그인 리다이렉트 주소
spring.security.oauth2.client.registration.kakao.client-id=발급받은 REST 키
spring.security.oauth2.client.registration.kakao.client-secret=발급받은 클라이언트 시크릿 키
spring.security.oauth2.client.registration.kakao.client-authentication-method=client_secret_post
spring.security.oauth2.client.registration.kakao.scope=profile_nickname
발급 받은 키들은 유출되지 않도록 잘 관리해야 합니다.
여기서 scope 항목은 카카오에서 카카오 로그인 > 동의항목 메뉴의 개인정보에 적혀있던 동의 항목들의 ID 값들을 콤마를 구분자로 적어줍니다. (예: 닉네임은 profile_nickname)
아래 사진 윗부분 추가 기능 신청에서 사업자 정보를 등을 제공하면 카카오계정(이메일) 주소등도 설정해서 활용할 수 있습니다.

위 동의항목의 개인정보 항목의 ID 값들 중에서 설정 버튼으로 동의하지 않은 ID 값을
spring.security.oauth2.client.registration.kakao.scope=동의한ID값1,동의한ID값2,동의한ID값3
값에 적으면 로그인 시 에러가 발생합니다.
커스텀된 시큐리티 설정
스프링 시큐리티 설정 파일이 CustomSecurityConfig.java 라고 가정하면 여기에 oauth2Login()을 추가합니다.
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
... 생략
http.oauth2Login(oauth2 -> oauth2.loginPage("/커스텀된로그인페이지주소"));
return http.build();
}
그 다음 로그인 페이지에 링크를 추가합니다.
이 링크는 OAuth2 Client 가 자동으로 생성되는 링크입니다.
<div>
<a href="/oauth2/authorization/kakao">KAKAO 로그인</a>
</div>
CustomOauth2UserService 클래스 생성
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.security.oauth2.client.registration.ClientRegistration;
import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService;
import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest;
import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.stereotype.Service;
import java.util.Map;
@Log4j2
@Service
@RequiredArgsConstructor
public class CustomOAuth2UserService extends DefaultOAuth2UserService {
@Override
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException{
ClientRegistration clientRegistration = userRequest.getClientRegistration();
String clientName = clientRegistration.getClientName();
log.info("[clientName]" + clientName);
OAuth2User oAuth2User = super.loadUser(userRequest);
Map<String, Object> paramMap = oAuth2User.getAttributes();
paramMap.forEach((key, value) -> {
log.info("-------------------------------------------");
log.info("key: " + key + " value: " + value);
});
Object properties = paramMap.get("properties");
LinkedHashMap propertiesMap = (LinkedHashMap) properties;
String nickname = (String) propertiesMap.get("nickname");
log.info("[nickname]" + nickname);
return oAuth2User;
}
}
이제 이 카카오(소셜) 로그인 인증 정보를 활용해서 서비스에서 이용하면 됩니다.

'DEV&OPS > Java' 카테고리의 다른 글
| JPA 연관 관계 (0) | 2026.07.11 |
|---|---|
| 인텔리제이 주석 템플릿 설정 (0) | 2026.07.06 |
| FreeMarker 설정과 기본 사용법 (0) | 2026.07.06 |
| spring mvc / jsp 페이징 처리 (0) | 2025.11.07 |
| Spring MVC 다국어 처리 (0) | 2025.11.05 |
