전체 글348 [IntelliJ] JPQL @Query 에러: 파라미터 바인딩 에러/For queries with named parameters you need to use provide names for method parameters 오류 발생 동시성 이슈 문제 해결에 대한 강의를 들으며 똑같이 코딩을 해보는 과정속에서 원하지 않는 결과값이 나타나며 오류가 발생하였다. 아쉽지만 이 이상의 로그는 존재하지 않았다. 그래서 도대체 뭐가 문제인 걸까 처음부터 천천히 살펴보다가 아래의 레포지토리를 보게 되었다. 분명 강사님은 @Param어노테이션을 적지 않으시고도 테스트가 성공을 해서 이 부분을 간과하고 있었다. 일반적으로 파라미터를 제대로 지정하지 않을 경우For queries with named parameters you need to use provide names for method parameters 오류가 로그에 뜨는게 일반적인데 나는 로그에 오류가 발생하지 않았다. 그래서 오류를 찾기 어려웠던 것 같다. 해결 방법은 다음과 같다.. 2023. 2. 13. [Web] Access Token & Refresh Token 이해하기(feat. JWT) 나의 첫 스프링부트 프로젝트에서 JWT 토큰을 사용해 로그인 인증 및 인가를 경험한 적이 있다. 그때는 첫 프로젝트여서 모든 것이 생소한 탓에 한 개의 토큰, 오직 Access Token만으로만 구현을 했었다. Access Token 하나가지고 기능 구현에는 큰 문제가 없지만 사실 보안상에 있어서는 문제점이 많다. 이에 Refresh Token의 필요성과 Access Token과 Refresh Token의 동작원리에 대해 정리해보고자 한다. Refresh Token의 필요성 Access Token 만을 통한 인증 방식의 문제는 제 3자에게 토큰을 탈취당했을 경우 보안에 취약하다는 점이다. Access Token은 발급된 이후, 서버에 저장되지 않고 헤더를 통해 들어온 토큰 자체를 검증하여 사용자 권한을 .. 2023. 2. 1. Section 7-4. 네이티브 쿼리 JPA에서 제공하는 기능인 네이티브 쿼리에 대해 알아보자. 가급적 네이티브 쿼리는 사용하지 않는게 좋음, 정말 어쩔 수 없을 때 사용한다. 스프링 데이터 JPA 기반 네이티브 쿼리 페이징 지원 반환 타입 Object[] Tuple DTO(스프링 데이터 인터페이스 Projections 지원) 제약 Sort 파라미터를 통한 정렬이 정상 동작하지 않을 수 있음(믿지 말고 직접 처리) JPQL처럼 애플리케이션 로딩 시점에 문법 확인 불가 동적 쿼리 불가 MemberRepository에 다음과 같이 작성한다. JPQL은 위치 기반 파리미터를 1부터 시작하지만 네이티브 SQL은 0부터 시작 네이티브 SQL을 엔티티가 아닌 DTO로 변환은 하려면 DTO 대신 JPA TUPLE 조회 DTO 대신 MAP 조회 @SqlR.. 2023. 1. 30. Section 7-3. Projections 엔티티 대신에 DTO를 편리하게 조회할 때 사용 전체 엔티티가 아니라 만약 회원 이름만 딱 조회하고 싶으면? 인터페이스를 만들어준다. public interface UsernameOnly { String getUsername(); } public interface MemberRepository ... { List findProjectionsByUsername(String username); } 테스트는 아래와 같다. 인터페이스 기반 Open Proejctions 다음과 같이 스프링의 SpEL 문법도 지원한다. public interface UsernameOnly { @Value("#{target.username + ' ' + target.age + ' ' + target.team.name}") Strin.. 2023. 1. 29. Section 7-2. Query By Example @SpringBootTest @Transactional public class QueryByExampleTest { @Test public void basic() throws Exception { //given Team teamA = new Team("teamA"); em.persist(teamA); em.persist(new Member("m1", 0, teamA)); em.persist(new Member("m2", 0, teamA)); em.flush(); //when //Probe 생성 Member member = new Member("m1"); Team team = new Team("teamA"); //내부조인으로 teamA 가능 member.setTeam(team); //ExampleMatch.. 2023. 1. 29. 이전 1 2 3 4 5 6 ··· 70 다음