본문 바로가기
Study in Bootcamp/Main Project

[Main Project] Day 13 & 14 : 로그인 필터 구현 및 코드 리팩터링

by Bhinney 2022. 11. 26.

본 글은 프로젝트를 기록하기 위해 적은 글 입니다.

수정이 될 수 있으며, 정확하지 않을 수 있습니다.


✅ Day 13

📌 로그인 필터로 구현하기

: 현재 메인 프로젝트에 구현되어있는 로그인은 필터가 아닌 MVC이다. 직접 내가 컨트롤러에서 서비스로 보내어 프로바이더에서 토큰을 생성한 후 응답해주는 방식이다. 내가 이렇게 구현한 것은 필터로 소셜로그인을 하지 못했기 때문이다. 그래서 일일이 컨트롤러와 서비스를 써서 작업을 하였다. 하지만 저번 멘토링 시간에 멘토님이 필터를 쓰는게 더 좋은 코드일 것이라고 조언을 해주셔서 필터를 놓치 않으려고 했다. 그래서 하나의 파일을 새로 생성하여 필터를 따로 작업해보고 있다. 우선 지금은 저번에 했던 기본적인 JWT 필터 구현까지는 완료한 상태이다. 

이렇게 다시 구현하고 여러 필터들을 보고 공부해보았는데, 그 과정에서 Oauth2의 새로운 필터들을 발견하게 되었다. 저번에 써보지 못했던 필터들이여서 주말에 하나씩 해보려고 한다. OAuth2LoginAuthenticationFilter 와 OAuth2AuthorizationSuccessHandler 등 저번에는 필터를 잘 이해하지 못해서 존재하는지 몰랐던 OAuth2 필터들을 이용해서 구현해보려고 한다. 사실 잘 될지는 모르겠다. 왜냐하면 결국 부모는 비슷하거나 같기 때문이다. 그래도 우선 해보려고 한다. 


📌 AOP를 이용하여 리프레시 토큰 재발급

: 저번에 만든 AOP에 리프레시 토큰도 재발급 할 수 있는 코드를 우선 넣어 두었다. 사실 공부를 하고 찾아보니 대부분은 백에서 유효가 만료되었다는 메세지를 보내면 클라이언트에서 재발급 엔드포인트로 요청을 넣어 재발급을 받는 것 같다. 하지만 지금 상황에서는 해당까지 하기에 시간이 조금 모자라지 않을까 하는 생각이 들었고, AOP를 그냥 사용해보기로 했다. 하지만 하다가 성능이 떨어지면 뺄 것이다.(아마 성능이 떨어질 것이라고 예상이 되긴 함.. 매번 확인하기 때문에) 그래서 해당 AOP에 리프레시 토큰 재발급 코드를 추가해주었다. 사실 리프레시 토큰을 재발급 받는 API 컨트롤러가 이미 구현되어있기 때문에 해당 로직을 참조하여 코드를 구현하였다.


✅ Day 14

📌 회원 가입 후 자체 로그인으로 로직 수정

: 회원가입이 되면 바로 로그인이 될 수 있도록 로직을 수정하였다. 처음에는 그냥 회원 가입 컨트롤러와 서비스에서 HttpRequest를 이용하여 requsest.login()으로 로그인이 될 수 있도록 작업하였다. 그렇게 작업을 하고 코드 리팩터링을 하던 중 문득 생각이 들었다. '그냥 login 컨트롤러 로직으로 넘기면 되지 않나?' 그래서 그렇게 해보았더니... 왠걸 그냥 되었다. 근데 이게 좋을 코드일까는 의문이 들긴한다. 그래도 자동 로그인이 되는게 필요하다면 이렇게 가는게 좋지 않을까 하는 생각이 들었다. 프론트에서 회원가입 성공 후 login 엔드포인트를 호출하였는데 잘 안되었기 때문에 이렇게 해보게 된 것이다. 우선 이 부분도 주말에 배포 시도를 하면서 다시 확인해 보아야 할 것 같다.


