2025-05-20
JWT๋ ์๋ฒ๊ฐ ํ ํฐ์ ๊ฒ์ฆํ๊ธฐ ์ํด ์๋ช ํค(Key)๋ฅผ ์ ์งํด์ผ ํ๋ค.
ํ์ง๋ง ์๋ฒ๋ฅผ ์ฌ์์ํ ๋๋ง๋ค ํค๊ฐ ์๋ก ์์ฑ๋๋ฉด, ๊ธฐ์กด์ ๋ฐ๊ธํ ํ ํฐ์ ๋ชจ๋ ๊ฒ์ฆ ์คํจํ๊ฒ ๋๋ค.
๊ทธ๋์ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ก ์ค๊ณํ๋ค:
Signature
์ํฐํฐ๋ฅผ ํตํด ํค๋ฅผ DB์ ์์ํSignatureScheduling
์ ํตํด ์ฃผ๊ธฐ์ ํค ๊ฐฑ์ JwtTokenProvider.setKey()
๋ฅผ ์ด์ฉํ ์ค์๊ฐ ํค ๋ฐ์@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
public class Signature {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // ๊ธฐ๋ณธ ํค๋ Long ํ์
์ฌ์ฉ
private Long id;
@Column(name = "keyBytes", nullable = false)
private byte[] keyBytes;
@Column(name = "createAt", nullable = false)
private LocalDate createAt;
}
๐ ๋ณด์์ ๋ฐ์:
@Id
๋ก byte[]
๋์ Long
์ฌ์ฉ โ JPA ํธํ์ฑ ๋ฌธ์ ํด๊ฒฐkeyBytes
๋ ๊ทธ๋๋ก ์ ์งํด JWT ์๋ช
์ฉ ํค๋ก ์ฌ์ฉ ๊ฐ๋ฅ@Repository
public interface SignatureRepository extends JpaRepository<Signature, Long> {
}
๐ ์ด์ ๋ฒ์ ์์๋ org.springframework.security.web.webauthn.api.Bytes
๋ฅผ ID๋ก ์ฌ์ฉํด ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ
โก๏ธ Long
๊ธฐ๋ณธ ํค ํ์
์ผ๋ก ๊ต์ฒดํ์ฌ ์์ ์ฑ ํ๋ณด
@Component
@EnableScheduling
public class SignatureScheduling {
@Autowired
private SignatureRepository signatureRepository;
@Autowired
private JwtTokenProvider jwtTokenProvider;
// ๋งค ์ ์ ๊ฐ๋ง๋ค ์คํ
@Scheduled(cron = "0 0 * * * *")
public void signatureScheduled(){
List<Signature> list = signatureRepository.findAll();
// ๊ธฐ์กด ํค ์ญ์
if(!list.isEmpty()){
signatureRepository.deleteAll();
}
// ์ ํค ์์ฑ ๋ฐ ์ ์ฅ
byte[] keyBytes = KeyGenerator.getKeygen();
Signature newSignature = Signature.builder()
.keyBytes(keyBytes)
.createAt(LocalDate.now())
.build();
signatureRepository.save(newSignature);
// JwtTokenProvider์ ์ ํค ๋ฐ์
jwtTokenProvider.setKey(Keys.hmacShaKeyFor(keyBytes));
}
}
@PostConstruct
๋ก Signature ํ
์ด๋ธ์์ ํค๋ฅผ ๋ก๋setKey()
๋ก ์ค์๊ฐ ๋ฐ์๊ตฌ์ฑ์์ | ์ญํ |
---|---|
Signature | JWT ์๋ช ํค๋ฅผ DB์ ์ ์ฅ |
SignatureRepository | ํค ์ ์ฅ์ ๊ด๋ฆฌ (Long ๊ธฐ๋ฐ ID๋ก ์์ ์ฑ ํ๋ณด) |
SignatureScheduling | 1์๊ฐ๋ง๋ค ํค๋ฅผ ์๋ ๊ฐฑ์ |
JwtTokenProvider.setKey() | ๋ฐํ์ ์ค ์ ํค๋ก JWT ๊ธฐ๋ฅ ์ค์๊ฐ ์ ํ |
byte[]
๋ฅผ ID๋ก ์ฐ๋ ๊ฒ๋ณด๋ค Long
์ ์ฐ๋ ๊ฒ ํจ์ฌ ์์ ์ ์ด๊ณ ํธํ์ฑ๋ ์ข๋ค.Signature
์ํฐํฐ์ ์ ์ฅํด ์๋ฒ ์ฌ์์ ํ์๋ ๊ธฐ์กด ํ ํฐ์ ๊ฒ์ฆ ๊ฐ๋ฅํ๊ฒ ํ๋ค.SignatureScheduling
์ ํตํด ํค๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฐฑ์ ํ ์ ์๋๋ก ๊ตฌํํ๊ณ ,