ajax 문법이 어느역할을 하는지? 를 중점에 두고 보시면 좋을겁니다 !!

 

사용된 예제는

Spring이 아니고 DynamicWebProject 입니다. 통신방법 메소드 맵핑 하는 맥락은 비슷비슷하지만요~

 


ajax 공부를 하기위해 여러 블로그들을 돌아다니다 보면,  $.get , $.post ? .success() 등등.. 다양한 문법이 있는데

문법은 다 다르지만 작동은 다 될거에요 !!! 

 

ajax 문법 정의

$.ajax({

  (요청 정보 작성)

  (필수)type: get,post,delete ...    , HTTP Method (기본값 GET 이지만 그래도 명시해주는게 좋음)

  (필수)url: "http://localhost:8080/블라블라" , 요청을 보낼 주소

  data:  , 서버에 전송할 http의 body ( 보통 GET 요청은 data가 없다 )

  contentType:  , (기본값)" application / x - www - form - urlencoded "

  dataType: "text, html, xml, json ... " 서버에서 반환되는 데이터 형식을 지정합니다.

  (dataType 생략할 시 jQuery가 알아서 정함)

})

.done(function(result){

  요청 성공시 동작하는 콜백함수입니다!!

})

 

이렇게 틀을 먼저 만들고 내용을 채워나가는 걸 추천드립니다 ~

$.ajax({}).done(res=>{}).fail(error=>{})

 

getajax.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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="getajax()">
    <input type="text" id="username" name="username" placeholder="username"/>
    <input type="password" id="password" name="password" placeholder="password"/>
</form>
<button onclick="getajax()">클릭</button>
</body>
 
<script>
function getajax(){
    var username = $("#username").val();
    var password = $("#password").val();
    console.log(username);
    console.log(password);
 
    var params = "username="+username;
    params += "&password="+password;
    
    $.ajax({
        //GET으로 key=value로 데이터를 전달하고 text/plain으로 응답받을 예정
        type:"GET",
        url:"http://localhost:8000/ajax/ajax1?" + params,
        //data: , get은 전송할 http의 body가 없음, 그래서 data필드가 필요없음
        //contentType: ,전송한 data가 없으니까 그 data를 설명한 필드도 필요없음
        dataType: "text" 
    })
    .done(function(result){ //ajax통신 완료후에 정상이면 실행
        alert(result);
        })
    .fail(function(){
        alert("통신실패");
        });
}
    
</script>
</html>
cs

get방식의 주소요청 (파라미터가 주소에 보인다)

31행 : url = http://localhost:8000/ajax/ajax1? + "username="+username + "&password="+password

 

 

Ajax1.java

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
package com.cos.ajax;
 
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@WebServlet("/ajax1")
public class Ajax1 extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    public Ajax1() {
        super();
    }
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        
        System.out.println("username: "+username);
        System.out.println("password: "+password);
        
        // ajax의 done함수 result 에 들어갈 내용
        PrintWriter out = response.getWriter();
        response.setCharacterEncoding("utf-8");
        
        StringBuffer sb = new StringBuffer();
        sb.append("username="+username+"\n");
        sb.append("password="+password);
        
        out.println(sb);
        out.flush();
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
    }
 
}
 
cs

 

12행 : @WebServlet("/ajax1") : /ajax1 으로 끝나는 주소요청을 담당하는 java파일임을 알린다.

20행 : doGet(request, response) : get 요청일때 동작하는 함수

