Wanna be Brilliant Full-Stack Developer

2/15 Spring WHAT IS ORM?? 본문

Some Memos/Spring 개념

2/15 Spring WHAT IS ORM??

Flashpacker 2022. 2. 15. 01:20


목표

JPA는 ORM기술이라는데 ORM은 무엇인가?

ORM은? Object Relational Mapping : 쉽게 말하면 Object를 DB에 연결하는 방법론 같은것이다.

ORM은 나의 종이다? 나의 하인같은 아이? 

우리가 클래스를 하나 만들었다. 클래스를 만들떄는 프로그램을 짤떄 모델 클래스들이 있는데 

모델 클래스는 무엇인가? 우리가 어떤 건물을 짓는 설계도가 있으면 설계도는 2D로 만들어져있다.

그러면 이설계도를 가지고 직접 건물을 올리게 되면 3D형성이 된다. 

이렇게 짓는것을 모델링 한다고 말한다! 

모델링 한다는것은 쉽게 이야기하면 추상적인 개념을 현실 세계에 뽑아 내는것을 말한다!

그러면 우리가 데이터베이스에 Team이라는 테이블이 있으면 여러 데이터를 집어넣기 위해서 Int , varchar, varchar 와 같이 테이블 설계를 하고 설계후에 이 테이블을 자바에서 사용할것인데

어떻게 사용할것이나면 자바 프로그램에서 어떤 데이터를 Team테이블에다가 인풋하기도 하고 인풋된 데이터를 자바쪽에 가져와서 아웃풋 하기도 한다.

밀어넣기도 하고 가져오기도 하는데 밀어넣는 작업을 DML(DELETE UPDATE INSERT) 이라고 하고 아웃풋을 통해서 데이터를 가져오는 행위를 (SELECT)라고 한다.

우리가 SELECT 하거나 집어넣을떄 자바가 들고 있는 데이터 타입과 데이터베이스가 들고 있는 데이터타입이 다르다.

자바는 이런 Team테이블과 같은 데이터 타입을 가지지 않는다

 

그래서 클래스를 통해서 데이터베이스에 있는 테이블을 모델링 해야한다! 

실제로 모델링을 하게되면 Class Team {

int id ;

String name;

String year;

}    -> 이것을 데이터베이스 세상에 있는 데이터를 자바 세상에 모델링 한다고 말한다! 

순서는 TABLE을 만들고 2번째 모델링을 하는것이 실제 프로그래밍의 과정인데

이걸 역으로도 바꿀수도 있는데 이름 자체가 오브젝트를 통한 릴레이션 매핑이다보니까 

테이블을 통한 릴레이션 매핑이 아니라 TRM이 아니라 ORM이다 (상황이 역전된다는것? 이다) 

 

첫번째는 모델링을 먼저한다  Class Team { 

int id ;

String name;

String year;

}     -> 애를 통해서 데이터베이스를 자동 생성할수 있따. 이떄 필요한것은 JPA가 가지고 있는 인터페이스이다 

이 인터페이스의 규칙을 지키면 내가 클래스를 자바에서 만들어서 실행을 하면 데이터베이스에 테이블이 자동으로 생성하게 하는 기법을 ORM이라고 한다

 

- JPA는 반복적인 CRUD 작업을 생략하게 해준다.

내가 흔히 하는 Select : 테이블의 일정 부분

Select All : 테이블 전체

Delete 1건의 데이터를 삭제

Update : 하나의 데이터를 수정 , Insert 하나의 데이터를 인서트 한다든지

이러한 것들은 굉장히 자주 반복되는 일들이다. 이런것들을 할떄 어떤일을 하냐면 1차적으로는 데이터베이스가 있고 자바 프로그램이 있으면 자바프로그램이 DB에게 커넥션을 요청한다! 

자바가 요청을 하면 DB가 이사람의 신분을 확인하고 세션을 오픈하게 되고 이 둘이 연결된다.

그러면 자바에서는 이 커넥션을 가지게 된다.

이 커넥션을 가진 뒤에 두번쨰 요청시에는 Query를 전송할 수 있다! Query를 전송하면 데이터베이스는 해당쿼리를 통해서 어떤 작업을 수행해서 어떤 테이블에 있는 데이터를 만들어내고 그 데이터를 자바에 응답하게 된다.

자바와 DB가 가지고 있는 데이터 타입이 서로 다르기 떄문에 자바는 해당 데이터를 받아서 자바 오브젝트로 변경해야한다.

예전에 JSON 설명할떄 자바와 파이썬이 서로 오브젝트를 공유할때 중간에서 JSON데이터를 사용하는 것처럼

자바가 어떤 데이터를 요청을 하게되면 Query 전송하게 되면 데이터베이스는 데이터를 돌려주게 되는데

이돌려주는 데이터 타입을 DB의 타입이기떄문에 자바가 이해 할수 없기 떄문에 자바가 이해할수 있도록 자바 오브젝트로 변경하는 단순한 반복 로직 

 

이런일을 줄이게 해주는게 JPA이다. JPA를 사용하면 첫번쨰로 전송된 query에대한 응답이 있을때 내가 데이터를 받고 받은 데이터를 자바 오브젝트로 바꾸고 그리고 연결된 세션을 끊고 연결된 커넥션을 끊고 모든 일련의 작업들을 함수 하나로 끝내준다.  우리는 이 함수를 사용하기만하면 이 반복적인 코드를 사용 안해도된다. 

 

CRUD : 이기본적을 반복되는 요 작업들을 JPA가 단순하게 처리하도록 도와준다!

그래서 나의 하인? 이다!

왜냐하면 반복적인 CRUD작업을 단순하게 도와주고 내가만든 클래스를 통해서 자동적으로 DB 테이블을 만들어주기 때문에 내가해야하는 귀찮은 모든것들을 ORM이 다해준다!