본문 바로가기

jpa5

JPA 조회 전략 JPA를 활용한 쿼리 방식 선택은 성능 최적화와 개발 효율성을 고려하여 결정되어야 합니다. 아래는 JPA 쿼리 방식 선택 시 권장하는 순서 입니다. 먼저 예시를 위해 Member, Team 엔티티를 만들겠습니다. @Entity @Getter @NoArgsConstructor(access = lombok.AccessLevel.PROTECTED) @ToString(of = {"id", "name"}) public class Team { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "team_id") private Long id; private String name; @OneToMany(mappedBy = "team") priv.. 2024. 3. 7.
JPA Entity 설계시 베스트 프랙티스 1. 엔티티는 가급적 Setter을 사용하지 말자 불변성 유지 : 엔티티의 상태를 변경할 수 있는 setter 메소드가 많으면 엔티티의 상태가 예측하기 어려워지고, 불변성을 유지하기 어려워집지다. 불변성이 유지되면, 버그 발생 가능성이 줄어들고 코드를 이해하기 쉬워집니다. 엔티티의 일관성 보장 : 생성 시점에 필요한 모든 값을 생성자를 통해 전달 받으면, 객체가 일관된 상태로 시작할 수 있습니다. 이는 엔티티가 항상 유효한 상태로 유지되도록 돕습니다. 변경 추적 용이 : JPA 변경 감지 기능 (Dirty Checking)은 트랜잭션 내에서 엔티티의 상태 변화를 감지하여 변경 사항을 데이터베이스에 자동으로 반영합니다. setter 대신 명확한 의도를 나타내는 메소드 (예:changeUsername, in.. 2024. 2. 22.
JPA OSIV JPA의 OSIV(Open Session In View) 영속성 컨텍스트를 뷰 렌더링이 완료될 때까지 유지하는 전략입니다. 웹 어플리케이션에서 데이터베이스 트랜젹션을 뷰 렌더링 전까지 열어두는 패턴입니다. ( API 일경우는 클라이언트에게 응답 완료시까지 ) 일반적으로 JPA는 트랜잭션 범위 내에서 영속성 컨텍스트를 유지합니다. 즉, 트랜잭션이 커밋되거나 롤밸될 때 영속성 컨텍스트도 닫힙니다. 그러나 OSIV를 사용하면 트랜잭션이 유지되므로 뷰가 렌더링될 때까지 영속성 컨텍스트를 유지하게 됩니다. 예를 들어 OSIV 사용하면 화면에서 지연로딩을 사용하여 데이터를 렌더링할 수 있습니다. 다만, OSIV를 사용할 때 주의해야 할 점은 장기간의 트랜잭션을 유지하게 되면 데이터베이스 커넥션 리소스가 반환되지 않.. 2024. 1. 31.
동시성 이슈 동시성 이슈는 여러 스레드나 프로세스가 동시에 실행될 때 발생하는 문제입니다. 이러한 문제는 주로 공유 자원에 대한 동시 접근, 경쟁 조건, 데드락 등과 관련이 있습니다. 1. 공유 자원에 대한 동시 접근 : 여러 스레드가 동시에 같은 자원(변수, 객체, 데이터)에 접근하려고 할 때 발생합니다. 이로 인해 예상치 못한 결과나 데이터의 무결성 문제가 발생할 수 있습니다. 2. 경재조건 (Race Condition) : 두 개 이상의 스레드가 특정 연산의 순서에 따라 결과가 달라지는 상황을 의미합니다. 예를 들어 두 스레드가 동시에 같은 변수를 증가 시키려고 할 때, 예상 값 보다 다른 값이 저장 될 수 있습니다. 3. 데드락 (Deadlock) : 두 개 이상의 스레드가 서로 다른 자원을 기다리며 무한히 .. 2023. 12. 11.