



@ResponseBody : 요청 처리 메소드의 반환값(문자열)을 리스폰즈 메세지 몸체부에 저장하여 클라이언트에게 전달하여 응답하는 기능을 제공하는 어노테이션
→ Front Controller가 요청 처리 메소드의 반환값을 뷰로 변환하여 응답 처리하지 않고 요청 처리 메소드의 반환값으로 직접 응답 처리
→ 페이지 요청시 JSON 형식의 문자열로 클라이언트에게 응답 처리하기 위해 사용
@RequestBody : 리퀘스트 메세지 몸체부에 저장된 모든 전달값을 문자열로 제공받아 매개변수에 전달하기 위한 어노테이션
→ 페이지 요청시 JSON 형식으로 전달된 값을 제공받아 매개변수에 저장하기 위해 사용
문자열이 아닌 Java 객체를 반환하게 되면 에러가 발생
문제점 : 리스폰즈 메세지 몸체부에 Java 객체를 저장해 응답 처리 불가능 - 406 에러코드 발생
해결법 : 요청 처리 메소드에 의해 반환받는 Java 객체를 문자열(XML 또는 JSON)로 변환하여 리스폰즈 메세지 몸체부에 저장해 응답 처리
→ jackson-databind 라이브러리 빌드 처리
ExceptionController에서 Exception 메소드 주석 처리









create table rest_board(idx number primary key, writer varchar2(50), content varchar2(100), regdate date);
create SEQUENCE rest_board_seq;



📍 controller 클래스가 제대로 작동되는지 확인하는 방법 : 검증 프로그램 사용(postman)
게시글을 전달받아 REST_BOARD 테이블의 행으로 삽입하고 실행결과를 문자열로 응답하는 요청 처리 메소드
@PostMapping 어노테이션을 사용해 post 방식을 board_add 페이지 요청시 처리되는 메소드
HtmlUtils.htmlEscape(String str) : 매개변수로 전달받은 문자열에 존재하는 HTML 태그 관련 문자를 회피문자로 변환하여 반환하는 정적메소드 - XSS 공경에 대한 방어
success 일반 문자열 반환

POST 방식으로 JSON 형식의 row 데이터 추가 : 홍길동, 테스트

추가 성공 : success

REST_BOARD 테이블에 저장된 행에서 요청 페이지 번호에 해당하는 행만 검색하여 JSON 형식의 문자열로 응답하는 요청 처리 메소드
@GetMapping 어노테이션을 사용해 GET 방식으로 board_list 요청시 처리되는 메소드

Get 방식으로 board_list 페이지 요청시 restBoardList에 추가된 걸 확인할 수 있음.

게시글을 전달받아 REST_BOARD 테이블에 저장된 행을 변경하고 실행결과를 문자열로 응답하는 요청 처리 메소드

Put 방식으로 board_modify 페이지 요청시 JSON 형식으로 작성한 내용으로 행 변경 → success

글번호를 전달받아 REST_BOARD 테이블에 저장된 행을 검색하여 JSON 형식의 문자열로 응답하는 요청 처리 메소드
페이지 요청시 요청 URL 주소에 {이름} 형식으로 값을 전달받아 매개변수에 저장해 요청 처리 메소드에서 사용
요청 URL 주소로 제공된 값을 매개변수에 저장하여 사용하기 위해서는 @PathVariable 어노테이션 사용
@PathVariable : 페이지를 요청한 URL 주소로 값을 전달받아 매개변수에 저장하기 위한 어노테이션
→ 요청 URL 주소로 값을 제공받기 위한 이름과 같은 이름으로 매개변수를 작성해야만 요청 URL 주소로 제공된 값을 매개변수에 저장 가능

GET 방식으로 board_view?idx=1 페이지 요청
URL 주소에 {이름}형식으로 값을 전달받았기 때문에 {이름}으로 전달받은 값을 페이지 요청시 바로 작성하여 요청

글번호를 전달받아 REST_BOARD 테이블에 저장된 행을 삭제하고 실행결과를 문자열로 응답하는 요청 처리 메소드

