밤빵's 개발일지
[TIL]20240720 ORM...? 본문
▶ ORM (Object-Relational Mapping)에 대한 이해와 사용 이유
오늘 개발일지에서는 Java 개발에서 자주 사용되는 ORM (Object-Relational Mapping)에 대해 공부하고, ORM이 제공하는 장점과 단점, 그리고 어떤 상황에서 ORM을 사용하는 것이 좋은지에 대해서 정리해봤다. 웹 미니프로젝트 때 테이블을 만들 줄 몰라서 엄청나게 고생했던 기억이있는데 요즘은 그래도 조금 배웠다고 데이터베이스 연결이 어렵지않다!
▶ ORM(Object-Relational Mapping)이란 ?
ORM(Object-Relational Mapping)은 객체 지향 프로그래밍 언어의 객체와 관계형 데이터베이스의 테이블 간의 매핑을 자동으로 처리해주는 기술이다. Java와 같은 객체 지향 언어에서 데이터를 처리할 때, 데이터베이스의 테이블과 매핑하여 객체로 변환하는 과정을 자동화해주는 역할을 한다. ORM은 개발자가 SQL 쿼리를 직접 작성하지 않고도 데이터베이스와 상호작용할 수 있게 해준다.
ORM을 사용하면 데이터베이스 테이블을 Java의 클래스(Class)로, 테이블의 행(row)을 객체(Object)로, 그리고 열(column)을 객체의 속성(Property)으로 매핑할 수 있다. 이를 통해 데이터베이스의 데이터와 객체 지향 언어의 객체를 손쉽게 변환하고 조작할 수 있다.
▶ ORM을 사용하는 이유
ORM을 사용하는 이유는 여러 가지가 있는데, 이를 통해 얻을 수 있는 주요한 장점들은 다음과 같다.
→ 객체 지향적 코드 작성:
ORM을 사용하면 데이터베이스와 상호작용할 때 객체 지향적으로 코드를 작성할 수 있다. SQL을 직접 작성하지 않아도 객체를 사용하여 데이터를 조작할 수 있으므로, 더 직관적이고 유지보수하기 쉬운 코드를 작성할 수 있다.
→ 개발 생산성 향상:
ORM 프레임워크는 복잡한 SQL 쿼리를 자동으로 생성해주기 때문에, 개발자는 비즈니스 로직에 집중할 수 있다. 또한, 데이터베이스와의 상호작용을 추상화하여 더 간단한 코드로 구현할 수 있게 해준다.
→ 데이터베이스 독립성:
ORM은 데이터베이스 독립적인 코드를 작성할 수 있게 해준다. 특정 데이터베이스에 종속되지 않고, 다른 데이터베이스로의 전환이 용이하다. MySQL에서 PostgreSQL로 데이터베이스를 변경하더라도 ORM 설정만 변경하면 된다.
→ 코드의 재사용성과 유지보수성 향상:
ORM을 사용하면 데이터베이스 연산을 처리하는 코드가 중복되지 않고, 쉽게 재사용할 수 있다. 데이터베이스 쿼리 로직이 객체에 캡슐화되기 때문에, 유지보수가 용이하다.
→ 안전한 데이터 처리:
ORM은 SQL 인젝션(Injection)과 같은 보안 취약점을 자동으로 방어할 수 있도록 설계되어 있다. ORM을 사용하면 파라미터 바인딩을 통해 데이터를 안전하게 처리할 수 있다.
▶ORM의 단점과 주의사항
ORM은 많은 장점을 제공하지만, 단점도 있어서 주의해서 사용해야 한다.
→ 성능 문제:
ORM은 기본적으로 SQL 쿼리를 자동으로 생성하는데, 이로 인해 비효율적인 쿼리가 생성될 수 있다. 특히 복잡한 데이터 조작이 필요한 경우, 직접 작성한 SQL 쿼리보다 성능이 떨어질 수 있다. 따라서, 성능이 중요한 경우 쿼리를 최적화하거나 필요 시 네이티브 쿼리(Native Query)를 사용해야 한다.
→ 학습 곡선:
ORM 프레임워크는 사용이 간편한 만큼, 배우기 쉽지는 않다. ORM의 개념과 작동 방식을 잘 이해하지 못하면, 비효율적인 코드 작성이나 예상치 못한 오류가 발생할 수 있다. ORM을 사용하기 전에 기본적인 개념과 원리를 충분히 이해하고 사용하는 것이 중요하다.
→ 복잡한 쿼리의 한계:
ORM은 복잡한 쿼리를 작성할 때 제약이 있다. 엄청 복잡한 SQL 쿼리를 ORM만으로 작성하려면 비효율적이거나 불가능할 수 있다. 이 경우에는 네이티브 쿼리나 SQL 쿼리 매퍼를 활용하는 것이 필요하다.
→ 데이터베이스 스키마 설계 변경의 어려움:
ORM을 사용하면 데이터베이스 스키마와 객체 모델 간의 일관성을 유지해야 하는데, 데이터베이스 스키마를 자주 변경해야 하는 경우 관리가 복잡해질 수 있다. 특히, 자동으로 생성된 SQL 쿼리가 데이터베이스 스키마 변경과 맞지 않게 되는 경우가 있을 수 있다.
▶ 어떤 상황에서 ORM을 사용하는 것이 좋을까?
ORM은 대부분의 애플리케이션에서 데이터베이스와 상호작용하는 데 유용하지만, 모든 상황에 적합한 것은 아니다. 다음과 같은 상황에서 ORM을 사용하는 것이 좋다.
→ CRUD(Create, Read, Update, Delete) 작업이 많은 애플리케이션:
기본적인 데이터 조작 작업이 많은 애플리케이션에서는 ORM을 사용하여 코드의 복잡성을 줄일 수 있다.
→ 객체 지향 설계와 잘 맞는 애플리케이션:
애플리케이션의 비즈니스 로직이 객체 지향 설계와 잘 맞아 떨어질 때, ORM을 사용하면 더 직관적이고 관리하기 쉬운 코드를 작성할 수 있다.
→ 데이터베이스 독립성이 중요한 경우:
데이터베이스 마이그레이션이나 여러 데이터베이스를 지원해야 하는 경우, ORM을 사용하면 데이터베이스에 독립적인 코드를 작성할 수 있어 유용하다.
→ 초기 개발 속도가 중요한 프로젝트:
초기 개발 단계에서 빠르게 결과물을 만들어야 하는 경우, ORM은 개발 생산성을 높여주기 때문에 적합하다.
▶Java에서 사용되는 주요 ORM 프레임워크
Java 에서 자주 사용되는 대표적인 ORM 프레임워크는 다음과 같다:
→ Hibernate: Java에서 가장 널리 사용되는 ORM 프레임워크로, JPA(Java Persistence API)를 구현하고 있다. 복잡한 데이터베이스 쿼리를 간단한 메서드 호출로 대체할 수 있으며, 다양한 기능을 제공한다.
→ Spring Data JPA: Spring 프레임워크와 통합되어 있고, JPA를 사용하여 데이터 접근 계층을 단순화한다. Spring Boot와의 강력한 통합으로, 개발자에게 많은 편리함을 제공한다.
→ MyBatis: 완전한 ORM은 아니지만, SQL 매퍼 프레임워크로서 SQL 쿼리를 직접 작성하고 관리할 수 있다. 복잡한 쿼리 작성이 필요한 경우 ORM과 조합하여 사용할 수 있다.
▶ 정리
ORM(Object-Relational Mapping)의 개념과 사용 이유, 장점과 단점, 그리고 언제 사용하는 것이 좋은지에 대해 정리해봤다. ORM은 객체 지향적인 코드 작성과 데이터베이스 독립성, 그리고 생산성 향상 등 여러 가지 장점을 제공하지만, 성능 문제와 복잡한 쿼리 작성의 한계와 같은 단점도 가지고 있다. 이러한 장단점을 잘 이해하고, 상황에 맞게 ORM을 활용하는 것이 중요하다!
'개발Article' 카테고리의 다른 글
[TIL]20240722 DI & IOC (0) | 2024.07.22 |
---|---|
[WIL]20240721 팀프로젝트 시작! 그리고 SOLID (0) | 2024.07.21 |
[TIL]20240719 Stream()을 쓴 이유 & 주의사항 (0) | 2024.07.19 |
[TIL]20240718 /api를 두는 이유 (0) | 2024.07.19 |
[TIL]20240717 RESTful의 의미 (0) | 2024.07.17 |