Spring Data/JPA

JPA 소개 - SQL 중심적인 개발의 문제점

Hcode 2023. 1. 3.


 

JPA 소개

  • SQL 중심적인 개발의 문제점

에 대해 다룹니다.

 


 

SQL 중심적인 개발의 문제점

개발하며 데이터베이스와 통신하기 위해 개발자는 많은 SQL문을 작성해야 합니다.

각각의 통신마다 목적에 맞는 SQL문을 작성해야 합니다.

이렇게 많은 SQL문을 작성하게 되면 불편한 점이 하나 둘 씩 수면위에 떠오르게 됩니다.

 

SQL 중신적인 개발의 문제점에 대해 알아봅시다.

 


 

CRUD 작성이 반복되고 개발자는 피로합니다.

CRUD에 대해 알아봅시다.

CRUD는 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인
  Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말이다.
사용자 인터페이스가 갖추어야 할 기능(정보의 참조/검색/갱신)을 가리키는 용어로서도 사용된다
- 위키백과 "CRUD"

 

개발자는 많은 SQL문을 작성하며 그 대부분은 CRUD에 대한 SQL문을 작성하게 됩니다.

얼마나 많이 그리고 자주 사용되면 CRUD라고 그 사용의 이름까지 있습니다.

이렇게나 명세가 된다면, 자동화 되지 않을까? 하는 생각도 절로 듭니다.

이를 함수처럼 사용한 것이 Stored Procedure라고 생각되네요.

 


 

필드 추가시 수많은 SQL문을 수정해야 합니다.

SQL문은 정적으로 적혀져있는 문장입니다.

정적인것은 항상 어느 한 곳에서 변경이 발생하면, 연관된 곳은 모두 직접 수정해야합니다.

생각하기에 따라 매직 넘버와 같다고 생각됩니다.

 


 

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

관계형 DB를 사용하고 있고, 개발자는 DB와 통신을 해야 합니다.

그러므로 SQL에 의존적인 개발을 피하기 어렵습니다.

 

아마 Service 계층은 순수하게 유지하기 위해 노력할 것이고

  Repository 계층은 SQL에 의존적인 개발을 면치못할것입니다.

 


 

패러다임의 불일치

패러다임에 대해 알아봅시다.

패러다임(영어: paradigm)은 어떤 한 시대 사람들의 견해나 사고를 근본적으로 규정하고 있는 테두리로서의 인식의 체계, 또는 사물에 대한 이론적인 틀이나 체계를 의미하는 개념이다.
- 위키 "패러다임"

 

패러다임은 틀이나 체계를 의미하는 것을 알 수 있습니다.

언어에도 패러다임이 있습니다.

예를 들어, AOP라는것도 Aspect Oriented Programming의 약자로,
  관점 지향 프로그래밍이란 뜻을 가지고 있으며 하나의 패러다임 입니다.

관심사를 분리하여 곳곳에 적용시킬 수 있습니다.

 

객체와 관계형 데이터베이스의 패러다임은 다르다 합니다.

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

그리고 관계형 데이터베이스(이하 RDB)를 사용하려면 개발자는 객체를 SQL로 변환하고 RDB와 통신해야 합니다.

 

어떠한 것들이 다른지 간략히 알아봅시다.

 


 

상속

RDB에서는 상속을 슈퍼타입, 서브타입 관계로 나타냅니다.

슈퍼타입 ITEM의 ITEM_ID는 PK이며, 이것이 각 서브타입 테이블에 FK로 사용되고 있습니다.

 

저장시에 RDB는 각각 테이블에 INSERT를 해주어야 합니다.

객체는 그냥 List에 쏙 집어넣으면 됩니다.

 

조회시에 RDB는 조인 SQL을 작성해야합니다.

그리고 결과를 받을때는 RDB의 슈퍼타입, 서브타입 각각에 대응하는 객체를 만들어서 대응해줘야 합니다.

복잡합니다. 그래서 DB에 저장할 객체에는 상속 관계를 잘 사용하지 않게 됩니다.

저 또한 개인 프로젝트에서 JdbcTemplate를 사용할 때,
  그냥 평면적으로 필드를 나열해서 사용했지, 상속관계를 사용하지 않았던 기억이 납니다.

객체는 그냥 List.get(movie)

 


 

연관관계

개인 사유로 인해 일시 정지

 

 

탐색

 


 

다음 글로 xxx를 알아봅시다.
 

Validation 검증 - BindingResult 사용

BindingResult 사용 BindingResult가 사용되는 위치 FieldError ObjectError BindingResult에 검증 오류를 담는 3가지 방법 을 다룹니다. BindingResult가 사용되는 위치 BindingResult는 @ModelAttribute의 객체 다음에 와야 합

hhhhicode.tistory.com

 

댓글