본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
https://fastcampus.info/4n8ztzq
안녕하세요 :)
오늘은 "50일의 기적 AI 환급반_ 대규모 채팅 플랫폼으로 한 번에 끝내는 실전 대용량 트래픽 커버 완전판 " 챌린지에 도전하는 열여덟번째 날입니다.
열일곱번째 날에는 왜 MySQL을 선택했나. RDB와 NoSQL의 차이는 무엇인가에 대해 배웠었는데요. 오늘은 과연 어떤 내용들을 배울 수 있을지 공부하고 포스팅 하도록 하겠습니다.
오늘 학습할 내용의 제목은,
Part 3. 채팅 서비스 핵심 기능 개발 > Ch 1. 대화 기록 저장을 위한 데이터베이스 연동 >
03. 왜 JPA를 선택했나 ORM과 SQL Mapper의 차이는 무엇인가
입니다.
🔗 왜 JPA를 선택했나? ORM과 SQL Mapper의 차이는 무엇인가?
- 이번 포스팅에서는 우리가 왜 JPA를 선택했는지, ORM과 SQL Mapper의 차이는 무엇인지 구체적으로 정리해보려 합니다.
- 백엔드 개발에서 데이터베이스와 소통하는 방식은 다양합니다. 직접 SQL을 쓰기도 하고, MyBatis 같은 SQL Mapper를 쓰거나, 요즘에는 JPA나 Hibernate 같은 ORM 프레임워크도 많이 사용하죠.
- 이번 포스팅에서는 우리가 왜 JPA를 선택했는지, ORM과 SQL Mapper의 차이는 무엇인지 구체적으로 정리해보려 합니다.
🧭 ORM(Object-Relational Mapping)이란?
- ORM은 객체와 관계형 데이터베이스를 자동으로 매핑해주는 기술입니다.
- 즉, 자바의 클래스와 DB의 테이블을 1:1로 연결해서 객체를 조작하면 자동으로 SQL이 생성되고 실행되도록 도와줍니다.
✅ 주요 특징
- SQL을 직접 작성하지 않아도 데이터베이스 조작 가능
- 엔티티(Entity) 객체 중심의 개발 방식
- DB와의 의존성이 낮아지고 유지보수가 쉬움
- JPA, Hibernate 등이 대표적인 ORM 구현체
📄 SQL Mapper란?
- SQL Mapper는 SQL을 직접 작성하지만, 그 결과를 객체와 자동 매핑해주는 도구입니다. MyBatis가 대표적인 프레임워크죠.
✅ 주요 특징
- SQL을 직접 작성 → 복잡한 쿼리 컨트롤 가능
- DB 중심의 사고가 필요한 개발 방식
- 매핑은 자동이지만, 로직은 수동으로 작성해야 함
- SQL 유지보수가 번거로울 수 있음
⚖️ ORM vs SQL Mapper: 무엇이 다른가?
구분 | ORM (JPA, Hibernate 등) | SQL Mapper (MyBatis 등) |
SQL 작성 | 필요 없음 (자동 생성) | 직접 작성해야 함 |
개발 방식 | 객체 중심 | SQL 중심 |
유지보수 | 도메인 코드 위주, 일관된 로직 | SQL 변경 시 많은 수작업 |
학습 난이도 | 러닝 커브 있음 | 비교적 쉬움 |
복잡한 쿼리 | 상대적으로 불편 | 자유롭고 명확함 |
대표 사용처 | 도메인 주도 설계, 엔터프라이즈 앱 | 데이터 중심 시스템, 보고서 시스템 등 |
✅ 우리가 JPA를 선택한 이유
- JPA를 선택한 데에는 명확한 기술적, 설계적 이유가 있습니다.
1️⃣ 도메인 주도 설계(Domain-Driven Design)에 적합
- 우리 프로젝트는 비즈니스 로직 중심의 설계가 중요합니다.
- JPA는 엔티티 중심으로 로직을 구성하므로 도메인 모델을 자연스럽게 반영할 수 있습니다.
2️⃣ 반복적인 SQL 코드 제거
- CRUD 작업에 반복되는 SQL이 많았는데, JPA 덕분에 기본적인 쿼리는 거의 생략 가능합니다.
- save, findById, delete 등은 자동으로 제공됩니다.
3️⃣ 연관 관계 처리의 간결함
- 엔티티 간 연관 관계 설정(@OneToMany, @ManyToOne 등)이 직관적이어서
복잡한 JOIN 쿼리를 작성하지 않아도 됩니다.
4️⃣ 트랜잭션 관리와 캐싱
- JPA는 영속성 컨텍스트를 통해 객체 상태를 자동 감지하고
변경 감지를 통해 자동으로 SQL을 생성합니다. - 1차 캐시와 트랜잭션 관리를 활용해 성능 최적화가 용이합니다.
📌 물론 JPA도 단점은 있다
- JPA가 모든 프로젝트에 맞는 것은 아닙니다. 복잡한 통계성 조회나, SQL 튜닝이 필요한 상황에서는 직접 SQL을 컨트롤할 수 있는 MyBatis가 유리합니다.
- 또한, 초기 러닝 커브가 있으며, 객체 상태 변화(Detached, Persistent 등)에 대한 이해가 필요합니다.
- 기술 선택의 핵심은 문제 해결에 가장 적합한 도구가 무엇인가 라고 생각합니다. ORM이 무조건 좋고, SQL Mapper는 무조건 구식이라는 시각은 위험합니다.
- 하지만 이번 프로젝트에서 선택한 JPA는 객체 중심 설계와 잘 맞고, 반복적인 SQL을 줄여 생산성을 높이며, 유지보수성과 확장성까지 고려한 전략적 선택이라고 보여집니다. 결국 중요한 건 도구를 잘 이해하고, 우리의 문제 상황과 맞닿아 있는지를 판단하는 힘이라고 생각합니다.