DELETE 방식으로 board_remove?idx=1 페이지 요청
{이름}으로 idx 값을 전달받았기 때문에 페이지 요청시 URL에 전부 작성하여 요청

board_list 페이지 재요청하여 삭제됐는지 확인.

① 요청 페이지 번호를 저장하기 위한 전역변수 작성
→ 프로그램 종료시까지 값을 유지해 모든 자바스크립트 함수에서 사용할 수 있도록 전역변수로 선언

② 페이지를 요청해 게시글 목록을 제공받아 출력하는 함수 호출

③ boardListDisplay 함수 : 요청 페이지 번호를 전달받아 페이지 번호에 해당하는 게시글 목록을 출력하는 함수
→ 비동기식 방식(페이지 이동❌)으로 페이지를 요청해 JSON 형식의 문자열로 응답받아 HTML 태그로 변환하여 출력 처리

매개변수 : pageNum, pageSize - 요청한 페이지 정보 저장
page에 매개변수로 전달받은 pageNum 값 저장
비동기식 방식 : jQuery가 갖는 ajax 함수 이용
get 방식으로 /rest/board_list 페이지 요청하여 pageNum, pageSize 데이터(인코딩 처리된 전달값)를 json 타입으로 응답.
성공시 결과값(JSON 형태의 문자열 - result) 출력 → 주석 처리

응답받은 자바스크립트 객체를 HTMl 태그로 변환하여 출력 처리
만약 결과값(pager, restBoardList) 중 restBoardList(Array 객체) 의 갯수가 0이면(게시글이 없는 경우) html 변수에 태그 하나하나씩 추가, 검색된 게시글 없습니다. 추가 → 게시글 목록을 출력하는 태그에 html 태그 출력.

그렇지 않은 경우(게시글이 있는 경우) 결과값 중 restBoardList 값을 each 함수를 사용해 게시글 목록을 하나씩 출력
each : 게시글이 여러 개 있으면 그걸 하나씩 꺼내서 화면에 보여주는 역할, array 객체를 반복 처리
마찬가지로 게시글 목록을 출력하는 태그에 html 태그 출력.
페이지 번호를 출력하는 함수 호출 : pageNumberDisplay()
③ 페이징 처리 관련 Object 객체를 전달받아 HTML 태그로 변환해 페이지 번호를 출력하는 함수

④ 모든 입력태그 초기화 및 태그 숨김 처리하는 함수

⑤ [글쓰기] 태그를 클릭한 경우 호출될 이벤트 처리 함수 등록


⑦ 신규 게시글을 입력받기 위한 태그에서 [저장] 태그를 클릭한 경우 호출될 이벤트 처리 함수 등록
→ 입력값을 삽입 처리하는 Restful API를 비동기식으로 요청하여 실행결과를 제공받아 출력 처리

⑥ 신규 게시글을 입력받기 위한 태그에서 [취소] 태그를 클릭한 경우 호출될 이벤트 처리 함수 등록

⑦ 게시글의 [변경] 태그를 클릭한 경우 호출되는 이벤트 처리 함수
→ 매개변수로 전달받은 글번호의 게시글을 검색하여 JSON 형식의 문자열로 제공하는 Restful API를 비동기식 방식으로 요청하여 출력 처리

⑧ 변경 게시글을 입력받기 위한 태그에서 [변경] 태그를 클릭한 경우 호출될 이벤트 처리 함수 등록
→ 입력값으로 변경 처리하는 Restful API를 비동기식으로 요청하여 실행결과를 제공받아 출력 처리

⑨ 변경 게시글을 입력받기 위한 태그에서 [취소] 태그를 클릭한 경우 호출될 이벤트 처리 함수 등록

⑩ 게시글의 [삭제] 태그를 클릭한 경우 호출되는 이벤트 처리 함수
→ 게시글을 삭제 처리하는 Restful API를 비동기식으로 요청하여 실행결과를 제공받아 출력 처리

→ Restful API를 ajax 비동기식 방식으로 이동해 JSON 형식으로 전달받아 응답?