13. 스프링부트(블로그만들기) 리팩토링 2 V3 3.2

윤주헌's avatar
Sep 11, 2024
13. 스프링부트(블로그만들기) 리팩토링 2 V3 3.2

매핑 하기 전 리팩토링 먼저하자

findAll을 우리가 만든게 아니다
인터페이스에서 implement한 JpaReqository<Board, Integer> 안에 기본 것들이 다 들어가 있다
 
Pageable pg = PageRequest.of(0, 3, Sort.Direction.DESC, “id); 이거는 페이징하는 건데 나중에 하자
 
Sort sort = Sort.by(Sort.Direction.DESC, “id”); 게시글 순서 54321 이렇게 만드려고 함
notion image
만약 jpa쿼리 말고 내가 쿼리짜서 하고 싶다면 아래 Sort말고 다른 걸로 하고 싶으면 제목을 찾아보자

boardRepository이동

삭제(둘 다)

boardService이동

바꾸기 find
notion image
윗 코드는 풀어쓰면
Optional<Board> boardOP = boardRepository.findById(1); if(boardOP.isEmpty()){ throw new Exception404("게시글을 찾을 수 없습니다"); } Board board = boardOP.get();
변경하자
notion image

boardRepository

트랜잭션 필요 없어서 지웠는데 delete도 이미 있으니 지워라
notion image
notion image

보드 서비스 이동

변경
notion image

굳이 sort모르면 안 써도 괜찮음 내가 만들면 되니까

이렇게
notion image

유저 서비스

기존 코드
유저 이름으로 존재하는지 확인하는 것
User userPs = userRepository.findByUsername(joinDTO.getUsername())
null이 아닐 때 이미 존재 하는 유저 라고 하는건데
내가 null을 안 넣을 수 도 있으니 바꿔야 한다!
if(userPs ! = null){
throw new Exception400(”이미 존재하는 유저입니다.”);
}
notion image

유저 리포지토리

notion image
바꾸면 무조건 없으면 null이어서
바꾸자
User → Optional<User>로
notion image
리팩토링
notion image
이거는 .orElseThrow하면 안됨
못 찾은 거는 예외가 아니니까!!
두 개 변경
notion image

연습하기

optional 연습

다시

notion image
notion image

유저 서비스로

notion image
원래는 인터페이스를 넣어 왔는데 이제는 람다식을 넣을 수 있다
notion image

오류

수정
notion image
내가 적은 글이 아닐 때 터지면 안됨
notion image
 
notion image

또 오류

notion image
 
디테일머스테치 변경
notion image

상세보기 하면 select 2번 날라간다

id찾았는데 detail머스테치 할때 또 해서
findById를 내가 만든게 아니니까 예전에는 join했어서
notion image
쿼리도 확인해야 한다!!!

해결

보드 레파지토리로 변경
notion image
 
notion image
notion image
 
jpa에 findById가 있는데
join해서 들고 왔어요 lazy로딩해서 들고왔어요?
join하고 들고 왔다고 하겠지 그러면
findById는 언제 필요할까?
mFindById만 필요할까?
 
언제 findById를 쓰냐?
게시글 수정할 때 존재하는 지 확인하려고
게시글 삭제할 때 존재하는지 확인하려고
과연 이 두개가 join이 필요할까?
필요 없다!!
무조건 findById가 필요하다!!! join하면 낭비니까!!
 
게시글 삭제 찾는 이유가 뭔데? 유효성 체크 하고
 
드라이빙, 드리븐 테이블 있을 때 앤포드라 했으니까 드라이빙테이들이 포린키
 
a방에 있는데 다같이 있다 와이프도 있고
옆 방에 자식들이 1명씩 있어
찾으면 끝인데
애기 입장에서 한명씩 와서 내 아빤가? 아이네 맞다면 엄마도 찾아야 해서 계속 찾아야 한다!!
 
북한에서 우리나라 김씨를 찾고 싶어 찾을 수 는 있는데 엄청 오래 걸림
주민 번호로 찾으면 금방 찾는다
 
유일하지 않는 것을 빠르게 찾는 법은 모아두는 것이다!
만약 우리나라 경기도에 김씨 다 모아두면 서울 찾고 경기도에서만 찾으면 끝난다
 
데이터 서치는 무조건 오래 걸리기 때문에 내가 찾을 데이터가 빠르게 찾을 수 잇게 정렬돼있던가 유일하던가 해야 한다
join은 나와 옆 테이블 for문 돌리며 계속 찾는다.
 
on절
엄청 오래 걸린다!! 이것 보다 더 오래 걸리는게 select 2번 하는 거다!! io두번 돌리기 때문에
 
for문이 아무리 느리다 해도 io보다 느릴 수 없다!!
 
select두번은? 가독성이 좋아질 때가 있다
join하는 것 보다 select하는게 더 좋을 때가 있다. 빠른게 다 좋은 것은 아니다.!
 
Share article

code-sudal