항해99/개발일지

20220223 개발일지

paran21 2022. 2. 23. 15:29

오늘은 추가 기능인 댓글 작성, 삭제, 조회하기를 팀원들과 함께 구현하였다.

추가기능이 많지 않아서 역할을 분담하기 어려웠다.

오늘 오후부터 시작했기 때문에 앞에 먼저 하신 진행상황을 보고 추가로 필요한 부분을 덧붙였다.

 

이미지를 S3에 저장하는 과정에서 application.properties에 서버 정보가 노출되는 문제가 있었다.

properties를 하나 더 만들어 여기에는 공유되면 안되는 정보들을 넣고, 이 값을 .gitigore에 포함하여 깃허브에는 업로드 하지 않았다. 

이런식으로 추가되는 파일을 원래 application.properties에 작성해주면 된다.

spring.profiles.include=aws

 

프론트에서 S3에 완성된 코드를 올리고 테스트를 하는 과정에서 security에서 허용한 작업에 "토큰이 없습니다."와 같은 에러메시지가 뜨는 문제가 있었다.

전체 상품 조회와 같이 jwt인증이 필요하지 않은 경우에 RequestBody에서 생긴 문제인데도 JwtAuthFilter에 있는 attemptAuthentication 메소드에 포함된 에러메시지가 출력되었다.

아마 필터를 먼저 통과하면서 여기 있는 에러메시지를 먼저 출력한 것 같다.

해당 부분을 return null로 바꾸니 400에러가 뜨는 것을 확인했다.

원래 심화강의에서는 로그인페이지로 이동시키는 부분인데, 이번에 rest api로 구현하면서 뷰와 관련된 내용을 삭제하고 대신 에러메시지가 출력되게 했었다.

@Override
public Authentication attemptAuthentication(
        HttpServletRequest request,
        HttpServletResponse response
) throws AuthenticationException, IOException {

    // JWT 값을 담아주는 변수 TokenPayload
    String tokenPayload = request.getHeader("Authorization");
    if (tokenPayload == null) {
        return null;
    }

 

스프링에서 에러처리할 때 대부분 global exception으로 처리할 수 있지만 시큐리티나 필터 등이 포함되면 globla exception이 적용되지 않기 때문에 주의가 필요한 것 같다.

 

#Page

 

추가로 페이지네이션을 구현하였다.

JPA에서 제공하는 클래스가 있어서 쉽게 구현할 수 있다.

// 전체 상품 조회하기 API
@GetMapping("/products")
public List<ProductResponseDto> getAllProducts(@RequestParam int page,
                                               @RequestParam int size) {
    return productService.getAllProducts(page, size);
}
// 전체 상품 조회 메소드
public List<ProductResponseDto> getAllProducts(int page, int size) {

    Pageable pageable = PageRequest.of(page-1, size);
    Page<Product> foundProductList = productRepository.findAll(pageable);
    
    ...
    
    }