SQL과 객체 지향 설계의 패러다임 불일치

신상현·2021년 1월 31일
0

Spring Boot와 JPA

목록 보기
1/16

SQL

관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다. 관계형 데이터베이스 관리 시스템에서 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리를 위해 고안되었다. 많은 수의 데이터베이스 관련 프로그램들이 SQL을 표준으로 채택하고 있다.

SQL을 직접 다룰 때의 문제점


반복적 CRUD 코드 작성

  • 거의 매번 도메인 별로 유사한 CRUD 코드를 작성해야 한다.
  • 너무 반복적인 작업이다.

SQL에 의존적인 개발

Ex 1)
Member 객체에 tel 필드가 추가됨
  • 수정 사항
    1. Class에 tel 필드 추가
    2. CRUD 각각의 SQL에 tel 추가
    3. JDBC 연결에서 각각 파라미터 추가를 위해서 setString 추가 작성
    4. DB 결과 매핑 setString 함수 추가 작성

필드 하나 추가에도 수정할 것들이 너무 많다....

Ex 2)
Member는 필수적으로 Team에 소속되어야 한다.
⇒ Member 객체에 Team team 필드를 추가됨
⇒ find 는 유지, findWithTeam이 추가됨
  1. 멤버가 속한 팀을 불러오고 싶어서 member.getTeam().getTeamName() 했는데 오류
  2. member 객체에 DB를 매핑 할 때, Dao.find()를 사용 ⇒ SQL을 보니 team필드를 불러오지 않음
  3. Dao.findWithTeam 으로 수정해서 해결

데이터 접근 계층을 사용해서 SQL을 숨겨도 어쩔 수 없이 Dao를 까서 SQL을 확인해야한다.

패러다임 불일치


객체 지향 설계

  • 객체는 필드와 메소드를 가진다.
  • 메소드는 클래스에 정의되어 있으므로, 인스턴스별로 필드 값만을 저장해두면 된다.
  • 단순 객체 인스턴스는 저장이 어렵지않다. 하지만 상속, 객체 간 참조 발생 시 저장이 어렵다
  • 객체-파일 간 역/직렬화 기능이 있지만, 직렬화 된 객체를 검색하는데 한계가 있다.
  • 따라서 RDB에 저장하는게 현실적인 대안이다.
  • 객체가 다른 객체를 참조하는 경우, 참조가 있는 방향으로만 조회가 가능하다.

RDB

  • RDB는 데이터 중심으로 구조화 되어있다.
  • 객체지향의 개념이 거의 없다.
  • 외래키와 조인을 활용한 양방향의 참조가 가능하다.

객체 그래프 탐색

  • 객체가 참조 관계를 따라서 다른 객체를 참조하는 것을 객체 그래프 탐색이라고 한다.
  • SQL을 직접 다루면, SQL에 따라 객체 그래프 탐색의 범위가 결정된다.
  • 객체 그래프 탐색의 범위를 작성한 코드만 보고서는 알 수가 없다.
  • 결국, 데이터 접근 계층인 Dao를 열어서 SQL을 확인해야 한다.

정리

  • 객체는 참조를 활용, 테이블은 외래키를 활용하여 연관관계를 갖는다.
  • 이러한 서로가 지향하는 목적이 다르기 때문에 패러다임 불일치가 발생한다.
  • 패러다임 불일치를 해소시키기 위하여 개발자가 중간다리 역할을 해야하는데, 이러한 과정은 너무 반복적이고 번거로운 일이다.

객체 지향적으로 설계를 할수록 패러다임 불일치로인한 문제는 심화된다.

profile
개발자 싱상형

0개의 댓글