
일단 Spring Boot를 주 프레임워크로 사용한 입장에서 생각한 내용이다.
반박 시 니 말 맞음 ㅇㅇ
이건 너무나 기본적인 내용이라 간단하게 짚고 넘어가겠다.
Java Spring Boot -> Java 기반의 애플리케이션 프레임워크
Fastapi -> Python 기반의 웹 프레임워크
그럼 직접 경험해본 부분별로 프레임워크를 비교해볼건데 이것 또한 나의 주관적인 생각이 많이 담겨있으니 참고 바란다.
Spring Boot < Fastapi
솔직히 말하면 인텔리제이를 처음 설치하는것도 꽤나 쉽진 않았고 유료 IDE라는 점에서 첫 인상이 좋지 않았다. 하지만 직관적이어서 사용하기 편했고, spring boot와 같이 사용할 때 여러 빌드 도구들을 통해서 편하게 사용했던것 같다. 처음 이해하기엔 시간이 걸렸지만 이해하고 난 이후에는 여러 기능들에 익숙해지면서 활용도가 높았던것 같다.
fastapi를 처음 접해보면서 사용했던 vscode자체는 무료임에도 다양한 플러그인을 통해서 개발 환경을 지정해줄 수 있다는 장점이 가장 크게 다가왔는데, 이건 처음 써보는 프레임워크를 적응하기에 도움을 많이 준 부분이다. 비록 인텔리제이에 익숙해져있던 나의 시각으로서는 UI가 불편했지만 편의에 맞게 테마와 같은 플러그인을 사용할 수 있다는것이 첫 진입장벽을 낮춘다고 생각했다.
Spring Boot > Fastapi
사실 이건 당연하게 생각했던 부분인데 Spring Boot 같은 경우에는 상당한 case에 대해서 관련 레퍼런스, 블로그가 잘 되어있다. Fastapi 같은 경우에는 요새 많이 올라오고 있긴 하지만 여전히 Spring Boot에 비해 부족한 느낌이다.
이 부분은 해당 프레임워크를 학습하는 부분에 있어서 크게 작용을 하기 때문에 중요하게 여기는 부분인데 Fastapi를 주 프레임워크로 업무를 하고 있는 입장에선 많이 아쉬울 뿐이다.
Spring Boot > Fastapi
이 부분 같은 경우도 Fastapi에 적응해가는 중인 입장에서 Fastapi같은 경우는 형식이 강제되지 않아서 "이렇게 해도 돼..?" 라고 생각이 들 정도였다. 그만큼 자유도가 높았지만 그에 따라서 팀 단위로 작업할 경우 명확한 컨벤션을 정해두지 않으면 유지보수에 큰 어려움이 있었다.
그에 비해 Spring Boot는 어느정도 형식이 정해져있고 3 Layered Architecture, MVC 패턴을 활용하기에 구조가 정형화 되어 있고, 개념적/심리적(?) 으로도 안정감을 가져다준다고 생각한다.
이 구조에 의해 프로젝트가 진행되면 유지보수에 용이하고 코드 재사용성, 확장성, 협업에 있어서 상당한 강점을 가진다고 생각한다.
Spring Boot >> Fastapi
Spring Boot 에서는 JPA를 사용하는데 db와 객체 간의 매핑을 처리해주기 위한 ORM이 존재한다. 이는 직접 SQL문을 작성하지 않고 간단한 CRUD정도는 사용이 가능하다. 이를 통해 생산성이 향상하고 JPA는 db 벤더에 종속적이지 않아서 db 전환에 있어서도 용이하다.
repository.save()
repository.findById(ID id)
repository.findAll()
repository.deleteById(ID id)
.
.
.
이 외에도 페이지네이션, 정렬 기능도 기본적으로 제공하고 커스텀 쿼리를 작성해 기본 메서드를 보완하여 사용할 수 있다.
그에 비해 fastapi는 SQLAlchemy와 같은 ORM을 사용하여 db와의 연결을 관리하는데 기본적으로 Fastpi는 비동기를 지원하기 때문에 AssyncSession, Session와 같은 객체를 이용한 세션 관리를 해주어야 한다.
Fastapi는 싱글스레드로 실행이 되며, 비동기 처리를 통해서 멀티스레드와 "유사"한 효과를 낼 수 있지만 실제로 멀티스레드인 spring boot와 비교하면 비동기 I/O 처리를 통해 단순한 RESTAPI와 같은 기능은 빠른 속도를 지니지만 여기엔 큰 결함이 숨어있다고 생각한다.
Spring Boot는 JVM이라는 가상환경에서 실행되고 가비지 컬렉션을 통해 불필요한 리소스에 해당하는 내용을 스스로 판단해 제거한다. 이는 메모리를 효율적으로 사용하는데 큰 도움을 준다.
Fastapi는 CPU 집약적인 작업보다는 I/O 중심의 작업이 더 적합하며 비교적 가벼운 웹 애플리케이션이나 비동기 기반의 서비스를 구축하는데 최적화되어 있다. 또한 Python의 런타임 환경에 의존할 수 밖에 없어서 Spring Boot 와는 다르게 메모리 관리나 효율성, 안전성이 확실히 불안정하다는 느낌을 받았다.
그냥 애플리케이션 특성에 맞는 프레임 워크를 사용하자
내가 생각하는 바는 이와 같다.
하지만 하나의 프레임워크를 고집하다간 상황에 맞는 프레임워크를 사용하지 못하는 경우도 있을 것이라고 생각한다.
그런데 생각보단 하나의 프레임워크를 다뤄보면 큰 틀은 비슷하며 공식문서를 통해서 받아들일 수 있는 수단은 존재하였다.
언어는 그저 개발도구로 두고 우리는 이를 모두 활용할 줄 알아야 하는 개발자가 되어야 한다고 생각한다.
이 글은 대략 11월 말에 작성이 되었지만 이제서야 올리는건 안비밀