언어별 백엔드 프레임워크 비교

2024. 1. 7. 22:32BACKEND

Python 웹 프레임워크

Python 의 다양한 라이브러리 사용 가능 → 데이터, 머신러닝 관련 라이브러리가 다른 언어보다 제공이 잘 된다.

Django

  1. MTV (Model - Template - View) 패턴을 사용 → 역할에 따라 독립적으로 개발되기 때문에 유지보수가 수월하고 확장이 용이하다.
  2. 테스트 관련 라이브러리 제공
  3. Django ORM 을 이용하여 편리하게 데이터베이스 접근
    1. SQL 쿼리를 직접 사용하지 않고도 파이썬 객체를 사용해 DB 를 다룰 수 있다. → DB 종류에 의존하지 않음 → 추후 DB 가 바뀌더라도 유연하게 대처 가능
  4. 자체 Admin 페이지 제공
  5. 지속적인 업데이트
    1. 23년 12월에 Django 5.0 이 나올 만큼 개발자들이 지속적으로 업데이트를 해주고 있다. (물론 다른 프레임워크도..)
from django.test import TestCase
from myapp.models import Animal

class AnimalTestCase(TestCase):
		def setUp(self):
		        Animal.objects.create(name="lion", sound="roar")
		        Animal.objects.create(name="cat", sound="meow")
		
		def test_animals_can_speak(self):
		"""Animals that can speak are correctly identified"""
						lion= Animal.objects.get(name="lion")
		        cat= Animal.objects.get(name="cat")
		        self.assertEqual(lion.speak(), 'The lion says "roar"')
		        self.assertEqual(cat.speak(), 'The cat says "meow"')
# Python shell에서 실행
from myapp.models import Blog
from django.utils import timezone

# 새로운 블로그 생성
new_blog = Blog(title="My First Blog", content="This is the content of my first blog.", pub_date=timezone.now())
new_blog.save()

# 쿼리셋(데이터베이스 조회) 예시

all_blogs = Blog.objects.all()
# SELECT * FROM myapp_blog;

filtered_blogs = Blog.objects.filter(title__contains="First")
# SELECT * FROM myapp_blog WHERE title LIKE '%First%';

FastAPI

  1. API 문서 기본 제공
  2. 자체 비동기 프레임워크 사용 → NodeJS와 GO 와 대등할 정도의 높은 성능
    1. Starlette 이라는 자체 ASGI 를 기반으로 더 빠르게 처리 가능 (Django 에서도 사용 가능 하지만 일부 추가 설정 필요)

Flask

  1. 마이크로 프레임워크
    1. 기본 기능만 제공 → 구조나 기능을 자유롭게 설계 가능

 

Java 웹 프레임워크

  1. Java 언어 자체가 웹 어플리케이션 개발을 위해 나온 언어인 만큼 따로 설치 없이 Java 자체만으로, 정확히는 Java Servlet 만을 이용하여 웹 개발이 가능하다.
  2. 객체 지향 프로그래밍
    1. 객체 지향 언어인 만큼 설계를 탄탄히 잡고 개발이 가능하기 때문에 유지보수, 확장성 등이 월등히 뛰어나다.
    2. 객체 지향의 특징 (추상화, 캡슐화, 상속, 다형성) 이용 가능
  3. 다양한 Test 프레임워크 제공
    1. Junit, AssertJ 등 테스팅을 위한 프레임워크 및 라이브러리가 제공된다.

Spring

  1. MVC (Model - Controller -View) 패턴을 사용 → 역할에 따라 독립적으로 개발되기 때문에 유지보수가 수월하고 확장이 용이하다.
  2. POJO(Plain Olde Java Obejct) 프로그래밍 지향
    1. 순수 Java 만을 통해 객체 생성 → Java 와 Java 스펙에 정의된 기술만을 사용하여 객체 관리 → 단순한 코드 → 테스트, 디버깅 쉬움
  3. DI (Dependency Injection) : 의존성 주입
    1. 객체의 의존관계를 내부에서 결정하는 것이 아니라 객체 외부에서 결정한다.
    2. → 추후 의존관계가 바뀌더라도 (예를 들어 DB connection 을 Postgresql에서 mysql로 바꾸더라도) 내부 코드 변경 없이 외부에서 쉽게 바꿔줄 수 있다.
  4. AOP (Aspect Oriented Programming) 지원 : 어떤 로직을 기준으로 핵심적인 관점, 공통적인 관점으로 나누어 보고 그 관점을 모듈화
    1. 예를 들어 메소드 실행 시간 비교를 한다. 메소드 시작 전, 후에 time을 찍어주어 비교한다.
      • 만약 메소드가 1000개 라면? 하나하나 다 찍어줘야겠지만 AOP를 통해 쉽게 해결 가능
  5. Spring Boot
    1. Spring 만을 사용하면 프로젝트 초기 설정이 몹시 복잡하다(라고 한다~).
    2. 내장 서버도 직접 설정해야 되었는데 Boot는 Tomcat 이라는 기본 내장서버를 지원해 준다.
    3. 프로젝트에 사용하는 의존성들을 Starter 패키지를 통해 제공하여 간편하게 추가할 수 있다.
      web과 관련된 의존성을 설정하기 위해서는 위 사진에서 보이는 것 이상으로 많은 의존성을 버전까지 맞추며 직접 설정이 필요했으나 boot는 이것을 버전까지 직접 맞춰서 설정할 수 있게 해 준다.
  6. Spring JPA
    1. Django ORM 과 마찬가지로 Java에서 사용하는 ORM이다.

 

JavaScript 웹 프레임워크

Express.js

  1. 클라이언트 측에서 사용하는 언어를 그대로 사용 가능 하다
  2. 타입을 지정하지 않는 단점이 있었지만 타입스크립트로 커버 가능하다
  3. 다른 언어에 비해 빠르다
  4. 언어 자체가 비동기 처리를 위해 설계되었기 때문에 비동기 처리가 뛰어나다. (물론 지금은 다른 언어와 큰 차이 없다고 생각한다)

정리

데이터, 머신러닝 관련 라이브러리를 이용할 때는 Python 관련 프레임워크를 사용하자!

언어는 도구일 뿐, 웹 개발에 있어서 공통적인 지식을 가지는 것이 중요하다고 생각한다. 취향에 맞는 프레임워크를 사용하는 것이 좋다고 생각한다.