📝오늘 공부한 것
- 실전프로젝트 - '행동대장' 코드리팩토링
⛔문제점
✔ 수정 전 RefreshToken Entity
package com.sparta.actionboss.domain.auth.entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Entity
@Getter
@NoArgsConstructor
public class RefreshToken {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String refreshToken;
@Column(nullable = false)
private String nickname;
public RefreshToken(String refreshToken, String nickname){
this.refreshToken = refreshToken;
this.nickname = nickname;
}
public void updateToken(String refreshToken) {
this.refreshToken = refreshToken;
}
}
✔ 수정 후 RefreshToken Entity
package com.sparta.actionboss.domain.auth.entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Entity
@Getter
@NoArgsConstructor
public class RefreshToken {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String refreshToken;
@Column(nullable = false)
private Long userId;
public RefreshToken(String refreshToken, Long userId){
this.refreshToken = refreshToken;
this.userId = userId;
}
}
닉네임이 변경되면 다른 User로 인식해 refresh token을 재발급할때 이전 refresh token이 삭제되지 않음.
따라서 코드를 리팩토링하여 nickname 필드를 userId로 변경.
변경 사항을 배포 환경에서 테스트할 때 에러 발생
[에러메시지]
SQL Error: 1364, SQLState: HY000 2023-09-06T15:21:14.768+09:00 ERROR 70118 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : Field 'nickname' doesn't have a default value 2023-09-06T15:21:14.773+09:00 ERROR 70118 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.orm.jpa.JpaSystemException: could not execute statement [Field 'nickname' doesn't have a default value] [/* insert for com.sparta.actionboss.domain.auth.entity.RefreshToken */insert into refresh_token (refresh_token,user_id) values (?,?)]] with root cause java.sql.SQLException: Field 'nickname' doesn't have a default value at com.mysql.cj.jdbc.exceptions.
💯해결
local에서 test를 할때 DB를 날리고 test하는 경우가 많다.
그래서 local에서 확인했을때는 잘 작동했던 것이 배포환경에서는 에러가 나버린 것이었다ㅠㅠ
배포환경 DB의 nickname column을 삭제하고 재실행시켰더니 성공!!
배포환경에서 DB 관리를 더 신중하게 해야한다는 것을 배웠다
'TIL(Today I Learned)' 카테고리의 다른 글
TIL-230908(항해99 실전 프로젝트-행동대장(28)) (0) | 2023.09.08 |
---|---|
TIL-230907(항해99 실전 프로젝트-행동대장(27)) (0) | 2023.09.07 |
TIL-230905(항해99 실전 프로젝트-행동대장(25)) (0) | 2023.09.05 |
TIL-230904(항해99 실전 프로젝트-행동대장(24)) (0) | 2023.09.04 |
TIL-230902(항해99 실전 프로젝트-행동대장(23)) (0) | 2023.09.02 |