MSA Shopping Mall - Trouble Shooting 1

김원기·2025년 3월 14일

MSA Shopping Mall

목록 보기
6/13

처음 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?

403이면 뭐 SecurityConfig에서 CORS 설정을 안해줬겠지 하고 부랴부랴 UserService에 CORS 설정을 해주었다.

왜 CORS 부터 의심했냐면 결국 두 가지의 서비스이기 때문에 port 번호가 달라 접근할 수 없다고 생각했다.

그래도 403

여튼 UserService에 CORS 설정을 해두어도 계속 403 에러가 발생했다.

그렇다면 의심해볼 내용은 역시 FeignClient일 것 같다.
FeignClient를 계속 찾아보면서

https://yijoon009.tistory.com/entry/Parameter-Handling-in-Spring-Boot-Using-Feign-Client

위의 블로그 내용이 어쩌다가 서치가 되었는데

RequestBody의 주의점으로 GET 요청에는 적합하지 않다 라는 내용이 존재한다.

POST로 바꾸자

그래서 두 곳의 메서드 모두 POST 로 변경했다.

그리고 실행해보면...

로그인 결과가 잘 나오는걸 볼 수 있다.

뒤늦게 알게 된 사실

AuthService만의 문제라고 생각해서 AuthService의 로그만 보고있었다.

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

UserService에서 친절하게 얘기하고 있었다.
POST 요청 들어오는데 POST 요청은 없어서 못받는다고...

왜 Feign Client는

RequestBody를 보낼 때 POST만 가능할까?

답은 이전 포스트에서 얘기했었다.

Feign Client는 Spring Cloud에서 제공하는 HTTP 클라이언트로, REST API 호출을 인터페이스 기반으로 간결하게 구현할 수 있도록 도와주는 라이브러리

라고 요약했는데 다른 말로 풀어보면
Feign Client는 HTTP 클라이언트를 구현한 인터페이스라서 HTTP 요청의 특성을 그대로 따르게된다.

결국 HTTP 요청 본문을 포함할 수 있는 메서드가 POST, PUT, PATCH 메서드 밖에 없다.

아마 조금 더 Feign Client를 일찍 찾아봤다면 하지 않았을 실수 같다...

profile
혼자 공부하는 블로그라 부족함이 많아요 https://www.notion.so/18067a27ac7e4f4790dde645fb3bf3d3?pvs=4

0개의 댓글