| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
- 알고리즘
- cs
- 분할정복 방법
- 맥
- mysql 표
- 오블완
- mysql 표 출력
- mycli
- 오일러 경로
- VI
- 동적 프로그래밍 방법
- MySQL
- 네트워킹데이
- 순차탐색
- 인프런
- 이진탐색
- 인프런워밍업클럽
- CS스터디
- spring boot
- 스터디2기
- 데이크스트라
- zsh theme
- 터미널
- Pager
- zsh
- 티스토리챌린지
- 욕심쟁이 방법
- oh-my-zsh
- Less
- table status
- Today
- Total
Develop
23일차_Front(JS-Fetch, DOM, API 연동 및 config.js 설정) 본문
안녕하세요!
오늘은 데브코스 23일차 (5주 4일차) 입니다.
자바스크립트 비동기처리 및 DOM, API 연동에 대해 학습했습니다.
오늘 수업은 로컬에서 html과 js 로 QR생성 사이트 만들어서 띄우고,
API를 연동해서 토큰 만료시점에 따라 배경화면을 바꿔주고, 위/경도 값을 받아서 지역명과 날씨를 띄워주는 작업을 했습니다.
수업 종료 후 코드를 보면서 강사님 화면이랑 '왜 다르지.. API 연동했는데.. 난 왜 지역명과 날씨가 안나오지..?' 하면서 삽질하다가..
오류들 잡아내고 API_KEY 숨기느라 시간이 좀 걸렸습니다. 2시간 이상 같이 봐주신 Yana님 감사합니다. (--)(__)
어제 공부내용 추가 학습
Promise
0. 등장 배경
자바스크립트는 비동기 처리를 위한 하나의 패턴으로 콜백 함수 를 사용한다.
하지만 콜백 패턴은 아래와 같은 한계가 있다.
- 콜백 헬로 인해 가독성이 나쁘고, 비동기 처리 중 발생한 에러의 처리가 곤란
- 여러개의 비동기 처리를 한번에 처리하는데 한계가 있음
⇒ 그래서, ES6 부터 비동기 처리를 위한 또 다른 패턴으로 Promise 를 도입했다.
1. Promise 의 생성
- Promise 생성자 함수를 new 연산자와 함께 호출하면 Promise 객체를 생성한다.
- Promise 생성자 함수는 비동기 처리를 수행할 콜백 함수를 인수로 전달받는다.
- (이 콜백 함수는 resolve 와 reject 함수를 인수로 전달받는다.)
- Promise 생성자 함수가 인수로 전달받은 콜백 함수 내부에서 비동기 처리를 수행한다.
- 비동기 처리가 성공하면 콜백 함수의 인수로 전달받은 resolve 함수를 호출하고,
- 비동기 처리가 실패하면 reject 함수를 호출한다.
- 예제
- const promise = new Promise((resolve, reject) => { if(비동기 처리성공) { resolve('result'); } else { reject('failure reason'); } });
2. 프로미스의 상태 정보
- pending : 비동기 처리가 아직 수행되지 않은 상태 → Promise 생성 직후 기본 상태
- fulfilled : 비동기 처리가 수행된 상태 (성공) → resolve 함수 호출
- rejected : 비동기 처리가 수행된 상태 (실패) → reject 함수 호출
3. 프로미스의 후속처리 메서드 (아래 3개 다 프로미스반환)
- then : 2개의 콜백함수를 인수로 전달받음
- 성공 - 비동기 처리 결과 : fulfilled 상태(resolve 함수 호출)
- 실패 - 에러 : rejected 상태(reject 함수 호출)
- catch : 1개의 콜백함수를 인수로 전달받음
- 실패 - rejected 상태
- finally : 1개의 콜백함수를 인수로 전달받음
- 성공/실패 상관없이 무조건 1번 호출됨
async/await
0. 등장 배경
ES8 부터 제너레이터보다 간단하고 가독성 좋게 비동기 처리를 동기 처리처럼 동작하도록 구현할 수 있는 async/await 이 도입 되었다.
1. 특징
- 프로미스를 기반으로 동작한다.
- async/await 사용 시 프로미스의 then/catch/finally 후속처리 메서드에 콜백함수를 전달해서 동기처리 처럼 사용할 수 있다.
2. async 함수
- await 키워드는 반드시 async 함수 내부에서 사용해야 하며, 언제나 프로미스를 반환한다.
- async 함수가 명시적으로 프로미스를 반환하지 않더라도 암묵적으로 반환값을 resolve 하는 프로미스를 반환한다.
3. await 키워드
- await 키워드는 프로미스가 settled 상태(비동기 처리가 수행된 상태) 가 될때까지 대기하다가 settled 상태가 되면 프로미스가 resolve한 처리결과를 반환한다.
- await 키워드는 반드시 프로미스앞에서 사용해야한다.
오늘 공부 내용
Fetch
- HTTP 요청 전송 기능을 제공하는 클라이언트 사이드 Web API
- fetch 함수는 HTTP 응답을 나타내는 Response 객체를 래핑한 Promise 객체를 반환한다.
- XMLHttpRequest 객체보다 사용법이 간단하다.
- 프로미스를 지원하기 때문에 비동기 처리를 위한 콜백 패턴의 단점에서 자유롭다.
- 후속처리 메서드 then 을 통해 프로미스가 resolve 한 Response 객체를 전달받을 수 있다.
DOM (Document Object Model, 문서 객체 모델)
- HTML 또는 XML 기반 문서와 상호작용하고 표현하는 API
- DOM 은 웹 페이지를 스크립트 또는 프로그래밍 언어와 연결
- DOM 은 document 의 모든 노드에 접근하고 상호작용할 수 있도록 브라우저에서 코드를 실행할 수 있게 해줌
- 이벤트 리스너를 노드에 추가해 주어진 이벤트가 발생할 때 트리거가 되게 할 수 있음
수업 따라가기
수업 종료 후 코드를 실행시킴 분명 강사님 코드와 내코드가 동일한 것 같은데 만든 사이트가 연결이 됐다가 안됐다가 함
=> api 호출 및 연결 문제같아서 응답실패를 체크하는 예외를 추가함
=> 위치 접근 실패 시 서울 좌표를 제공하는 로직도 적용함
if (!response.ok) {
throw new Error('날씨 API 응답 실패');
}
브라우저에 사이트가 잘 로드되었는데, 아무리봐도 날씨 정보가 보이질 않아서 여기저기 확인해봤는데
글씨 색이 흰색이어서 안보였음.. .. 어이없던 실화.... 바로 CSS로 글자 크기 키워줌..
API KEY 숨기기
코드를 고치고, 깃허브에 올리려니 Api key 가 노출되는 문제가 있어서.... 숨겨봐야겠다 싶어서 방법을 알아보고 있었는데
zep (온라인 모각코)에 Yana 님이 접속해서 화면보시더니 뭐가 문제냐고.. "님 에러 꿀잼" 이러면서 2시간동안 봐줌..
제가 아직 초보라 어떤 문제인지는 말할 수 있는데, 이 프로젝트가 어떻게 구성되어있는지, 발생원인이 뭔지 등등 ..
몰라서 파악하는데 시간이 오래걸림.. 😅
Yana 님의 node환경 이냐는 물음에 (node.js 쓰니까 ) 네 라고 대답하고 dotenv 라이브러리를 설치하고,
실행하라고해서 브라우저로 실행했더니 브라우저환경이면 dotenv 안쓴다고.. 다시 처음 부터 시작 함ㅠㅋ
그리고 .env 는 환경변수, config는 설정파일인데, 첨에 몰라서 내가 env 파일 만드려고하니까 기겁하심 ㅋㅋㅋㅋ
암튼 config.js 에 api key 를 숨기고, 변수와 import 문을 수정하고, .gitignore에 등록하고, git push함 ..!
이런저런 얘기하느라 시간이 금새 지나갔다.. 매번 저를 도와주시고 들여다봐주셔서 감사합니당
블로그 글이 구조적이지 않은데 새벽 2: 55이라 그런것 같다.. 21시 30분부터 앉아있었더니 비몽사몽이다
휴 . .. ! 내일은 기존 코드에 시간을 예시로 기재해둔 부분을 시간이 흐르는 실제 시계로 바꿔보고 싶고,
오늘 강사님이 내주신 과제(api 로 카카오맵 붙여보기) 도 해보고싶다.
오늘도 고생하셨습니다 !
내일은 무려 금요일~ 하루만 더 힘내자~
'백엔드 > KDT_Programmers' 카테고리의 다른 글
| 25일차_Servlet, JSP(EL, JSTL) (0) | 2025.04.09 |
|---|---|
| 24일차_speech.js로 미니프로젝트 음성인식 구현 및 github를 통한 정적배포 (0) | 2025.04.09 |
| 22일차_Front(JS-Function, Callback, Closure, Constructor, this, Blocking vs Non-Blocking 등) (0) | 2025.04.03 |
| 21일차_Front(CSS-media query, 프레임워크 활용, JS-기초 문법) (0) | 2025.04.02 |
| 프로그래머스 데브코스 웹백엔드 1개월차 회고 (3) | 2025.04.01 |