라이브러리
소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임. → 저장되어있는 자원(프로젝트에 포함된 모든 파일)의 모음.
- CDN(콘텐츠 전달 네트워크 시스템) 방식 - 특정 지역마다 네트워크를 뿌리는 것.
- module 방식 - import
- include는 옛날 방식이라 지양하는 것이 좋음.
API
애플리케이션 프로그래밍 인터페이스. 웹 API는 서버와의 접점임.
- 애플리케이션(응용 프로그램) - 특정한 일을 하도록 만들어진 프로그램. ex) 카톡, 브라우저
- 인터페이스 - 접점, 두 물체간 서로 정보를 주고받을 수 있는 경계선. 인터페이스는 나와 홈페이지가 주고받는데 이 정보를 사용자에게 명확하게 전달하기 위해 사용하기 때문에 인터페이스라는 말을 사용함
통신 방식
- 동기 방식 - 같은 기간, 흐름에서 작업하는 것. JS 기본값 * 장점 - 컨트롤이 쉬움. * 단점 - 많을수록 프로그램이 뚝뚝 끊김.
- 비동기 방식 - 다른 기간, 흐름에서 작업하는 것. * 장점 - 이벤트를 진행하고 있다가 중간에 들어와도 괜찮음. * 단점 - 흐름이 많을 수록 컨트롤하기 어려움.
비동기 방식
기능 실행 등 요청이 접수된 후에 비동기적인 작업이 진행되어야 다른 기능들도 한 웹앱 안에서 순조롭게 작동할 수 있음.

- callback - 다른 함수에게 인자로 전달되어 어느 시점에 실행될 수 있도록 던져주는 함수. 콜백지옥 형성.
- promise - 어떤 값이 생성 되었을 때 그 값을 대신하는 대리자.
- async, await - Await 모드는 Promise 객체를 받아 처리하고, 만약 비동기 함수가 아닌 동기적 함수라면 리턴 값을 그대로 받음. Async 함수는 Promise가 없으면 의미 없음. Promise 객체를 통해 비동기적으로 처리된 내용을 동기적인 코드 진행 순서로 보여주는 역할.
function delay(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); } async function getApple() { await delay(2000); return "👍"; } async function getBanana() { await delay(1000); return "😍"; } async function pickAllFruit() { return Promise.all([getApple(), getBanana()]).then((fruits) => fruits.join("+") ); } pickAllFruit().then(console.log); //👍+😍
callback은 별 다른 키워드 없이도 구현할 수 있는 문법이기 때문에 콜백 지옥을 맞이할 정도의 복잡한 상황이 아닐 때 사용하면 좋음.
Ajax
Asynchronous JavaScript and XML의 약자로 자바스크립트를 이용해서 비동기적으로 서버와 브라우저가 데이터를 주고 받는 방식을 말함. 웹브라우저와 웹서버가 내부적으로 데이터 통신을 하게함.
fetch
필요할 때 서버에 네트워크 요청을 보내고 새로운 정보를 받아오는 일을 함.
let promise = fetch(url, [options])
- url - 접근하고자 하는 URL
- options - 선택 매개변수, method나 header 등을 지정할 수 있음. options에 아무것도 넘기지 않으면 요청은 GET 메서드로 진행되어 url로부터 콘텐츠가 다운로드 됨.
hash
해시 속성은 해시 기호 (#)를 포함하여 URL의 앵커 부분을 설정하거나 반환함.
//현재 URL이 http://www.example.com/test.htm#part2라고 가정 var x = location.hash; console.log(x) //#part2
각 요청이 어떤 동작이나 정보를 위한 것인지를 그 요청의 모습 자체로 추론 가능하게 작성한 API.
REST API
- URI - 자원을 구조와 함께 나타내는 형태의 구분자. 동사가 아닌 명사로 이루어져야 함. ex) 자원을 구별하는 ID는 ‘/groups/:group_id’.
- CRUD - Create(생성), Read(읽기), Update(갱신), Delete(삭제).
- put은 통채로 정보를 바꿀 때, patch는 일부분 특정 방식으로 변경할 때 사용.

DOM
DOM createElement
지정한 tagName(생성할 요소의 유형을 가리키는 문자열)의 HTML 요소를 만들어 반환함.
- appendChild - 한 노드를 특정 부모 노드의 자식 노드 리스트 중 마지막 자식으로 붙임.
JSON.parse()
JSON 문자열의 구문을 분석하고, 그 결과에서 JavaScript 값이나 객체를 생성.
const json = '{"result" : true,"count" : 43}'; const obj = JSON.parse(json); console.log(obj.count); //43
forEach()
주어진 함수를 배열 요소 각각에 대해 실행.
Vim 단축키
/
: 단어 검색 + 이동Ctrl + c
: 단축키 모드h j k l
: ← ↓ ↑ →Y
: 줄 단위 복사p
: 붙여넣기o
: 빈줄 넣고 입력모드b
: 이전 단어로Ctrl + w
: 분할 화면 이동 모드D
: 잘라내기a
: 입력모드 커서 뒤i
: 입력모드 커서 앞H
: 화면 맨 위로v
: 선택 모드w
: 다음 단어로V
: 줄단위 선택모드.
: 반복지브리 API 불러오기
API to HTML 실습
STEP 1
api를 받아 변수에 저장하고 fetch를 이용하여 json 형태로 문서화 함.
const uri = "https://ghibliapi.herokuapp.com/films/58611129-2dbc-4a81-a72f-77ddfc1b1b49"; async function fetchGhibliData() { const res = await fetch(uri); const jasonData = await res.json(); return jasonData; }
결과보기

STEP 2
fetch된 데이터로 DOM 객체 생성.
function createGhibliElement(ghibliData) { const $ghibliElement = document.createElement('div'); const $title = document.createElement('h2'); $title.textContent = ghibliData.title; const $originTitle = document.createElement('span') $originTitle.textContent = ghibliData.original_title; $ghibliElement.appendChild($title); $ghibliElement.appendChild($originTitle); return $ghibliElement; }
STEP 3
appendChild를 이용하여 DOM 객체 삽입.
async function render() { const ghibliData = await fetchGhibliData() console.log(ghibliData); const $ghibliElement = createGhibliElement(ghibliData) const $container = document.querySelector('.container'); $container.appendChild($ghibliElement); } render();
결과보기

API로 작품 보여주기
- api로 받아온 정보로 요소를 생성하여 HTML에 삽입하는 방식.
- 사용된 핵심 속성 : fetch, createElement, appendChild, forEach, async, await

- dataset - 읽기 전용 속성
마치며
API를 불러오는 방법부터 몰라 많이 헤맸다. 그리고 API를 불러와서도 HTML로 요소를 만들어 전달하는 과정이 어려웠다. API를 받아오면서 깨달은 점이 있다. 바로 API를 이용한 목표를 바르게 세워야 한다는 점이다. 내가 간과한 실수는 2가지이다. 첫 번째, 지브리 API는 사진을 지원하지 않는다. 따라서 데이터를 일일히 저장하여 사진을 지정하는 고생을 겪었다. 두 번째, 한글을 지원하지 않는다. API를 처음 불러왔기 때문에 지원하는 언어에 대해 인지하지 못했다. 지브리 API는 일본어, 영어 등 언어를 지원하지만, 그중 한국어는 없었다. 다음에 번역 관련 속성을 배워 자동번역이 이루어지게 만들어보고 싶다.
🤔 api에 값이 없을 경우 주소를 받는 저장소를 만드는 방식과 파이어베이스 등 서버를 구축하는 방식 중 어떤 것이 좋은가.
🤔 국제화와 관련된 JS 기능이 있는가.