구글 소셜 로그인을 Spring Boot와 MongoDB기반으로
어떻게 설계하고 구현였는지, 그리고 프론트엔드와 백엔드 간
책인 분리 관점에서 개선한 방식을 소개해보려 합니다.
1. 프론트와 백엔드의 책임 분리
🔹기존 설계
- 프론트엔드가 직접 Google OAuth URI를 생성하여 요청
- 구글 로그인 후, 인증 코드를 프론트가 받아서 백엔드에 전달
🔸개선 방식 (Spring Security 기반)
- 프론트는 /oauth2/authorization/google로 요청만 보냄
- Spring Security가 구글과의 인증 흐름 전부 처리
✔️비교
- 기존 설계에서는 인증 코드 탈취 가능성이 증가함
- 개선 방식에서는 Spring Security가 구글과의 인증 흐름 전부 처리 > 인증 코드 노출이 없음 (보안 강화)
2. 로그인 관련 도메인 설계
User
@Document("user")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
@Id
private String id;
private String email;
private String userName;
private Provider provider;
private boolean isGuest = false; //게스트모드 여부
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
}
enum Provider {
KAKAO, GOOGLE
}
UserToken (Refresh Token 저장)
@Data
@Document("user_token")
@AllArgsConstructor
@NoArgsConstructor
public class UserToken {
@Id
private String id;
private String userId;
private String refreshToken;
private LocalDateTime issuedAt;
private LocalDateTime expiresAt;
public static UserToken issueFor(User user, String refreshToken) {
LocalDateTime now = LocalDateTime.now();
LocalDateTime expiresAt = user.isGuest()? now.plusDays(1): now.plusDays(14);
return new UserToken(null, user.getId(), refreshToken, now, expiresAt);
}
}
구현은 이어서 하도록 하겠습니다~!
*참고 자료*
[springboot] 구글 로그인 api 연동
먼저, 구글 서비스에 신규 서비스를 행성해야 한다. 여기서 발급된 인증 정보(clientId와 clientSecret)를 통해서 로그인 기능과 소셜 서비스 기능을 사용할 수 있으니 무조건 발급받고 시작해야 한다.
choihjhj.tistory.com
스프링부트로 Google OAuth 2.0 개발하기
OAuth 란 개발 환경 JDK 17 Spring boot 버전 : 3.0.6 PostgreSQL : 14.0 사용 플러그인 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' implementatio
dev-annals.tistory.com
구글 로그인 google oauth2 - 프론트 및 백엔드 별도
1. Google Cloud Console 접속:https://console.cloud.google.com/ 에 접속합니다.Google 계정으로 로그인합니다.2. 프로젝트 선택 또는 생성:기존 프로젝트가 있다면 선택합니다.새 프로젝트를 만들려면 상단의 프
juntcom.tistory.com
'프로젝트' 카테고리의 다른 글
[프로젝트] 코드 리펙토링 도전기 step 1. 코드 분리하기 (0) | 2025.04.07 |
---|---|
[회고] 프로젝트 회고 <너쫌친당> (0) | 2025.02.17 |
웹소켓 연결, 끊김 감지 (feat. 채팅 목록 unreadCount 구현) (0) | 2025.01.31 |
웹소켓 STOMP로 채팅구현하기 (with Spring) +웹소켓 테스트 사이트 추천 (0) | 2024.11.17 |
[데이터베이스 설계] Null을 피해야 하는 이유? (4) | 2024.10.13 |