게시판 만들기(스프링 부트3, 나도코딩 스터디)/15장. 댓글 컨트롤러와 서비스 만들기

15.1~15.6 댓글 컨트롤러와 서비스 만들기(게시판 만들기 / 길벗 코딩 자율학습단)

coding232624 2023. 12. 12. 18:15

댓글 CRUD를 위한 REST API

  • REST 컨트롤러, 서비스, DTO, 엔티티, 리파지터리가 필요
  • REST 컨트롤러 : 댓글 REST API를 위한 컨트롤러로 서비스와 협업, 클라이언트 요청을 받아 응답하며 뷰가 아닌 데이터를 반환
  • 서비스 : REST 컨트롤러와 리파지터리의 사이에서 비즈니스 로직, 즉 처리 흐름을 담당하며 예외 상황이 발생했을 때 @Transactional로 변경된 데이터를 롤백
  • DTO : 사용자에게 보여 줄 댓글 정보를 담은 것. 단순히 클라이언트와 서버 간에 댓글 JSON 데이터 전송
  • 엔티티 : DB 데이터를 담는 자바 객체로 엔티티를 기반으로 테이블 생성, 리파지터리가 DB속 데이터를 조회하거나 전달할 때 사용
  • 리파지터리 : 엔티티를 관리하는 인터페이스로 데이터 CRUD 등의 기능 제공, 서비스의 명령을 받아 댓글 CRUD 등의 명령을 DB에 보내고 응답받음

 

댓글 엔티티의 메서드

  • 댓글을 생성하는 메서드(createComment())와 댓글을 수정하는 메서드(patch()) 2개의 메서드 존재
  • 댓글 생성 메서드(createComment()) : dto와 article을 입력받아 새 댓글 엔티티를반환 / 정적(static) 메서드이므로 객체 생성 없이 '클래스이름.메서드이름(매개변수)'로 호출
  • 댓글 수정 메서드(patch()) : 기존 댓글 엔티티에 입력받은 dto를 반영해 갱신 / 비정적(non-static)(this. 사용) 메서드이므로 주체 객체가 있어야만 호출 가능

스트림

  • 컬렉션이나 리스트에 저장된 요소들을 하나씩 참조하며 반복해 처리할때 사용
  • 스트림을 사용할 경우 for()문을 사용하지 않고 깔끔하고 직관적이게 코드를 변경 가능
  • 스트림의 주요 특징
    • 원본 데이터를 읽기만 하고 변경하지 않음
    • 정렬된 결과를 컬렉션이나 배열에 담아 반환 가능
    • 내부 반복문으로 반복문이 코드상에 노출되지 않음

@JsonProperty

  • JSON 데이터의 키(key)와 이를 받아 저장하는 DTO 필드의 변수명이 다를경우 사용
  • DTO 필드 위에 @JsonPropert("키_이름")을 작성하면 해당 키와 변수가 자동으로 매핑 됨

orElseThrow()

  • Optional 객체(존재할수도 안할수도 있는 객체, 즉 null이 될수도 있는 객체)에 값이 존재하면 그 값을 반환 / 존재하지 않으면 전달값으로 보낸 예외를 발생시키는 메서드
  • 전달값으로 IllegalArgumentException 클래스를 사용하면 메서드가 잘못됐거나 부적합한 전달값을 보냈음을 알 수 있음