bookmark_borderNodeJS

NodeJS 소개

NodeJS

  • 브라우저 외부에서 실행되는 자바스크립트 엔진
  • 구글 크롬의 자바스크립트 엔진인 V8을 이용해 만들어짐
  • 기본 자바스크립트 기능 외에 운영체제 기능을 활용할 수 있는 라이브러리 제공
  • 주로 개발자 도구나 웹 서버 상에서 실행되는 프로그램을 작성할 때 많이 사용

Node 특징

  • 비동기 I/O처리
    • 시간이 많이 걸리는 Input,Output 작업을 비동기로 처리
  • 빠른 속도
    • 구글 크롬의 자바스크립트 엔진인 V8의 등장으로 자바스크립트의 속도 문제도 어느 정도 해결
  • 패키지 매니저를 통한 의존성 관리
    • NPM이라는 패키지 매니저를 제공
    • 노드 패키지 매니저는 전세계 수 많은 사람들이 자신들의 모듈을 업로드 할 수 있는 코드 저장소
  • 단일 쓰레드
    • 쓰레드란 CPU가 동시에 여러가지 일을 처리할 수 있게 해주는 기능

NPM

  • Node Package Manager
  • NodeJS로 만들어진 모듈 공유
  • 프로젝트 의존성 관리를 위한 package.json

로컬환경에 NodeJS 설치

VisualStudioCode NodeJS 디버깅

  • 중단점
  • 조건부 중단점
  • 로그지점
    • i 값 출력 : {i}

모듈 프로그래밍

  • 여러 파일에 기능을 쪼개서 개발
  • 코드 가독성이 올라가고 관리가 쉬워짐
  • module.exports 객체 이용
  • require(‘{파일명}‘) 함수로 모듈 로드
function add(a, b) {
    return a + b;
}

function sub(a, b) {
    return a - b;
}

module.exports = {
    'add' : add,
    'sub' : sub
}
var calculator = require('./0609-nodejs-module-1.js');

console.log(calculator.add(1, 2));
console.log(calculator.sub(5, 3));

bookmark_borderOpenAPI

OpenAPI

API

  • Application Programming Interface
  • 운영체제나 프로그래밍 언어 기능을 사용하기 위한 인터페이스
  • 예:
    • 다른 프로그래밍 언어에서 운영체제의 기능을 이용하려 할 경우
      • 운영체제에서 자신의 기능에 대해 접근할 수 있는 인터페이스를 공개
      • 프로그래머에게 인터페이스에 대한 자세한 스펙 또는 명세를 제공
      • 이 명세가 바로 API

OpenAPI

  • 특정 사이트의 데이터에 접근하는 API를 공개해 외부 사이트에서 자유롭게 가공하고 사용할 수 있도록 함
  • API 제공자는 API 사용료를 통해 직접적인 수익을 얻거나 사용자 유입 등을 유도할 수 있음
  • API 사용자는 직접 개발하는 것보다 훨씬 적은 비용으로 기능 개발이 가능

OpenAPI 사용 절차

OpenAPI의 종류

RESTAPI

  • 보통의 http통신 방식으로 api 를 호출하는 방식
  • 추가적인 라이브러리가 필요 없고 어느 플랫폼에서든 사용하는 언어에서 http통신만 지원한다면 api 를 사용

• 웹 JS SDK

  • Software Development Kit의 약자
  • 자바스크립트 sdk는 화면에 표시될 ui 와 상호작용 까지 포함하고 있고 더 풍부한 서비스를 제공
  • 대표적인 예 : 지도 api

네이티브 SDK

  • 안드로이드나 iOS에서 실행되는 스마트폰 앱을 위해 제공되는 방식

한동대학교 API

Query parameter

  • Http요청에서 인자를 전달하는 방식 중 하나
  • 인자에 이름을 부여하고 개수 제한이 없다는 것이 장점
  • 주소에 정보가 공개된 다는 점은 보안적으로 취약할 수 있음
  • Url 뒤 ?표시로 시작
  • http://example.com?date=20190601&param2=test

식단 정보 API

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>openapi-handong</title>
    <style>
      table,
      th,
      td {
        border: solid gray;
      }
    </style>
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
  </head>
  <body>
    <h1>오늘의 식단</h1>
    <button id="haksikBtn">학식</button>
    <button id="momsBtn">맘스</button>
    <table>
      <thead>
        <tr>
          <th>한글메뉴</th>
          <th>가격</th>
        </tr>
      </thead>
      <tbody id="tableBody"></tbody>
    </table>
    <script src="./0604-app.js"></script>
  </body>
</html>
var haksik = [];
var moms = [];

$.ajax("http://smart.handong.edu/api/service/menu")
    .done(function(result) {
        haksik = result.haksik;
        moms = result.moms;
        addItem(haksik);
    });

function addItem(menuArr) {
    for (var menu of menuArr) {
        $("#tableBody").append(`<tr><td>${menu.menu_kor}</td><td>${menu.price}</td></tr>`);
    }
}

$("#haksikBtn").click(function() {
    $("#tableBody").html("");
    addItem(haksik);
});

$("#momsBtn").click(function() {
    $("#tableBody").html("");
    addItem(moms);
});

카카오 지도

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8"/>
	<title>Kakao 지도 시작하기</title>
</head>
<body>
	<div id="map" style="width:500px;height:400px;"></div>
	<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=8979d3e8b21fffebfaa7d5b095b9595f"></script>
	<script>
		var container = document.getElementById('map');
		var options = {
			center: new kakao.maps.LatLng(33.450701, 126.570667),
			level: 3
		};

		var map = new kakao.maps.Map(container, options);
	</script>
