본문 바로가기
웹 개발

[내일배움단] 웹개발 종합반 2주차 개발일지

by evekang 2022. 5. 10.

1주차 개발일지 보러가기 → 2022.05.06 - [웹 개발] - [내일배움단] 웹개발 종합반 1주차 개발일지

 


 

 

 

와 드디어 2주차도 끝이다! 회사일과 병행하는 나 자신 기특쓰... 

 

 

이번주의 수업 목표는

  1. Javascript 문법에 익숙해진다.
  2. jQuery로 간단한 HTML을 조작할 수 있다.
  3. Ajax로 서버 API(약속)에 데이터를 주고, 결과를 받아온다.

인데 내가 정말 취약하다고 생각하는 것들만 있네;; 사실 아주 정말 부담스러웠다. 또 이해를 못할까봐 ㅠㅠ 똥멍청이일까봐ㅠㅠㅠ

그런 트라우마 하나쯤은 가지고 계시잖아요..? 자바스크립트, 제이쿼리, 에이젝스가 딱 저의 그거였습니다ㅠ

 

 

하 어쨌거나 배운 것들을 정리해본다!!! 배운거 다 씹어먹는다는 마음으로!! 와작와작

 

 


@ jQuery는 누군가 쓰기 편하라고 만들어놓은 Javascript 모음집이다. (라이브러리라고 하지) 그러니까 하나도 어려울 것 없다. 

(단지, 쓰기 전에 반드시 import 하는걸 기억한다! <head>와 </head> 사이에 넣긔)

 

@ 그럼 그냥 Javascript 쓰지 왜 굳이 jQuery를 만들어서 쓸까?

원래 Javascript를 썼었는데.... 쓰다보니까 이 Javascript 코드가 좀 복잡하기도 하고, 브라우저간에 호환성도 안 맞고 해서 jQuery가 만들어지게 되었다.

Javascript 코드가 복잡해 봤자지.. 하는 나같은 사람들을 위해 스파르타 코딩클럽에서 상세히 예시를 들어줬다.

 

Javascript로 이렇게 써야 했다면,

document.getElementById("element").style.display = "none";

jQuery로는 보다 직관적으로 쓸 수 있다!

$('#element').hide();

 

jQuery를 쓸 때 어떤 대상을 콕 찍어줘야 내 마음대로 조작(요리)할 수 있다. 

예) 특정 input값을 가져와줘 : 특정 input의 이름을 알아야 내가 조작할 수 있음.

 

css에서는 콕 찍어주는 것을 class를 사용해서 했다면, jQuery에서는 id를 사용한다.

<scrip>안에서 id는 앞에 #을 붙여 찍어준다.

 

예1) 특정 값 가져오기

// id가 post-url인 곳의 값을 가져와줘
$('#post-url').val();

 

예2) 특정 구획 보이기/숨기기

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

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

 

예3) css값 가져오기

$('#post-box').hide();
$('#post-box').css('display');

$('#post-box').show();
$('#post-box').css('display');

 

예4) 태그 내 텍스트 입력하기

// 텍스트 입력 뿐만 아니라 변경할 때도 자주 사용할 듯하다.
$('#btn-posting-box').text('포스팅 박스 닫기');

 

예5) 태그 내 html 입력하기

//추가할 html코드를 작성해서 임시 html 변수(temp_html)에 넣는다.
let temp_html = '<button>나는 추가될 버튼이다!</button>';

// html 코드를 붙일 id를 콕 찍어서 .append()로 붙여준다.
$('#cards-box').append(temp_html);

 

여기까지가 기본 jQuery 사용법이었고, 보통 많이 사용하는 버튼에 onclick 이벤트를 적용해서 jQuery를 연습했다.

버튼을 클릭하면 openclose()안의 함수가 작동하는 형태이다.

<script>
function openclose() {
	// 여기에 jQuery를 이용해 코드를 짤 예정    
}
</script>

// onclick 속성(attribute)을 추가
<button onclick="openclose()" class="btn btn-primary btn-lg">포스팅박스 열기</button>

 

css의

display:none → 화면에 안 보임.

display: block → 화면에 보임.

이것도 많이 사용할 것 같다.

 

 

그 다음엔 Ajax!

 

Ajax를 구글에서 검색하면 아래같이 설명이 나온다.

 

'AJAX란 비동기 자바스크립트와 XML을 말합니다. 간단히 말하면, 서버와 통신하기 위해 XMLHttpRequest 객체를 사용하는 것을 말합니다.'라고 나온다.

'Ajax는 웹 페이지 전체를 다시 로딩하지 않고도, 웹 페이지의 일부분만을 갱신할 수 있습니다.

즉 Ajax를 이용하면 백그라운드 영역에서 서버와 통신하여, 그 결과를 웹 페이지의 일부분에만 표시할 수 있습니다.'

......

 

말이 어렵지만 굳이 이해를 해보자면.. 화면 안 바꾸고 데이터를 가져온다는 이야기다.

화면 안 바꾸고 → 비동기로

데이터를 가져온다 → (클라이언트가) 서버와 통신한다.

 

 

 

아~ 잘 모르겠지만 그런거구나..... 그런데 서버랑은 어떻게 통신하지?

클라이언트가 서버에게 요청할 때에는 '타입'이라는 것이 존재한다. 

타입에는 2가지 방식이 있는데 'GET'과 'POST'다.

 

1) GET → 보통 데이터를 조회(Read)를 요청할 때 사용

2) POST → 보통, 데이터를 생성(Create), 변경(Update), 삭제(Delete)를 요청할 때 사용

 

 

 

그런데 이번주에는 GET 방식으로 통신하는 것만 다룰겁니다!

 

ajax의 기본 골격

$.ajax({
  type: "GET",
  url: "여기에URL을입력",
  data: {},
  success: function(response){
    console.log(response)
  }
})

 

