본문 바로가기
Back-end/카카오테크캠퍼스

[카카오테크캠퍼스] 4주차 과제 코드리뷰 정리

by 잔디🌿 2024. 9. 3.

    내 질문

    Q1. menu 수정 메서드를 필드별로 구현해야할지 아니면 지금처럼 menu 전체를 수정하는 메서드로 구현해도 괜찮은지

    A.

    요구사항에 따라 다르다. 한꺼번에 수정하는 것이 주요하다면 통으로, 각각 나누어 수정하는 경우가 갖다면 나누어 구현하는게 좋다.

     

    Q2. 객체 생성을 위한 DTO와 수정을 위한 DTO를 따로 만들어야 하나요

    A.

    이것도 경우에 따라 다른데 이와 같은 고민이 드는 경우라면 분리하는 것이 좋다.

     

    Q3. 메뉴를 추가할 때 카테고리 객체 통째로 받는게 좋을지 아니면 카테고리 id만 받는게 좋은지

    A.

    카테고리 id는 같지만 이름이 다른 객체가 들어오면 곤란해진다. 이런 문제도 있고, 클라이언트의 편의를 위해서 id만 전달하는 것이 좋을 것 같다.

     

    피드백

    Rest api prefix 변경

    이건 칭찬해주셨다!

    기존에는 api를 ("categories") 이런 식으로 썼었는데 앞에 api를 추가해주어 ("/api/categories")와 같이 변경하였다.

     

    RequestParam이나 path variable을 사용하는 것과 Request Body를 사용하는 것은 어떻게 다를까?

    알아본 결과 form태그로 데이터를 받을 때에는 RequestParam을 쓰고(URL로 값 전달) JSON으로 받을 때에는 RequestBody를 쓴다고 한다.
    RequestParam을 쓰면 각 변수별로 데이터를 저장하는 것이 가능하지만, RequestBody를 쓰면 이것이 불가능하다고 한다..
    내 코드 상에서는 DTO통째로 받는 것이 더 깔끔할 것 같아서 RequestBody를 사용하는 것으로 바꾸었다.

     

    Cascade 등의 옵션을 설정해주자

    연관관계 매핑이 되어있는 객체가 사라지면 연관된 객체는 어떻게 되는지 옵션을 설정해주어야한다.

    이 옵션들에 대해서도 알아보라고 하셔서 알아봤다!

    persist : 연관된 엔티티도 영속상태로 만든다.
    remove : 연관된 엔티티도 함께 삭제한다.
    detach : 연관된 엔티티도 함께 준영속상태로 만든다.
    merge : 연관된 엔티티도 새로운 영속상태로 만든다
    refresh : 데이터베이스로부터 데이터를 다시 읽어 들이는 refresh 동작을 연관된 엔티티로 전파한다.

    나는 메뉴와 연관된 카테고리가 삭제되었을 때 기본 값이 들어가도록 하고싶었다. 그래서 이에 관해 멘토님께 다시 질문을 드려봤더니 가장 쉬운 방법은 Cascade 옵션에 의존하지 않고, Category를 삭제하는 로직이 담긴 Service 계층에서 해당 category를 사용하는 모든 product를 불러오고, 일일히 변경해주는 것이 좋을 것 같다고 하셨다.
     
     

    DTO 내에 다른 도메인이 들어갈 때 이것도 DTO로 넣어준다.

    나는 menuRequest라는 DTO 안에 Category를 그대로 넣었다. 그랬더니 Category도 DTO를 따로 만들어주는 것이 좋을 것 같다는 피드백을 받았다. 

     

     

    기본 카테고리는 기본 카테고리인 형상으로 별도 생성자를 만들어주자!

    Category defaultCategory = categoryRepository.save(new Category(null,"기본카테고리",new LinkedList<Menu>()));

    원래는 위와 같이 기본 생성자를 바로 만들어주었는데, 기본 카테고리는 기본 카테고리인 형상으로 별도 생성자를 만드는 것이 좋다고 하셨다.

     

    상태코드는 mdn에서 검색하자

    나는 상태코드를 잘 몰라서 어려움을 겪었었는데 멘토님이 좋은 사이트를 추천해주셨다!!

    https://developer.mozilla.org/ko/docs/Web/HTTP/Status

     

    HTTP 상태 코드 - HTTP | MDN

    HTTP 응답 상태 코드는 특정 HTTP 요청이 성공적으로 완료되었는지 알려줍니다. 응답은 5개의 그룹으로 나누어집니다: 정보를 제공하는 응답, 성공적인 응답, 리다이렉트, 클라이언트 에러, 그리고

    developer.mozilla.org

    앞으로는 여기서 검색해서 각 상황에 맞는 에러를 잘 발생시켜야겠다.