프로그래밍 언어/Java

java spring vs python fast api 비교

happy_life 2024. 3. 6. 15:56

이번 포스팅에서는 python fast api를 개발하기 전 python fast api와 java spring의 차이점에 대해 비교하며 공부한 것을 정리하려고 합니다. 

 

1. 파이썬과 자바의 차이

자바는 컴파일 언어인 한편, 파이썬은 인터프리터 언어입니다. 

 

컴파일 언어: 코드가 실행되기 전 컴파일러를 거쳣서 기계어로 모두 변환되어 실행되는 프로그래밍 언어

인터프리터 언어: 개발자가 작성한 코드를 기계어로 변환하는 과정없이 한줄씩 해석하여 명령을 바로 처리하는 프로그래밍 언어 

 

 

2. java spring vs python fast API 

 

Fast API

 

1. 비동시성을 지원합니다.

- 하나의 단계가 시작하면, 그 것이 끝날 때까지 기다리지 않고 다른 단계를 시작합니다.

 

2. type annotation을 지원합니다.

- 파이썬은 타입 추론을 하여, 변수 등의 타입을 명확히 확인할 수 없다는 문제를 갖고 있습니다. 하지만 type annotation을 통해 어떤 타입인지 명시적으로 볼 수 있도록 할 수 있습니다.

 

3. integration with python libraries

- Fast API는 기존의 python library들을 사용할 수 있습니다.

 

4. async가 아닌 요청에 대해 40개의 thread를 사용, async인 요청에 대해서는 하나의 thread로 코루틴을 사용하여 비동기 처리

예를 들어 I/O operation의 경우 spring 은 다른 thread가 i/o를 해올 때까지 대기해야하고, 추가로 I/O를 위한 thread를 할당하는 등 자원이 소요되지만, fast api에서는 thread 하나의 코루틴이 대기하면서 이벤트 루프에 I/O가 필요함을 말하고 이에 따라 다른 thread에서 I/O를 할 동안 기존 thread는 기다리지 않고 다른 작업을 할 수 있다.( I/O에는 최소한 1개의 thread가 필요하므로) 

 

Q) 하나의 스레드에 너무 많은 요청 (5억개)가 오면 이걸 코루틴으로 비동기 처리 할 수 있을까? 

-> 코루틴으로 효율적으로 처리하지만, 안될 수도 있다. 이런 경우

gunicorn -w 4 -k uvicorn.workers.UvicornWorker myapp:app로 스케일 업을 할 수있고,

서버를 여러대두어 스케일 아웃할 수 있다. 

 

 

 

 

Spring Boot

1. DI (의존성 주입)

- 의존성 주입을 통해 각 모듈 간의 연관관계를 설정합니다.

 

2. Enterprise Application

- 큰 프로젝트에 알맞도록 개발되었습니다.

 

3. Community and Ecosystem

- 스프링 부트는 관련 커뮤니티와 레퍼런스가 많습니다.

 

4. 다중 요청 처리

- 스레드 풀을 미리 생성하여 Thread Pool에서 하나씩 Thread를 할당합니다. 해당 Thread에서 스프링부트에서 작성한 서블릿을 거쳐 유저 요청을 처리합니다.

 

 

 

 

 

 

https://medium.com/@rajputgajanan50/request-and-response-handling-in-fastapi-db7cbbedb914

https://python.plainenglish.io/getting-started-with-fastapi-25e7a8ab0e5c

https://medium.com/@vivekpemawat/comparison-fastapi-vs-spring-boot-for-web-application-development-c1bad3125960