DB(3)
-
[JPA] 프록시와 지연 로딩
프록시와 연관관계 관리 객체가 DB에 저장되어 있으므로 연관된 객체를 자유롭게 탑색하기 어렵습니다. JPA 구현체들은 이 문제를 해결하기 위해 프록시라는 기술을 사용합니다. 프록시를 사용하면 연관된 객체를 처음부터 DB에서 조회하는 것이 아니라, 실제 사용하는 시점에 조회할 수 있습니다. 하지만 자주 함께 사용되는 객체들은 조인을 사용해서 함께 조회하는 것이 효과적입니다. JPA는 즉시 로딩과 지연 로딩이라는 방법으로 둘을 모두 지원합니다. 지연 로딩 Member 객체가 Team 객체를 @ManyToOne으로 참조하고 있을 때, Member 객체가 Team 객체와 관련된 정보를 사용하지 않는다면 연관된 Team 엔티티까지 함께 조회하는 것은 효율적이지 않습니다. 이런 문제를 해결하기 위해 엔티티가 실제 ..
2023.04.09 -
인덱스를 사용하지 않아야 할 때
인덱스를 사용하지 않아야 할 때 실무에서 인덱스를 사용했을 때 컬렉션 스캔보다 속도가 느린 경우가 있었습니다. 인덱스를 걸면 수정, 삭제를 제외하곤 성능이 좋아져야 맞다고 생각했기에 의아했습니다. 원인은 인덱스로 생성한 필드가 중복이 많아 가져오는 도큐먼트가 많다는 것이었습니다. OREILLY 사의 몽고DB 완벽 가이드 책에 따르면 인덱스는 데이터 일부를 조회할 때 가장 효율적이며 어떤 쿼리는 인덱스가 없는 게 더 빠르다고 합니다. 인덱스는 컬렉션에서 가져와야 하는 부분이 많을수록 비효율적인데, 인덱스를 하나 사용하려면 두 번의 조회를 해야하기 때문입니다. 한 번은 인덱스 항목을 살펴보고, 또 한 번은 도큐먼트를 가리키는 인덱스의 포인터를 따라갑니다. 반만에 컬렉션 스캔을 할 때는 도큐먼트만 살펴보면 됩..
2023.04.08 -
MongoDB 인덱스
MongoDB index 백만 개 도큐먼트가 있는 컬렉션에서 조회할 때 index 유무 차이 index는 모든 값을 정렬된 순서로 보관하므로 인덱스 키로 도큐먼트를 정렬하는 작업이 훨씬 빨라지게 합니다. index (x) totalDocsExamined가 1000000이고, executionTimeMillis가 682인 걸 알 수 있습니다.(0.682초) { explainVersion: '1', queryPlanner: { namespace: 'study.User', indexFilterSet: false, parsedQuery: { username: { '$eq': 'user101' } }, queryHash: '7D9BB680',..
2023.03.09