이번 포스팅에서는 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
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 자바 스트림 collect() 정리 및 사용 예제 (0) | 2022.07.06 |
---|---|
[Java] 자바 스트림 중간 연산, 최종 연산 (0) | 2022.07.06 |
[Java] 자바 Optional 정리 (0) | 2022.07.06 |
[Java] 자바 스트림으로 변환과 스트림 생성 방법 (0) | 2022.07.05 |
[Java] 함수형 인터페이스(Functional Interface) 활용 (0) | 2022.07.05 |