ajax 코드 설명

type: "GET" → GET 방식으로 요청한다.

url : 요청할 url

data : 요청하면서 함께 줄 데이터(POST인 경우에만 사용)

success : 성공하면 response 값이 서버의 결과 값을 담아서 함수를 실행한다. 

 

하나하나 뜯어서 이해하려 하지 말고 영어 숙어 통째로 암기하듯이 그냥 저렇구나~라고 받아들이라고 하셨다.

예전에는 코드를 뜯어가면서 이해하려고 했는데 그러다보니 중간에 길을 잘 잃어서 내가 왜 여기있는지도 몰랐던 적이 많았고, 뭔가 전체를 봐야하는데 안에를 들여다보느라 머리속에서 자잘한 내용들이 뒤엉킨 느낌이었다. 그래서 ajax가 더 어렵게 느껴졌던 것 같다. 

그리고 뭔가 개발자라면, 저런 코드를 다 이해하고 사용하는 줄 알았고 당연히 그래야 한다고 은연중에 생각하고 있었나보다.(나는 있어보이고 싶다고!) 그래서 이번 수업이 좀 신선했다. 

'그래, 왜 굳이 다 이해해야 하지? 그냥 복사해서 갖다 쓰면 되잖아!'

 

어쨌거나 그 다음에 여러 API를 가져다가 데이터를 반복문으로 돌려서 가져온 뒤에, 내가 알맞게 요리해서 원하는 곳에 원하는 모양으로 표시하는 연습을 3번 했다.

아직은 벙벙하니 뭐가 뭔지 제대로 감이 안 오지만, 그래도 코드를 볼 때 '아 얘는 ajax로 가져온거네!'라고 이해까지는 가능할 것 같다.

 

마지막으로 2주차 숙제 완성본과 코드 올려야지.

페이지 리로드하자마자 아래 빨간 박스 안의 실시간 환율 정보를 표시해주기.

 

<!doctype html>
<html lang="en">

<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
          integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">

    <!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
            integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
            crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
            integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
            crossorigin="anonymous"></script>

    <!--구글폰트-->
    <link href="https://fonts.googleapis.com/css?family=Stylish&display=swap" rel="stylesheet">


    <title>스파르타코딩클럽 | 부트스트랩 연습하기</title>

    <style>
        .wrap {
            width: 900px;
            margin: auto;
        }

        .img-fluid {
            width: 900px;
            height: 500px;
            border: 1px solid;
            background-color: aqua;
            margin: 10px auto 10px auto;
        }

        .title {
            font-weight: bold;
        }

        .price {
            font-size: 20px;
            font-weight: normal;
            padding: 0px 0px 0px 20px;
        }

        .div {
            margin: 30px auto 30px auto;
        }

        .form-select {
            width: 840px;
        }

        .btn-primary {
            margin: auto;
            display: block;
        }

        #q1 {
            color: blue;
        }
    </style>

    <script>
        $(document).ready(function () {
            todayRate()
        })

        function todayRate() {
            $.ajax({
                type: "GET",
                url: "http://spartacodingclub.shop/sparta_api/rate",
                data: {},
                success: function (response) {
                    let rate = response['rate']

                    let temp_html = `<p>달러-원 환율: ${rate}</p>`

                    $('#q1').append(temp_html)
                }
            })
        }

        function success() {
            alert('주문이 완료되었습니다!');
        }
    </script>
</head>

<body>
<div class="wrap">
    <img src="https://www.lenovo.com/medias/lenovo-laptop-thinkpad-x1-carbon-gen-9-14-subseries-hero.png?context=bWFzdGVyfHJvb3R8MzM4MDg3fGltYWdlL3BuZ3xoMGYvaGY3LzE0MDcwNjc0NzE4NzUwLnBuZ3xiMDUwZmMyMGMxODkxY2JkNTdhMjZmMWM1YWY1NWZmYTllMTg4Y2E1NGFjMjMzMjRkZjQ1YjA1ZjA3YTFjMThi"
         class="img-fluid" alt="...">
    <div class="div">
        <h2 class="title">새 것 같은 노트북 팝니다.<span class="price">가격: 200,000원 / 개</span></h2>
        <p>작년에 샀던 모델입니다. 아껴서 썼고 거의 새것같아요. 일주일전에 오른쪽 하단 부분에 작은 스크래치가 났는데 그래서 좀 싸게 팝니다. 민감한 분은 피해주세요.</p>
    </div>
    <div id="q1"></div>
    <div class="div">
        <div class="order">
            <h2 class="title">주문하기</h2>
            <div class="input-group mb-3">
                <span class="input-group-text" id="customer">주문자 성함</span>
                <input type="text" class="form-control" placeholder="" aria-label="Username"
                       aria-describedby="basic-addon1">
            </div>
            <div class="input-group mb-3">
                <label class="input-group-text" for="inputGroupSelect01">수량</label>
                <select class="form-select" id="inputGroupSelect01">
                    <option selected>--수량을 선택하세요--</option>
                    <option value="1">1</option>
                    <option value="2">2</option>
                    <option value="3">3</option>
                </select>
            </div>
            <div class="input-group mb-3">
                <span class="input-group-text" id="address">주소</span>
                <input type="text" class="form-control" placeholder="" aria-label="Username"
                       aria-describedby="basic-addon1">
            </div>
            <div class="input-group mb-3">
                <span class="input-group-text" id="phone">전화번호</span>
                <input type="text" class="form-control" placeholder="" aria-label="Username"
                       aria-describedby="basic-addon1">
            </div>
            <button onclick="success()" type="submit" class="btn btn-primary">주문하기</button>
        </div>
    </div>
</div>
</body>

</html>
반응형

댓글