Web/기타

[스파르타 코딩클럽] 2주차 실습일지 - jQuery, Ajax

daeunnniii 2021. 7. 10. 20:26
728x90
반응형

2주차 과제

1주차 과제로 만들었던 쇼핑몰에 환율 API와 Ajax를 활용하여 달러-원 환율 표시하기!!

 

배운 내용 정리

1. jQuery 란?

- HTML의 요소들을 조작하는, 편리한 Javascript를 미리 작성해둔 라이브러리! 즉, Javascript와 다른 특별한 소프트웨어가 아니라 미리 작성된 Javascript 코드이다.

- Javascript로도 모든 기능을 구현할 수는 있지만, 1) 코드가 복잡하고, 2) 브라우저 간 호환성 문제도 고려해야해서, jQuery라는 라이브러리가 등장하게 되었다.

 

2. jQuery 임포트

<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>

(참고: https://www.w3schools.com/jquery/jquery_get_started.asp)

 

3. jQuery 다루기

1) .val()

.val()은 양식의 값을 가져오거나 값을 설정하는 메소드이다.

.val() : 선택한 양식의 값을 가져온다.

아래와 같이 $('#article-url').val(); 을 작성하면 id가 article-url인 요소의 값을 반환해준다.

.val( value ) : 선택한 양식의 값을 설정한다.

아래와 같이 $('#article-url').val('장영실'); 을 작성하면 id가 article-url인 요소의 값을 장영실로 정한다.

2) .hide() 와 .show()

// id 값이 post-box인 곳을 가리키고, hide()로 안보이게 한다.(=css의 display 값을 none으로 바꾼다)
$('#post-box').hide();

// show()로 보이게 한다.(=css의 display 값을 block으로 바꾼다)
$('#post-box').show();

 

3) .css()

.css()는 선택한 요소의 css 속성값을 가져오거나 style 속성을 추가한다.

.css( propertyName ) : css 속성값을 가져온다.

$('#post-box').css('width');

 

.css( propertyName, value ) : style 속성을 추가한다.

$('#post-box').css('width', '700px');

 

4) .text(): 버튼의 텍스트 바꾸기

.text()는 선택한 요소 안의 내용을 가져오거나, 다른 내용으로 바꾼다.

.text() : 선택한 요소 안의 내용을 가져온다.

$('#btn-posting-box').text()

 

.text( textString ) : 이전 내용을 지우고 새로운 내용을 넣는다.

$('#btn-posting-box').text('랄라')

5) .append()

선택된 요소의 마지막에 새로운 요소나 콘텐츠를 추가한다.

$('#cards-box').append("<button>나는 버튼이다</button>");

 

*주의: 홑따옴표(')가 아닌 backtick(`)으로 감싸야 한다!!

backtick을 사용하면 문자 중간에 Javascript 변수를 삽입할 수 있다.

let img_url = 'https://www.eurail.com/content/dam/images/eurail/Italy%20OCP%20Promo%20Block.adaptive.767.1535627244182.jpg';
let link_url = 'https://naver.com/';
let title = '여기 기사 제목이 들어가죠';
let desc = '기사의 요약 내용이 들어갑니다. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세 무궁화 삼천리 화려강산...';
let comment = '여기에 코멘트가 들어갑니다.';

let temp_html = `<div class="card">
                    <img class="card-img-top"
                        src="${img_url}"
                        alt="Card image cap">
                    <div class="card-body">
                        <a href="${link_url}" class="card-title">${title}</a>
                        <p class="card-text">${desc}</p>
                        <p class="card-text comment">${comment}</p>
                    </div>
                </div>`;
$('#cards-box').append(temp_html);

 

4. JQuery 적용하기

1) 처음에는 포스팅박스가 보이지 않도록 초기화.

- '포스팅박스 열기' 버튼 클릭 시 포스팅박스 열리고 버튼 텍스트를 '포스팅박스 닫기'로 변경

- '포스팅박스 닫기' 버튼 클릭 시 포스팅박스 닫히고 버튼 텍스트를 '포스팅박스 열기'로 변경

.posting-box {
	...
    display: none;
}
function openclose() {
      let status = $('#post-box').css('display');
      //concolse.log(status);
      if (status == 'block') {
        $('#post-box').hide();
        $('btn-posting-box').text('포스팅박스 열기');
      } else {
        $('#post-box').show();
        $('#btn-posting-box').text('포스팅박스 닫기');
      }
 }

 

5. 서버-클라이언트 통신 이해하기

1) JSON: Key, Value 쌍으로 이루어져 있다. value에는 딕셔너리형, 리스트형 등 다양한 형태로 값이 들어갈 수 있다.

*크롬 익스텐션 JSONView를 설치하면 JSON을 더 이쁘게 볼 수 있음!

 

2) 서버-클라이언트 통신

* GET: 클라이언트가 서버에게 데이터 조회(Read)를 요청할 때

예) 영화 목록 조회

- 특징

(1) POST 방식 보다 전송 속도가 빠르다.

(2) 전송되는 데이터가 QueryString으로 데이터가 전송이 되기 때문에 보안에 취약하다.

(3) URL의 최대길이가 2048자만 전송이 가능하므로 전송되는 데이터의 길이에 제한이 있다.

 

