오늘 CodeKata는 그냥 넘기고, EC2, RDS를 활용해 배포는 하는 법을 연구하였다.
가장 기억에 남은 건, RDS에 접근을 할 수 없는 에러였다. 처음엔 application.yml을 잘못 설정해서 그런 줄 알았지만, intellij에서도, mySQL에서도 rds에 접근 자체가 안 된 것을 보고, RDS에 접근 자체를 못하는 것을 깨닫게 되었다.
그래서 보안 그룹을 설정하고, 퍼블릭으로 돌려보았지만, RDS에 접근을 할 수가 없어서 어디가 문제인지 계속 고민을 하며 찾았는데, 한 게시글에 의하면 Virtual Private Cloud에서의 라우팅 테이블이 최근에 Private으로 Default되었기에 Public으로 전환하란 내용에 눈이 갔다. 지금까지 게시글들은 이러한 방법을 제시 안했고, 비교적 최신이란 점에서 시간이 지난 게시글에 정보가 없다는 것이 납득이 갔기에 시도를 해보았고, 드디어 연결에 성공을 하였다.
그렇게 이틀에 거친 EC2와 RDS를 활용한 배포는 성공이란 결과를 얻었다. 의외로 개발을 마친 것보다 뿌듯하다.
이어서, 이전에는 passwordHistory 테이블을 만들어서 일일히 password가 수정될 때마다 값을 넣어주었다. 그런데, 튜터님의 정보에 의하면, Spring에서는 Entity 값의 역사를 자동으로 기록을 저장하는 Enverse란 라이브러리가 있다는 것을 알게 되었다. 그래서 기존에 PasswordHistory 테이블을 버리고, Enverse 라이브러리를 사용해봤다.
비교적 단순한 라이브러리라서 활용을 하는 것이 어렵지 않았지만, 페이징을 할 때, 마지막 페이지를 가져와야하는데, 계속 첫 페이지만을 가져와 이것을 어떻게 잘 해결할지 고민하는 데, 시간을 소요하였다. 결국 List로 가져온 뒤, List를 뒤집고, 앞의 3개 이하의 원소를 가져오는 것으로 해결을 하였다. 하지만 이것보다 더 좋은 방법이 있을지도 모른다란 생각이 자꾸 들기도 한다. 그래도 QueryDSL을 사용 안하고 비교적 간단하게 구현을 해서 이 방식이 더 좋은 것 같다.
@Transactional
override fun updatePassword(userId: Long, userPasswordUpdateRequest: UserPasswordUpdateRequest): UserResponse {
val user = userRepository.findByIdOrNull(userId) ?: throw ModelNotFoundException("User", userId)
if(!passwordEncoder.matches(userPasswordUpdateRequest.passwordConfirm, user.password)) throw InvalidCredentialException()
val list = passwordHistoryRepository.getPasswordHistory(userId)
if(list.find { passwordEncoder.matches(userPasswordUpdateRequest.newPassword, it)} != null)
throw IllegalArgumentException("Already Used Password")
user.updatePassword(passwordEncoder.encode(userPasswordUpdateRequest.newPassword))
passwordHistoryRepository.save(PasswordHistory(user, user.password))
return UserResponse.from(userRepository.save(user))
}
// 기존
@Transactional
override fun updatePassword(userId: Long, userPasswordUpdateRequest: UserPasswordUpdateRequest): UserResponse {
val user = userRepository.findByIdOrNull(userId) ?: throw ModelNotFoundException("User", userId)
if(!passwordEncoder.matches(userPasswordUpdateRequest.passwordConfirm, user.password)) throw InvalidCredentialException()
val list = userRepository.findRevisions(userId).content
.toList().map{it.entity.password}.reversed().let { it.subList(0, it.size.coerceAtMost(3)) }
if(list.find { passwordEncoder.matches(userPasswordUpdateRequest.newPassword, it)} != null)
throw IllegalArgumentException("Already Used Password")
user.updatePassword(passwordEncoder.encode(userPasswordUpdateRequest.newPassword))
return UserResponse.from(userRepository.save(user))
}
// 지금
다음 주 월요일은 발표다, 유종의 미를 거두길 기대해보자
'부트캠프 일지' 카테고리의 다른 글
부트캠프 46일차 후기 (0) | 2024.01.31 |
---|---|
부트캠프 44일차 후기 (1) | 2024.01.29 |
부트캠프 42일차 후기 (1) | 2024.01.25 |
부트캠프 41일차 후기 (0) | 2024.01.24 |
부트캠프 40일차 후기 (1) | 2024.01.23 |