반응형 Backend9 [Spring] 예외처리는 곧 유비무환 내가 코드를 작성할 때는 파일 시스템은 안정적이며 네트워크는 원활하게 연결되어 있으며 JVM이 차지하는 메모리는 여유있는 이상적인 상황을 가정한다. 이를 일컬어 Happy Path 라고 말하는 것 같은데, 소위 말하자면 머리가 꽃밭에 있어서 아무 걱정이 없는 상태다. 그러나 소프트웨어는 단지 현실의 문제를 가상화한 모델링 결과일 뿐이다. 현실은 더욱 복잡하고 가차없으며 저렇게 작성했던 내 과거의 코드들은 무분별하게, 잔인하게, 야만적인 느낌이 들 만큼 Exception(예외)을 뿌려주었다. 연결된 네트워크 이상으로 전달이 지연되거나 실패하는 경우, 갑작스런 접속자 폭증으로 응답이 지연되는 경우 등은 기본. 사전에 공유된 내용도 없이 인터페이스 내용이 바뀐다거나 기준 정보가 변경되는 경우도 배제할 수 없다.. 2023. 12. 26. [JPA] JPQL을 Test 하는 간단한 방법 단일 유형 개체에 대한 CRUD 기능은 JpaRepository를 extends 하는 것으로도 충분히 구현할 수 있습니다. 아주 심도 깊은 설계를 바탕으로 만들어진 시스템에서는 Spring Data JPA 만으로 서비스를 제공할 수 있을 것 같기도 합니다. 물론 대부분의 경우 서비스만을 생각하지 서비스 이후 축적되는 데이터와 이를 바탕으로 한 분석 용이성까지 고려하는 경우는 많지 않습니다. 복합 정보를 한 번에 쿼리하거나 데이터 분석에 필요한 자료를 만드는 경우를 생각해보면 객체를 만들고, 테스트하기 보다는 쿼리를 쳐가며 수정해가는게 효율적인 경우도 있습니다. 이런 경우 JPA 기반 개발자가 많이 사용하는게 JPQL, QueryDSL 정도가 될 것 같습니다. 이번 포스트에서는 간단하게 JPQL을 테스트하.. 2023. 7. 23. [JPA] 다대다(N:N) 관계 다대다 관계 특징 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없습니다. 여기서 정규화란 중복성을 없애고, 일치하지 않는 종속성을 제거하는 작업입니다. 이 작업을 통하면 데이터베이스의 유연성을 높이고, 효율적인 데이터베이스 스키마 설계의 기초를 다질 수 있습니다. 데이터베이스 정규화 설명 - Office 데이터베이스를 정규화하는 방법과, 형식을 정규화하는 대신 사용할 수 있는 여러 가지 방법을 설명합니다. 데이터베이스 원칙을 이해하려면 데이터베이스 원칙을 마스터하거나 문서에 나와 learn.microsoft.com 잘 정규화된 두 제품과 공장 테이블이 있다고 가정하겠습니다. 둘의 관계는 아래 그림과 같이 다대다 관계를 가집니다. 이 다이어그램은 제품(Product)과 제품이 생산.. 2023. 7. 3. [JPA] 프록시 객체의 직관적 이해 이전 글에서 JPA의 프록시를 조금 다뤄봤습니다. [Spring] Proxies in Spring Proxy? 스프링을 공부하다보면 Proxy 라는 단어를 많이 접하게 됩니다. 내가 알고있는 프록시와 어떤 것이 다를까 찾아보다가 재미있는 표현을 찾았습니다. 한 Article의 저자는 바로 마법같은 일로 wch18735.tistory.com 이 후, 요즘 읽고있는 JPA 책에서 Proxy 부분을 다시 읽어보며 정리한 내용에 대해 어느 정도 확신을 가지게 되었습니다. 제가 이해한 프록시를 한 마디로 정리하자면, 프록시란 어떤 행동을 대신 수행하는 모방체 입니다. 프록시는 대리인이다. 물론 그러다가 진짜가 필요한 순간이 오면? 짠! 하고 나타나는게 JPA의 프록시 객체입니다. 지연 로딩을 위한 프록시(Prox.. 2023. 6. 12. [JPA] 영속성 컨텍스트 1차 캐시의 주의점 영속성 컨텍스트(Persistence Context)는 논리상 어플리케이션과 데이터베이스 사이에 위치한 메모리 캐시입니다. 쉽게 풀자면 데이터베이스로부터 가져와 fetched 상태인 모든 엔티티 인스턴스의 집합인 1차 캐시라고 설명할 수 있습니다. 트랜잭션을 통한 객체는 모두 1차 캐시에서 관리된다고 생각하면 될 것 같습니다. 그래서 해당 객체에 변경이 없다면 데이터를 여러 번 요청하더라도 데이터베이스까지 쿼리는 처음 한 번만 발생합니다. 여기서 예상하지 못 한 실수가 발생할 수 있습니다. 영속성 컨텍스트는 식별자를 기준으로 1차 캐시 역할을 수행한다 일부 사람들은 @ManyToOne, @OneToMany, mappedBy 를 사용하면 객체 수준에서도 자동으로 관계가 형성된다고 생각합니다. 그러나 이 어.. 2023. 6. 6. [JPA] org.hibernate.PersistentObjectException: detached entity passed to persist 에러 최근 김영한님의 책 자바 ORM 표준 JPA 프로그래밍을 보고 공부하고 있습니다. gradle 기반 프로젝트 구성과 책에 기재된 persistence.xml, H2 데이터베이스 버전을 높이니 하루가 다 갔네요. 이제 재밌게 따라 배워볼까하는데, 어김없이 예외가 나타났습니다. 해결 방법 이에 대한 해결 방법은 아래와 같습니다. 1. @GeneratedValue 어노테이션을 해제합니다. 2. 수동으로 식별자를 입력했다면 persist 대신 merge 를 사용해 영속화합니다. 원인 분석 org.hibernate.PersistentObjectException: detached entity passed to persist 에러를 검색해보았습니다. 먼저 아래 링크에서는 persist 메소드가 오직 영속화 된 적 없.. 2023. 6. 6. 이전 1 2 다음 반응형