엘리스 SW 엔지니어 트랙 3기를 2주차가 마무리된 시점에서 1~2주차 학습 내용을 회고하려 합니다.
이번 포스트에서는 2주차 수업에서 자바스크립트에 대해 배운것을 정리해보고자 합니다.
JavaScript는 웹 페이지에서 복잡한 기능을 구현할 수 있도록 하는 스크립팅 언어 또는 프로그래밍 언어입니다.
-mdn-자바스크립트는 ‘웹페이지에 생동감을 불어넣기 위해’ 만들어진 프로그래밍 언어입니다.
-javascript.info-Javascript는 HTML과 CSS로 만들어진 웹페이지를 동적으로 변경해주는 언어입니다.
-생활코딩-
한마디로 자바스크립트란,
<HTML, CSS로 구성한 웹 페이지에 생동감있고 복잡한 기능을 구현할 수 있도록 해주는 프로그래밍 언어> 입니다.
HTML로 페이지의 구조를 만들고 CSS로 구조가 잡힌 페이지를 스타일 적용시켜 꾸며준 후 자바스크립트로 기능들을 동작하게끔 만들어줌으로써 특정 기능으로 동작하는 꾸며진 페이지가 완성되는 것이라고 볼 수 있습니다.
▲ JavaScript 없이 HTML, CSS로만 구현했을때런타임 환경은 컴퓨터가 실행되는 동안 프로세스나 프로그램을 위한 소프트웨어 서비스를 제공하는 가상 머신의 상태입니다.
운영 체제 자체에 속하는 경우도 있고 운영 체제에서 작동하는 소프트웨어를 뜻할 수도 있습니다.
위에서 알아본 자바스크립트 엔진과 엔진의 메모리구조로 인해 자바스크립트가 어떤 원리로 동작하는지에 대해서 이전에 포스팅한 적이 있는데,
Web API 란 무엇일까요? 단어만 살펴보면 웹의 API 라는 느낌이 드는데, 그러면 API는 또 무엇인가? 라는 생각이 듭니다.
API는 Application Programming Interface(애플리케이션 프로그램 인터페이스)의 줄임말입니다.
소프트웨어 프로그램(애플리케이션) 내부에 존재하는 기능 및 규칙의 집합입니다. 즉, API는 API를 제공하는 애플리케이션과 서드파티 소프트웨어 및 하드웨어 등의 것들 사이의 간단한 계약(인터페이스)이라고도 볼 수 있습니다.Web API 또는 Web Service API는 웹 서버와 웹 브라우저 간의 애플리케이션 처리 인터페이스입니다. 모든 웹 서비스는 API이지만 모든 API가 웹 서비스는 아닙니다.
한마디로 Web API는 웹 서버와 웹 브라우저간에 애플리케이션 처리 인터페이스이자 애플리케이션 내부에 존재하는 기능 및 규칙의 집합이라고 할 수 있습니다!
mdn의 Web API 문서에서 명세에 포함된 항목들이 모두 Web API들이며 DOM, File API, Network Information API, XMLHttpRequest 등이 있습니다.스레드란?
스레드는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위 입니다.
일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있습니다. 이러한 실행 방식을 멀티스레드(multithread)라고 합니다.
그리고 이와 상반되게 한 프로세스당 하나의 스레드만을 실행하는 방식을 싱글스레드(singlethread)라고 합니다.
자바스크립트는 기본적으로 단일 호출 스택을 사용하는 엔진 환경에서 작업을 싱글스레드로 처리합니다. 즉, 단 하나의 호출 스택을 사용하며 호출 스택에 쌓인 함수나 코드를 위에서부터 순차적으로 실행합니다.
자바스크립트 엔진은 현재 스택에 쌓여있는 모든 함수들이 실행을 마치고 스택에서 제거되기 전까지는 다른 어떠한 함수도 실행될 수 없습니다.
기본적인 자바스크립트의 동작은 싱글스레드이나, 브라우저나 Node.js가 제공하는 이벤트 루프를 이용해서 비동기 방식으로 동시성을 지원합니다.
Node.js는 비동기 IO를 지원하기 위해 libuv 라이브러리를 사용하며, 이 libuv가 이벤트 루프를 제공합니다.
이벤트 루프는 콜 스택이 비어있을때, 태스크 큐의 작업을 콜 스택으로 옮겨주는 역할을 합니다.
콜백 함수들이 대기하는 큐(FIFO(First In First Out :선입선출) 형태의 배열이며 Web APIs에서 넘겨받은 Callback 함수를 저장하는 공간입니다.
자바스크립트 코드가 실행되는 일련의 과정을 다음과 같이 설명할 수 있습니다.
참조 링크
자바스크립트 엔진
https://v8.dev/
https://engineering.huiseoul.com/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94%EA%B0%80-v8-%EC%97%94%EC%A7%84%EC%9D%98-%EB%82%B4%EB%B6%80-%EC%B5%9C%EC%A0%81%ED%99%94%EB%90%9C-%EC%BD%94%EB%93%9C%EB%A5%BC-%EC%9E%91%EC%84%B1%EC%9D%84-%EC%9C%84%ED%95%9C-%EB%8B%A4%EC%84%AF-%EA%B0%80%EC%A7%80-%ED%8C%81-6c6f9832c1d9
https://hwan-shell.tistory.com/343
https://engineering.huiseoul.com/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94%EA%B0%80-%EC%97%94%EC%A7%84-%EB%9F%B0%ED%83%80%EC%9E%84-%EC%BD%9C%EC%8A%A4%ED%83%9D-%EA%B0%9C%EA%B4%80-ea47917c8442
https://www.ibm.com/docs/en/ztpf/1.1.0.15?topic=reference-jit-compiler
https://luv-n-interest.tistory.com/1046
https://ko.wikipedia.org/wiki/ECMA%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8런타임 환경
https://aws.amazon.com/ko/what-is/api/
https://developer.mozilla.org/ko/docs/Glossary/API
https://developer.mozilla.org/ko/docs/Web/API
https://yoeubi28.medium.com/javascript-stack-a1aba69616c6
https://meetup.toast.com/posts/89
https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%A0%88%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%8C%85)
https://velog.io/@gil0127/%EC%8B%B1%EA%B8%80%EC%8A%A4%EB%A0%88%EB%93%9CSingle-thread-vs-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C-Multi-thread-t5gv4udj
https://ingg.dev/js-work/