21, 22행 : 요청된 주소( url = http://localhost:8000/ajax/ajax1? + "username="+username +"&password="+password )의 파라미터 이름이 username, password인 값을 자바 변수로 정의한다

 

28행 : requset (요청)은 모두 파악했으니, 이제 response (응답)할 차례.

32, 33행 : 응답을 HTML로 하기때문에 그에 맞는 문법을 사용한다. ( HTML 태그가 사용가능하다 )

 

 

 

 

 

 

 

결과

 

결과 해석

 

ajax 문법 정의

$.ajax({

  (요청 정보 작성)

  (필수)type: get,post,delete ...    , HTTP Method (기본값 GET 이지만 그래도 명시해주는게 좋음)

  (필수)url: "http://localhost:8080/블라블라" , 요청을 보낼 주소

  data:  , 서버에 전송할 http의 body ( 보통 GET 요청은 data가 없다 )

  contentType:  , (기본값)" application / x - www - form - urlencoded "

  dataType: "text, html, xml, json ... " 서버에서 반환되는 데이터 형식을 지정합니다.

  (dataType 생략할 시 jQuery가 알아서 정함)

})

.done(function(result){

  요청 성공시 동작하는 콜백함수입니다!!

})

 

 

 

 

 

 

 

 

 

 

아직 미완성입니다

'AJAX' 카테고리의 다른 글

ajax 통신 개념정리  (0) 2021.03.27
(펌)HTTP 그리고 REST API 다가가기  (0) 2021.03.27

참고 블로그

webdevtechblog.com/ajax-%EC%9D%98-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8%EC%99%80-%EC%84%9C%EB%B2%84-%EB%B9%84%EB%8F%99%EA%B8%B0-%ED%86%B5%EC%8B%A0-d681c905e2a9

 

AJAX 의 클라이언트와 서버 비동기 통신

클라이언트와 서버의 비동기 통신

webdevtechblog.com

jinbroing.tistory.com/99

 

[자바스크립트] Ajax 통신

[목표] - 모던웹 구현에 필요한 Ajax 개념알기 - Ajax 직접 구현해보는 것 마음먹기 [먼저 보면 좋은 게시글] 1) HTTP 프로토콜 자세히 알기 : http://jinbroing.tistory.com/96 2) 싱글쓰레드 자바스크립트 엔..

jinbroing.tistory.com


목표

JQuery의 Ajax를 이용해서 클라이언트와 서버간의 비동기 통신방법에 대해서 배워봅시다.

서론

개발을 하다보면 화면전환(Refresh) 없이, CRUD를 처리해야하는 상황이 생깁니다. 그럴때 편리하게 사용할 수 있는게 JQuery의 Ajax를 이용해서 비동기 통신을 하면 가능합니다. 제가 자바와 스프링을 이용하여 웹 개발을 하면서 공부한 내용을 정리하여 공유하고자 합니다.

 

 

[Ajax란]

- 자바스크립트를 이용해서 비동기적으로 브라우저와 서버가 데이터를 주고 받는 방식을 말함

- 새로운 언어나 프레임워크, 라이브러리가 아님, 네트워크 통신 방식을 말함

- Asynchronous Javascript and XML : 자바스크립트로 비동기 통신을 하고, XML 형식으로 데이터 리턴을 받는다는 뜻

- XML 데이터보다 JSON 데이터 포멧을 훨씬 더 많이 사용함

- 자바스크립트를 통해서 서버에 요청을 하고, 서버로부터 데이터를 리턴받음

- DOM을 제어해서 서버로부터 리턴받은 데이터를 가지고 랜더링함

 

[Ajax 사용하면 좋은 점]

- 비동기 통신의 이점 : 통신 후 데이터 바인딩하는 동안 사용자가 어플리케이션을 사용할 수 있음

- 전체 페이지 로딩(페이지 요청)시 모든 데이터를 서버로부터 받는 것이 아니라 필요한 부분을 그때마다 일부분 랜더링 시키는 것이 가능함

- 일부 데이터를 위해 클라이언트가 전체 페이지를 요청하지않아도됨

- 다시 말해 통신 때마다 페이지 전체 리로드를 하지 않음, 그 말은 브라우저 랜더링 엔진이 하는 일이 줄어든다는 것

- 이를 클라이언트 사이드 랜더링이라 함

클라이언트에서 서버로 데이터 전달

Ajax 를 사용하는데 있어 주로 사용되는 데이터 포맷은 CSV, JSON, XML 형식이 있다.(XML 만 사용하는 것이 아니다.) 

GET, POST, DELETE, UPDATE 등 일반적인 HTTP 요청을 이용해 CRUD 를 처리하며 REST API 와 궁합이 잘맞는다. 

 

클라이언트에서 서버로 데이터를 전송하려는 데이터들은 form 안에 위치하게 됩니다. 주로 input type들이서버로 전송해야할 데이터들입니다. 그리고 우리는 JQuery를 이용해서 form안에 있는 데이터들을 Ajax를 이용해 비동기 방식으로 서버로 전송하게 됩니다.

서버는 클라이언트에서 보낸 데이터를 받아 처리하고 비동기의 데이터 타입에 알맞은 반환을 해야합니다. 이렇게 서로 다른 언어간 데이터를 주고 받기 위해서는 특정한 문법이 필요한데 대표적인게 JSON 혹은 XML을 이용하게 되는데 JSON이 보편적이고 데이터 교환에 있어서 편리합니다.

