9주차 (2022.12.19~12.23)

우롱차·2022년 12월 26일
0

나의 인턴일지

목록 보기
31/33

이번주에도 프로젝트 문의사항을 보내주셔서 테스트를 해보았다.
문의사항 메일을 처음 받았을 때는 '내가 이걸 어떻게 대응하지'라는 생각에 두려웠는데, 점점 적응하고 있는 것 같은 느낌이 든다.

메일을 읽고 센서 아이디를 찾는 과정이 어려웠는데 이제 찾는 방법도 조금 알 것 같다.
그래도 나중에 내가 직접 메일로 답변을 해야 한다고 생각하니 아직 조금 무섭긴 하다 😅


스프링 시큐리티 과제를 끝냈다!

다른 분들이 스프링 시큐리티가 엄청 어렵다고 하셨는데 그 이유를 알 것 같았다.
스프링 시큐리티의 이론을 먼저 학습하고 코드를 구현하기에는 그 내용이 방대해서 일단 검색하면서 코드 구현을 했다.
구글링을 했을 때 AuthenticationProvider 안에서 UserDetailsService를 호출하는 코드가 대부분이어서 UserDetailsService를 사용하지 않고 구현하는 코드를 찾기가 어려웠다.
며칠만에 겨우 블로그 하나를 찾아서 힌트를 얻고 기능을 구현해냈다 😇

대부분의 코드에서는 DB에서 정보를 불러올 때 UserDetailsService의 loadByUsername 메서드를 사용했는데, 그 메서드를 사용하지 않고 DB의 내용을 불러오는 코드를 직접 작성하면 되는 거였다.

이번에도 코드 리뷰를 받으면서 스프링 시큐리티에 대해 이해할 수 있었다.
일단 다른 사람의 코드를 따라하면서 기능을 구현하느라 필요없는 코드도 많았는데, 코드 리뷰를 받고 필요한 코드만 남기면서 정리하니 너무 기분이 좋았다!

장장 2시간이 걸린 코드 리뷰 시간이었는데, 계속 질문거리가 생기다 보니 오래 걸렸던 것 같다.
소장님도 마지막엔 조금 지쳐보이셨다..ㅋㅋㅋ

csrf 공격에 대해서도 알게 되었다.
스프링 시큐리티는 기본적으로 csrf 공격을 방어하는데, csrf 토큰을 설정해주지 않으면 POST 요청을 모두 막는다.
따라서 로그인, 회원가입 등 jsp에서 POST 요청을 보내는 기능들이 모두 작동하지 않기 때문에 처음에는 csrf 공격을 방어하지 않도록 SecurityConfig에서 csrf().disable()로 설정하여 코드를 작성했다.

하지만 csrf 공격을 방어하지 않으면 보안상 좋지 않기 때문에 csrf 방어를 허용하도록 다시 코드를 작성해보라고 하셨다.
해결법은 생각보다 간단했다.
csrf 토큰을 설정해서 jsp에서 POST 요청을 보낼 때 토큰에 값을 넣어주면 된다.

csrf 토큰을 설정하니 주소창에 /logout, /delete를 입력했을 때 GET 요청으로도 로그아웃, 탈퇴되는 현상을 막을 수 있었다.
GET 요청으로도 로그아웃, 탈퇴가 가능하다면 사용자가 csrf 공격을 받았을 때 원치 않는 로그아웃, 탈퇴가 발생할 수 있기 때문이다.

기능이 모두 완성되고 코드도 깔끔하게 정리되니 너무 뿌듯했다 😆
스프링 시큐리티의 동작 과정과 코드 작성법에 대해서도 익히게 되어서 행복하다.
다시 삶의 만족도가 상승하는 느낌!
역시 성취감은 삶에 있어 중요한 것 같다 😎

profile
아직 따끈따끈합니다🍵

0개의 댓글