안녕하세요? 오늘은 스프링 파트 중 JPA 같은 ORM을 왜 쓰는지, 그리고 JOIN개념을 JPA 관점에서 어떻게 이해하면 좋은지 공부하려 합니다.
ORM이란 무엇인가요?
ORM(Object-Relational Mapping)이란, 객체(자바 클래스)와 관계형 데이터베이스의 테이블을 매핑해서 다루게 해주는 방식입니다.
즉, DB에 데이터를 넣고 빼는 일을 할 때,
자바에서는 객체로 생각하고, DB에서는 테이블/행(row)로 저장되는데,
이 둘 사이의 간극을 ORM이 메워줍니다.
JPA는 ORM?
정확히 말하면 JPA는 ORM 표준입니다.
- JPA 자체는 규격이고
- 실제 구현체로는 보통 Hibernate 같은 구현체가 동작합니다.
그래서 실무에서 JPA 쓴다는 말은 보통
JPA 표준 + Hibernate 구현체 조합을 의미하는 경우가 많습니다.
JPA 같은 ORM을 사용하는 이유
1) SQL 중심 개발에서 반복이 많기 때문
SQL로 CRUD를 직접 하다 보면 결국 반복이 많아집니다.
- INSERT/UPDATE/SELECT/DELETE 매번 작성
- 결과를 DTO나 객체로 매핑
- 컬럼 하나 늘면 SQL/매핑 코드 전부 수정
- 도메인 로직보다 DB 작업 코드가 더 눈에 띄는 상황이 생김
JPA는 이런 반복을 줄여서 도메인 로직에 집중하게 돕습니다.
2) 객체지향 설계를 그대로”가져가기 위해서
자바에서는 자연스럽게 이런 식으로 생각합니다.
- 회원은 주문을 여러 개 가진다 (1:N)
- 주문은 여러 상품을 가진다 (N:M 또는 중간 테이블)
- 팀에는 여러 멤버가 있다 (1:N)
그런데 DB는 객체 그래프가 아니라 테이블 조인으로 데이터를 엮습니다.
JPA는 이 간극을 줄여서, 개발자가
- 회원 객체를 다루듯이
- 회원의 주문 목록을 다루는 형태로
객체 그래프 탐색을 가능하게 합니다.
3) 유지보수 비용을 줄이기 위해서
JPA를 쓰면 스키마 변경이 생겼을 때 보통 이런 장점이 있습니다.
- 필드 추가/변경 시 SQL 전부를 손으로 수정하는 일이 줄어듦
- 연관관계가 명확하면 쿼리 작성 부담이 크게 감소
- 공통 정책(감사 컬럼, 생성일/수정일 등)도 일괄 적용이 쉬움
변경에 강한 구조로 가기 쉬워집니다.
4) 성능 최적화 포인트가 표준화되어 있기 때문
JPA는 느리지 않습니다.
JPA는 성능을 다루는 대표적인 장치들이 있습니다.
- 1차 캐시 (영속성 컨텍스트)
- 변경 감지(Dirty Checking)
- 지연 로딩(Lazy Loading)
- 페치 조인(Fetch Join)
- 배치 사이즈 등의 설정
즉, 원리를 이해하고 쓰면 오히려 성능을 통제하기 좋습니다.
그럼 JOIN은?
여기서 중요한 포인트가 하나 있습니다.
JPA를 써도, DB에서 데이터가 합쳐지는 방식은 결국 JOIN입니다.
JPA는 객체로 다루게 해줄 뿐이고,
관계형 DB는 관계를 합칠 때 JOIN을 합니다.
그래서 JPA를 제대로 쓰려면 JOIN을 모르면 안 됩니다.
'Spring' 카테고리의 다른 글
| [Spring] Spring WebFlux와 Spring MVC - 1 (0) | 2026.02.11 |
|---|---|
| [Spring] controller에서 repository를 참조하는 코드를 짜면? (0) | 2026.02.02 |
| [Spring] 필터와 인터셉터 (0) | 2026.01.31 |
| [Spring] 컨테이너가 빈을 생성하는 과정 (0) | 2026.01.29 |
| [Spring] IoC, DI (0) | 2026.01.28 |