목록 Computer Science/SQL, ORM (3)
연관 관계를 피한다난 JPA, ORM을 사용한다고 연관관계를 반드시 사용하진 않는다. 첫 번째는 엔티티 간 연관 관계가 객체 간 의존도를 크게 해서이다.의존성이 커져 프로젝트가 통짜가 되어버리고, 조립이 아닌 나열식 전개로 점점 전환되는 프로젝트 코드를 경험한 적 있다.더 작게는 테스트 코드가 복잡해지고, 개발 순서가 엮여 병렬로 작업을 처리하기 까다로웠다.거기엔 엔티티의 연관관계가 큰 몫을 한다고 생각한다. 두 번째는 의도하지 않은 쿼리가 발생하거나, 직관적이지 않은 코드가 생기기 좋아서이다.이를 테면 연관관계를 위한 ORM의 동작으로 코드 레벨에서는 눈에 보이지 않는 쿼리가 발생할 수 있다.코드를 짤 때도 이를 생각해야 하기에 단순한 쿼리조차도 ORM 동작에 한번 더 고민하는 경우가 나오기 좋다.특히..
배경슬슬 담당하는 프로젝트의 기능 개발이 마무리되고 있다.보안 확인, API 성능 테스트, 운영을 위한 모니터링 / 로깅 환경 구성..작은 팀이라 사람당 한 두개의 키워드를 맡아, 점검하고 있고,나는 DB 조회 성능 확인을 맡았다. DB에 데이터가 쌓였을 때도 조회 성능에 문제가 없을지, 커넥션 부족으로 이어지진 않는지를 검토했다.가장 중요한 로직의, 주요 데이터를 천만개까지 늘려 테스트했다.데이터를 만드는 방법부터 인덱스나 쿼리 수정 고민 과정을 적어볼 생각이다. 튜닝 키워드는 아래와 같다.1. 더미 데이터를 추가하고 쿼리 조회 성능을 확인한다.2. 인덱스/커버링 인덱스를 적용한다.3. 실행 계획으로 인덱스 튜닝 결과를 확인한다.4. OFFSET 기반 페이지네이션의 문제를 확인하고 개선한다. 더미데이터..
질문1. 현재 member의 소속 여부에 대한 처리 이를 테면 "Order" 엔티티 클래스에서, member가 orders에 현재 속하고 있는지 확인하고 만약 그렇다면 해당 Orders에서 member를 제거 후 변경된 member를 추가해야하는 것은 아닌지.public void setMember(Member member){/*if(this.member.getOrders() != null){this.member.getOrders().remove(this);}*/this.member = member;member.getOrders().add(this);} 그렇지 않으면 특이사항 이겠지만, Order의 member를 변경할 때 member.orders에서 문제가 생기지 않은가 싶어서 주석 부분을 패스하신 이..