Spring JPA - update 로직 수행

좐쓰 ㅣ 2024. 3. 26. 13:08

반응형

Spring JPA

JPA는 파도파도 해도해도 참 헷갈리는 존재다.

이 친구를 사용해 데이터를 업데이트하는 로직을 구현 할 때마다 방식을 어떤식으로 해야 할 지 항상 고민이었는데

오늘 깔끔하게 블로그에 정리하고 넘어가야겠다.

 

 

1. @Query 어노테이션 사용 

 

어찌보면 가장 간단하면서 직관적으로 사용할 수 있는 방법


장점 : 쿼리가 명확하고 직접적으로 정의되어 있어 SQL 을 읽을 줄 안다면 이해하기 쉽다.
  필요한 데이터만 업데이트하는 직접적인 쿼리를 쓸 수 있어 성능상 이점을 가질 수 있다.

단점 : 쿼리가 Entity 클래스와 분리되어 있어, 프로젝트가 커지면서 쿼리와 Entity 간의
  연관성을 파악하기 어려울 수 있다. 또한 복잡한 업데이트 로직을 처리하기 어렵고,

  비즈니스 로직이 Repository 에 존재하게 되는 경우가 많아진다. 사실상 MyBatis 와 장단점을 공유한다. 

하지만 나의 목표는 JPA 를 최대한 활용해보는 것이라 이 방법은 Pass...!

 

 

2. setter 를 이용한 직접 업데이트 

 

장점 : 간단하고 직관적인 방법으로 상태 변경이 가능하다. 다양한 상황에서 쉽게 상태 변경을 적용하고 코드가 간결해진다.

단점 : 객제 지향의 캡슐화 원칙을 위반하며 객체의 상태가 외부에서 직접 변경될 수 있다.
      무분별한 상태 변경은 데이터의 무결성이 손실 될 수 있다.

 

혼자하는 프로젝트라면 본인만의 원칙을 가지고 만들면 되겠지만 협업이 가장 중요한 직업이기도 하고 남들이 하지말라는거에 대해 파고드는 편이라 여러 블로그를 찾아 봤지만 지금 내 프로젝트 조건에서 크게 안될 이유를 찾지 못함 하지만 안쓰는 이유가 있을 테니 배제

 

3. QueryDSL 사용

장점 : 유연성과 강려크한 기능 복잡한 쿼리나 다양한 조건을 효율적으로 처리 가능.
   컴파일 시 오류를 감지 할 수 있어 안정적인 타입 운용 가능

단점 : 러닝커브

이미 QueryDsl 을 적용하여 사용하고 있어 용이하겠지만 보다 좋은 방법이 있을까 찾아보다가 4번 방법을 찾아서 일단 보류

 

4. Entity 내 로직 메서드 구현

장점 : 비즈니스 로직이 Entity 내부에 존재하여 캡슐화가 가능하고 보다 객체지향적인 접근을 촉진할 수 있다. 
  또한 메서드 내에서 유효성 검증이 가능하여 데이터의 무결성을 유지하는데 도움이 된다.
단점 : Entity를 먼저 조회해야 함으로 성능상의 고려가 필요할 수 있음

반응형