네임드락 테스트 오류
저는 @Query 어노테이션의 값을 아래와 같이 강의 내용대로 따라했을 때 오류가 발생해서
public interface LockRepository extends JpaRepository<Stock, Long> {
@Query(value = "select get_lock(:key, 3000)", nativeQuery = true)
void getLock(String key);
@Query(value = "select release_lock(:key)", nativeQuery = true)
void releaseLock(String key);
}아래와 같이 정합성이 맞지 않아서 테스트를 통과하지 못했습니다.
그래서 구문을 아래와 같이 바꿔서 통과했는데 참고 하시길 바랍니다. ?1의 값은 key로의 값으로 고정되어 있는데 이럴 경우 문제가 없을지 궁금합니다.
@Query(value = "select get_lock(?1, 3000)", nativeQuery = true)
void getLock(String key);
@Query(value = "select release_lock(?1)", nativeQuery = true)
void releaseLock(String key);
답변 2
0
알함님 안녕하세요.
해결됨으로 표시되는데 해결 되신걸까요 ?
0
네 저는 아래의 방식으로 해결했습니다. 그런데 저렇게 할 경우 ?1의 parameter 값이 key로 고정되는데 이 경우 좋지 않은 방법인 거 같아서 다른 방식을 검색하는 키워드가 혹시 있을까요?
0
안녕하세요, 인프런 AI 인턴입니다.
알함님의 질문에 대해 답변드리겠습니다. @Query 어노테이션을 사용하여 네이티브 쿼리를 작성할 때, :key를 사용한 파라미터 바인딩 대신 ?1을 사용하여 파라미터의 위치 기반 바인딩으로 변경하신 것으로 이해됩니다. Spring Data JPA에서 네이티브 쿼리를 실행할 때 ?1과 같은 방식을 사용하는 것은 완전히 유효하며, 많은 경우에 선호되는 방식입니다.
해당 방식은 첫 번째 파라미터의 값을 쿼리의 첫 번째 ?에 바인딩하는 것을 의미하며, 이 방식을 사용함으로써 SQL 인젝션 공격과 같은 보안 취약점을 줄일 수 있습니다. 또한, 이런 방식은 테스트 통과 여부에 영향을 주지 않으며, 오히려 더 명확한 파라미터 바인딩으로 인해 오류를 줄이는 데 도움을 줄 수 있습니다.
참고하신 정보와 관련하여 @Query 어노테이션의 사용법에 대한 자세한 내용은 Spring Data JPA 공식 문서에서 확인하실 수 있습니다.
- 네이티브 쿼리를 정의하는 방법에 대한 내용은 여기에서 확인하실 수 있습니다.
따라서, ?1을 사용한 파라미터 바인딩 방식으로 변경하여 테스트를 통과한 것은 적절한 해결 방식입니다. 이 방식으로 인해 발생할 수 있는 문제는 없으며, JPA 리포지토리의 네이티브 쿼리에서 널리 사용되는 접근 방식입니다.
추가적인 질문이나 궁금한 점이 있으시면 언제든지 질문해 주세요.
레디선 테스트코드에서 채널이름은 없어도 되는건가요?
0
41
2
낙관적 락을 사용할 떄 차이점
0
118
2
동시성 검증 코드에 관한 문의
0
91
2
단일연산
0
69
2
낙관적락vs. 레디스락
0
106
2
안녕하세요. 레디슨 질문있습니다..!!
0
66
2
@Lock(OPTIMISTIC)이 필요한 이유
0
89
2
get_lock 의 timeout이 3000초 이던데 너무 긴거 아닌가요?
0
128
2
DataSource Hikari 사용 이유
0
145
2
saveAndFlush 사용 이유 문의
0
112
3
비관적 락 VS 네임드 락
0
159
3
application.yaml 에 redis 정보
0
99
2
왜 클래스 이름에 Facade 가 붙나요?
0
181
2
@Transactional 으로 인한 동시성 문제 발생 원인이 궁금합니다.
0
218
2
@modifying 이용한 동시성 제어
0
168
2
DB락과 분산락
0
260
2
NamedLock 테스트 실패
0
186
2
테스트에서 트랜잭션 어노테이션 질문 있습니다.
0
171
2
optimistic Lock 재시도 질문입니다.
0
229
2
낙관적 락 테스트 실패
0
239
2
오류?
0
1626
4
LettureLockStockFacadeTest에서 오류가 발생합니다.
1
268
2
Pessimistic Lock 전체 테스트 오류 문의
0
358
3
비관적 락 vs 레디스(Lettuce)락 비교 관련 질문
0
459
2





