반응형
Open Feign
HTTP Client 도구로 외부 API 호출을 쉽게 할 수 있도록 도와주는 라이브러리입니다.
장점
- 인터페이스와 어노테이션 기반으로 동작하기 때문에 반복적이고 일반적인 패턴을 최소화합니다.
- Spirng MVC 어노테이션을 사용할 수 있습니다.
- Spring Cloud 기술들과 통합이 쉬습니다.
의존성 추가 (Gradle)
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign:4.0.3'
FeignClient 활성화
@SpringBootApplication
@EnableFeignClients
public class BlogApplication {
public static void main(String[] args) {
SpringApplication.run(BlogApplication.class, args);
}
}
- @EnableFeignClients를 통해 Open Feign 활성화합니다.
Feign Client 인터페이스 작성
@FeignClient(name = "member-service", url = "${application.config.members-url}")
public interface MemberClient {
@GetMapping
MemberDTO findMember();
@GetMapping("/{staus}")
void status(@PathVariable("status") int status);
@PostMapping("/info")
void createBoard(@RequestParam Long memberId);
}
Feign Client 인터페이스를 작성하여, 원격 서비스의 REST API를 정의합니다.
Spring에서는 @FeignClient 어노테이션을 통해 간편하게 작성할 수 있습니다.
@FeignClient에서 자주 사용하는 옵션으로는 name, url, configuration이 있습니다.
- name : Feign Client의 인터페이스 이름을 작성합니다. (자유롭게 구분될 수 있게 작성)
- url : REST ful 통신할 경로를 입력합니다. 위에서는 application.yml에 경로를 설정하여 불러와서 사용했습니다.
- configuration : 모든 Feign에 적용할 공통적인 설정을 작성합니다. (예시 Header 값 설정)
Feign으로 Spring 어노테이션을 똑같이 사용할 수 있습니다. @PathVariable, @RequestParam, @RequestBody 또한 사용할 수 있으며, 자유롭게 적용하여 사용하면 됩니다.
application.yml
application:
config:
members-url: http://localhost:8080/members/
GET 사용 시 DTO 전달받기
@Getter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class MemberDTO {
private String email;
private String nickname;
private String profile_url;
}
A-Service의 DTO (값을 응답받는 쪽)
@Getter
public class MemberInfoResponse {
private String email;
private String nickname;
private String profile_url;
}
Member-service의 DTO (값을 반환하는 쪽)
Feign Client 인터페이스에 @GetMapping으로 값을 전달받으려고 할 때, 호출하는 Rest API의 반환 값 구조와 동일해야 합니다.
Service에서 구현한 Feign 사용하기
@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class BlogQueryService {
private final BlogRepository blogRepository;
private final MemberClient memberClient;
public MyBlogResult getBlogInfo(Long blogId) {
// 나의 블로그 정보 조회
BlogInfo blogInfo = toBlogInfo(findById(blogId));
// 나의 개인 정보 조회
MemberDTO memberDTOInfo = memberClient.findMember();
return toMyBlogResult(memberDTOInfo, blogInfo);
}
}
- Service에서 사용할 Feign Client를 등록합니다.
- 다른 스프링 빈과 똑같이 의존성 주입을 받은 후 안에 있는 메서드를 사용하여, 다른 서비스 간의 통신을 주고받습니다.
feign log 활성화
feign:
client:
config:
default:
loggerLevel: full
logging:
level:
com.example: debug
Open Feign은 서로 다른 마이크로서비스 간의 통신을 간편할 수 있습니다.
반응형
'Spring Framework > Spring Cloud' 카테고리의 다른 글
[Spring Gateway] Spring Cloud Gateway Cors 설정하기 - MSA 환경Cors 설정 방법 (0) | 2024.05.09 |
---|---|
[Spring Cloud] Spring에서 Feign Client에 공통 Header 설정하기: Configuration을 활용 방법 (0) | 2024.04.08 |