본문 바로가기

SpringBoot from Laravel

Spring Boot vs Laravel: OAuth2 소셜 로그인 (Google, Facebook, Kakao) 구현

반응형

 

OAuth2는 소셜 로그인(Google, Facebook, Kakao 등) 을 구현하는 표준 프로토콜입니다.

Spring Boot와 Laravel 모두 OAuth2를 지원하지만, 구현 방식이 다릅니다.

 

이번 글에서는 Spring Boot와 Laravel에서 OAuth2 소셜 로그인을 구현하는 방법을 비교합니다.

 

✅ 1. OAuth2 인증 개념 비교

✅ 2. Google 로그인 구현: Laravel Socialite vs Spring Security OAuth2

✅ 3. Kakao & Facebook 로그인 구현 차이점

✅ 4. Access Token 활용 & 사용자 정보 저장

1️⃣ OAuth2 인증 개념 비교: Spring Boot vs Laravel

 

비교 항목 Laravel (PHP) Spring Boot (Java)
OAuth2 라이브러리 Laravel Socialite spring-boot-starter-oauth2-client
소셜 로그인 방식 Redirect 방식 (OAuth Provider로 이동) Spring Security 내장 지원 (Redirect & REST API)
Access Token 저장 방식 세션 또는 데이터베이스 Security Context 또는 DB 저장
권한(Role) 적용 미들웨어(auth:api) @PreAuthorize 사용

✅ Laravel은 Laravel Socialite, Spring Boot는 Spring Security OAuth2 Client를 사용하여 소셜 로그인을 구현

2️⃣ Google 로그인 구현: Laravel vs Spring Boot

 

🔹 Laravel에서 Google 로그인 (Laravel Socialite 사용)

 

(1) Laravel Socialite 패키지 설치

composer require laravel/socialite

(2) .env에 Google OAuth 설정 추가

GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
GOOGLE_REDIRECT_URI=https://yourdomain.com/auth/google/callback

(3) config/services.php에 설정 추가

'google' => [
    'client_id' => env('GOOGLE_CLIENT_ID'),
    'client_secret' => env('GOOGLE_CLIENT_SECRET'),
    'redirect' => env('GOOGLE_REDIRECT_URI'),
],

(4) Google 로그인 컨트롤러 구현

use Laravel\Socialite\Facades\Socialite;

class AuthController extends Controller {
    public function redirectToGoogle() {
        return Socialite::driver('google')->redirect();
    }

    public function handleGoogleCallback() {
        $user = Socialite::driver('google')->user();
        return response()->json($user);
    }
}

✅ Laravel에서는 Socialite::driver('google')를 사용하여 Google 로그인 요청 & 응답을 처리

🔹 Spring Boot에서 Google 로그인 (spring-boot-starter-oauth2-client 사용)

 

(1) OAuth2 Client 라이브러리 추가 (pom.xml)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>

(2) application.yml에 Google OAuth 설정 추가

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-id: your-google-client-id
            client-secret: your-google-client-secret
            scope: profile, email

(3) Security 설정 (SecurityConfig.java)

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .antMatchers("/", "/login**").permitAll()
            .anyRequest().authenticated()
            .and()
            .oauth2Login(); // OAuth2 소셜 로그인 활성화
        return http.build();
    }
}

(4) OAuth 로그인 완료 후 사용자 정보 가져오기 (OAuth2UserService.java)

@Service
public class CustomOAuth2UserService implements OAuth2UserService<OAuth2UserRequest, OAuth2User> {

    @Override
    public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
        OAuth2User user = new DefaultOAuth2User(userRequest.getClientRegistration().getProviderDetails().getUserInfoEndpoint());
        return new DefaultOAuth2User(user.getAuthorities(), user.getAttributes(), "name");
    }
}

✅ Spring Boot에서는 spring.security.oauth2.client.registration.google 설정만 하면 자동으로 OAuth2 로그인 지원

📌 Laravel vs Spring Boot: Google 로그인 차이점

비교 항목Laravel (PHP)Spring Boot (Java)

OAuth 라이브러리 Laravel Socialite spring-boot-starter-oauth2-client
소셜 로그인 방식 Redirect 방식 (Socialite::driver()) Spring Security OAuth2 자동 처리
Access Token 저장 $user->token으로 직접 저장 OAuth2UserService에서 자동 처리

✅ Spring Boot는 SecurityConfig만 추가하면 OAuth2 로그인 자동 처리 가능!

✅ Laravel은 Socialite를 통해 OAuth 요청을 직접 핸들링해야 함.

3️⃣ Kakao & Facebook 로그인 구현 (Spring Boot vs Laravel)

 

📌 Kakao & Facebook 로그인 방식 비교

비교 항목Laravel (PHP)Spring Boot (Java)

Kakao 로그인 Socialite::driver('kakao') spring.security.oauth2.client.registration.kakao
Facebook 로그인 Socialite::driver('facebook') spring.security.oauth2.client.registration.facebook

✅ Laravel과 Spring Boot 모두 동일한 방식으로 소셜 로그인을 구현 가능!

🔹 Laravel에서 Kakao 로그인 (Socialite 사용)

Socialite::driver('kakao')->redirect();

🔹 Spring Boot에서 Kakao 로그인 (application.yml 설정)

spring:
  security:
    oauth2:
      client:
        registration:
          kakao:
            client-id: your-kakao-client-id
            client-secret: your-kakao-client-secret
            scope: profile_nickname, account_email

✅ Laravel은 Socialite::driver('kakao'), Spring Boot는 spring.security.oauth2.client.registration.kakao 로 설정

4️⃣ Access Token 활용 & 사용자 정보 저장

 

📌 OAuth2 로그인 후, Access Token을 저장하는 방식 비교

비교 항목Laravel (PHP)Spring Boot (Java)

Access Token 저장 $user->token DB 저장 SecurityContextHolder에서 관리
사용자 정보 저장 User::updateOrCreate() 사용 OAuth2UserService에서 DB 저장

✅ Laravel은 Access Token을 DB에 저장하는 방식, Spring Boot는 Security Context에서 자동 관리 가능

📌 결론: Laravel vs Spring Boot OAuth2 소셜 로그인 비교 정리

 

✅ Google 로그인

• Laravel: Socialite::driver('google') 사용

• Spring Boot: spring.security.oauth2.client.registration.google 설정

 

✅ Kakao & Facebook 로그인

• Laravel: Socialite::driver('kakao') 활용

• Spring Boot: spring.security.oauth2.client.registration.kakao 설정

 

✅ Access Token 관리

• Laravel: $user->token을 DB에 저장

• Spring Boot: OAuth2UserService를 사용하여 자동 처리

 

📌 결론: Laravel은 Socialite로 OAuth를 직접 구현해야 하지만, Spring Boot는 Spring Security로 자동 처리 가능! 

 

🔥 다음 글에서는 “Spring Boot vs Laravel: API Rate Limiting (요청 제한) 구현”을 다룰 예정입니다.

반응형