</body>
</html>

bookmark_borderAJAX

웹 서버와 브라우저 통신 방법

서버 – 클라이언트 모델

  • 네트워크를 이용하는 어플리케이션을 만들 때 사용
  • 서버: 클라이언트의 요청에 따라 파일이나 데이터를 보내주는 프로그램
  • 클라이언트: 서버에 파일이나 데이터를 요청하고 소비하는 프로그램

웹 브라우저

  • 웹 서버에 HTML파일을 요청해 다운로드하고 화면에 표시하는 프로그램
  • HTML을 분석해 화면에 그리고 이미지나 스트립트 파일 등 추가적인 리소스가 필요하면 서버에 요청한다

HTTP 프로토콜

  • 웹 서버와 웹 브라우저가 서로 통신하는 규칙
  • 요청과 응답으로 이루어짐
  • 최근에는 웹 브라우저 뿐만 아니라 컴퓨터 프로그램, 스마트폰 앱 등에서 널리 사용되고 있음

HTTP요청

  • GET : 정보를 요청하기 위해서 사용한다. (SELECT)
  • POST : 정보를 추가하기 위해서 사용한다. (INSERT)
  • PUT : 정보를 업데이트하기 위해서 사용한다. (UPDATE)
  • DELETE : 정보를 삭제하기 위해서 사용한다. (DELETE)

HTTP응답

  • 2xx: 성공
  • 3xx : 리디렉션
  • 4xx: 요청 오류
  • 5xx : 서버 오류

AJAX 기술

  • Asynchronous JavaScript And XML
  • 페이지를 로드 하지 않고 브라우저에서 서버에 요청할 수 있는 기법
  • HTML, 텍스트, JSON 등의 데이터를 주고 받음
  • 비동기 실행: 데이터를 로드 하는 동안 자바스크립트 코드를 중단하지 않고 계속 실행됨

Jquery AJAX

  • Jquery 를 이용하면 간편하게 ajax 통신을 할 수 있음
  • 형식
    • $.ajax(url, options)
    • url : 요청하려는 웹 리소스의 url
    • options : 요청에 대한 옵션
  • done, fail, always 함수를 이용하여 비동기 작업이 완료되었을 때 수행할 함수 지정
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
    <script>
      $.ajax('data.txt')
        .done(function(data) {
          // 성공시 실행코드
          console.log(data);
        })
        .fail(function(data) {
          // 실패시 실행코드
          console.log('에러 발생!');
        })
        .always(function(data) {
          // 항상 실행되는 코드
          console.log('ajax 호출이 완료되면 실행됩니다.');
        });

      console.log('AJAX 호출은 비동기 방식입니다.')
    </script>
  • 실행시 data.txt 파일을 찾을 수 없음.

개발용 웹 서버 (Live Server)

  • 로컬 환경 (개발용 PC)에서 손쉽게 웹 서버 실행
  • 현재 폴더 기준으로 URL을 통해 파일 접근
  • Livereload 기능 제공
    • 파일이 변경되는 것을 감지해서 코드를 수정하고 저장하는 것만으로 페이지를 “새로 고침” 해 줌
  • “AJAX 호출은 비동기 방식입니다.” 가장 먼저 호출
  • 내용을 추가하면 바로 반영됨 (Liveload 기능)

Jquery AJAX활용

사이드 메뉴 레이아웃

  • 사이드 메뉴를 표시하는 HTML 문서
  • 메뉴를 선택하면 해당 내용이 저장되어있는 다른 HTML을 요청하고 화면에 표시
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>ajax-sidemenu</title>
    <link rel="stylesheet" type="text/css" href="./0602-style.css">
  </head>
  <body>
    <nav id="sidemenu">
      <ul>
        <li>메뉴 1</li>
        <li>메뉴 2</li>
        <li>메뉴 3</li>
      </ul>
    </nav>
    <div id="content">
      보고싶은 메뉴를 선택하세요.
    </div>
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
    <script src="./0602-app.js"></script>
  </body>
</html>
#sidemenu, #content {
  float: left;
}

#content {
  padding: 10px 40px;
}
var menu = $('#sidemenu li');
var content = $('#content');

menu.click(function(event) {
    var url = event.target.innerText + '.html';
    $.ajax(url)
        .done(function(html) {
            content.html(html);
        });
});

$.getJSON

  • Jquery 의 getJSON 함수 이용
  • .ajax함수와 비슷하지만 데이터를 자바스크립트 객체 변환

단어장 만들기

  • 단어장은 JSON형식으로 저장되어 있음
  • $.getJSON 함수로 단어장 내용을 불러와 화면에 표시
[
    {
        "title": "capture",
        "description": "포획하다, 사로잡다, ...을 붙잡다"
    },
    {
        "title": "captivate",
        "description": "...을 매혹하다, 마음을 사로잡다, 매혹시키다"
    },
    {
        "title": "captious",
        "description": "트집 잡는, 책망하는, 헐뜯는"
    }
]
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>ajax-wordbook</title>
  </head>
  <body>
    <ul></ul>
    <h2></h2>
    <p></p>
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
    <script>
      var dict = $('ul');
      var title = $('h2');
      var p = $('p');

      $.getJSON('dict.json')
        .done(function(data) {
          for(var word of data) {
            var li = $('<li></li>');
            li.text(word.title);
            li.data('word', word);
            li.click(function(event) {
              var el = $(event.target);
              var word = el.data('word');
              title.text(word.title);
              p.text(word.description);
            });

            dict.append(li);
          }
        });
    </script>
  </body>
</html>