Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[20210321] 통합 테스트, 단위 테스트, @DataTimeFormat, @JsonFormat, (Linux) Timezone 변경, JPA 페이징처리 #73

Open
JuHyun419 opened this issue Mar 21, 2021 · 0 comments

Comments

@JuHyun419
Copy link
Owner

JuHyun419 commented Mar 21, 2021

스프링 통합 테스트, 단위 테스트

  • 통합 테스트
    • @springboot 어노테이션
    • 애플리케이션을 실행 하고, 실제 운영상황의 테스트
    • 속도가 느림
  • 단위 테스트
  • 테스트에 대해서 더 공부......
    @InjectMocks
    NoticeService noticeService;

    @Mock
    NoticeRepository noticeRepository;

@DataTimeFormat, @jsonformat --> LocalDateTime에서 format

  • @DateTimeFormat
    • 날짜 관련 타입의 직렬화를 지원하는 어노테이션
  • @jsonformat
    • Jackson의 어노테이션(JSON 변환)
    • 날짜 관련 타입을 JSON으로 직렬화할 때 포맷 관리
  • POST로 요청하는 Request Body(Json)에는 두 어노테이션 모두 사용 가능
  • ResponseBody에선 @jsonformat 어노테이션만 가능
JSON으로 변환을 할때 Jackson을 통해서 진행되는데,
Jackson은 Spring의 어노테이션인 @DateTimeFormat 을 알수 없기 때문에(서로 다른 라이브러리) @DateTimeFormat을 지정했다 하더라도, Jackson은 이 어노테이션을 전혀 고려하지 않고 JSON 직렬화을 진행하게된다. -> 에러 발생.
따라서 Response로 JSON으로 변환해 직렬화 시킬땐 @JsonFormat을 사용해야한다.
( JSON 직렬화 과정에서 @JsonFormat이 없다면 Spring에서는 @DateTimeFormat를 통해 직렬화를 진행하기때문에 post요청에서는 두 어노테이션이 모두 사용가능한것이다.)

반대로, JSON직렬화 외에는 jackson이 사용되지않기때문에 @JsonFormat은 효과가 없다.
따라서 RequestParameter나 ModelAttribute에선 @DateTimeFormat 만 적용될 수 있는 것이다.

https://footprint-of-nawin.tistory.com/68

Linux Timezone 변경

  • $ tzselect 명령어

image


image


image



JPA 페이징 처리(Page, Pageable)

    // Controller
    @GetMapping("/list")
    public String noticeList(
            @PageableDefault(size = 5, sort = "createdDate", direction = Sort.Direction.DESC) Pageable pageable,
            Model model) {
        Page<Notice> noticeList = noticeService.findAll(pageable);
        boolean previousCheck = noticeService.hasPrevious(pageable);
        boolean nextCheck = noticeService.hasNext(pageable);

        model.addAttribute("notices", noticeList);
        model.addAttribute("previous", pageable.previousOrFirst().getPageNumber());
        model.addAttribute("next", pageable.next().getPageNumber());
        
        // 페이징 처리에서 이전 & 다음 페이징이 존재하는지 여부
        model.addAttribute("previousCheck", previousCheck);
        model.addAttribute("nextCheck", nextCheck);

        return "index";
    }

    // Service
    @Transactional(readOnly = true)
    public Page<Notice> findAll(Pageable pageable) {
        return noticeRepository.findAll(pageable);
    }

    // Repository
    @Override
    Page<Notice> findAll(Pageable pageable);

References

https://footprint-of-nawin.tistory.com/68
https://bewan.tistory.com/95

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant