인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

JoonHo Kim님의 프로필 이미지
JoonHo Kim

작성한 질문수

생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현

Access Token 재발급

Member에 refreshToken 질문 드립니다.

작성

·

448

·

수정됨

0

  1. Member에 refreshToken 값이 칼럼으로 생성되어 있는데요. DB에 refreshToken이 최초 저장되는 시점이 언제인가요?

@Column(length = 250)
private String refreshToken;

 

  1. updateRefreshToken을 하게 되면 DB에는 따로 저장하지 않나요?

public void updateRefreshToken(JwtTokenDto jwtTokenDto) {
    this.refreshToken = jwtTokenDto.getRefreshToken();
    this.tokenExpirationTime = DateTimeUtils.convertToLocalDateTime(jwtTokenDto.getRefreshTokenExpireTime());
}
  1. Member에 tokenExpirationTime은 refresh token의 만료시간을 의미하는건가요?

private LocalDateTime tokenExpirationTime;

답변 1

0

구파고님의 프로필 이미지
구파고
지식공유자

안녕하세요 리프레시토큰 만료시간을 의미하는 컬럼입니다.

JoonHo Kim님의 프로필 이미지
JoonHo Kim
질문자

질문 수정하였습니다. 추가 확인 부탁드립니다.!

구파고님의 프로필 이미지
구파고
지식공유자

  1. 최초 생성시점은 회원가입할때입니다.

  2. Update를하고 따로저장하는코드가 없는데 jpa의 변경감지 기능을통해서 트랜잭션이 끝날때 기존에 저장됐던값이랑 달라지면 자동으로 update 쿼리를 실행해줍니다.

JoonHo Kim님의 프로필 이미지
JoonHo Kim
질문자

실시간 답변 갑사드립니다.ㅎㅎ

회원가입시 refreshToken의 최초 생성시점은 어디서 찾을 수 있을까요?

registerMember를 찾아보면
OauthLoginService의 oauthLogin 메서드에서
refreshToken을 저장하는 부분을 찾을 수 없네요..

oauthMember = memberService.registerMember(oauthMember);

구파고님의 프로필 이미지
구파고
지식공유자

OauthLoginService를 보시면 처음 회원가입일 때 회원 가입을 진행 후 토큰을 생성한다음에 해당 회원의 refresh token을 갱신해주는 메소드를 보실 수 있습니다. oauthMember = memberService.registerMember(oauthMember); 바로 아래에 있는 코드입니다!


// 토큰 생성 jwtTokenDto = tokenManager.createJwtTokenDto(oauthMember.getMemberId(), oauthMember.getRole()); oauthMember.updateRefreshToken(jwtTokenDto);

 

그리고 위에 설명드린것처럼 변경감지기능에의해 트랜잭션이 종료되는 시점에 update쿼리문이 콘솔창에 출력되는것도 확인하실 수 있을겁니다.

 

update

member

set

update_time=?,

modified_by=?,

email=?,

member_name=?,

member_type=?,

password=?,

profile=?,

refresh_token=?,

role=?,

token_expiration_time=?

where

member_id=?

 

JoonHo Kim님의 프로필 이미지
JoonHo Kim
질문자

전달 주신 update 쿼리를 보면
private LocalDateTime tokenExpirationTime; 에는 @Column 생성이 안되어 있으에도 불구하고

set 구문에token_expiration_time=? 이 진행되는 이유가 궁급합니다.
(자꾸 jpa 질문으로 넘어가는것 같네요...)

구파고님의 프로필 이미지
구파고
지식공유자

기본적으로 엔티티 클래스에있는 필드들은 모두 테이블의 특정 컬럼과 매칭되는 필드라고 생각해주시면됩니다.

@Column어노테이션은 해당 필드에대한 추가적인 정보들을 기술하려고 적어둔거라고 보시면됩니다. 예를 들면 컬럼의 길이나 필드에있는 컬럼명과 테이블에있는 컬럼명이 다를때는 name을 통해서 연결해줄 수도 있구요. null허용 여부같은 값들도 적어줄 수 있습니다. 그리고 hibernate ddl-auto 옵션을 validate로 할 때 이런 속성값들이 실제 테이블과 매핑이 맞지 않으면 애플리케이션 실행자체를 실패시킬 수도 있습니다.

JoonHo Kim님의 프로필 이미지
JoonHo Kim

작성한 질문수

질문하기