본문 바로가기

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 (요청 제한) 구현”을 다룰 예정입니다.

반응형