* POST: 클라이언트가 서버에게 데이터를 전송할 때. 데이터 생성(Create), 변경(Update), 삭제(Delete) 요청 할 때

예) 회원가입, 회원탈퇴, 비밀번호 수정

- 특징

(1) 대용량의 데이터를 전송할 수 있다.

(2) URL에 데이터를 노출하지 않고 HTTP통신 데이터 포맷의 body부분에 데이터가 실려서 전송이 되기 때문에 보안성이 좋다.

 

3) GET 요청 이해하기 (POST는 4주차에)

ex) https://movie.naver.com/movie/bi/mi/basic.nhn?code=161967
위 주소는 "?"를 중심으로 크게 두 부분으로 쪼개진다.
"?" 기준으로 앞부분이 <서버 주소>, 뒷부분이 [영화 번호] !!
* 서버 주소: https://movie.naver.com/movie/bi/mi/basic.nhn
* 영화 정보: code=161967

 

4) GET 방식의 데이터 전달

*Query String(쿼리스트링)

- 사용자가 입력 데이터를 전달하는 방법 중의 하나로, url 주소에 미리 협의된 데이터를 파라미터를 통해 넘기는 것을 말한다.

- query parameters(물음표 뒤에 =로 연결된 key value pair 부분)을 url 뒤에 덧붙여서 추가적인 정보를 서버 측에 전달하는 것

 

*Query String(쿼리스트링) 형식
- 정해진 엔드포인트 주소 이후에 ?를 쓰는 것으로 쿼리스트링이 시작함을 알린다.

- parameter=value로 필요한 파라미터의 값을 적는다
- 파라미터가 여러 개일 경우 &를 붙여 여러 개의 파라미터를 넘길 수 있다.

엔드포인트주소/엔드포인트주소?파라미터=값&파라미터=값
ex) google.com/search?q=아이폰&sourceid=chrome&ie=UTF-8

- = 로 key 와 value 가 구분된다.

 

6. Ajax 실습

1) Ajax는 jQuery를 임포트한 페이지에서만 동작 가능

2) 서울시 미세먼지 OpenAPI와 Ajax를 활용한 실습

<style type="text/css">
    .bad {
      color: red;
      font-weight: bold;
    }
</style>

<script>
    function q1() {
      $('#names-q1').empty()
      $.ajax({
        type: "GET",      // GET 방식으로 요청한다.
        url: "http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99",
        data: {},         // 요청하면서 함께 줄 데이터 (GET 요청 시엔 비워둠!!)
        success: function (response) {      // 서버에서 준 결과를 response라는 변수에 담음
          let rows = response['RealtimeCityAir']['row']       // 서버에서 준 결과를 이용해서 나머지 코드 작성
          for (let i =0; i < rows.length; i++) {
            let gu_name = rows[i]['MSRSTE_NM']
            let gu_mise = rows[i]['IDEX_MVL']
            let temp_html = ``
            if (gu_mise > 80) {
              let temp_html = `<li class="bad">${gu_name} : ${gu_mise}</li>`
              $('#names-q1').append(temp_html)
            } else {
              let temp_html = `<li>${gu_name} : ${gu_mise}</li>`
              $('#names-q1').append(temp_html)
            }
          }
        }
      })
    }
  </script>

3) 랜덤 고양이OpenAPI와 Ajax를 활용한 실습

- '고양이를 보자' 버튼을 누를 때마다 아래 고양이 OpenAPI에서 url 값을 가져와 고양이 사진을 출력해주는 코드 작성. (아래 고양이 OpenAPI에 접근할 때마다 랜덤으로 다른 고양이 사진 url이 출력된다!!)

$(document).ready(function(){		//웹페이지가 열리자마자 q1 함수 호출
      q1()
});
function q1() {
	$.ajax({
		type: "GET",      // GET 방식으로 요청한다.
		url: "https://api.thecatapi.com/v1/images/search",
		data: {},         // 요청하면서 함께 줄 데이터 (GET 요청 시엔 비워둠!!)
		success: function (response) {      // 서버에서 준 결과를 response라는 변수에 담음
			let img = response[0]['url']       // 서버에서 준 결과를 이용해서 나머지 코드 작성
			$('#img-cat').attr('src', img);
		}
	})
}

 

회고

이전에 웹 개발 프로젝트를 진행할 때 jQuery와 Ajax가 무엇인지 모르고 바로 프로젝트를 진행하여 어려움을 겪었던 것이 기억난다. 하지만 이번 2주차 강의를 통해 jQuery와 Ajax가 무엇이고, 어떻게 사용하는지 잘 정리할 수 있었던 수업이었다. jQuery의 다양한 메소드를 활용하여 경우에 따라 버튼의 텍스트를 변경하는 등을 작업할 수 있다는 것을 알게 되었다. 또한 Ajax를 여러 OpenAPI를 활용하여 재미있는 실습을 할 수 있어 더욱 흥미로웠다. 서울시 실시간 미세먼지 상태를 보여주고, 실시간 따릉이 현황을 작성하고, 랜덤 고양이 이미지를 출력하는 등 실생활에 응용할 수 있는 사례들과 함께 Ajax를 활용해볼 수 있어 재미있는 수업이었던 것 같다!

 

728x90
반응형