[Snacks 개발 일기] #6 구글 로그인정보를 통해 JWT 토큰 발급하기
2022. 12. 12. 17:31
Project/Snacks
2022.12.02 - [Project/Snacks] - [Snacks 개발 일기] #4 구글 로그인 적용하기 [Snacks 개발 일기] #4 구글 로그인 적용하기 자체 로그인 및 회원가입 기능 구현을 완료하고 구글 로그인을 적용하게 되었다 들어가기 전에 변명부터 하자면.... 우리 서비스는 JWT를 통해 로그인이 필요한 페이지(각 유저의 대시보드 페이 dev-juelee.tistory.com 이어서 작성하자면 Oauth2로그인을 한 정보를 가지고 JWT 토큰을 만드는데 성공했다 하지만 이것이 맞는 로직인지는 모르겠다 SecurityConfig에 successHandler를 추가해주니, customOAuth2UserService에서 사용하던 사용자 정보인 Authentication 객체를 받아올 수 있었..
[Snacks 개발 일기] #5 테스트코드 MockMvc에 JWT 필터 적용하기
2022. 12. 8. 16:17
Project/Snacks
제목이 이게 맞는지 모르겠다 나도 어떻게 해결했는지 모르기 때문이다 우선 문제상황은 /auth관련하여 구현을 로컬 로그인 및 회원가입 기능 구현 -> 로컬 로그인 및 회원가입 테스트 코드 작성 -> JWT 발급 및 검증 기능 구현 -> OAuth2 로그인 기능 구현 이 순으로 하였다 OAuth2를 적용하는 과정에서 정말 많은 것이 바뀌게 되었고, 다 구현하고 나서 기존의 로컬 로그인 및 회원가입이 정상적으로 작동을 할 지 의문이었다 그래서 회원가입 테스트 코드를 돌려보니 기존에 잘 되었던 테스트코드가 400에러에 "JWT 토큰이 존재하지 않습니다." 이 로그를 내뿜고 있었다 이상해서 postman으로 회원가입을 테스트해보니 잘된다....? MockMvc가 필터가 적용이 안되는 것을 깨닫고 불꽃 구글링을 ..
[Snacks 개발 일기] #4 구글 로그인 적용하기
2022. 12. 2. 17:39
Project/Snacks
자체 로그인 및 회원가입 기능 구현을 완료하고 구글 로그인을 적용하게 되었다 들어가기 전에 변명부터 하자면.... 우리 서비스는 JWT를 통해 로그인이 필요한 페이지(각 유저의 대시보드 페이지)에 접근할 수 있다 구글 로그인을 도입하면서 많은 문제가 발생하게 되었다 원래 생각하던 로직은 Applicatioin과 Google Server간에 인증 코드를 요청하고, 인증 코드로 토큰을 요청하고, 그 토큰으로 API를 요청하는 것을 생각했다 하지만 스프링 시큐리티를 사용하면 기대했던 로직과는 다르게 그냥 바로 로그인 되어버린다 이 문제를 해결하기 위해 아직도 고군분투 중이다 (살려줘.....) 따라서 지금 작성하는 글은 그냥 스프링 시큐리티의 OAuth2 로그인을 어떻게 적용하였는가?에 대한 글이다 우선 구글..
[Snacks 개발 일기] #3 filter에 Response값 지정하기
2022. 11. 27. 19:23
Project/Snacks
그동안 프론트로부터 값이 들어오면 Controller -> Service에서 처리를 한 후 미리 만들어놓은 ResponseEntity에 원하는 응답 메시지를 작성하는 코드를 사용했었다 하지만 이번에는 조금 다르다 로그인을 하기위해 유저 이메일과 비밀번호의 값을 가지고 오면 바로 Controller에서 처리하는 것이 아니라 filter에서 처리를 하는 코드이다 따라서 다음과 같이 유저 이메일과 비밀번호의 값으로 만든 authenticationToken을 통해 authenticationManger의 authenticate에서 DB에 값으로 들어온 유저 이메일이 존재하는지, 그리고 그 비밀번호가 동일한지 확인해준다 만일 로그인에 유저 이메일이 존재하지 않거나, 비밀번호가 틀릴경우 BadCredentialsEx..
[Snacks 개발 일기] #2 ResponseEntity 적용하기
2022. 11. 17. 14:29
Project/Snacks
회원가입 API를 구현 완료하고 로그인 API를 구현하기 위해 이것 저것 살펴보던 도중 Body의 status는 원하는 대로 값이 들어갔지만, 막상 Http status code는 적용이 안되는 것을 발견했다 (우측 상단 Status 참고) ReponseEntity를 적용하여 다음과 같이 수정할 수 있었다 ResponseEntity를 적용한 Controller와 Service다 API 명세에 작성한 대로 HttpStatus를 적용해주고, body는 기존에 작성한 반환값을 넣어주었다! 여기서 또 한가지 문제를 마주했다 회원가입의 성공 코드는 201 CREATED인데, 기존의 코드는 성공이면 body의 status에 무조건 200을 리턴하게 되어있어 이 부분도 원하는 status 값을 리턴하도록 수정을 해주..
[Snacks 개발 일기] #1 Parameterized Test를 사용한 테스트 코드
2022. 11. 16. 14:42
Project/Snacks
회원가입 API를 개발한 후 테스트 코드를 작성하기로 했다 UserDto에 @Validated 어노테이션을 붙여주었기에, 정상적으로 유효한 값만 작동을 하는지에 대한 테스트 코드를 작성하는 중이었다 가장 작은 단위부터 테스트하는 단위테스트의 정의를 토대로 여러 유효성 검증 테스트를 작성하던 도중, 다른 팀원분께서 각 코드마다 중복된 사용의 문제점에 대해서 우려를 나타내셨다 그리고 팀원분은 한번에 유효성 검사를 하는 메소드를 원하셨다 각각 유효성 검사를 하면서 어느 유효성 검사를 하는지 알 수 있는 코드 vs 한번에 유효성 검사를 하되 어느 유효성 검사를 하는지 잘 알지 못하는 코드 2가지 테스트 코드 작성방향의 절충안을 다른 팀원분께서 알려주셨다 그 방법은 바로 Parameterized Test Para..