Spring Security 덕분에 따로 설정을 하지 않으면 로컬 서버에 띄운 웹도 접속하기 힘들다는 것을 알게 되었다. 그래서 SecurityConfig를 설정했다.
몇몇 코드는 처음 보는 것들이었다.
HttpSecurity를 인자로 받아서 여러 보안 설정을 해줘야 했는데 내가 참고한 코드는 WebSecurityConfigurerAdapter를 상속 받았다. 하지만 내가 사용하는 스프링 부트의 버전에서는 이는 사용하지 말라고 했기에 검색해서 다른 방법으로 설정했다. 이 방법은 스프링 Bean에 추가하라는 것이었다. 그래서 권장하는 방법대로 SecurityFilterChain으로 리턴 시키는 메소드를 만들어 Bean에 넣어줬다.
public class SecurityConfig {
// @Override
// protected void configure(HttpSecurity http) throws Exception {
// http.csrf().disable();
// http.authorizeRequests()
// .antMatchers("/", "/login", "/singup", "/style/**", "/js/**", "/img/**").permitAll()
// .anyRequest().authenticated();
// }
@Bean
protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests()
.antMatchers("/", "/login", "/signup", "/style/**", "/js/**", "/img/**").permitAll()
.anyRequest().authenticated();
return http.build();
}
}
위의 코드를 보면 원래는 configure를 오버라이드해서 보안을 설정해줬는데 대신에 같은 방법으로 설정하고 Bean에 넣는 방식으로 처리했다.
위의 코드를 잘 몰랐기에 간단하게 정리하겠다.
이 외에 많은 코드들이 있지만 그것은 나중에 정리하면서 공부해야겠다.
원래는 각각의 Repository를 직접 구현할 생각이었고 그렇게도 했었지만 JPA Repository를 상속받으면 인터페이스로만 구현해도 자동으로 구현체까지 만들어 여러 메소드를 처리해준다는 것이다. 그래서 바로 코드를 변경했다.
public interface UserRepository extends JpaRepository<User, Long> {
}
이러면 구현 끝이다. save, findAll 등 어렵진 않지만 직접 구현하기엔 좀 귀찮은 것들을 한 번에 처리해준다. 추가적인 메소드만 구현하면 된다.
Spring과 JPA는 정말 편리한 기능을 제공해준다!
전체적인 구조를 이해하고 내가 모르는 부분은 찾아보면서 공부할 생각으로 시작했다. 공부 방법을 개발 순서가 이렇지 않을까? 하며 커밋을 어느정도 따라가며 공부하고 이해하며 클론 코딩을 진행했다.
하지만.. 생각보다 오래 걸린다. 본인이 아직 Spring에 대해 잘 모르는 것도 있지만 야생형으로 공부하는데 너무 착실하게 하는 것 같아 시간이 오래 걸리는 것 같다. 첫 클론 코딩인데 직접 개발하는 것 처럼 처음부터 참견하며 테스트까지 만들면서 하는 것은 아무래도 무리이다.
지금 당장에도 직접 개발하고 싶은 것들이 있는데 시간을 너무 오래 쓰기 싫으니 다음부턴 차례대로 코드를 보며 모르는 부분을 정리하고 왜 필요한지 왜 쓰이는지 이해하고 바로 코드를 작성해야겠다.
코드를 따라하되 이해하고 넘기자! 그렇게 클론 코딩을 빠르게 끝낸 후 리팩토링이나 기능 추가를 해보자. 코드를 보완할 필요가 있을지는 모르지만 시도를 해보는 것도 좋을 것 같다. :D