Spring JPA
JPA는 파도파도 해도해도 참 헷갈리는 존재다.
이 친구를 사용해 데이터를 업데이트하는 로직을 구현 할 때마다 방식을 어떤식으로 해야 할 지 항상 고민이었는데
오늘 깔끔하게 블로그에 정리하고 넘어가야겠다.
1. @Query 어노테이션 사용
어찌보면 가장 간단하면서 직관적으로 사용할 수 있는 방법
장점 : 쿼리가 명확하고 직접적으로 정의되어 있어 SQL 을 읽을 줄 안다면 이해하기 쉽다.
필요한 데이터만 업데이트하는 직접적인 쿼리를 쓸 수 있어 성능상 이점을 가질 수 있다.
단점 : 쿼리가 Entity 클래스와 분리되어 있어, 프로젝트가 커지면서 쿼리와 Entity 간의
연관성을 파악하기 어려울 수 있다. 또한 복잡한 업데이트 로직을 처리하기 어렵고,
비즈니스 로직이 Repository 에 존재하게 되는 경우가 많아진다. 사실상 MyBatis 와 장단점을 공유한다.
하지만 나의 목표는 JPA 를 최대한 활용해보는 것이라 이 방법은 Pass...!
2. setter 를 이용한 직접 업데이트
장점 : 간단하고 직관적인 방법으로 상태 변경이 가능하다. 다양한 상황에서 쉽게 상태 변경을 적용하고 코드가 간결해진다.
단점 : 객제 지향의 캡슐화 원칙을 위반하며 객체의 상태가 외부에서 직접 변경될 수 있다.
무분별한 상태 변경은 데이터의 무결성이 손실 될 수 있다.
혼자하는 프로젝트라면 본인만의 원칙을 가지고 만들면 되겠지만 협업이 가장 중요한 직업이기도 하고 남들이 하지말라는거에 대해 파고드는 편이라 여러 블로그를 찾아 봤지만 지금 내 프로젝트 조건에서 크게 안될 이유를 찾지 못함 하지만 안쓰는 이유가 있을 테니 배제
3. QueryDSL 사용
장점 : 유연성과 강려크한 기능 복잡한 쿼리나 다양한 조건을 효율적으로 처리 가능.
컴파일 시 오류를 감지 할 수 있어 안정적인 타입 운용 가능
단점 : 러닝커브
이미 QueryDsl 을 적용하여 사용하고 있어 용이하겠지만 보다 좋은 방법이 있을까 찾아보다가 4번 방법을 찾아서 일단 보류
4. Entity 내 로직 메서드 구현
장점 : 비즈니스 로직이 Entity 내부에 존재하여 캡슐화가 가능하고 보다 객체지향적인 접근을 촉진할 수 있다.
또한 메서드 내에서 유효성 검증이 가능하여 데이터의 무결성을 유지하는데 도움이 된다.
단점 : Entity를 먼저 조회해야 함으로 성능상의 고려가 필요할 수 있음
'BE > Java' 카테고리의 다른 글
Spring Annotation - @RequiredArgsConstructor (0) | 2024.05.09 |
---|---|
Spring Security 6.1 이상 csrf 설정 방법 (0) | 2024.03.27 |
[빡침주의] server application 설정 파일이 원복되는경우;; (1) | 2024.03.22 |
WebClient 로 외부 API 호출 시 301 에러 (0) | 2024.03.14 |
JWT 와 Cookie 를 이용한 로그인 적용 (0) | 2024.01.10 |