댓글 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 클래스를 사용하면 메서드가 잘못됐거나 부적합한 전달값을 보냈음을 알 수 있음