이와 같은 과정을 진행하기 위해서는 차근차근 로직을 세우고 이해해야합니다. 그럼 저와 같이 로직을 세워보겠습니다. (참고로 제가 세운 로직보다 더 좋은 로직이 있을 수 있으며, 혼자 로직을 세워보는 습관을 들이는게 좋습니다.)

 

[Ajax 동작방식]

1) 서버로 정보 요청 : 이벤트 발생 -> 핸들러 함수 호출 -> 서버 요청 객체 생성 및 메서드 호출

2) 서버 내부 처리 후 응답 : json 또는 xml 형태로 데이터 전달

3) 응답을 받으면 이벤트 발생(onload), 이벤트의 콜백함수 호출

로직(Algorithm)

  • 비동기 처리를 위해서 Ajax를 사용한다.
  • GET 방식인지 POST 방식인지 정한다.
  • 클라이언트가 서버로 보낼 데이터를 만들어 보낸다 : GET의 경우 전달할 데이터값이 있으면 보내야할 URL에 쿼리스트링 또는 data에 키와 밸류를 선언해서 보낸다. POST의 경우 폼에 있는 데이터를 서버로 전송하기 위해서 formData와 serialize를 사용한다.
  • 서버에서 클라이언트로 보내야할 dataType을 정한다.


다음 포스팅에서 STS DynamicWebProject 로 다양한 형태(QueryString, json) Ajax예시를 만들어보겠습니다

'AJAX' 카테고리의 다른 글

ajax 통신 방법 (QueryString)  (0) 2021.03.27
(펌)HTTP 그리고 REST API 다가가기  (0) 2021.03.27

jinbroing.tistory.com/96

 

[웹기본개념] HTTP 그리고 REST API 다가가기

[HTTP란] - HyperText Transper Protocol의 준말, 하이퍼텍스트 트랜스퍼란 링크 기반으로 데이터를 요청하고 받겠다는 것 - 클라이언트와 서버가 요청을 하고 응답을 하기위해 따르는 프로토콜 - HTML 문서

jinbroing.tistory.com

 

설명이 너무 잘 되어있습니다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

 

[HTTP란]

- HyperText Transper Protocol의 준말, 하이퍼텍스트 트랜스퍼란 링크 기반으로 데이터를 요청하고 받겠다는 것

- 클라이언트와 서버가 요청을 하고 응답을 하기위해 따르는 프로토콜

- HTML 문서를 주고 받을 수 있음, 뿐만 아니라 이미지, 동영상, 오디오, 텍스트 문서 등을 주고 받을 수 있음

 

 

[HTTP 동작 방식]

 

- 클라이언트 : 웹어플리케이션의 경우 크롬, 파폭, IE 등 브라우저를 통햇허 서버에 요청을 함(프로토콜 + 도메인 + URI)

- 서버 : 클라이언트로부터 받은 요청을 내부적으로 처리하여 그에 대한 결과를 응답해줌

 

 

[HTTP 특징 및 기능]

1) connectless + stateless

- 1번 요청-응답 후 연결을 끊어버림

- 클라이언트의 이전 상태를 알 수 없음 : 그래서 쿠키와 세션(클라이언트와 서버의 이전 상태정보 저장)이 필요함

- 수십만명이 웹서비스를 사용(요청)하더라도 최소 유지를 할 수 있기 때문에, 많은 유저의 요청을 처리할 수 있음

 

2) keep-alive : HTTP 1.1부터 지원하는 기능

- 1번 항목에서 언급했듯이 HTTP는 1번의 요청에 대해 1번의 응답 하는 것을 기준으로 설계됨

- 요즘 웹사이트들을 보면 하나의 페이지에 수십개 이미지, css 파일, js 파일이 있는 것을 볼 수 있음

- 1 요청 1응답 기준이라면 여러번 연결을 끊었다 붙였다 해야함 굉장히 비효율적

- keep-alive 지원으로 지정된 시간동안 연결을 끊지않고 연결된 상태를 유지할 수 있음

- keep-alive time out 내 클라이언트가 재요청하면 새로운 연결이 아닌 연결된 것을 이용함

1) 웹서버 연결

2) HTML 문서 다운로드

3) 필요한 img, css, js 등 다운로드

