본문 바로가기

전체 글19

조합(Combination) / Backtracking 알고리즘 문제를 풀다가 조합을 구해야할 상황이 있었다. 간단하게 중첩 반복문을 사용하면 쉽게 조합을 구할 수 있었지만, 이 방법에는 큰 제한 사항이 있었다. n C r 에서 r 이 가변적이라면 반복문의 중첩 횟수가 달라져야 하기 때문에 , 이에 대해서는 중첩 반복문으로 조합을 구현하는 것은 제한된다. 그래서 가변적인 r에 대해서도 일관성 있게 조합을 구현할 수 있는 방법 중 , 백트래킹을 사용해 보았다. 백트래킹이란? 백트래킹(backtracking) : 해를 찾는 도중 해가 아니어서 막히면, 되돌아가서 다시 해를 찾아가는 기법을 말한다. 이번에 처음으로 백트래킹이라는 것을 접해보았는데, 그림을 보니 쉽게 이해할 수 있었다. 조합을 구하는 과정에서, r은 트리의 레벨이 될 것이고, 해당 레벨(r)에 도달.. 2021. 7. 5.
URLEncoder URLEncoder @PostMapping("/new-post") public String newPostSubmit(@CurrentUser Account account, @Valid PostForm postForm, Errors errors, Model model){ if(errors.hasErrors()){ model.addAttribute(account); return "post/form"; } Post newPost = postService.createNewPost(account, modelMapper.map(postForm, Post.class)); return "redirect:/post/"+ URLEncoder.encode(newPost.getPath(), StandardCharsets.UTF.. 2021. 7. 1.
인증이 필요한 요청에 대한 테스트 작성 (SpringBoot & JUnit5) 스프링 시큐리티를 사용해서 애플리케이션을 작성하다보면 대부분의 요청에 대해서 사용자의 인증을 필요로 하게 된다. 그렇기 때문에 애플리케이션의 대부분의 요청은 인증된 사용자만 접근이 가능하다. 그렇다면 테스트는 어떨까? 테스트도 동일하게 애플리케이션을 띄우고 작성한 코드에 의해서 요청을 보내고 테스팅을 하는 것이기 때문에 마찬가지로 인증을 필요로 한다. 이처럼 테스트시에도 인증을 필요로하는 요청을 인증 없이 요청하게되면, 스프링 시큐리티에 의해서 /login으로 리다이랙트된다. 그렇다면 테스트마다 인증이 필요할 것이고, 매번 로그인을 해줘야할 것이다. 하지만 그렇다고 매 테스트마다 사용자를 생성하고, 로그인을 하는 것을 반복하기는 쪼오끔 그렇다^^ 그렇기 때문에 스프링 시큐리티에서는 Testing에 대한 .. 2021. 6. 20.
로그인 기억하기 - remember me 사용자에 대한 인증이 필요한 서비스는 로그인 기능이 필요하다. 로그인은 일반적으로 DB에 저장되어 있는 사용자의 정보와 로그인 시 입력한 값을 비교해서 일치하는 경우, 해당 사용자의 정보를 세션에 등록하고 해당 세션 ID를 담은 쿠키를 사용자에게 발급한다. 이 세션 ID를 통해서 이 사용자가 세션에 등록되어 있는(인증이 된) 사용자인지 판단을 한다. 하지만 세션이라는 것은 서버측의 자원이고, 이를 무한정으로 할당하는 것은 서버측의 불필요한 리소스의 낭비를 발생시킬 수 있다. 그렇기 때문에 각 사용자의 세션 공간은 주어진 시간 동안만 할당 된다. 톰캣의 경우 기본 세션 타임 아웃이 30분으로 설정이 되어 있다. 이 말은 결국 30분이 지나면 사용자의 세션이 만료되어 더이상 인증된 사용자로 식별이 될 수 없.. 2021. 6. 13.