본문 바로가기

Spring&IntelliJ

JPA (ORM매핑에 관해서)객체의 세상과 테이블의 세상(Feat. Persistence Framework)

# UI 설계

출처: https://www.youtube.com/watch?v=koZtvSPdRXI&list=PLOSNUO27qFbvzGd3yWbHISxHctPRKkctO&index=2

요약
1.@Repository어노테이션이 붙는 클래스가 자원접근 레이어에 속하는 클래스임.

2. 자원접근 레이어가 곧 Persistence Layer임

자원접근 레이어란? 데이터가 저장소에 저장되는 형식을 결정하는 층(저장소의 종류는 아래 그림과 같이 다양하며 자원 접근레이어의 모듈에 의해 저장되는 형식이 결정됨)

UI설계 즉, HTML 문서 작성시 고려해야 할 것은 크게 두 가지임. Data를 어떻게 보여 주는가, 사용자가 요청하는 Event를 어떻게 처리할 것인가.

서버-클라이언트 설계모델을 봤을때 프론트 쪽은 그림의 앞부분이고 백쪽은 뒷부분임 여기서 Reposivory에 있는 (동그라미는 클래스들임)클래스들은 DB와 소통하면서 영속적으로 데이터를 관리하는 역할을 함. @Repository 가 붙은 Repository비슷한 이름을 가진 클래스가 이 역할을 하는 것임. 그리고 이 클래스들이 Persistence Layer에 있는 클래스들임(그림에서는 PL로 표시됨. BL은 Business Layer의 준말) BL에 있는 클래스들과 PL에 있는 클래스들 간에 의사소통을 할때에는 인터페이스를 통해 진행됨. 자원 접근 레이어에 관한 내용은 Repository 영역에 있는 클래스들에 관한 내용입니다. 그림으로 표현하자면 아래 동그라미 안의 부분.(좀더 쉽게 표현하면 @Repository어노테이션이 붙은 클래스가 자원 접근 레이어에 속하는 클래스임)

위 그림을 다시 정리한것이 아래 슬라이드임.

JDBC, JPA의 구현체모두 자원접근레이어에 속해있는 관계형 데이터접근 클래스(모듈)임. 즉 우리가 배우려는 것은 관계형 데이터베이스에 접근하는 방식이 JPA방식인 것을 배우려는 것임(기존에는 JDBC방식이었음).

(잠깐 복습해 보자면 위 그림에서 비즈니스 로직과 자원 접근 레이어가 의사소통하는 방식이 모두 동일한 인터페이스를 이용하여 의사소통한다고 그림으로 나타내어 지고 있다. 이것이 내가 이전에 배웠던 느슨한 has-a+관계주입에 관한 아래 코드임. 위 그림의 각각의 파일접근 모듈(클래스), 관계형 데이터 접근 모듈(클래스)...등등이 하나의 인터페이스를 구현한 형식임. 그리고 Service는 그 인터페이스에 의존하고 있음.

 

얼추 알고 있지만 확실하게 알고 있어야 할것을 정리하고자 한다. 클래스는 테이블에 대응하고 객체는 테이블의 low(로우, 행)에 대응한다. 즉 DB에 있는 데이터 하나가 하나의 객체인 것이다. 

객체의 고유성은 Identity(Primary Key)로 증명됨.

자바 어플의 객체와 RDBMS의 패러다임의 불일치를 해결해주는 프레임워크를 Persistence Framework라고 함.

SQL Mapping: 대표적으로 MyBatis라이브러리가 있다. 기존의 자바 어플리케이션에 있던 SQL문을 모두 없애고(자바코드와 SQL코드의 분리) SQL문을 객체로 매핑함

 

Persistence Framework를 사용하면 DB와의 연결 설정을 로직에 따로 코딩해주지 않아도 되기 때문에 기존에는 DAO클래스라고 불렀던 것을 SQL Mapper, ORMapper라고 다르게 명명하고 있음.

왜 SQL Mapper방식에서는 SQL코드 작성이 필요한가? 객체를 내가 원하는 SQL문에 연결시켜야 하기 때문이다. 즉 내가 매핑하고싶은 객체와 SQL구문이 모두 준비되어 있어야 mapper.mxl이라는 코드를 설정코드로써 자바 어플에 코딩해주면서 db와의 데이터 교환을 할 수 있음. 이것은 마치 내가 JPA를 사용하기 위해, 즉, 객체와 테이블의 연결을 위해 한땀한땀 어노테이션을 달아주어 설정해 주는 것과 같음. 즉 ORM방식에서는 객체와 테이블을 직접적으로 매핑시켜주는 것이기 때문에 SQL쿼리 작성이 필요없는 것이고 SQL Mapping방식에서는 객체와 SQL문장을 매핑시키는 것이기때문에 SQL문의 작성이 필요한 것이다.

실질적으로 쿼리를 생성하는 것은 JPA의 구현체인 Hibernate임

위에서 언급한 지속성 프래임워크에 대하여

Persistence Framework사용의 장점

비즈니스 로직에서 DB연결 설정을 분리하여 개발자가 비즈니스 로직에 집중하도록 도와줌. 만약 순수 JDBC를 사용하면 DB자원 연결 및 사용에 관련된 코드가 메서드마다 중복됨. 상황에 맞는 Persistence Framework의 적용은 개발 편의성 뿐만 아니라, 성능 및 유지보수에도 큰 이점이 된다. 

.