댓글처리3 - Mybatis, MVC, Spring (CRUD 나머지)

ACAI BERRY DEVELOVER·2023년 1월 12일
0

영속영역과 서비스영역은 모두 마무리됐고 Controller부분을 작성해보도록 한다.

@RestController 어노테이션을 이용하여 ReplyController를 작성한다.

설계

작업	  		 	URL			               HTTP 전송방식 
등록 	: 	/replies/new 					   POST
조회		:	/replies/:rno					    GET
삭제 	:	/replies/:rno					   DELETE
페이지	:	/replies/pages/:bno/:page		    GET
수정 	:   /replies/:rno					PUT or PATCH

REST방식으로 동작하는 URL을 설계할때는 PK를 기준으로 작성하는 게 좋다.

PK만으로 조회, 수정, 삭제가 가능하기 때문이다.

다만 댓글의 목록은 PK를 사용할 수 없기 때문에 파라미터로 필요한 게시물의 번호화 페이지 번호 정보들을 URL을 표현하는 방식을 사용한다.

ReplyControllersms ReplyService 타입의 객체인 ReplyServiceImpl 객체를 주입받도록 설계한다.

  • @Setter주입을 이용하거나 @AllArgsConstructor를 이용해서 ReplyService타입의 객체를 필요로 하는 생성자를 만들어서 사용한다.

등록 작업과 테스트

REST방식으로 처리할 때 주의할 점은 브라우저나 외부에서 서버를 호출할 때 데이터의 포맷과 서버에서 보내주는 데이터 타입을 명확히 설계해야 하는 것이다.

ex) 댓글의 등록인 경우 브라우저에서는 JSON 타입으로 된 댓글 데이터를 전송하고,
서버에서는 댓글의 처리 결과가 정상적으로 되었는지 문자열로 결과를 알려주도록 한다.

  • create() = @PostMapping으로 POST방식으로만 동작하도록 설계
  • consumes = json 방식의 데이터만 처리
  • produces = 문자열 반환
  • @RequestBody = JSON데이터를 ReplyVO 타입으로 변환하도록 지정
  • create()는 내부적으로 ReplyServiceImpl을 호출해서 register()를 호출하고 댓글이 추가된 숫자를 확인해서 브라우저에서 '200 OK' 또는 '500 Internal Server Error'을 반환하도록 한다.

테스트는 POSTMAN을 이용한다.

성공이다. db에도 값이 들어와있음이 확인가능하다.

특정 게시물의 댓글 목록 확인

ReplyController의 getList()는 Criteria를 이용해서 파라미터를 수집하는데 '/{bno}/{page}'의 'page'의 값은 Criteria를 생성해서 직접 처리해야한다.

게시물의 번호는 @PathVariable을 이용해서 파라미터로 처리하고 브라우저에서 테스트해본다.

http://localhost:8080/replies/pages/게시물번호/1

해당 게시물의 댓글들의 목록을 확인할 수 있다.

댓글 삭제/조회

RestController의 댓글 수정/삭제/조회는 위와 유사한 방식으로 JSON이나 문자열을 반환하도록 설계한다.

댓글 수정

댓글 수정은 JSON 형태로 전달되는 데이터와 파라미터로 전달되는 댓글 번호(bno)를 처리하기 때문에 아래와 같이 처리한다.

댓글 수정은 'PUT'방식이나 'PATCH'방식을 이용하도록 처리하고, 실제 수정되는 데이터는 JSON 포맷이므로 @RequestBody를 이용해서 처리한다.

@RequestBody로 처리되는 데이터는 일반 파라미터나 @PathVariable 파라미터를 처리할 수 없기 때문에 직접 처리해 주는 부분을 주의해야 한다.

profile
쓸때 대충 쓰지 말고! 공부하면서 써!

0개의 댓글