✅ 결론: 프론트엔드는 꼭 Eureka에 등록할 필요 없음!
Eureka는 주로 백엔드 서비스 간의 통신을 위한 서비스 디스커버리 역할을 합니다.
프론트엔드(React, Vue, Angular 등)는 Eureka에 등록하지 않아도 동작 가능하며,
보통 게이트웨이(Gateway)를 통해 백엔드 서비스와 통신하는 방식이 일반적입니다.
📌 프론트엔드를 Eureka에 등록하는 이유는?
✅ Eureka에 프론트엔드를 등록하면,
✅ FeignClient 또는 Load Balancer를 통해 다른 서비스와 통신 시 서비스 이름만 사용 가능
즉,
- frontend-service를 Eureka에 등록하면
- FeignClient에서 http://frontend-service 로 접근 가능
👉 하지만 프론트엔드는 보통 사용자의 웹 브라우저에서 실행되기 때문에
Eureka에 등록할 필요가 없음!
📌 프론트를 Eureka에 등록하지 않아도 되는 이유
1️⃣ 프론트엔드는 클라이언트 측에서 실행됨 (백엔드 서비스가 아님!)
- Eureka는 서버 간의 통신을 위한 서비스 디스커버리 역할을 수행
- React, Vue, Angular 같은 프론트엔드는 백엔드 서버가 아니므로 Eureka에서 관리할 필요 없음!
- 브라우저에서 실행되므로 직접 Eureka에서 다른 서비스 정보를 가져올 수 없음.
2️⃣ 프론트엔드는 보통 API Gateway를 통해 백엔드와 통신
- API Gateway가 백엔드와의 통신을 관리하므로 프론트는 Gateway 주소만 알면 됨
- 예: http://localhost:8080/api/users
- Gateway가 내부적으로 Eureka에서 user-service를 찾아 라우팅
3️⃣ FeignClient는 서버-서버 간의 통신을 위한 것
- FeignClient는 백엔드 서비스 간의 통신을 편리하게 하기 위한 도구
- 프론트엔드는 FeignClient를 사용할 수 없음! (백엔드 전용)
- 프론트엔드는 fetch()나 axios() 같은 HTTP 요청을 직접 보냄
📌 프론트를 Eureka에 등록하지 않았을 때의 FeignClient 사용 방법
(1) Eureka에 프론트가 등록된 경우
- Eureka에 프론트가 등록되었다면, FeignClient에서 서비스 이름만으로 요청 가능
- 예제:
@FeignClient(name = "frontend-service")
public interface FrontendClient {
@GetMapping("/api/data")
String getData();
}
(2) 프론트를 Eureka에 등록하지 않은 경우
- 프론트엔드가 Eureka에 없으므로 FeignClient가 직접 URL을 지정해야 함
- 예제:
@FeignClient(url = "http://localhost:3000")
public interface FrontendClient {
@GetMapping("/api/data")
String getData();
}
- 프론트가 Eureka에 없기 때문에 명시적으로 URL을 적어줘야 함!
📌 프론트를 Eureka에 등록해야 하는 경우는?
✅ 프론트엔드가 서버에서 실행될 경우
- 만약 프론트엔드가 Node.js(Express) 기반의 SSR(Server-Side Rendering) 애플리케이션이라면,
Eureka에 등록할 수도 있음. - 예를 들어 Next.js(SSR) 또는 Nuxt.js(SSR) 같은 백엔드 역할을 하는 프론트엔드는 Eureka에 등록 가능.
✅ Eureka를 활용하여 프론트엔드를 동적으로 로드 밸런싱할 경우
- 다수의 프론트엔드 서버(예: frontend-service-1, frontend-service-2)가 존재하고,
- 사용자 요청을 여러 프론트엔드 인스턴스로 분산 처리해야 한다면 Eureka에 등록할 수도 있음.
✅ BFF(Backend For Frontend) 패턴을 사용할 경우
- 특정 프론트엔드를 위한 전용 백엔드(BFF)를 만들고, 이를 Eureka에 등록하는 경우.
- 일반적인 SPA(React, Vue, Angular)에서는 불필요.
📌 결론
❌ 프론트엔드는 보통 Eureka에 등록하지 않음.
❌ Eureka는 백엔드 간의 서비스 디스커버리 역할을 하는 것이 일반적.
✅ 프론트엔드는 API Gateway를 통해 백엔드와 통신하는 것이 일반적.
✅ FeignClient는 서버-서버 간 통신을 위한 것이므로, 프론트엔드와는 무관함.
✅ 프론트를 Eureka에 등록하지 않았다면 FeignClient에서 URL을 직접 지정해야 함.
👉 프론트엔드는 API Gateway를 거쳐 백엔드에 요청하면 해결됨! 🎯
'Spring > 10. rest-api' 카테고리의 다른 글
| @JsonCreator 사용 (0) | 2025.03.18 |
|---|---|
| MSA에서 Security는 어디에 적용해야 할까? (0) | 2025.03.18 |
| MSA 환경에서 프런트 엔드를 위한 서버구조 (0) | 2025.03.18 |
| Controller 와 FeignClient에서의 @PathVariable 역할 (0) | 2025.03.17 |
| FeignClient (0) | 2025.03.17 |