Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Groovy문법
- 알고리즘
- aws
- controller
- Java8
- 서버
- API
- 어노테이션
- 롬복
- 정보처리기사필기
- java
- 프로그래머스
- 자바
- 롬복사용시주의할점
- git
- 생성자
- 정보처리기사
- 롬북
- CICD
- Docker
- 빌드자동화도구
- 빌드스크립트
- 정처기공부
- 무중단배포
- 완전탐색알고리즘
- PULL방식아키텍쳐
- 정처기필기
- spring
- 정처기
- 시계열디비
Archives
- Today
- Total
우당탕탕 개발일지
[DataBase] ORM 이란? 본문
애플리케이션은 데이터(리소스)를 주고받는 것이 주 목적이다.
정상적으로 로직이 동작하기 위해서는 '데이터베이스'가 꼭 필요하다.
SpringBoot에서 데이터베이스와 매핑할 때 사용하는 ORM에 대해 공부해보자!
📌ORM 이란?
- Object Relational Mapping : 객체 관계 매핑
- java 에서의 객체는 class ↔ RDB(Relational Database)의 테이블
👉 자동으로 매핑하는 방법 - class와 DB의 테이블과는 매핑을 위해 만들어진 것이 아니기 때문에 어쩔 수 없는 불일치가 존재
👉 ORM은 이러한 둘의 제약사항을 해결하는 역할을 함 - ORM을 이용하면 쿼리문을 작성하지 않고 코드(메서드)만으로 데이터를 조작할 수 있음
ORM의 장점
- 쿼리문을 작성하는 양이 줄어 개발 비용이 줄어듦
- 객체지향적으로 데이터베이스에 접근 할 수 있어 코드의 가독성을 높임
- ORM 통해 매핑 된 객체는 모두 독립적으로 작성되어 있어 재사용이 용이함
- 객체들은 각 클래스로 나뉘어 있어 유지보수가 수월함
- ORM을 통해 자동 생성된 SQL문은 객체를 기반으로 DB테이블을 관리하기 때문에 데이터베이스에 종속적이지 않음
- 데이터베이스를 교체하는 상황에서도 비교적 적은 리스크를 부담
ORM의 단점
- 복잡한 서비스의 경우 직접 쿼리를 구현하지 않고 코드로 구현하기 어려움
- 복잡한 쿼리를 정확한 설계 없이 ORM만으로 구성하게 되면 속도 저하 등 성능 문제 발생
- 애플리케이션의 객체 관점과 데이터베이스의 관계 관점의 불일치 발생
- 세분성(Granularity)
: DB의 테이블 수와 애플리케이션의 엔티티 클래스의 수가 다를 경우(클래스의 수 > 테이블 수) - 상속성(Inheritance)
: RDBMS에는 상속이라는 개념이 없음 - 식별성(Identity)
: 식별과 동일성의 문제 발생
RDBMS는 기본키(primary key)로 동일성을 정의
JAVA는 두 객체의 값이 같아도 다르다고 판단 - 연관성(Associations)
: 연관성을 나타낼 때
객체 지향 언어는 객체를 참조 / 방향성 존재
RDBMS는 외래키(foregin key)를 삽입 / 양방향의 관계로 방향성 존재 X - 탐색(Navigation)
: JAVA와 RDBMS는 객체에 접근하는 방식이 다름
JAVA는 특정 값에 접근하기 위해 '객체 참조' 같은 연결 수단을 활용(연결하고 또 연결해서 접근하는 그래프 형태)
RDBMS는 쿼리를 최소화하고 조인(JOIN)을 통해 여러 테이블을 로드하고 값을 추출하는 접근 방식
- 세분성(Granularity)