4) 연결 끊음

 

- 모든 웹서버, 브라우저가 HTTP 1.1 지원

- 아래는 네이버 페이지에 대한 요청 헤더임 

 

[HTTP Request 구조]

- 사용자(클라이언트 프로그램을 이용한)가 서버에 요청을 보낼 때 HTTP Request 구조를 알아본 것

 

 

1) 메소드(Header) : 사용자가 서버에 요청하는 메소드, HTTP 버젼을 확인할 수 있음

2) 요청헤더(Header) : 서버에 전달되는 사용자 정보(클라이언트 브라우저 정보 : 문자코드, 언어, 파일 종류)

3) 공백 : HTTP Request Header(헤더)와 본문 부분을 구분하기위한 공백

4) 본문(message) : HTTP Request 요청 메세지를 담고 있는 부분, GET 메소드의 경우 요청정보가 주소에 담겨져 있어 본문은 빈 상태

 

- 아래는 해당 페이지 HTTP Request의 header 부분의 이미지 : 요청 본문 아님

 

 

[HTTP Response 구조]

- 서버가 사용자 요청에 대한 응답을 할 때 HTTP Response 구조를 알아본 것

 

 

1) 상태코드(Header) : 사용자의 요청에 대한 서버 처리결과를 나타냄(200, 404, 500 등 여러 상태코드가 있음)

2) 응답헤더(Header) : 사용자에게 전달한 데이터 정보를 나타냄

3) 공백 : HTTP Response Header(헤더)와 본문 부분을 구분하기위한 공백

4) 본문(message) : 사용자에게 전달한 데이터 내용을 담고 있음(요청에 대한 데이터 응답)

 

- 아래는 해당 페이지 HTTP Request의 header 부분의 이미지 : 응답 본문 아님

 

[HTTP method 그리고 REST API]

- 메소드란? 요청의 종류를 서버에 알리기위해 사용하는 것, 게시판 기능(CRUD, REST API)을 만들 때 사용

- 메소드 종류

1) GET : 정보를 요청하기위해 사용(Read)

2) POST : 정보를 입력하기위해 사용(Create)

3) PUT : 정보를 업데이트하기위해 사용(Update)

4) DELETE : 정보를 삭제하기위해 사용(Delete)

 

- REST API란? HTTP 프로토콜 장점을 살릴 수 있는 네트워크 기반 아키텍처

1) REST API를 구현하기위해 HTTP method + 모든 개체 리소스화 + URL 디자인(라우팅) 필요

- 라우팅이란? 클라이언트의 요청에 대한 결과(응답)를 어떻게 이어줄 것인가를 처리하는 것

- URI를 이용한 접근 : 모든 개체를 리소스로 보고, 리소스에 고유번호를 부여

- URL 디자인 원칙 : 자원에 대한 처리를 주소에 나타내지않는다(HTTP method는 내부적으로 처리하도록), 어떤 자원인지 주소에 명확하게 나타냄

 

- 레일즈로 REST URL 디자인한 것

- book 이라는 자원(db 테이블 구현)에 대한 처리를 설계함

- 실제 주소는 http://도메인/books 혹은 뒤에 book 자원 중 하나에 대한 처리(:id), book 자원 새로 만들기 new 만 있음

- update, delete, read(show)를 주소 상에서 보여주지 않음

 

- REST API를 구현하기위해 HTTP 프로토콜에 대한 이해, method 종류, 라우팅에 대한 이해가 있어야함

- HTTP method를 클라이언트가 요청할 때 서버에 넘길 수 있도록(처리 각각에 맞는)

 

 

[참고자료]

1) 위키피디아 HTTP : https://ko.wikipedia.org/wiki/HTTP

2) joinc.com HTTP : https://www.joinc.co.kr/w/Site/Network_Programing/AdvancedComm/HTTP

3) exoluse 블로그 : http://exoluse.egloos.com/v/4572381

4) Wooeong's lab : http://wooeong.tistory.com/entry/HTTP%EB%9E%80

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

Ajax 통신을 사용할때 Request Header를 개발자가 잘 생각해서 써야하는데 , 이 글을 읽는다면

Request Header 작성에 도움이 될 것 같습니다.

'AJAX' 카테고리의 다른 글

ajax 통신 방법 (QueryString)  (0) 2021.03.27
ajax 통신 개념정리  (0) 2021.03.27

+ Recent posts