ORM (Object Relation Mapping) 이란?
ORM은 객체지향(OOP)의 객체(Object)와 DB의 테이블을 Mapping 시켜 RDB 테이블을 객체지향적으로 사용하게 해주는 기술이다. RDB 테이블은 객체지향적 특성(상속, 다형성 등)이 없어 Java와 같은 객체지향적 언어로 접근하는 것이 쉽지 않다. 이러한 상황에서 ORM을 사용하면 보다 객체지향적으로 RDB를 사용할 수 있다.
- 역할: 개발자가 SQL(쿼리문)을 직접 작성하지 않고, 프로그래밍 언어의 객체(Class)를 조작하는 것만으로 데이터베이스의 데이터를 생성, 조회, 수정, 삭제(CRUD)할 수 있게 해 준다.
- 패러다임 불일치 해결: 객체 지향 언어는 '객체와 상속, 참조'를 다루고, RDB는 '테이블과 외래키'를 다룬다. 이 두 구조 간의 차이(Impedance Mismatch)를 ORM 프레임워크가 중간에서 번역기처럼 해결해 준다.
쉽게 말하면, Java 객체를 저장해줘하고 명령하면 ORM이 알아서 SQL문을 만들어 DB에 날려주는 역할을 한다.
ORM의 장단점
장점 (Pros)
- 생산성 향상: 반복적이고 지루한 SQL 작성(CRUD)을 줄여주어 비즈니스 로직에 집중할 수 있다.
- 가독성 증가: 코드가 SQL이 아닌 직관적인 메서드 형태(예: member.save())로 작성되어 의도를 파악하기 쉽다.
- 유지보수 용이: DB 스키마가 변경될 때, SQL을 일일이 수정하는 대신 객체 모델만 수정하면 된다.
- DBMS 종속성 제거: 특정 DB(MySQL, Oracle 등)에 종속적인 SQL 문법을 사용하지 않고, ORM이 설정에 맞춰 적절한 방언(Dialect)으로 변환해 준다.
단점 (Cons)
- 학습 곡선: ORM 프레임워크 자체를 잘 다루기 위한 학습 비용이 높다. (잘못 쓰면 성능 재앙이 발생한다.)
- 성능 이슈 (N+1 문제): 편리함 뒤에 복잡한 쿼리가 숨겨져 있어, 의도치 않게 수많은 쿼리가 실행되어 성능이 저하될 수 있다.
- 복잡한 쿼리 작성의 한계: 통계, 분석 등 매우 복잡한 쿼리는 ORM만으로 구현하기 어렵거나 비효율적일 수 있다.
Java의 ORM JPA, MyBatis
JPA가 등장하기 이전에는 MyBatis라는 Obkect Mapping 기술을 이용하였는데, MyBatis는 Java 클래스 코드와 직접 작성하고 SQL 코드를 Mapping 시켜주어야 했다. 반면, JPA와 같은 ORM 기술은 객체가 DB에 연결되기 때문에, SQL문을 직접 생성하지 않고 표준 인터페이스 기반으로 처리한다는 점에서 차이가 있다.