📌 코드 리팩터링

: 어제부터 계속해서 코드를 깔끔하게 정리하고 있다. 사실 매번 하면서 해야하는데 구현하는 것에 욕심을 두고 하다보니 많이 코드가 지저분하거나 겹치는 게 많았다. 그래서 하나씩 정리하는데 진짜... 내 자신을 이해하지 못하는 코드들이 종종 나타났다. 그 당시에는 구현하기에 바빠 이렇게 짠 것 같은데, 다시 보고 수정하다보면 굳이 필요한가 하는 코드들이 많았다. 특히 Response에 따라 모든 Dto를 만들어 놓고 Mapper를 다 만들었는데 진짜 그거를 다시 보면서 경악을 금치 못했다... 왜 이렇게 했을까...

그리고 너무 남발한 변수들을 조금 정리했다. 굳이 길지 않다면 변수를 선언해서 넣지 않고, 그냥 바로 대입해주었다. 그랬더니 길었던 코드들이 어느새 많이 정리가 되었다. 아직 완벽하게 정리되지는 않았지만 계속 하다보면 더 깔끔하게 정리가 되지 않을까 하는 기대를 가진다. 그리고 패키지도 조금씩 정리하였다. 너무 떨어져있는 것들과 같지 않은데 뭉쳐있는 아이들이 있어서 이것들을 하나씩 분리하고 모아서 새롭게 정리하였다. 그랬더니 전보다는 그래도 구조가 괜찮다고 생각이 들었다. (나만의 착각일 수도..) 그렇게 사소한거 하나씩 고치다보니 첫 커밋은 약 40개의 파일이 바뀌었다. (패키지 이동, 삭제 포함) 그리고 두 번 째 커밋도 약 열개의 파일이 수정되었다... 도대체 어떤 코딩을 한거지 나는...!!!!! 그래도 정리가 된 코드가 나름 맘에 들어서 더 하려고 한다!!


📌  생산자 기본 이미지 생성

: 생산자의 경우 프로필 사진을 등록해주고 있다. 이때 이 프로필 사진이 null 이 아닌 기본 이미지가 있으면 좋겠다는 의견이 나왔고 디스코드 라이브로 다같이 미모티콘을 이용하여 만들었다. 그리고 이 사진을 S3 버킷에 업로드하고 디폴트 데이터로 넣어주었다. 근데 아직도 이해 안되는 부분이 있다. 처음에 해당 url을 넣었을 때에는 너무 길다고 안된다고 하던 sql친구가 조금 이따가 넣으니 되었다.. 음.... 아직도 이해할 수 없다.


📌  RDS 연결 에러

: 배포를 담당하시는 팀장님이 어제부터 RDS를 찾지 못하는 에러가 발생하셨다. 도움을 드리고 싶었지만 하지만 어제 오늘 오후에도 다... 이유를 찾지 못했다. 로컬에서는 잘 되는데 EC2에서 파일을 빌드하면 DB를 찾지 못했다. 너무 감사하게도 저녁에는 백엔드 동기 분들까지도 붙어서 도움을 주셨다. 덕분에 오늘 결국 결국!! 이유를 찾았다. dialect 문제였다. 현재 버전인 8 버전으로 작업을 해서 org.hibernate.dialect.MySQL8Dialect 이렇게 설정을 해두었었는데 이것을 org.hibernate.dialect.MySQL5InnoDBDialect 이것으로 설정하니 잘 되었던 것..! 사실 검색해보면 전자로도 잘 되는 거 같은데, 왜 문제였는지 모르겠다. 이것도 주말에 좀 더 찾아서 공부해보아야 할 것 같다!


🔥내일 할 일

  • 남은 코드 리팩터링
  • EC2 배포 시도
  • 발표 자료 준비
  • 로그인 필터로 oauth2 구현 시도
  • MySQL 공부

댓글