본문 바로가기

Spring boot/Blog 프로젝트 만들기(JPA)

스프링 부트 DB 접근 기술 ORM

ORM(object-relational mapping)은 자바의 객체와 데이터베이스를 연결하는 프로그래밍 기법이다. 예를 들어, RDBMS에 name과 grade라는 컬럼에 각각 '고길동'과 '3'이라는 값이 들어있다고 생각해보자. 이 값을 자바 코드에서 사용하려면 JDBC API를 포함한 다양한 설정과 사전 지식이 필요하다. 또한, SQL에 대한 공부도 필수적이다. 하지만 ORM을 사용하면 데이터베이스에 존재하는 값들을 마치 자바 객체처럼 사용할 수 있다. 쉽게 말해, SQL을 전혀 몰라도 자바 언어로만 데이터베이스에 접근하여 값을 받아와 사용할 수 있다. 즉, 객체와 데이터베이스를 자바 언어로만 다룰 수 있게 하는 기술이 바로 ORM이다. 물론 이 기술은 자바뿐만 아니라 다양한 언어에서도 제공된다.

 

 

 

 

ORM 기술에 장단점

장점

  • SQL을 직접 작성하지 않고 사용하는 언어로 데이터베이스에 접근할 수 있다.
    • ORM을 사용하면 SQL 쿼리를 직접 작성할 필요 없이, 자바와 같은 프로그래밍 언어를 통해 데이터베이스 작업을 수행할 수 있습니다. 이는 개발 생산성을 높이고, 코드의 가독성을 향상시킵니다.
  • 객체지향적으로 코드를 작성할 수 있기 때문에 비즈니스 로직에만 집중할 수 있다.
    • ORM은 데이터베이스 작업을 객체지향 프로그래밍(OOP) 방식으로 처리할 수 있게 해주므로, 개발자는 비즈니스 로직에만 집중할 수 있습니다. 데이터베이스 작업이 애플리케이션의 다른 부분과 자연스럽게 통합됩니다.
  • 데이터베이스 시스템이 추상화되어 있기 때문에 방언(MySQL, Oracle 등) 전환을 한다고 해도 추가 작업이 거의 없다.
    • ORM은 데이터베이스 독립성을 제공하여, MySQL, Oracle 등과 같은 다른 데이터베이스로 변경할 때 추가 작업이 최소화됩니다. 이는 데이터베이스 간에 이식성을 높여줍니다.
  • 매핑하는 정보가 명확하기 때문에 ERD에 대한 의존도를 낮출 수 있고 유지보수에 유리한 점이 많다.
    • ORM은 클래스와 테이블 간의 매핑 정보를 명확하게 정의할 수 있어, 데이터베이스의 ERD(엔터티 관계 다이어그램)에 대한 의존도를 낮추고, 코드 변경에 유연하게 대응할 수 있습니다.

단점

  • 프로젝트의 복잡성이 커질수록 사용 난이도가 올라간다.
    • 프로젝트가 복잡해질수록 ORM 설정과 사용이 어려워질 수 있습니다. 특히, 복잡한 데이터 모델링과 성능 튜닝이 필요할 때 ORM의 사용이 복잡해집니다.
  • 복잡하고 무거운 쿼리는 ORM으로 해결이 불가능한 경우가 많다.
    • ORM은 단순한 CRUD 작업에는 적합하지만, 복잡한 조인이나 성능이 중요한 쿼리에는 한계가 있을 수 있습니다. 이러한 경우, 직접 SQL을 작성하는 것이 더 효율적일 수 있습니다.

 

모델 클래스에서 어노테이션 사용 예시
@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private String email;

    // 기본 생성자
    public User() {}

    // 생성자
    public User(String name, String email) {
        this.name = name;
        this.email = email;
    }
    
}
728x90