Project/TroubleShooting

Spring 서버와 FastAPI를 연결하여 효율적인 웹 서비스 설계

w.llama 2024. 12. 16. 17:01

1. RestTemplate을 활용한 Spring ↔ FastAPI 통신

Spring 서버에서 RestTemplate을 사용하면 FastAPI와의 통신이 간단합니다. Spring은 강력한 웹 로직 처리를 제공하고, FastAPI는 AI 모델과 같은 고성능 연산 처리를 효율적으로 처리할 수 있기 때문에 이 둘을 결합하면 각 프레임워크의 강점을 살릴 수 있습니다.

RestTemplate으로 FastAPI 호출하기

Spring에서 RestTemplate을 활용해 FastAPI의 엔드포인트를 호출할 수 있습니다. 예를 들어, 이미지를 업로드하여 FastAPI에서 AI 처리를 요청하고 결과를 받아오는 구조는 다음과 같습니다

import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.http.ResponseEntity;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpEntity;
import org.springframework.http.MediaType;

@Service
public class FastApiService {

    private final RestTemplate restTemplate = new RestTemplate();

    public String callFastApi(byte[] imageBytes) {
        String url = "http://localhost:8000/process-image"; // FastAPI 엔드포인트

        // 요청 헤더 설정
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.MULTIPART_FORM_DATA);

        // 요청 데이터 생성
        ByteArrayResource resource = new ByteArrayResource(imageBytes) {
            @Override
            public String getFilename() {
                return "image.png";
            }
        };
        HttpEntity<ByteArrayResource> requestEntity = new HttpEntity<>(resource, headers);

        // FastAPI 호출
        ResponseEntity<String> response = restTemplate.postForEntity(url, requestEntity, String.class);
        return response.getBody(); // FastAPI에서 반환된 결과
    }
}

2. Spring과 FastAPI를 결합해야 하는 이유

Spring의 강점: 웹 로직 처리

  • 복잡한 비즈니스 로직, 데이터베이스 통합, 사용자 인증 및 권한 관리를 Spring에서 처리합니다.
  • 다양한 라이브러리와 강력한 보안 기능을 제공하므로 웹 애플리케이션 개발에 적합합니다.

FastAPI의 강점: AI 및 고성능 처리

  • AI 모델이나 복잡한 연산 처리를 FastAPI로 분리하면 높은 성능을 유지할 수 있습니다.
  • 비동기 지원과 Python 생태계와의 통합으로 AI 모델 실행에 매우 유리합니다.
  • Docker를 활용하면 FastAPI를 별도의 컨테이너에서 실행하여 확장성과 관리 편의성을 확보할 수 있습니다.