You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »

관계형 DB에서 엔티티간 연관관계를 맺는것은 , 데이터 모델 설계와도 관련된 중요한 내용이며

JPA에서도 설계된 연관관계를 CLASS OBJECT로 맵핑처리 하는것은 아주 중요한 내용입니다.


데이터 중심 접근  VS 객체지향 접근

사용자와 주소테이블이 분리되었고

사용자와 사용자와 연관된 주소정보를 각각 가져온다라고 가정해봅시다.

데이터 중심

User user =  sql.find( User , "select * from user u where u.id=", 1234 );
.....
Address address = sql.find( Address , "select t.* from address t join user u on u.addressid = " + user.addressid  );

사용자 정보를 조회하고, 사용자 테이블에 등록된 외래키인 addressid를 가지고 주소 정보를 한번더 탐색해야

우리가 원하는 User와 Address정보가 완성이 됩니다. 객체관점에서 User와 Address는 아무런 연관이 없습니다. 

이것이 데이터베이스의 ERD와, 객체에서 연관관계를 표현하는 UML과 맞추지 못하는 이유입니다. 

여기서 User 와 Address의 관계는  UML에서 어떠한 관계도 명시할수 없는 별개의 객체이며

연관성이 끊겼을뿐더러, 객체지향의 요소를 잃은 단순한 임시 데이터 반환 객체입니다.


객체중심

User user = em.find( User , 1234 );
.....
Address address = user.getAddress();

객체는 조인처리 대신, 참조를 얻을수 있어야합니다.  JPA는 실제 데이터조회를 위와같이 이용을 합니다.

사용자를 통해 주소의 참조값을 얻을수 있기때문에   데이터베이스의 ERD와 ,객체를 표현하는 UML의

아주 큰차이가 좁혀졌습니다. 


하지만 데이터를 객체중심 접근방법을 사용하기위해서는 각종 연관키가 설정된 엔티티를 ,

참조형태의 객체모델로 변환하는 방법을 알아야합니다. 이것은 생각보다 여려우며

외래키를 사용하여 조인을 걸어 연관 객체를 얻어오는것은 여러차례의 SQL문을 통해 성공하고 사용될수 있으나

JPA에서는 테이블에 걸려있는 연관키를 파악하고 머릿속에 정확한 ERD를 그려내지 못하면

참조를 얻는것은 실패할것입니다.




  • No labels