목록BE (354)
오봉이와 함께하는 개발 블로그
문제 패스워드를 암호화 해서 저장하고, 평문 패스워드로 일치하는지 여부를 검사하는 테스트였는데, 어떻게 테스트 코드를 작성 해도 NPE(NullPoint Exception)가 지속적으로 발생했다. 작성했던 코드들 1번 class MemberServiceImplTest { WebSecurityConfig webSecurityConfig = new WebSecurityConfig(); EntityManager em; MemberRepository memberRepository = new MemberRepositoryImpl(em, webSecurityConfig); MemberService memberService = new MemberServiceImpl(memberRepository); @Test @Di..
개요 서버에서 패스워드를 암호화하여 DB에 넣는 작업을 하고 싶었다. 블로그에 기록하진 않았지만, 전에 한 번 사용해 봤으나 기억이 나지 않아 블로그에 기록해 보려 한다. BCryptPasswordEncoder BCryptPasswordEncoder란 Spring Security에서 제공하는 클래스 중 하나로, 암호화하는 데 사용할 수 있는 메소드를 가진 클래스다. Spring Security(이하 스프링 시큐리티)는 자바 서버 개발을 위해 필요로 하는 인증, 권한 부여 및 보안 기능을 제공하는 프레임워크다. BCryptPasswordEncoder는 사용자가 제출한 문자열을 인코딩 해주고, DB에 저장된 값과 비교할 수 있게 기능을 제공하고 있다. 기본적으로 웹 사이트를 개발할 때 값은 DB에 저장한다...
벌크 연산 SQL에서 PK를 집어서 하는 Update, Delete를 제외한 모든 Update, Delete문이라고 생각하면 좋다. 재고 10개 미만인 모든 상품의 가격을 10% 상승시키려면? JPA 변경 감지 기능으로 실행하면 너무 많은 SQL을 실행한다. 재고가 10개 미만인 상품을 리스트로 조회 상품의 엔티티 가격을 10% 증가 트랜잭션 커밋 시점에 변경감지 작동 변경된 데이터가 100건이라면 100번의 Update SQL이 실행된다. 예제 쿼리 한 번으로 여러 테이블 로우 변경(엔티티) executeUpdate()의 결과는 영향받은 엔티티 수 반환 UPDATE, DELETE 지원 INSERT(insert into .. select(select한 값을 insert), 하이버네이트에서 지원)지원 St..
다형성 쿼리 위와 같이 설계되었을 때 특수한 기능들을 제공한다. TYPE 조회 대상을 특정 자식으로 한정할 수 있다 예 : Item 중에 Book, Movie를 조회하라. JPQL SELECT i FROM Item i WHERE TYPE(i) IN (Book, Movie) SQL select i from i where i.DTYPE in ('B', 'M') TREAT(JPA 2.1) 자바의 타입 캐스팅과 유사하다. 상속 구조에서 부모 타입을 특정 자식 타입으로 다룰 때 사용할 수 있다. FROM, WHERE, SELECT에서 사용 JPQL SELECT i FROM Item i WHERE TREAT(i as Book).author = 'kim' SQL SELECT..
페치 조인의 한계 페치 조인 대상에는 별칭을 줄 수 없다. SELECT t FROM Team t join fetch t.members as m (as는 생략 가능) 객체 그래프는 기본적으로 나랑 연관되어 있는 모든 것을 조회한다. 성능상 몇가지 정보만 필요하면, 별칭을 사용해서 페치 조인을 사용할 것이 아니라 다른 쿼리로 조회해야 한다. SELECT t FROM Team t join fetch t.members m join fetch m.team 몇 단계로 페치 조인을 해야할 때는 사용할 수 있다. 하지만 하이버네이트는 가능하지만, 가급적 사용하지 말자. 둘 이상의 컬렉션은 페치 조인은 할 수 없다. 컬렉션을 페치 조인하면 페이징 API(setFirstResult, setMaxResults)를 사용할 수..