
Geolocation API는 자바스크립트 프로그램이 사용자의 실제 위치를 브라우저에 요청할 수 있도록 해준다. 위치 정보는 GPS, Wi-Fi, IP 주소 등에서 알 수 있다. 브라우저가 지원하는 Geolocation API는
navigator.geolocation으로 정의되어 있다.
사용자의 현재 위치를 호출
Geolocation API는 비동기적으로 동작함
navigator.geolocation.getCurrentPosition(successCallback, errorCallback, options)
// successCallback : geolocation 요청 성공시 호출할 콜백 함수
// errorCallback : geolocation 요청 실패시 호출할 콜백 함수
// options: 옵션명:값 형식으로 지정 ex) timeout, maximumAge, enableHighAccuracy
navigator.geolocation.getCurrentPostion(function(position){
console.log(position);
let latitude = position.coords.latitude;
let longitude = position.coords.longitude;
console.log("현재 위치: " + latitude + ", " + longitude);
});

현재 위치를 요청하는 것은 동일하지만, 지속적으로 확인하여 사용자의 위치가 변경될 때마다 지정된 콜백 함수를 호출
사용자의 위치 정보 수집을 중단
이 메서드의 전달인자는 watchPosition( )을 호출한 다음 반환받은 ID 값이어야 함
출처: inpa.tistory.com
어떤 프로그램에서 제공하는 기능을 사용자가 활용할 수 있도록 만들어 둔 인터페이스
예를 들어, 기상청의 소프트웨어 시스템에는 일일 기상 데이터가 들어 있을 때, 휴대폰의 날씨 앱은 API를 통해 기상청 시스템과 '대화'하여 휴대폰에 최신 날씨 정보를 표시할 수 있다.
Hyper Text Transfer Protocol
서로 다른 서버 간에 문자 형식으로 데이터를 주고 받을 때 지켜야 하는 규약
Request Message
Response Message
요청에 대한 응답의 결과를 세자리의 번호로 나타냄
동기(Synchronous)
비동기(Asynchronous)
자바스크립트 실행 환경
stack : 먼저 들어온 함수, 데이터가 가장 마지막에 처리됨, LIFO(Last in First Out)queue : 먼저 들어온 함수, 데이터가 가장 먼저 처리됨 , FIFO(First in First Out)setTimeout(() => {
console.log("setTimeout call")
})
const func3 = function() {
console.log("func3 call")
}
const func2 = function() {
func3()
console.log("func2 call")
}
const func1 = function() {
func2()
console.log("func1 call")
}
func1()
// 결과
// func3 call
// func2 call
// func1 call
// setTimeout call
자바스크립트는 싱글 스레드이기 때문에 한 번에 하나의 동작만 수행 가능(동기)
이후 비동기 작업을 수행하기 위해 callback 함수를 사용하게 됨
callback 함수: 단지 함수를 등록하기만 하고, 어떤 이벤트가 발생하거나 특정 시점에 도달했을 때 시스템에서 호출하는 함수
하지만 callback 함수가 여러 번 중첩되는 경우 가독성에서 심각한 손해를 보게되는 콜백 지옥(calback hell) 발생
각 함수마다 정상적인 동작에 대한 처리, 에러에 대한 처리가 필요하기 때문
const callback1 = function() {
const callback2 = function() {
const callback3 = function() {
const callback4 = function() {
const callback5 = function() {
// ...
}
}
}
}
}
new Promise() 로 객체를 직접 생성 가능
현재는 얻을 수 없지만 이후 작업이 완료되면 받아올 수 있는 데이터에 대한 접근 수단
Promise 객체의 상태
- 대기(Pending) : 비동기 처리가 아직 완료되지 않은 상태
- 이행(Fulfilled) : 비동기 처리가 완료되어 결과값이 반환된 상태
- 실패(Rejected) : 비동기 처리가 실패 혹은 오류가 발생한 상태
const promiseTest = function() {
return new Promise((resolver, reject) => {
setTimeout(()=>{
resolver(100);
}, 2000);
})
}
promiseTest( )
// promiseTest() 라는 함수를 실행하고, 그 반환 값으로 Promise 객체를 돌려받음
// Promise 객체를 생성할 땐 내부에 함수를 인자로 넣을 수 있고,
// 내부 함수는 resolver, reject를 배개변수로 받음
// 비동기 처리가 완료되면 resolver가 호출됨 => Fullfilled
// 비동기 처리가 실패하면 reject가 호출됨 => Rejected
통신을 통해 응답을 받아오는 과정은 코드가 실행되는 과정보다 느린 경우가 많음
-> 통신도 비동기 처리가 필요
-> then( ), catch( ) 메서드를 사용
✅ fetch( ) : 원격 API를 간편하게 호출할 수 있도록 브라우저에서 제공하는 함수
fetch(url, options) .then((response => console.log("response : ", response)) .catch((error) => console.log("error : " + error)) ) // 첫번째 인자로 URL, 두번째 인자로 옵션 객체를 받아서 Promise 타입을 반환 // 반환된 객체는 API가 성공했을 경우 응답 객체를 resolve 하고, // 실패했을 경우 예외 객체를 reject 함fetch API의 응답 객체(response object)는
json( )메서드를 제공
-> 응답받은 JSON 데이터를 javascript 객체로 변환할 수 있다.fetch(데이터를 요청할 서버 url) .then(response => response.json()) .then((json) => { // 실행할 코드 })
fetch(HTTP Request)
.then((res) => {
console.log(res)
})
fetch(HTTP Request)
.then((res) => {
console.log(res)
})
.catch((err) => {
console.log(err)
})