본문 바로가기

bitcamp/면접족보

면접족보 21/02/05_비동기ajax

1. 비동기 통신과 동기통신의 차이점은?

· 비동기 통신은 '동시에 일어나지 않는다'를 의마하며, 클라이언트 요청 시 응답 상태와 상관없이 다음 동작을 수행한다.
· 동기 통신은 클라이언트가 요청을 하는 경우 소요 시간과는 상관없이 응답을 받은 후에 다음 동작을 수행한다.

 

 

2. xml 과 json 에 대하여 설명하시오.

· xml은 문자 기반의 마크업 언어(<>)로, 데이터를 저장하고 전달할 목적으로 제작되었다. 
· 마크업 언어를 설정하기 위해 규칙을 지정하며, html은 <h1></h1>처럼 이미 존재하는 태그만 사용가능하지만

  xml은 사용자가 직접 정의할 수 있다.
· json은 자바스크립트를 확장하여 제작하였고, 객체 표기법 '[ ]' 을 따른다. 

 

 

3. ajax + json으로 list를 출력하고, content_view 의 삭제 또한 ajax를 사용하여 실행하시오.

<RestBoardSpring4AfterController.java>

1
2
3
4
5
6
7
8
9
10
11
12
13
 @Log4j 
 @AllArgsConstructor
 @RestController
 public class RestBoardSpring4AfterController {
    private BoardService boardService;
 
    @GetMapping("/rest/after")
    public List<BoardVO> after(Model model) {
        log.info("before");
       
        return boardService.getList();
     }
 }
cs

 

<BoardController.java>

1
2
3
4
5
6
7
8
9
10
11
12
13
 @Log4j 
 @AllArgsConstructor
 @Controller
 public class BoardController {
    private BoardService boardService;
    
    @RequestMapping("/rest/list")
    public String restList(){
        log.info("list");
        
        return "ajaxlist2";
    }
 }
cs

 

<ajaxlist2.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
59
60
61
62
63
64
65
 <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script type="text/javascript">
        function getList() {
            var url = "${pageContext.request.contextPath}/rest/after.json";
 
            $.ajax({
                type: 'GET',
        url: url,
        cache : false// 이걸 안쓰거나 true하면 수정해도 값반영이 잘안댐
                dataType: 'json',// 데이터 타입을 제이슨 꼭해야함, 다른방법도 2가지있음
                success: function(result) {
 
                    var htmls="";                    
                    $("#list-table").html("");    
 
                    $("<tr>" , {
                        html : "<td>" + "번호" + "</td>"+  // 컬럼명들
                        "<td>" + "이름" + "</td>"+
                        "<td>" + "제목" + "</td>"+
                        "<td>" + "날짜" + "</td>"+                
                        "<td>" + "히트" + "</td>"
                    }).appendTo("#list-table"// 이것을 테이블에붙임
 
                    if(result.length < 1){
                        htmls.push("등록된 댓글이 없습니다.");
                    } else {
                         $(result).each(function(){                                                                
                            htmls += '<tr>';
                            htmls += '<td>'+ this.bId + '</td>';
                            htmls += '<td>'+ this.bName + '</td>';
                            htmls += '<td>'
                            for(var i=0; i < this.bIndent; i++) { //for 문은 시작하는 숫자와 종료되는 숫자를 적고 증가되는 값을 적어요. i++ 은 1씩 증가 i+2 는 2씩 증가^^
                                htmls += '-'    
                            }
                            htmls += '<a href="${pageContext.request.contextPath}/content_view?bId=' + this.bId + '">' + this.bTitle + '</a></td>';
                            htmls += '<td>'+ this.bDate + '</td>'
                            htmls += '<td>'+ this.bHit + '</td>';    
                            htmls += '</tr>';                                                           
                    });    //each end
 
                         htmls+='<tr>';
                         htmls+='<td colspan="5"> <a href="${pageContext.request.contextPath}/write_view">글작성</a> </td>';                            
                         htmls+='</tr>';
                    }
                    $("#list-table").append(htmls);
                }
            });// Ajax end
        }//end getList()    
    </script>
    
    <script>
        $(document).ready(function(){
            getList();
        });
    </script>
 </head>
 <body>
    <table id="list-table" width="500" cellpadding="0" cellspacing="0" border="1">
    </table>
 </body>
</html>
cs

 

 

<구현 화면>

 

 

※연습문제

데이터베이스 모델링 - 개념적 설계

MJ 주유소는 self 주유소로 고객이 직접 주유를 하는 시스템이다. 고객은 원하는 정유사의 주유기에서 주유를 할 수 있다. 
고객이 주유를 할 때 날짜와 주유한 시간, 주유 가격, 결제 방법이 등록된다. 고객은 회원 가입을 할 수 있다. 
회원 가입 시 이름, 연락처만 입력하면 회원 가입을 할 수 있다. 고객번호는 자동으로 등록 된다. 
만약 회원인 고객은 회원번호를 입력하면 포인트를 모을 수 있다. 

포인트는 주유 금액의 1%가 적립된다. 포인트에 따라 상품을 수령 할 수 있다. 
100p는 티슈를 2000p는 세차 권을 10000p는 3만 원짜리 주유티켓을 준다. 상품을 수령했을 경우 포인트는 차감된다.
MJ 주유소의 주유기 소유자들은 좋은 기름을 공급 받을 수 있도록, 각 단말기의 공급자 목록을 관리해야 한다. 
공급업자는 사원번호로 식별하고, 정유사, 이름, 연락처, 차량번호, 공급량, 계약기간을 가진다.
MJ 주유소의 주유기 소유자들은 고객들이 안심하고 거래 할 수 있도록 자신의 이름과 연락처를 기록해 놓아야 한다.

 

                                   <엔티티 추출>                                                       <엔티티 간의 관계 설정>

 

<ER 다이어그램>

 

'bitcamp > 면접족보' 카테고리의 다른 글