SQL 중심의 개발 vs JPA
- Coding/JPA
- 2021. 7. 30.
SQL 중심의 개발
SQL 중심의 개발에서는 개발자가 직접 SQL 매핑을 한다. 각 테이블의 관계성을 생각하여 쿼리를 짜고, 비즈니스 로직을 수행하기 위해 단계별로 쿼리를 실행시킨다. 부모 테이블 -> 자식 테이블 까지의 데이터 등록이 필요하다면 INSERT 쿼리를 여러개 수행하게 되고, 각 테이블의 연관관계 (PK, FK) 의 조인도 개발자가 직접 설계한다. 객체지향적으로 설계할수록, SQL 작업은 더 복잡해지고 힘들어진다. 매핑 작업이 늘어나게되고, 개발자가 직접 해야하는 일들이 늘어나기 때문에 그에 따른 책임감이 더욱 발생하게된다.
JPA
만약, 객체를 자바 컬렉션(Map, List) 에 저장하듯이, DB에 저장할 수는 없을까? 이러한 생각을 바탕으로 나온 것이 바로 JPA이다.
ORM
JPA를 알기전, ORM에 대해 알아야한다. ORM 프레임워크가 객체와 관계형 데이터베이스를 직접 연결해준다.
JPA는 인터페이스의 모음이다. SQL 중심의 개발에서 직접 우리가 INSERT, UPDATE 쿼리를 짜고 실행시켰다면 JPA는 단순하게 메소드 실행으로 데이터를 등록/수정/삭제 등의 행위를 수행할 수 있다. 그리고 JPA를 공부할 경우 알게되겠지만, JPA에서 Entity 의 set필드() 메소드를 실행할 경우 자동으로 해당 테이블의 데이터 UPDATE 가 실행된다.
또한 JPA의 상속에서 하나의 Entity 안의 연관관계 (계층/상속 구조)를 가진 Entity 의 정보도 SELECT 동시에 조회해올 수 있다. 예를들어 Member 엔터티에 Addr 엔터티가 1:N 매칭으로 되어있을 경우 Member 엔터티의 SELECT JPA 메소드를 호출했을때 해당 엔터티에 연관되어있는 Addr 의 데이터까지 함께 조회된다.
JPA는 같은 데이터 조회를 실행하면 첫번째는 직접 쿼리를 수행하지만, 두번째는 '캐시' 데이터를 리턴해준다.
'Coding > JPA' 카테고리의 다른 글
[SpringBoot JPA] 쿼리메소드 SELECT 정리 (0) | 2021.10.26 |
---|---|
JPA의 영속성 관리 (0) | 2021.07.30 |
JPA 처음 적용해보기 (with persistence.xml, EntityManagerFactory) (1) | 2021.07.08 |
JPA로 원하는 매개변수로 findBy 메소드 생성하기 (1) | 2021.02.14 |
[SpringBoot + JPA] Lombok @Builder 빌더패턴 적용기 (2) | 2021.02.13 |