Closed Mingyum-Kim closed 1 year ago
Post
모듈에서는 MemberApiClient
(Feign Client) 부분의 의존성과 관련한 에러가, Member
모듈에서는 MemberController
에서 사용한 HttpServletRequest의 의존성과 관련한 에러가 각각 뜨고 있어서 Eureka Client의 테스트가 불가능한 상황이다.
Description:
Parameter 2 of constructor in com.personal.member.controller.MemberController required a bean of type 'javax.servlet.http.HttpServletRequest' that could not be found.
Action:
Consider defining a bean of type 'javax.servlet.http.HttpServletRequest' in your configuration.
Description:
Parameter 1 of constructor in com.personal.post.service.PostService required a bean of type 'com.personal.post.client.MemberApiClient' that could not be found.
Action:
Consider defining a bean of type 'com.personal.post.client.MemberApiClient' in your configuration.
해결하시오 !
그리고, 여러 환경에서 Eureka Server를 공유하기 위해서 AWS에 서버를 띄워야 합니다. https://github.com/Mingyum-Kim/Eureka-Server-for-Iamhere 여기에 서버를 올렸고, AWS에 git clone하여 서버를 실행하였습니다.
Post
모듈에서는MemberApiClient
(Feign Client) 부분의 의존성과 관련한 에러가,Member
모듈에서는MemberController
에서 사용한 HttpServletRequest의 의존성과 관련한 에러가 각각 뜨고 있어서 Eureka Client의 테스트가 불가능한 상황이다.Description: Parameter 2 of constructor in com.personal.member.controller.MemberController required a bean of type 'javax.servlet.http.HttpServletRequest' that could not be found. Action: Consider defining a bean of type 'javax.servlet.http.HttpServletRequest' in your configuration.
Description: Parameter 1 of constructor in com.personal.post.service.PostService required a bean of type 'com.personal.post.client.MemberApiClient' that could not be found. Action: Consider defining a bean of type 'com.personal.post.client.MemberApiClient' in your configuration.
해결하시오 !
public class MemberApiClientImpl implements MemberApiClient{
@Override
public String getNickname(Long id) {
return null;
}
}
MemberApiClient
의 구현체를 임의로 만들어서 AppConfig
에서 직접 설정을 하여 해결하였습니다.
인터페이스는 구현체가 없이는 빈 등록이 안되는 걸까요?
@Configuration
public class AppConfig {
@Bean
public MemberApiClient memberApiClient() {
return new MemberApiClientImpl();
}
}
Post
모듈에서는MemberApiClient
(Feign Client) 부분의 의존성과 관련한 에러가,Member
모듈에서는MemberController
에서 사용한 HttpServletRequest의 의존성과 관련한 에러가 각각 뜨고 있어서 Eureka Client의 테스트가 불가능한 상황이다.Description: Parameter 2 of constructor in com.personal.member.controller.MemberController required a bean of type 'javax.servlet.http.HttpServletRequest' that could not be found. Action: Consider defining a bean of type 'javax.servlet.http.HttpServletRequest' in your configuration.
Member
단의 오류에 대해서, private final HttpServletRequest request
와 같이 의존성 주입을 하는 것이 아니라, request 혹은 response를 불러오고 싶은 메소드에 @RequestAttribute
를 사용해서 매개변수로 넣는 것입니다.
아래와 같이!
@PostMapping("/join/confirm")
@ResponseBody
public ResponseEntity<String> confirmMail(@RequestParam("mail") String mail,
**@RequestAttribute HttpServletResponse response**) throws Exception {
String code = mailService.sendSimpleMessage(mail);
Cookie verificationCookie = new Cookie("verificationCode", code);
verificationCookie.setMaxAge(180);
response.addCookie(verificationCookie);
return ResponseEntity.ok(code);
}
추가로, 위의 confirmMail에
대한 테스트 코드로 아래와 같이 작성하였는데, response가
addCookie
를 수행하는 것을 Mocking하지 않아 에러가 발생하였습니다. 이를 해결 후 커밋하였습니다.
securityConfig
설정 탓에 많이 돌아왔다.
정리하자면, requsetMatchers
를 이용해 URI의 접근을 허용하였음에도 403에러가 계속 떴다. confirm, verity 에서만 떴었는데 HttpServletReqeuset, HttpServletResponse를 javax
가 아닌 jarkata
로 설정했어야 해서 에러가 생겼다.
⭐ 기능 설명
25 회원과 게시글의 연동을 위해 OpenFeign을 이용해 API를 호출한다.
😎 작업 내용
IamhereApplication
루트 패키지에@EnableFeignClient
어노테이션 추가Member
애플리케이션에 닉네임 호출 API 설계 후 PostService에서 호출MemberApiClient
를 posts.client 패키지에 생성🌈 추가 검토할 사항
애플리케이션 이름으로 OpenFeign Client를 등록하기 위해 Eureka 에 애플리케이션을 등록해야하는 것으로 보인다.
그리고, FeignClient는 과연 member 모듈과 post 모듈 중 어디에 선언되어야 하는 것인가 ? -> post 모듈에 작성하는 게 맞는 것 같다. 왜냐하면, post 모듈의 PostService에서 호출되는 인터페이스이므로 OpenFeign의 목적에 맞게 Post 모듈에 생성해야 한다.