<aside> ❗

SQL 중심적인 개발의 문제점

CRUD 무한 반복, 지루한 코드

[패러다임의 불일치]

객체와 관계형 DB 테이블이 비슷하면서도 굉장히 다르다.

객체 → SQL 변환 → SQL → RDB에 저장 개발자가 이 작업을 수행하게 됨 (개발자가 SQL 매퍼가 됨)

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

  1. 상속
  2. 연관관계
  3. 데이터 타입
  4. 데이터 식별 방법

상속

연관관계

// 
class Member {
	String id;        
	Long teamId;      // TEAM_ID FK 컬럼 사용 
	String username;
}

class Team {
	Long id;      // TEAD_ID PK 사용 
	String name;  
}
class Member {
	String id;
	Team team;
	String username;
	

	Team getTeam() {
		return team;
	}
}

class Team {
	Long id;
	String name; 
}

[객체 그래프 탐색]

class MemberService {
	public void process() {
		Member member = memberDAO.find(memberId);
		member.getTeam();  // Team을 가져올 수 있나 ?? DB에 따로 저장되는데 ??
		member.getOrder().getDelivery(); // ??? // Delivery까지 참조가 가능한가 ??
		// MemberDAO를 어떻게 작성했는지에 따라 달라지므로 DAO를 봐야함 
	}
}
memberDAO.getMember(); // Member만 조회
memberDAO.getMemberWithTeam(); // Member와 Team 조회
// Member, Order, Delivery - 경우의 수가 많으므로 다 구현해야 함...
memberDAO.getMemberWithOrderWithDelivery();

[비교하기]

객체답게 모델링 할수록 매핑 작업만 늘어나게 됨

객체를 SQL로 변환하는 작업의 비용이 너무 큼

객체를 자바 컬렉션에 저장 하듯이 DB에 저장하기 위해 JPA 등장

</aside>