출처: 스프링 부트 핵심 가이드 - 장정우 지음
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=296591989
어플리케이션은 데이터를 주고 받는 것이 주 목적이므로 데이터베이스가 꼭 필요하다.
ORM
ORM
- ORM(Object Relational Mapping)은 객체 관계매핑을 의미한다.
- 자바와 같은 객체지향 언어에서 의미하는 객체와 RDB의 테이블을 자동으로 매핑하는 방법이다.
- 객체(클래스)는 테이블과 매핑하기 위해 만들어지는 것이 아니므로 테이블과의 불일치가 존재할 수 있다. 이때 ORM은 이 둘의 불일치와 제약사항을 해결한다!
- ORM을 이용하면 쿼리문이 아닌 코드(메소드)로 데이터를 조작할 수 있다.
ORM의 장점
- 데이터 베이스 쿼리를 객체지향적으로 조작할 수 있다.
- 쿼리문을 작성하는 양이 줄어 개발비용이 줄어든다
- 객체지향적으로 DB에 접근할 수 있어 코드 가독성을 높인다.
- 재사용 및 유지보수가 편하다.
- ORM을 통해 매핑된 객체는 독립적으로 작성되어 있어 재사용이 용이하다.
- 객체들은 각 클래스로 나뉘어 있어 유지보수가 편하다.
- 데이터 베이스에 대한 종속성이 줄어든다
- ORM을 통해 자동생성된 sql문은 객체를 기반으로 DB 테이블을 관리하기 때문에 DB에 종속적이지 않다.
- DB를 교체하는 상황에서도 비교적 위험부담이 적다.(쿼리를 직접 작성하지 않으므로)
ORM의 단점
- ORM만으로 온전한 서비스를 구현하기에는 한계존재
- 복잡한 쿼리를 사용하려면 직접 쿼리문을 작성해야한다.
- 복잡한 쿼리를 정확한 설계없이 ORM으로 구성하게 되면 속도 저하 드으이 성능 문제 발생가능
- 어플리케이션의 객체 관점과 DB의 관계관점의 불일치가 발생한다.
- 세분성 : 객체가 테이블의 수보다 많아질 수 있다.
- 상속성: RDBMS에는 상속 개념이 없다.
- 식별성 : RDBMS는 프라이머리키로 동일성을 정의하지만 자바는 두객체의 값이 같아도 다르다고 판단할 수 있다.
- 연관성 : 객체지향 언어는 객체를 참조(방향성 존재)하므로서 연관성을 나타내는 반면, RDBMS는 외래키를 삽입함으로서 연관성을 나타낸다(양방향이므로 방향성 존재 X).
- 탐색 : 자바는 객체 참조 방식으로 값에 접근하지만 RDBMS에서는 쿼리를 최소화 하고 join을 통해 여러 테이블을 로드하고 값을 추출하는 방식으로 접근한다.
JPA
JPA
- JPA(java Persistence API)는 자바진영의 ORM기술 표준으로 체택된 인터페이스 모음. 표준명세로서, JPA의 역할이 ORM의 역할이라고 보면 된다.
- 역할 : 개발자가 직접 JDBC를 구현하면 SQL에 의존하게 되는 문제등이 있어 개발의 효율성이 떨어지는데, JPA는 개발자 대신 적절한 SQL을 생성하고 데이터베이스를 조작해서 객체를 자동 매핑하는 역할을 한다.
스프링 부트 어플리케이션의 구조