현대의 웹 애플리케이션에서 관계형 데이터베이스는 빠질 수 없는 요소입니다.
하지만 관계형 데이터베이스가 계속해서 웹 서비스의 중심이 되면서 모든 코드는 SQL중심이 되어버려
현업 프로젝트 대부분이 코드보단 SQL로 가득하게 되었습니다.
(우스갯소리로 개발자 == SQL매퍼라고도 한다.)
관계형 데이터베이스는 어떻게 데이터를 저장할지에 초점이 맞춰진 기술이고, 객체지향 프로그래밍 언어는 메시지를 기반으로 기능과 속성을 한 곳에서 관리하는 기술인데 이로 인한 불일치에서 오는 패러다임을 해결하기 위해서 JPA가 만들어졌습니다
JPA는 자바 ORM(Object Relational Mapping) 기술에 대한 API 표준 명세를 뜻합니다.
ORM(Object-Relational Mapping)이란 자바의 객체와 관계형 DB를 맵핑하는 것으로 DB의 특정 테이블이 자바의 객체로 맵핑되어 SQL문을 일일이 작성하지 않고 객체로 구현할 수 있도록 하는 프레임워크입니다.
JPA는 인터페이스이므로 사용하기 위해서는 구현체가 필요합니다.
ex) Hibernate, Eclipse Link
작동 원리는 아래 그림과 같습니다.
JPA는 애플리케이션과 JDBC 사이에서 동작합니다.
즉, 개발자가 JPA 사용 시, JPA 내부에서 JDBC API를 사용하여 SQL을 호출하고 DB와 통신합니다.
JPA를 그럼 왜 써야 할까?
위에 언급하였듯이, 코드보단 SQL이 가득한 문제를 해결합니다. 즉, SQL 중심의 개발 문제를 해결합니다.
SQL 중심의 개발 문제로는
- 지루한 코드가 반복됩니다.
- 객체 지향과 RDB 간의 패러다임이 불일치됩니다.
- 객체 지향은 상속 관계를 지원합니다.
- 모델링 과정에서의 문제를 해결합니다.
- 객체 그래프 탐색에서의 문제를 해결합니다.
SQL을 직접 다루게 되면 발생하는 문제점은?
자바로 작성한 애플리케이션은 JDBC API를 사용해서 SQL을 DB에 전달하는데, 문제는 객체를 DB에 CRUD 하려면 너무 많은 SQL과
JDBC API를 코드로 작성해야 한다는 점.
반대로 JPA 썼을 때 장점으로
- 반복적인 CRUD SQL을 작성하지 않아도 되므로 생산성이 향상된다.
- 조회된 결과 객체 매핑 자동으로 처리해 준다.
- 객체중심의 개발을 통해 생산성을 증가시킨다.
- 벤더독립성 (다른 DB사용해도 이를 JPA에 알려주기만 하면 된다)
- 필드가 추가되거나 삭제되어도 JPA가 과정을 대신 처리해 주어 수정해야 할 코드가 현저히 줄어든다.
'WEB' 카테고리의 다른 글
Redis Lock 동시성 해결하기 (0) | 2024.05.01 |
---|---|
인터셉터와 리졸버 (0) | 2024.04.12 |
JWT 활용기 (0) | 2024.04.12 |
Oauth를 사용해 카카오 로그인 구현 (0) | 2024.04.12 |
리사이징 적용기 with Marvin (0) | 2024.03.14 |
Spring Cloud Config 도입기 (0) | 2024.03.08 |
OAuth 2.0 동작 방식 (0) | 2023.06.05 |
웹 서버와 웹 애플리케이션 서버 (0) | 2023.04.01 |