긴 url 을 짧게 축약시켜서 필요한 페이지로 직접 연결하는 기술
긴 url 페이지로 연결되는 리디렉션을 사용해서 수행
목적 : 중개역할을 하는 shorten url을 구성하여
별도 로그인 없이 페이지로 이동되도록 개발
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
@Configuration
public class RedisConfiguration {
@Autowired
ObjectMapper objectMapper;
@Autowired
RedisConnectionFactory connectionFactory;
@Bean
RedisTemplate<String, Url> redisTemplate() {
final RedisTemplate<String, Url> redisTemplate = new RedisTemplate<>();
Jackson2JsonRedisSerializer valueSerializer = new Jackson2JsonRedisSerializer(Url.class);
valueSerializer.setObjectMapper(objectMapper);
redisTemplate.setConnectionFactory(connectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(valueSerializer);
return redisTemplate;
}
}
@Autowired
StringRedisTemplate redisTemplate;
@PostMapping
public String create(@RequestBody String url){
}
UrlValidator urlvalidator = new UrlValidator(
new String[]{"http","https"}
);
if(urlValidator.isValid(url){
}
http, https 가 포함된 url 인지 체크
com.goole.guava
guava
MurmurHash를 사용해서 고유한 클래스를 생성할 수 있는 알고리즘
텍스트를 다른것으로 암호화하고 싶을 때 사용
String id =
Hashing.murmur3_32().hashString(url,_StandardCharsets.UTF_8);
redisTemplate.opsForValue().set(id,url);
return id;
throw new RuntimeException("URL Invalid : " + url);
@GetMapping(/{id})
public String getUrl(@PathVariable String id){
}
String url = redisTemplate.opsForValue().get(id);
if(url == null) {
throw new RuntimeException("There is no shorten URL for : "+id);
}
return url;