SQL 중심적인 개발의 문제점

slee2·2022년 2월 16일
0

객체 지향 언어 - 자바, 스칼라, ...
관계형 데이터 베이스 - 오라클, MySQL, ...

SQL 중심적인 개바르이 문제점

무한 반복, 지루한 코드

Insert into ...
update
select
delete
자바 객체를 sql로
sql을 자바 객체로

객체 CURD

SQL에 의존적인 개발을 피하기 어렵다.

객체 vs 관계형 데이터베이스

두 패러다임이 맞지 않다.

객체 지향 프로그래밍은 추상화, 캡슐화, 정보은닉, 상속, 다형성 등 시스템의 복잡성을 제어할 수 있는 다양한 장치들을 제공한다.

결국 객체를 SQL로 변환해야 한다.

객체와 관계형 데이터베이스의 차이

  1. 상속
    객체는 상속 관계가 있다. RDB는 상속이 없다.
  2. 연관관계
    객체는 참조(get)로 가져올 수 있다. PK, FK로 join을 통해 가져온다.
  3. 데이터 타입
  4. 데이터 식별 방법

상속

Album 저장
1. 객체 분해
2. Insert into item...
3. Insert into album...

Album 조회
1. 각각의 테이블에 따른 조인 SQL 작성...
2. 각각의 객체 생성...
3. DB에 저장할 객체에는 상속 관계 안쓴다.

자바 컬렉션에 저장한다면?
list.add(album);
list.get(albumId);

연관관계

객체는 참조를 사용 : member.getTeam()
테이블은 외래 키를 사용 : JOIN ON M.TEAM_ID = T.TEAM_ID

객체를 테이블에 맞춰서 모델링

객체다운 모델링을 하기 위해

객체 모델링 조회

맴버를 찾기 위해 해야할 일이 많다.

자바 컬렉션처럼 생각한다면,

객체 그래프 탐색

객체는 자유롭게 객체 그래프를 탐색할 수 있어야 한다.

처음 실행하는 SQL에 따라 탐색 범위 결정

sql은 처음에 탐색 범위를 멤버와 팀만 선택했기 때문에 팀까지만 나온다.

엔티티 신뢰 문제

다른 개발자가 find를 개발하고 이를 사용하려고 할때 객체는 있지만, 값이 없어서 신뢰가 안되는 문제가 발생한다.

모든 객체를 미리 로딩할 수는 없다.

특정한 객체만 조회하는 메서드를 일일이 만들다보니 엄청 길어진다.

비교하기


new Member로 넘기기 때문에 두 member는 다르다.

비교하기 - 자바 컬렉션

객체답게 모델링 할수록 매핑 작업만 늘어난다.

객체를 자바 컬렉션에 저장 하듯이 DB에 저장할 수는 없을까?

JPA

0개의 댓글