최근 관심도를 보면, 국내에서는 아직 마이바티스를 사용하는 경향이 높다.
한국이 MyBatis가 많은 이유
우리나라의 시장은 대부분이 SI 또는 금융이기 때문에 비즈니스가 매우 복잡하다.
또한 안정성과 속도를 중요시하기 때문에 직접 작성하는 Mybatis을 사용하는 것이 나을 수 있다.
둘 중에 뭘 선택해야 하나요?
현재 프로젝트의 성격, 팀의 기술 스택, 그리고 개발 환경에 따라 결정된다.
특히 한국 개발 시장에서는 과거 SI(시스템 통합) 프로젝트의 영향으로 MyBatis 점유율이 높았으나, 최근 IT 기업과 스타트업을 중심으로 JPA가 표준으로 자리 잡고 있다.
언제 JPA를 선택해야 할까?
"일반적인 웹 애플리케이션 개발, 스타트업, 자체 서비스라면 무조건 JPA를 추천한다."
- 이유:
- 생산성과 유지보수: 단순 반복적인 CRUD(등록, 수정, 삭제) 쿼리를 짤 필요가 없어 개발 속도가 비약적으로 빨라진다.
컬럼 하나 바꿀 때 쿼리 수십 개를 고치는 지옥에서 벗어날 수 있다. - 패러다임 일치: 객체 지향 언어(Java)의 장점을 100% 활용하여 복잡한 비즈니스 로직을 구현하기 좋다.
- 데이터베이스 독립성: 나중에 DB를 MySQL에서 PostgreSQL로 바꿔도 코드를 거의 수정할 필요가 없다.
- 전 세계적인 트렌드: 구글링할 때 나오는 자료의 양과 질이 압도적이다.
- 생산성과 유지보수: 단순 반복적인 CRUD(등록, 수정, 삭제) 쿼리를 짤 필요가 없어 개발 속도가 비약적으로 빨라진다.
- 추천 조합: Spring Data JPA + QueryDSL (복잡한 조회 쿼리는 QueryDSL로 해결하여 JPA의 단점을 보완하는 것이 현대적인 표준이다.)
언제 MyBatis를 선택해야 할까?
"복잡한 통계/분석 시스템, 혹은 이미 설계된 레거시 DB를 다뤄야 한다면 MyBatis가 유리할 수 있다."
- 이유:
- 복잡한 쿼리 제어: 수천 줄짜리 통계 쿼리나, 고도로 최적화된(Hint 등을 사용하는) 쿼리를 그대로 실행해야 할 때 유리하다.
- 레거시 DB: DB 설계가 객체 지향적이지 않고 엉망이거나, 반정규화가 심하게 되어 있어 JPA로 매핑하기가 고통스러운 경우.
- 팀의 역량: 팀원들이 JPA를 전혀 모르고 SQL에만 능숙하며, 단기간에 프로젝트를 끝내야 하는 경우.
ORM, 반드시 사용해야 하는가?
결론: "반드시"는 아니지만, "현대적인 웹 개발"에서는 사실상 표준이다.
- 사용해야 하는 이유:
- 웹 애플리케이션의 복잡도가 증가하면서, 데이터를 단순히 CRUD 하는 것을 넘어 도메인 로직(비즈니스 규칙)을 객체 지향적으로 관리하는 것이 유지보수에 훨씬 유리하기 때문이다.
- 사용하지 않아도 되는 경우:
- 초대용량 트래픽 처리가 최우선이라 극한의 쿼리 최적화가 필요한 경우.
- 단순한 통계성 데이터만 뽑아내는 프로젝트.
- 이런 경우에는 SQL Mapper(MyBatis)나 Native SQL을 섞어서 사용하는 하이브리드 방식을 주로 채택한다.
면접 답변식 요약
ORM은 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해 주는 기술입니다.
이를 통해 SQL 중심의 개발에서 객체 중심의 개발로 전환하여 코드의 가독성과 생산성을 높일 수 있고, 유지보수를 용이하게 한다는 장점이 있습니다.
하지만, 자동으로 SQL을 생성해 주기 때문에 N+1 문제와 같은 성능 이슈가 발생할 수 있습니다. 따라서 실무에서는 JPA와 같은 ORM을 기본으로 사용하되, 복잡한 쿼리는 QueryDSL이나 SQL Mapper를 병행하여 사용하는 것이 좋다고 생각합니다.
'Daily Dev Q&A 정리 템플릿' 카테고리의 다른 글
| 26.01.09 JPA와 MyBatis를 비교해서 설명해주세요. (0) | 2026.01.09 |
|---|---|
| 26.01.08 JPA의 영속성 컨텍스트란? (0) | 2026.01.08 |
| 26.01.06 WAS와 웹서버란? (0) | 2026.01.06 |
| 26.01.05 JPA를 사용하는 이유 (0) | 2026.01.05 |
| 26.01.02 restfull 설계방식에 대해서 설명하고 이를 적용할 때 에매한 경우의 예시를 들어, 보통 이럴 때 어떻게 하는지를 설명해주세요. (0) | 2026.01.02 |