Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
package site.icebang.common.health.api;
package site.icebang.common.health.controller;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import lombok.RequiredArgsConstructor;

import site.icebang.common.health.service.FastApiClient;
import site.icebang.common.health.service.HealthCheckService;

@RestController
@RequiredArgsConstructor
public class HealthCheckController {

private final FastApiClient fastApiClient;
private final HealthCheckService healthCheckService;

/**
* Spring Boot와 FastAPI 서버 간의 연결 상태를 확인하는 헬스 체크 API
Expand All @@ -21,7 +21,7 @@ public class HealthCheckController {
*/
@GetMapping("/ping")
public ResponseEntity<String> pingFastApi() {
String result = fastApiClient.ping();
String result = healthCheckService.ping();

if (result.startsWith("ERROR")) {
// FastAPI 연결 실패 시 503 Service Unavailable 상태 코드와 함께 에러 메시지 반환
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package site.icebang.common.health.service;

import org.springframework.stereotype.Service;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

import site.icebang.global.config.properties.FastApiProperties;

@Slf4j
@Service
@RequiredArgsConstructor
public class HealthCheckService {

private final RestTemplate restTemplate;

private final FastApiProperties fastApiProperties;

/** FastAPI 서버의 /ping 엔드포인트를 호출하여 연결을 테스트합니다. */
public String ping() {
String url = fastApiProperties.getUrl() + "/ping";
log.info("Attempting to connect to FastAPI server at: {}", url);

try {
return restTemplate.getForObject(url, String.class);
} catch (RestClientException e) {
log.error("Failed to connect to FastAPI server at {}. Error: {}", url, e.getMessage());
return "ERROR: Cannot connect to FastAPI";
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package site.icebang.global.config.properties;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.Setter;

/** FastAPI 연동을 위한 설정값을 application.yml에서 바인딩하는 클래스 */
@Getter
@Setter
@Component // Component로 등록하여 Spring이 Bean으로 관리하도록 함
@ConfigurationProperties(prefix = "api.fastapi") // yml의 "api.fastapi" 접두사를 가진 설정을 매핑
@Validated // 아래의 유효성 검사 어노테이션을 활성화
public class FastApiProperties {

/** FastAPI 서버의 기본 URL */
@NotBlank // 값이 비어있을 수 없음을 검증
private String url;

/** API 호출 시 적용될 타임아웃 (밀리초 단위) */
private int timeout = 5000; // 기본값 5초 설정
}
8 changes: 7 additions & 1 deletion apps/user-service/src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,10 @@ spring:
mybatis:
# Mapper XML 파일 위치
mapper-locations: classpath:mapper/**/*.xml
type-handlers-package: site.icebang.config.mybatis.typehandler
type-handlers-package: site.icebang.config.mybatis.typehandler

# 외부 API 연동을 위한 설정 섹션
api:
fastapi:
url: http://pre-processing-service:8000 # FastAPI 서버의 기본 URL
timeout: 10000 # API 요청 타임아웃 (밀리초 단위)
Loading