네이버 로그인 API를 활용한 소셜로그인 구현 과정(with. Spring Security, JWT) - 3. JwtAuthentication class 생성

Sia Hwang·2022년 11월 28일
0

이번에는 인증된 사용자를 표현하는 클래스를 만들 것이다.

Location

package com.august.soil.api.security;
  • security 패키지 아래에 JwtAuthentication이라는 이름으로 클래스를 생성한다.

JwtAuthentication

import com.august.soil.api.model.commons.Id;
import com.august.soil.api.model.user.Email;
import com.august.soil.api.model.user.User;

public class JwtAuthentication {
  
  public final Id<User, Long> id; //*1
  
  public final String name;
  
  public final Email email; //*2
}
  • 인증된 사용자의 정보를 저장할 필드를 선언한다. 역시 final을 붙여주어 불변성을 가지게 한다.
    1. Id<User, Long> 클래스는 커스터마이징 제네릭 클래스로 DB 테이블 내의 PK값을 표현하는 클래스이다. 그런데 Long 타입으로만 선언해도 되는데 왜 제네릭 클래스로 만들었느냐?
      코드 상에서 <객체, 데이터타입>으로 어떤 객체의 PK인지 보다 명확하게 알아볼 수 있는 장점이 있어 제네릭 클래스로 만들게 되었다.
      https://github.com/miro7923/soil/blob/main/soil/src/main/java/com/august/soil/api/model/commons/Id.java
      전문은 Github에서 볼 수 있다.
    2. 사용자 이메일의 유효성 검증 등 비즈니스 로직의 관리를 위해 별도의 클래스로 선언 및 사용하고 있다. String 타입으로 이메일을 선언하고 insert 작업시에 이메일의 유효성을 검증하는 것 보다는 클래스 내 생성자 단계에서 유효성 검증 후 객체를 생성하는 것이 훨씬 응집도가 높다고 생각한다.
      https://github.com/miro7923/soil/blob/main/soil/src/main/java/com/august/soil/api/model/user/Email.java
      전문은 Github에서 볼 수 있다.
import com.august.soil.api.model.commons.Id;
import com.august.soil.api.model.user.Email;
import com.august.soil.api.model.user.User;
import static com.google.common.base.Preconditions.checkArgument;

public class JwtAuthentication {
  
  ...
  
  public JwtAuthentication(Long id, String name, Email email) {
    checkArgument(id != null, "id must be provided.");
    checkArgument(name != null, "name must be provided.");
    checkArgument(email != null, "email must be provided.");
    
    this.id = Id.of(User.class, id);
    this.name = name;
    this.email = email;
  }
}
  • 생성자 단계에서 인자값으로 받은 각 필드의 유효성을 검증한 후 객체가 생성되도록 한다. checkArgument를 통과하지 못하면 예외가 발생한다.
import com.august.soil.api.model.commons.Id;
import com.august.soil.api.model.user.Email;
import com.august.soil.api.model.user.User;
import org.apache.commons.lang3.builder.ToStringStyle;
import static com.google.common.base.Preconditions.checkArgument;
import static org.apache.commons.lang3.builder.ToStringBuilder.reflectionToString;

public class JwtAuthentication {
  
  ...
  
  @Override
  public String toString() {
    return reflectionToString(this, ToStringStyle.JSON_STYLE);
  }
}
profile
당면한 문제는 끝까지 해결하기 위해 노력하는 주니어 개발자입니다.

0개의 댓글