백엔드 개발자와 SQL과는 떼려야 뗄 수 없는 존재라 생각한다.
백엔드 개발 과정에서 필수로 만나게 되는 것이 데이터베이스기 때문이다.
이 데이터베이스와 소통하는 핵심 도구가 SQL이기 때문에 백엔드 개발자의 필수 역량으로는 SQL이 꼭 필요하다고 생각한다.
ORM : Object Relational Mapping, 객체 관계 매핑
먼저 ORM에 대해 알아보자.
ORM은 객체(Object)와 데이터베이스 테이블(Relation) 사이의 데이터를 매핑해주는 도구다.
ORM을 통해서 개발자는 SQL을 직접 작성하지 않고, 객체 지향적인 방식으로 데이터를 조작할 수 있다.
객체와 테이블 매핑 : ORM은 프로그래밍 언어의 객체를 데이터베이스의 테이블에 매핑, 각 객체는 데이터베이스의 한 행, 객체의 속성은 테이블의 열에 대응
SQL 자동 생성 : ORM은 데이터베이스와의 상호작용을 위해 필요한 SQL 쿼리를 자동으로 생성, 이 덕분에 SQL 쿼리를 직접 작성하지 않고도 데이터를 관리할 수 있음
추상화 : ORM은 데이터베이스와의 상호작용을 추상화, 데이터베이스의 특정 구현에 종속되지 않고 데이터 조작을 수행할 수 있도록 함.
이는 데이터베이스 변경 시 코드의 수정 범위를 최소화할 때 도움이 됨.
트랜잭션 관리 : ORM은 트랜잭션을 관리하여 데이터의 일관성을 보장
여러 데이터 조작 작업을 하나의 트랜잭션으로 묶어 원자성을 유지할 수 있음
ORM의 장점에는 다음이 있다.
Java: JPA (Hibernate)
Python: SQLAlchemy, Django ORM
예: userRepository.save(user) 한 줄로 회원 정보를 DB에 저장할 수 있음.
ORM의 한계와 단점은 3가지로 분류해서 알아보자.
따라서 실무에서는 복잡한 로직은 SQL 또는 Native Query로 직접 작성하는 경우가 많음
마지막으로 각자 장단점이 존재하는 SQL과 ORM을 균형있게 사용하는 법을 알아보자.
JPQL (Java) : 객체지향 쿼리 언어
Native Query : SQL을 직접 작성하여 성능 최적화
SQLAlchemy Core (Python) : ORM 위에 SQL 문법을 섞어 사용
단순 CRUD : ORM 사용
복잡한 통계/보고서 : SQL 직접 작성
성능이 중요한 기능 : SQL 튜닝 및 인덱스 설계
개인적은 생각으로 백엔드 개발자는 SQL이 ORM보다 효율적일 상황을 구분해야 하고,
ORM의 단점을 알고 ORM 보다 효율적인 쿼리를 짤 수 있을 정도까지 알아야 한다고 생각한다.
자바 ORM 표준 JPA 프로그래밍 1 - SQL 중심적인 개발의 문제점
Java ORM의 탄생, SQL 중심적인 개발의 문제점
ORM(JPA)를 왜 사용할까?
포스코x코딩온 KDT-Web-8 6주차 회고2 - ORM
ORM이란? - 크림새우