AJAX (Front End)

2020. 4. 12. 17:22Today I learned/Online Courses

강의:[edwith 부스트코스] 웹 프로그래밍챕터 3, 웹 앱 개발: 예약서비스 1/4

학습일: 2020년 4월 11일, 12일


3. AJAX - FE

 

AJAX 응답 처리와 비동기

  • AJAX와 비동기 실행
    • Line 4의 addEventListener가 순서대로 실행되는 것과 달리, 그 안의 익명함수는 비동기로 실행됨
      → 비동기로 실행된 익명함수는 Event Queue에 보관되다가 "load" 이벤트가 발생 (서버로부터 데이터를 받음)
      → Call Stack을 확인한 뒤, 비어있다면 Call Stack으로 올라와 실행됨
    • 비동기에 대한 참고자료
  • AJAX 응답 처리
    • 서버로부터 받아온 JSON 데이터는 문자열 형태이므로 브라우저에서 바로 실행할 수 없음
    • 따라서 문자열을 파싱해 JavaScript 객체로 변환해야 데이터에 접근할 수 있음
      • 문자열을 일일이 손수 파싱하는 것은 불편하고 생산성이 떨어짐
      • 브라우저에서 제공하는 JSON 객체를 활용해 JSON 문자열을 JavaScript 객체로 변환해 접근할 수 있음
        • 형태: 변수 = JSON.parse(JSON 문자열);
  • Cross Domain 문제
    • XHR 통신은 다른 도메인 사이에서는 보안을 이유로 요청이 되지 않음
      • A 도메인 → B 도메인으로 XHR, AJAX 통신을 할 수 없음
    • 이를 해결하기 위해 JSONP 방식이 널리 사용되었고, 최근에는 CORS라는 표준 방식이 제공되고 있음
      • CORS: HTTP 헤더를 사용해, 브라우저가 웹 어플리케이션에게 서로 다른 도메인에 대한 접근권한을 주는 방식
        • 사용하기 위해 프로그램 코드에서 처리할 것은 없지만, 백엔드 코드에서 헤더 설정을 해줘야 함
      • JSONP: HTML의 script 요소로부터 요청되는 호출에는 보안상 정책이 적용되지 않음을 이용한 우회법
        • 표준 방식은 아니지만, 아직도 많은 곳에서 쓰여 사실상의 비공식적인 표준으로 인식됨
      • 참고자료
  • ※ 다양한 웹사이트의 검색 자동완성 UI가 데이터를 JSONP 방식으로 통신해서 가져옴
    • Google Chrome 개발자 도구의 Network 패널을 열고 확인할 수 있음
    • 예시) Naver 검색 자동완성, Daum 검색 자동완성

 

디버깅 - Google Chrome 개발자 도구

  • 네트워크 통신: 소스 코드가 직접적으로 실행되지 않고, 브라우저가 소스 코드를 읽어 필요한 부분을 서버에 요청
    • 브라우저는 이를 위해 네트워크 모듈을 내장하고 있음
    • 예시) 브라우저 주소창에 URL을 입력할 경우, 해당 URL로 GET 방식의 HTTP 요청이 전송됨
  • 통신 과정은 수많은 단계로 이루어지는데, 특정 단계에서 문제가 발생해 예상하지 못한 결과가 나올 수 있음
    • 문제의 원인을 찾기 위해선 소스 코드만으로는 문제를 찾기 어려움
    • 서버 쪽에 문제가 있는 것 같다고 추정하기에 앞서, 먼저 클라이언트 단에서 서버에게 요청은 잘 했는지, 서버의 응답은 잘 왔는지를 개발자 도구를 써서 확인할 수 있음
  • Chrome 개발자 도구의 Network 패널
    • 녹화 기능: 서버로부터 파일을 내려받는 상황을 실시간으로 알 수 있음
      • Capture Screenshots를 활용하면 불러오는 화면을 ms 단위로 나눠서 볼 수 있음
    • 상태 코드: Error 404 등 응답에 오류가 있을 경우 직관적으로 확인할 수 있음
    • 서버로부터의 응답 시간: 성능 개선에 활용할 수 있음
    • 크기, 타입 등 기타 요청한 파일에 대한 다양한 정보를 확인할 수 있음
  • 참고자료: Chrome DevTools | Tools for Web Developers

'Today I learned > Online Courses' 카테고리의 다른 글

Web UI 심화 (Front End)  (0) 2020.04.13
Web Animation (Front End)  (0) 2020.04.12
DOM API (Front End)  (0) 2020.04.11
JavaScript - Array & Object (Front End)  (0) 2020.04.10
Web API (Back End) ... Part 2  (0) 2020.04.08