하나의 요청 트랜잭션에서 여러번의 쿼리를 날렸을 시 성능질문입니다.
601
작성한 질문수 2
@Transactional
@PostMapping("/user/sign-up")
public ResponseEntity<?> test (String mailCode, String smsCode) {
MailAuth mailAuth = mailAuthRepo.findByCode(mailCode);
if (mailAuth == null) {
return falied....
}
SmsAuth smsAuth = smsAuthRepo.findByCode(smsCode);
if (smsAuth == null) {
return failed...
}
userRepo.save(User.builder.username('test').email('test@test').build());
return success
}
순수 JPA 수업인 해당 수업과 관련이 없는 질문이라 정말 죄송합니다.
하지만 너무 궁금한게 있어서 질문드리네요...
위 코드는 휴대폰 인증과 메일인증을 둘 다 필요로하는 회원가입에 대한 간단한 컨트롤러 코드입니다.
보이는 바와 같이 휴대폰과 이메일에 대해 둘다 인증여부를 확인하기 위해서는 각각의 SmsAuth, EmailAuth 엔티티에 대하여
각각 쿼리를 날려야하는 상황입니다..
하나의 트랜잭션 안이더라도 각각의 쿼리를 날리는 것은 서로 다른 영속성 컨텍스트와 서로 다른 커넥션으로 각자 쿼리를 날리는 것이니
더욱 더 비효율적인가요??
현재 테이블 구조가 이렇게 짜여져있어서 어떻게 조인을 해서 가져올 방법도 없고.. 하나의 회원가입 요청에 대해 이렇게 많은
쿼리를 날리는 것 자체가 성능적으로 보나 너무 많은 비용을 치뤄야 되지 않나싶네요..
한 번의 Servlet Request 에 대해 여러번의 단일 테이블 쿼리를 날리는 것과 한방 조인쿼리로 한번에 해결하는 것중
역시 조인문을 쓰는게 훨씬 낫겠죠??;;;
답변 1
1
안녕하세요. Coinvest님
쿼리수가 줄어들면 아무래도 더 빠르겠지요.
하지만 둘다 code성 조회여서 index를 매우 빠르게 타게 됩니다.
그래서 성능을 최적화해도 크게 이점이 없을 수 있습니다.
우리가 성능 최적화를 고민할 때는, 애플리케이션 전체를 두고 고민해야 합니다.
예를 들어서 join으로 바꾸어서 50ms -> 30ms 정도로 바꾸면 매우 크게 개선한 것 같지만, 이 기능을 자주 사용하는 것도 아니고, 애플리케이션 전체로 보면 주로 목록, 상세 조회 같은 기능이 훨씬 더 많은 트래픽이 발생합니다.
그리고 join으로 최적화를 하게 되면, 이 부분을 캐시 구조로 히트하도록 만드는 것이 어렵습니다. 지금 구조 처럼 단순하면 캐시를 만들기도 쉽지요.
도움이 되셨길 바래요.
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
54
2
inheritance startegy 선택시 고려사항
0
36
1
Entity 동등성 비교
0
38
1
실무 조언 관련 질문입니다.
0
64
1
H2데이터베이스 파일 생성
0
76
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
66
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
62
1
JPQL 메소드와 락
0
62
1
Delivery @OneToOne
0
70
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
104
2
UnsupportedOperationException 발생
0
97
3
H2 Database 연결이 안됩니다.
0
101
2
연관관계 매핑 질문드립니다.
0
93
2
h2데이터베이스 실행오류
0
114
2
persistence.xml
0
119
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
87
1
영속성 컨텍스트
0
74
1
JPA 프록시
0
105
1
Native Query와 MyBatis
0
81
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
97
1
임베디드 타입 예시 코드 관련 질문
0
125
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
100
3
인텔리제이 패키지 커서 단축키 질문
0
112
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
151
1





