본문 바로가기

bitcamp/면접족보

면접족보 21/02/08_RESTful

1. RESTful에 대하여 설명하시오. 

· REST란? Representational State Transfer의 약자로, 웹의 장점을 최대한 활용할 수 있는 아키텍처이다.
· REST의 기본 원칙을 지킨 서비스를 'RESTful 하다' 라고 표현하기도 하며, RESTful은 URI 설계를 의미하기도 한다.
· HTTP URI를 통해 정보의 자원을 표현하고, HTTP Method(POST, GET, PUT, DELETE) 방식으로 설계한다.
  정보의 자원에 대해 아래와 같이 CRUD Operation을 적용한다.

· 아래의 예시와 같이 1000번째 글에 어떠한 행위를 할 것인지 URI를 통해 처리한다.
  /board/1000
  1000번째 글 + select
  1000번째 글 + update
  1000번째 글 + insert     
  1000번째 글 + delete 


 

※연습문제

RESTful과 ajax를 사용하여 list를 출력하고 삭제하시오

 

<RestBoardController.java>

 : jsp가 return 되질 않아서 커먼드 객체 대신 ModelAndView를 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 @Log4j
 @AllArgsConstructor
 @RestController
 @RequestMapping("/restful/*")
 public class RestBoardController {
    private BoardService boardService;
 
    // 1. list(처음 진입 화면이므로 화면이 깜박여도 상관없으므로 @Controller방식으로 접근 - veiw(화면) 리턴
    @GetMapping("/board")
    public ModelAndView list(ModelAndView mav) {
        mav.setViewName("rest_list"); // rest_list.jsp로 보내줌
        mav.addObject("list", boardService.getList());
 
        return mav;
    }
 
    @GetMapping("/board/{bId}")
    public ModelAndView rest_content_view(BoardVO boardVO, ModelAndView mav) {
        log.info("rest_content_view");
        
        mav.setViewName("rest_content_view");
        mav.addObject("content_view", boardService.content(boardVO.getbId()));
        return mav;
    }
 
    @DeleteMapping("/board/{bId}")
    public ResponseEntity<String> rest_delete(BoardVO boardVO, Model model) {
        ResponseEntity<String> entity = null;
        log.info("rest_delete");
        try {
            boardService.delete(boardVO.getbId());
            // 삭제 성공 시 성공 상태메시지 저장
            entity = new ResponseEntity<String>("SUCCESS", HttpStatus.OK);
        } catch (Exception e) {
            e.printStackTrace();
            // 삭제 실패 시 실패 상태메시지 저장
            entity = new ResponseEntity<String>(e.getMessage(), HttpStatus.BAD_REQUEST);
        }
        // 삭제 처리 HTTP 상태 메시지 리턴
        return entity;
    }
 }
cs

 

 

<rest_list .jsp>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title></title>
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
 <script type="text/javascript">
 
    $(document).ready(function(){
       $('.a-delete').click(function(event){
            event.preventDefault();
            var obj = $(this).parent().parent();
            
            $.ajax({
                type: "DELETE",
                url : $(this).attr('href'),            
                success: function(result){
                    console.log(result);
                    if(result == "SUCCESS"){
                        $(obj).remove();
                    }
                },
                error: function(e){
                    console.log(e);
                }                
            });            
        });    
    });    
 </script>
 </head>
 <body>
    <table width="500" cellpadding="0" cellspacing="0" border="1">
        <tr>
            <td>번호</td>
            <td>이름</td>
            <td>제목</td>
            <td>날짜</td>
            <td>히트</td>
            <td>비고</td>
        </tr>
        <c:forEach items="${list}" var="dto">
        <tr>
            <td>${dto.bId}</td>
            <td>${dto.bName}</td>
            <td>
                <c:forEach begin="1" end="${dto.bIndent}">-[re]</c:forEach>
                <a href="${pageContext.request.contextPath}/restful/board/${dto.bId}">${dto.bTitle}</a></td>
            <td>${dto.bDae}</td>
            <td>${dto.bHit}</td>
            <td><class="a-delete" href="${pageContext.request.contextPath}/restful/board/${dto.bId}">삭제</a></td>
        </tr>
        </c:forEach>
        <tr>
            <td colspan="5"> <a href="write_view">글작성</a> </td>
        </tr>
    </table>
 </body>
 </html>
 
cs

 

 

<구현 화면>