-
Notifications
You must be signed in to change notification settings - Fork 7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
리프레시 토큰 관리를 Redis로 변경 #710
Conversation
public RedisTemplate<String, String> redisTemplate() { | ||
final RedisTemplate<String, String> redisTemplate = new RedisTemplate<>(); | ||
redisTemplate.setKeySerializer(new StringRedisSerializer()); | ||
redisTemplate.setValueSerializer(new StringRedisSerializer()); | ||
redisTemplate.setConnectionFactory(redisConnectionFactory()); | ||
return redisTemplate; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
운영 코드에서는 RedisTemplate을 이용하지 않았는데 테스트에서는 이용하게 된 이유가 궁금합니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오 블로그 글 봤는데 TypeReference로 해결이 되나 궁금하네요🤔🤔
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
-
CrudRepository를 상속하면 Jpa처럼 Redis를 사용할 수 있다는게 장점이라 느껴져서 Redistemplate을 사용하지 않았습니다! 단순히 저장하고 조회하는 기능만 리프레시 토큰에서 사용해서요. 그런데 테스트해서는 토큰 만료를 테스트해야되서 redistemplate을 사용해서
expire
메서드가 필요했습니다. 그래서 테스트 코드에서는 사용하게 되었습니다.
TypeReference를 말씀하신거보니 Jackson2JsonRedisSerializer 같은데요. 이 부분은 설명이 살짝 부족했네요
redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(RefreshToken.class));
redisTemplate.setHashValueSerializer(new Jackson2JsonRedisSerializer<>(RefreshToken.class));
이 Serializer는 다음과 같이 빈으로 등록할 때 타입을 지정해서 등록하기 때문에 TypeReference만으로도 잘 동작합니다!
System.setProperty("spring.redis.host", redisContainer.getHost()); | ||
System.setProperty("spring.redis.port", redisContainer.getMappedPort(6379).toString()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
'@DynamicPropertySource'를 사용해보는거는 어떤가요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
5. An Alternative: Test Fixtures
So far, in both approaches, the fixture setup and the test code are tightly intertwined. Sometimes, this tight coupling of two concerns complicates the test code, especially when we have multiple things to set up. Imagine what the infrastructure setup would look like if we were using PostgreSQL and Apache Kafka in a single test.
In addition to that, the infrastructure setup and applying dynamic configurations will be duplicated in all tests that need them.
밸덩에서 퍼온건데 @DynamicPropertySource는 각각의 테스트에서만 사용할 수 있는듯?
혹시 어떻게 하는지 아시나용?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
집가서 다시 커멘트 남길게용
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
요런 느낌입니다!
(*자바로는 실험 못해봄 🙃)
public class RedisTestProperties {
@DynamicPropertySource
public static void redisTestProperties(DynamicPropertyRegistry registry) {
registry.add("spring.redis.host", redisContainer.getHost());
registry.add("spring.redis.port", Integer.toString(redisContainer.getMappedPort(6379).toString());
}
}
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오호 이거 해봤는데 안되더라구... 레디스테스트컨테이너는 setProperty로 설정을 덮어(?)씌워야되는데(왜인지 모름), 저건 static으로 올리니까 안되는거 같음
* 리프레시 토큰 관리를 Redis로 변경 (#710) * feat: redis 설정 추가 * refactor: RefreshToken 관리를 redis로 업데이트 * test: refreshToken 관련 service 테스트 수정 * refactor: EmbbedRedis 설정 제거 * feat: Redis Test Container 설정 추가 * refactor: 테스트가 용이하게 RefreshToken TTL을 외부에서 관리 * test: OauthComand관련 테스트 수정 * test: Restdocs 테스트 수정 * refactor: OauthCommandService 생성자에 refreshTokenExpireMinutes를 받도록 수정 * test: RefreshToken 추가 * test: 사용하지 않는 RefreshToken 삭제 * refactor: RefreshToken2 를 RefreshToken으로 이름 변경 * refactor: expire minutes 이름 변경 * test: RefreshTokenFixture로 리팩토링 * refactor: Facade 패턴 적용 * refactor: ttl 단위를 분으로 변경 * refactor: RedisConfig에 username과 password 추가 * feat: docker-compose 에 redis 설정 추가 * refactor: 사용하지 않는 Restemplate 제거 * refactor: 스프링 부트 버전 3.1.8로 업그레이드 * refactor: redis.conf bind를 localhost만 가능하도록 변경 * 게시글 조회 API에 게시글 총 개수 포함해서 반환 (#711) refactor: 글 조회시 전체 개수가 같이 반환되도록 구현 * 완료된 리뷰가 많은 서포터 순대로 조회하는 기능 구현 (#712) * feat: 리뷰가 많은 사람 랭킹 구하는 기능 구현 * test: 랭킹 인수테스트와 restdocs 테스트 구현 * feat: 랭킹에 company 항목 추가 * refactor: 다른 랭킹도 추가할 수 있도록 Rankable 마커 인터페이스 구현
* 리프레시 토큰 관리를 Redis로 변경 (#710) * feat: redis 설정 추가 * refactor: RefreshToken 관리를 redis로 업데이트 * test: refreshToken 관련 service 테스트 수정 * refactor: EmbbedRedis 설정 제거 * feat: Redis Test Container 설정 추가 * refactor: 테스트가 용이하게 RefreshToken TTL을 외부에서 관리 * test: OauthComand관련 테스트 수정 * test: Restdocs 테스트 수정 * refactor: OauthCommandService 생성자에 refreshTokenExpireMinutes를 받도록 수정 * test: RefreshToken 추가 * test: 사용하지 않는 RefreshToken 삭제 * refactor: RefreshToken2 를 RefreshToken으로 이름 변경 * refactor: expire minutes 이름 변경 * test: RefreshTokenFixture로 리팩토링 * refactor: Facade 패턴 적용 * refactor: ttl 단위를 분으로 변경 * refactor: RedisConfig에 username과 password 추가 * feat: docker-compose 에 redis 설정 추가 * refactor: 사용하지 않는 Restemplate 제거 * refactor: 스프링 부트 버전 3.1.8로 업그레이드 * refactor: redis.conf bind를 localhost만 가능하도록 변경 * 게시글 조회 API에 게시글 총 개수 포함해서 반환 (#711) refactor: 글 조회시 전체 개수가 같이 반환되도록 구현 * 완료된 리뷰가 많은 서포터 순대로 조회하는 기능 구현 (#712) * feat: 리뷰가 많은 사람 랭킹 구하는 기능 구현 * test: 랭킹 인수테스트와 restdocs 테스트 구현 * feat: 랭킹에 company 항목 추가 * refactor: 다른 랭킹도 추가할 수 있도록 Rankable 마커 인터페이스 구현 * feat: review 완료 시 reviewCount 증가 기능 구현 (#721) * feat: review 완료 시 reviewCount 증가 기능 구현 * test: reviewCount 증가로직 테스트 구현 * refactor: 리뷰수 증가 로직을 RunnerPost 안으로 옮김 * reviewCount가 0인 항목이 조회가 되면 제외되도록 구현 (#722) * refactor: reviewCount가 0인 항목이 조회가 되면 제외되도록 구현 * refactor: count 할 때 reviewStatus가 포함되도록 변경
* 리프레시 토큰 관리를 Redis로 변경 (#710) * feat: redis 설정 추가 * refactor: RefreshToken 관리를 redis로 업데이트 * test: refreshToken 관련 service 테스트 수정 * refactor: EmbbedRedis 설정 제거 * feat: Redis Test Container 설정 추가 * refactor: 테스트가 용이하게 RefreshToken TTL을 외부에서 관리 * test: OauthComand관련 테스트 수정 * test: Restdocs 테스트 수정 * refactor: OauthCommandService 생성자에 refreshTokenExpireMinutes를 받도록 수정 * test: RefreshToken 추가 * test: 사용하지 않는 RefreshToken 삭제 * refactor: RefreshToken2 를 RefreshToken으로 이름 변경 * refactor: expire minutes 이름 변경 * test: RefreshTokenFixture로 리팩토링 * refactor: Facade 패턴 적용 * refactor: ttl 단위를 분으로 변경 * refactor: RedisConfig에 username과 password 추가 * feat: docker-compose 에 redis 설정 추가 * refactor: 사용하지 않는 Restemplate 제거 * refactor: 스프링 부트 버전 3.1.8로 업그레이드 * refactor: redis.conf bind를 localhost만 가능하도록 변경 * 게시글 조회 API에 게시글 총 개수 포함해서 반환 (#711) refactor: 글 조회시 전체 개수가 같이 반환되도록 구현 * 완료된 리뷰가 많은 서포터 순대로 조회하는 기능 구현 (#712) * feat: 리뷰가 많은 사람 랭킹 구하는 기능 구현 * test: 랭킹 인수테스트와 restdocs 테스트 구현 * feat: 랭킹에 company 항목 추가 * refactor: 다른 랭킹도 추가할 수 있도록 Rankable 마커 인터페이스 구현 * feat: review 완료 시 reviewCount 증가 기능 구현 (#721) * feat: review 완료 시 reviewCount 증가 기능 구현 * test: reviewCount 증가로직 테스트 구현 * refactor: 리뷰수 증가 로직을 RunnerPost 안으로 옮김 * reviewCount가 0인 항목이 조회가 되면 제외되도록 구현 (#722) * refactor: reviewCount가 0인 항목이 조회가 되면 제외되도록 구현 * refactor: count 할 때 reviewStatus가 포함되도록 변경 * 리뷰 상태별로 게시글 전체 개수를 조회하는 기능 구현 (#728) * feat: 리뷰 상태별로 게시글 전체 개수를 조회하는 기능 구현 * test: Restdocs 테스트 추가
관련이슈
참고사항
expire
가 필요해서 redistemplate을 빈으로 등록해놨습니다.중요한 내용은 없지만 블로그 글 첨부합니다~