본문 바로가기

Server Development/Data API

Data API - Basic Concept

 

이번 블로그에서는 Spring(JAVA Application) 과 DB(Mysql, Oracle, Maria DB 등)을 연결하는 방법에 대해서 알아보려고 한다.

먼저 기초적인 개념으로 영속성이 무엇인지 알아보자.

 

영속성

- 영원히 계속되는 성질이나 능력

 

영속화

- 물리적인 저장소에 데이터를 저장하는 행위

- 자바에서 SQL을 통해 RDBMS에 데이터를 저장하는 행위

- 객체지향 애플리케이션에서는 객체를 특정 저장소에 저장하는 행위를 의미

 

즉, DB에 데이터를 저장함으로써 데이터의 영속성을 유지시키는 것을 영속화라고 한다.

 

 

 

밑에 전체적인 흐름을 확인하며 어떻게 저장을 하는지 알아보려고 한다.

기본적으로 MVC 구조에서 Model과 Controller를 좀더 세분화 하면 다음과 같다.

  • Client - Controller - Service - DAO(Repository) - DB

1. Client는 Controller에게 DTO(VO)를 전달합니다.

2. Controller는 Service에게 DTO(VO)를 전달합니다.

3. Service는 기존의 DTO에 세부사항을 더해 DAO(Repository)에 전달을 합니다.

4. DAO는 전달받은 DTO를 DB에 전달합니다.

 

(+)

DTO : 계층간 데이터 교환을 위한 객체

Entity : 실제 데이터베이스에 저장할 테이블과 1:1로 매핑되는 객체, 즉, 테이블에 저장할 내용과 가장 가까운 객체

 

 

 

 

DAO는 어떻게 구현을 할까?

 

-> DAO와 DB를 통신가능하게 해주는 API가 필요 (SQL Mapper or ORM)
-> SQL Mapper : 자바 객체와 쿼리 결과를 매핑

-> ORM : 자바 객체와 RDBMS의 '테이블, Entity'를 매핑

 

 

 

  • 1. SQL Mapper

프로그램안에 SQL문을 작성해 DTO를 SQL문과 연결짓는 방식.

- SQL문장으로 직접적으로 데이터베이스 데이터를 다룸.

- 자바코드와 SQL코드를 클래스와 xml파일로 분리하며 개발자가 작성한 SQL의 수행결과를 객체로 매핑해서 받아주는 API

- 개발자가 SQL문 작성

- 장점 : 동적 쿼리 생성에 유용, 튜닝 과정 용이, SQL, 코드가 분리되어 관리가 용이

- 단점 : SQL문을 개발자가 직접 작성한다, 유지 보수 어렵다, DB에 종속된다.(DB의 종류 변경이 어렵다.)

- ex) MyBatis, JDBC Templetes 등

 

 

 

 

  • 2. ORM

프로그램안에 DTO를 Entity로 연결지어 전달하는 방식.

사실, 결과적으로 SQL문을 사용하긴하나, SQL문 작성을 JPA가 해주는 방식이다.

- 객체를 통해 간접적으로 데이터베이스를 다룸.

- 객체와 관계형 데이터베이스 사이에서 매핑을 담당하며 SQL을 생성하여 패러다임의 불일치(객체 <-> SQL)를 해결해주는 API

- 개발자가 SQL문 작성 안함.

- 장점 : 쿼리를 작성안하기에 개발자가 비즈니스 로직에 집중하게 해줌, 재사용성 높음, DB에 대한 종속성 줄어듬(DB 변경 용이).

- 단점 : 쿼리를 가끔 작성해야할 때가 존재, 복잡해지면 ORM으로만 구현 어려움, 잘못 구현하면 속도 저하, 대형쿼리 튜닝 필요

- ex) JPA 등 (JAVA 진영에서는 ORM으로 JPA를 표준으로 사용 중)

 

JPA 하위

- Hibernate : 가장 많이 사용되는 Library

- EclipseLink

- DataNucleus

 

Hibernate

- Spring Data JPA

   - 스프링에서 Hibernate에서 자주 사용되는 기능들을 좀 더 쉽게 사용할 수 있게 구현 한 것

   - DTO를 Entity로 변환해 놓는다면 데이터 접근 계층 개발 시 인터페이스만 작성하면 CRUD 사용 가능.

 

 

 

 

 

 

'Server Development > Data API' 카테고리의 다른 글

JPA - @Query with Spring JPA  (0) 2023.04.05
JPA - Query Method with Spring JPA  (0) 2023.04.05
JPA - Auditing  (0) 2023.04.04
JPA - EntityManager, EntityMapping, Context  (0) 2023.04.04
JPA - Spring JPA  (0) 2023.03.29