스파르타 코딩클럽 미니 프로젝트 - 6 LV2 스프링 JWT 시큐리티 로그인 인증 인가 6/28~6/29
https://github.com/yuio7279/spring-lv2
GitHub - yuio7279/spring-lv2
Contribute to yuio7279/spring-lv2 development by creating an account on GitHub.
github.com
1. 발생한 이슈
인증이 허가됐어야 할 url이 허가가 안되고 forbidden 에러가 발생했습니다.
http.authorizeHttpRequests((authorizeHttpRequests) ->
authorizeHttpRequests
.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() // resources 접근 허용 설정
.requestMatchers("/api/user/**").permitAll() // '/api/user/'로 시작하는 요청 모두 접근 허가
.requestMatchers("/api/posts/{id}").permitAll()
.requestMatchers(HttpMethod.GET, "/api/posts").permitAll()
.anyRequest().authenticated() // 그 외 모든 요청 인증처리
);
강의를 수강하며 따라할때는 에러가 발생하지 않았지만
저의 프로젝트에서는 상대경로로 바꾸어야 했습니다.
http.authorizeHttpRequests((authorizeHttpRequests) ->
authorizeHttpRequests
.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() // resources 접근 허용 설정
.requestMatchers("api/user/**").permitAll() // '/api/user/'로 시작하는 요청 모두 접근 허가
.requestMatchers("api/posts/{id}").permitAll()
.requestMatchers(HttpMethod.GET, "api/posts").permitAll()
.anyRequest().authenticated() // 그 외 모든 요청 인증처리
);
2. 질문에 답하기
처음 설계한 API 명세서에 변경사항이 있었나요? 변경 되었다면 어떤 점 때문 일까요? 첫 설계의 중요성에 대해 작성해 주세요!
답 : 설계상의 변경이 있었습니다. 게시글을 지울때 DeleteRequestDto를 생성하였습니다. 쉽지않은 것 같습니다. 설계를 좀 더 정확하게 해낸다면 개발할때 속도가 붙을 것 같습니다.
ERD를 먼저 설계한 후 Entity를 개발했을 때 어떤 점이 도움이 되셨나요?
답 : 관계매핑에 도움이 되었던것 같습니다.
JWT를 사용하여 인증/인가를 구현 했을 때의 장점은 무엇일까요?
답 : 서버에 세션저장소등을 놓지 않고 클라이언트에 쿠키로 저장되니 서버에 부담이 적습니다.
반대로 JWT를 사용한 인증/인가의 한계점은 무엇일까요?
답 : JWT의 길이가 길어질수록 네트워크 처리속도가 길어질 수 있습니다.
만약 댓글 기능이 있는 블로그에서 댓글이 달려있는 게시글을 삭제하려고 한다면 무슨 문제가 발생할까요? Database 테이블 관점에서 해결방법이 무엇일까요?
답 : 댓글과 게시글간의 외래키 설정되어있다면 댓글을 모두 삭제한 후 게시글을 삭제해야 할것입니다.
해결방법으로는 외래키 설정 시 on delete cascade를 설정하여 부모 레코드가 삭제시 자식 레코드도 삭제되도록 해야합니다.
IoC / DI 에 대해 간략하게 설명해 주세요!
답 :
IoC : 제어의 역전으로, 개발자가 직접 new 를 해서 객체를 생성하는 것이 아닌 IoC 컨테이너가 제어를 맡아 객체를 생성해주는 것을 말합니다.
DI : 의존성 주입으로, 사용하려는 객체를 직접 생성하는 것이 아니라 외부(IoC 컨테이너 등)으로부터 객체를 주입받는 것입니다.
장점으로는 객체간 결합을 느슨하게 하여 계층간 코드가 변경이 되어도 다른 계층은 영향을 받지 않도록 설계가 가능하여 SOLID의 5대 원칙중 OCP(개방-폐쇄원칙)를 위반하지 않을 수 있습니다.
같은 동기님 자료 참조