[Aribnb] SpringSecurity와 OAuth2.0으로 로그인 기능 구현하기 2

장수현·2021년 11월 2일
0

에어비앤비

목록 보기
12/15

5.3 구글 로그인 연동하기

사용자 정보를 담당할 도메인인 User 클래스를 생성

@Getter
@NoArgsConstructor
@Entity
public class User extends BaseTimeEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String name;

    @Column(nullable = false)
    private String email;

    @Column
    private String picture;

    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    private Role role;

    @Builder
    public User(String name, String email, String picture, Role role) {
        this.name = name;
        this.email = email;
        this.picture = picture;
        this.role = role;
    }

    public User update(String name, String picture) {
        this.name = name;
        this.picture = picture;

        return this;
    }

    public String getRoleKey() {
        return this.role.getKey();
    }
}

- @NoArgsConstructor
파라미터가 없는 기본 생성자를 생성
- @GeneratedValue(strategy = GenerationType.IDENTITY)
데이터베이스에 위임(MySQL) (=Auto_increment)
- @Enumerated(EnumType.STRING)
JPA로 데이터베이스에 저장할 때 Enum 값을 어떤 형태로 저장할지를 결정 (기본 int형)

각 사용자의 권한을 관리할 Enum 클래스 Role을 생성

@Getter
@RequiredArgsConstructor
public enum Role {

    GUEST("ROLE_GUEST","손님"),
    USER("ROLE_USER","일반 사용자");

    private final String key;
    private final String title;

}

- @RequiredArgsConstructor
초기화되지 않은 Final 필드나, @NonNull이 붙은 필드에 대해 생성자를 생성,
주로 의존성 주입 편의성을 위해서 사용되곤 한다.
- ROLE_XXX
스프링 시큐리티에서는 권한 코드에 항상 'ROLE_'이 앞에 있어야 한다.
- Enum : 서로 연관된 상수들의 집합을 의미
기존에 상수를 정의하는 방법이었던 'final static String'과 같이 문자열이나 숫자들을 나타내는 기본자료형의 값을 enum을 이용하여 같은 효과를 낼 수 있다.

마지막으로 User의 CRUD를 책임질 UserRepository도 생성

public interface UserRepository extends JpaRepository<User,Long> {

    Optional<User> findByEmail(String email);
}

- findByEmail
email을 통해 기존 가입자인지 아닌지 판단하기 위함.
- Generic 형
자료형이 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미한다. 예를 들어 String타입도 지원하고싶고 Integer타입도 지원하고 싶은 경우 사용한다.
- Optional< T >
"T"타입의 객체를 포장해주는 래퍼 클래스(Wrapper Class)이다.
모든 타입의 참조변수를 저장할 수 있으며, 복잡한 조건문 없이도 Null로 인해 발생하는 예외를 처리할 수 있다.

0개의 댓글