Spring 기반으로 외부 API를 호출할 때, 예전에는 RestTemplate을 많이 사용했습니다.
하지만 최근에는 Spring Cloud OpenFeign을 많이 사용한다고 하는데요
이번 글에서는 OpenFeign이 무엇인지, 그리고 기존 방식과 어떤 차이가 있는지 정리해보겠습니다.
1. OpenFeign이란?
Spring Cloud OpenFeign은 인터페이스 선언만으로 외부 REST API를 호출할 수 있게 해주는 선언형 HTTP 클라이언트입니다.
기존에는 HTTP 요청을 직접 코드로 작성해야 했다면,
OpenFeign은 "어떤 API를 호출할지"를 선언하면 실제 구현은 자동으로 생성됩니다.
@FeignClient(name = "user-service")
public interface UserClient {
@GetMapping("/users/{id}")
UserDto getUser(@PathVariable Long id);
}
이 인터페이스만 정의하면, Spring이 런타임에 실제 HTTP 호출 코드를 만들어줍니다.
2. 기존 방식: RestTemplate
OpenFeign을 이해하려면 먼저 RestTemplate 방식부터 보면 좋습니다.
ResponseEntity<UserDto> response = restTemplate.exchange(
"http://user-service/users/{id}",
HttpMethod.GET,
new HttpEntity<>(headers),
UserDto.class,
id
);
특징
- HTTP 요청을 직접 구성해야 함
- URL, Header, Body, Method를 모두 코드로 작성
- API가 많아질수록 반복 코드 증가
👉 유연하지만 코드가 점점 복잡해지는 구조
3. OpenFeign 방식
같은 기능을 OpenFeign으로 구현하면:
@FeignClient(name = "user-service")
public interface UserClient {
@GetMapping("/users/{id}")
UserDto getUser(@PathVariable Long id);
}
그리고 서비스에서:
@Service
@RequiredArgsConstructor
public class UserService {
private final UserClient userClient;
public UserDto getUser(Long id) {
return userClient.getUser(id);
}
}
특징
- 인터페이스 기반 선언형 방식
- HTTP 호출 코드 없음
- 가독성이 훨씬 좋음
👉 "어떻게 호출할지"가 아니라 "무엇을 호출할지"에 집중
4. RestTemplate vs OpenFeign 비교
핵심 차이
| 항목 | RestTemplate | OpenFeign |
| 방식 | 명령형 (imperative) | 선언형 (declarative) |
| 코드 스타일 | 직접 HTTP 호출 | 인터페이스 선언 |
| 가독성 | 낮아질 수 있음 | 매우 좋음 |
| 유지보수 | API 많아질수록 어려움 | 구조적으로 관리 가능 |
| Spring Cloud 연동 | 직접 처리 | 자동 지원 |
5. OpenFeign의 장점
1) 코드가 매우 간결해진다.
HTTP 호출 코드가 사라지고, 인터페이스만 남습니다.
👉 API 스펙이 코드 구조로 드러남
2) Spring MVC 어노테이션 그대로 사용
- @GetMapping
- @PostMapping
- @PathVariable
- @RequestParam
- @RequestBody
👉 기존 Spring 개발 경험 그대로 사용 가능
3) Spring Cloud와 자연스럽게 통합
OpenFeign은 단순 HTTP 클라이언트가 아니라 Spring Cloud와 함께 사용할 때 진가가 나옵니다.
- LoadBalancer (서비스 이름 기반 호출)
- CircuitBreaker
- Retry
- Logging
- Micrometer
👉 MSA 환경에서 매우 강력
4) 클라이언트별 설정이 가능
각 API 클라이언트마다 설정 분리 가능
feign:
client:
config:
user-service:
connectTimeout: 5000
readTimeout: 5000
loggerLevel: FULL
👉 서비스별로 timeout, retry, 로그를 다르게 설정 가능
6. OpenFeign이 특히 좋은 경우
다음 상황이라면 거의 필수입니다.
- MSA 환경에서 서비스 간 호출이 많을 때
- API 개수가 많고 구조적으로 관리하고 싶을 때
- 인증, 로깅, timeout 설정을 통일하고 싶을 때
- 코드 가독성을 중요하게 생각할 때
7. RestTemplate이 더 나은 경우
반대로 이런 경우에는 RestTemplate이 더 단순할 수 있습니다.
- 호출 API가 몇 개 안 되는 경우
- 요청 구조가 매우 동적일 때
- HTTP 레벨 제어가 매우 세밀하게 필요할 때
8. 결론
정리하면
RestTemplate은 "직접 HTTP 요청을 작성하는 방식"
OpenFeign은 "HTTP 요청을 선언으로 정의하는 방식"
그리고
RestController는 API를 만드는 도구,
OpenFeign은 API를 호출하는 도구
'Spring' 카테고리의 다른 글
| [Spring] ERROR 페이지 처리 (0) | 2023.01.15 |
|---|---|
| Tomcat 캐시 메모리 증량 (0) | 2022.12.16 |
| 스프링 시큐리티 아키텍처(Spring Security Architecture) (0) | 2022.12.13 |
| 토이 프로젝트_ STEP 05(AWS Route53) (0) | 2022.11.20 |
| 토이 프로젝트_STEP 04(Jenkins pipeline 배포) (0) | 2022.11.20 |







