처음 FeignClient를 사용했을 때 인터넷 자료가 전부 PathVariable 방식이었다.
물론 지금은 PathVariable 방식을 사용해도 큰 문제가 없으나
나중을 고려해서 RequestBody 방식으로 수정하여 사용하려 했다.
@FeignClient(name = "msa-user-service", url = "http://localhost:8081") // in local environment
public interface UserServiceClient {
@GetMapping ("v1/users/email")
UserDto findUserByEmail(@RequestBody EmailRequestDto email);
}
UserController 내에서도 당연히 정보를 얻어오는것이니까 GetMapping을 사용했고
그에따라 FeignClient 역시 GetMapping으로 설정했다.
처음에는 이렇게 하고 포스트맨에서 api를 호출해보니 403에러가 발생했다.
403이면 뭐 SecurityConfig에서 CORS 설정을 안해줬겠지 하고 부랴부랴 UserService에 CORS 설정을 해주었다.
왜 CORS 부터 의심했냐면 결국 두 가지의 서비스이기 때문에 port 번호가 달라 접근할 수 없다고 생각했다.
여튼 UserService에 CORS 설정을 해두어도 계속 403 에러가 발생했다.


그렇다면 의심해볼 내용은 역시 FeignClient일 것 같다.
FeignClient를 계속 찾아보면서
https://yijoon009.tistory.com/entry/Parameter-Handling-in-Spring-Boot-Using-Feign-Client
위의 블로그 내용이 어쩌다가 서치가 되었는데
RequestBody의 주의점으로 GET 요청에는 적합하지 않다 라는 내용이 존재한다.
그래서 두 곳의 메서드 모두 POST 로 변경했다.

그리고 실행해보면...

로그인 결과가 잘 나오는걸 볼 수 있다.
AuthService만의 문제라고 생각해서 AuthService의 로그만 보고있었다.

그렇지만 403만 알려주니까 왜 그런지 몰랐는데...

UserService에서 친절하게 얘기하고 있었다.
POST 요청 들어오는데 POST 요청은 없어서 못받는다고...
RequestBody를 보낼 때 POST만 가능할까?
답은 이전 포스트에서 얘기했었다.
Feign Client는 Spring Cloud에서 제공하는 HTTP 클라이언트로, REST API 호출을 인터페이스 기반으로 간결하게 구현할 수 있도록 도와주는 라이브러리
라고 요약했는데 다른 말로 풀어보면
Feign Client는 HTTP 클라이언트를 구현한 인터페이스라서 HTTP 요청의 특성을 그대로 따르게된다.
결국 HTTP 요청 본문을 포함할 수 있는 메서드가 POST, PUT, PATCH 메서드 밖에 없다.
아마 조금 더 Feign Client를 일찍 찾아봤다면 하지 않았을 실수 같다...