WIL(06.27~07.02)

전성영·2022년 7월 4일
0

WIL

목록 보기
8/22

06.27

Member partner = memberRepository.findById(respondentId).orElse(null);



Member member = memberRepository.findByUsername(username).orElseThrow(
() -> new IllegalArgumentException("아이디가 존재하지 않습니다.")
);
    
    
     
if (!passwordEncoder.matches(loginRequestDto.getPassword(), member.getPassword())) {
    throw new IllegalArgumentException("비밀번호가 일치하지 않습니다.");
}

06.28

역할 분담을 하고 본격적으로 프로젝트가 시작되었다.
내가 맡은 부분이 비교적 쉬운 것 같아서 최대한 빨리하고 팀원분들께 작은 도움이라도 드릴 예정이다.
알고리즘과 개인공부, 면접준비, 운동까지 해야하는데 시간을 어떻게 써야할 지 모르겠다.

로그 찍는 법

private final Logger logger = LoggerFactory.getLogger("LoggerController 의 로그");

@Slf4j

06.29

여기


1. @PageableDefault를 사용

@PageableDefault(size = 8) Pageable pageable 무한 스크롤에 쓰인다.
pageable을 jpa 함수 파라미터로 쓰면 스크롤이 된다!!!

2. Pageable을 사용

Pageable pageable = PageRequest.of(0, 5, Sort.Direction.DESC, "level");

이 친구는 페이징 처리를 해주는 친구이다.
얘도 무한스크롤이 되지 않을까 싶다.

return new PageImpl<(returnPost,pageable,returnPost.size());

return 값을 PageImpl<>로 해주면 정보들을? 받을 수 있다.
여기 참고

3. @PageableDefault와 .map 그리고 ::from을 사용

@GetMapping("/bookreviews")
public Page<ReviewDetail> getReviews(
     @PageableDefault(size = 5, sort = "createdDate", direction = Sort.Direction.DESC) Pageable pageable) {
     Page<BookReview> reviewPage = reviewService.getReviews(pageable);
        return reviewPage.map(ReviewDetail::from);
}



public Optional<BookReview> getReview(Long id) {
    return bookReviewRepository.findById(id);
}



public static ReviewDetail from(BookReview review) {
    return ReviewDetail.builder()
            .id(review.getId())
            .nickname(review.getUser().getNickname())
            .rank(review.getRanking())
            .bookBuyUrl(review.getBookBuyUrl())
            .bookImageUrl(review.getBookImageUrl())
            .title(review.getTitle())
            .content(review.getContent())
            .like(review.getLikeCount())
            .createdDate(review.getCreatedDate())
            .build();
}

고수분이 짜신 코드이다. 공부하고 참고하려고 해놨던 걸 이제야 올린다.
from은 볼때마다 신기하다.

4. .createQuery를 사용

public List<Member>findByPage(int age, int offset, int limit){
    return em.createQuery("select m from Member m where m.age = :age order by m.username desc")
            .setParameter("age", age)
            .setFirstResult(offset)
            .setMaxResults(limit)
            .getResultList();
    }

5. PageRequest를 사용

int age = 10;
PageRequest pageRequest = PageRequest.of(0, 3, Sort.by(Sort.Direction.DESC, "username"));

Page<Member> page = memberRepository.findByAge(age, pageRequest);

List<Member> content = page.getContent();
long totalElements = page.getTotalElements();

for(Member m : content){
    System.out.println("member = " + m);
}

6. Slice 사용

Slice<Member> slice = memberRepository.findByAge(age, pageRequest);

slice는 일반 Page보다 limit + 1 해서 가져온다.
ex) 어플이나 웹 보면 더보기 버튼에 사용

!!!!!!!!!!!!!!

Page 변수를 그대로 클라이언트로 내려준다?
그렇게 되면 엔티티가 변형되기 때문에 Dto로 변환해서 내려준다.
ex)

Page<Member> page = memberRepository.findByAge(age, pageRequest);

Page<MemberDto> toMap = page.map(member -> new MemberDto(member.getId(), member.getUsername(), null));

06.30

nested exception is org.hubernate.InstantiationException:No default constructor for entity

JPA에서 Entity는 기본 생성자를 가지고 있어야 하는 것 같다.
상단에 @NoArgsonstrucctor을 추가해준다.


만약 limit만 해주고싶다?
그렇다면 Page를 파라미터로 넣어주고 반환타입을 List로 해주면 된다!


scheduler

규칙!
Main.class에 @EnableScheduling 추가!
scheduler 사용할 클래스에 @Component 등록
Method는 void 타입으로 만들고, 매개변수 사용 불가


scheduler 중

//현재 시간을 불러오는데, format해주면 string이 된다. 따라서 .parse를 사용하여 LocalDate 형식으로 맞춰준다.
LocalDate now = LocalDate.parse(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));

//인증날짜가 현재 날짜보다 작은 경우. 즉 인증날짜가 지난 경우
if(confirmDate.isBefore(now)){

.isBefore 이외에도 isAfterisEqual 이 있다.

07.01, 07.02

프론트 인원이 1명으로 줄어서 스코프 욕심을 줄이고 최대한 백앤드쪽에서 할 수 있는 것을 찾다가 CI/CD를 해보자고 결론이 났고 도커와 젠킨스를 활용해서 무중단 배포를 도전해봤다. 쉽지 않아서 계속 잡고있는 상태다.

profile
Slow and Steady

0개의 댓글