1장 - 프로그래밍
프로그래밍이란 컴퓨터에게 실행을 요구하는 일종의 커뮤니케이션이다.
→ 0과 1밖에 알지 못하는 기계가 실행할 수 있을 정도로 정확하고 상세하게 요구사항을 설명하는 작업
문제 해결 방안을 고려할 때 컴퓨터의 입장에서 문제를 바라봐야하는데, 이때 필요한 것이 컴퓨팅 사고(Computational thinking)이다.
기계어로 직접 명령을 전달하는 것을 대신할 가장 유용한 대안은
사람이 이해할 수 있는 약속된 구문으로 구성된 프로그래밍 언어를 사용해 프로그램을 작성 한 후, 그것을 컴퓨터가 이해할 수 있는 기계어로 변환하는 일종의 번역기(컴파일러, 인터프리터)를 이용하는 것이다.
프로그래밍 언어는 구문(syntax)와 의미(semantics)의 조합으로 표현된다.
문법을 잘 안다고 해서 외국어를 잘한다고 말할 수는 없다.
→ 문법에 맞는 구성하는 것은 물론 의미(semantics)를 가지고 있어야 언어의 역할을 충실히 수행할 수 있다.
작성된 코드는 해결 방안의 구체적 구현물
→ 프로그래밍 언어의 문법에 부합하는 것은 물론이고 수행하고자 하는 바를 정확히 수행하는 것, 즉 요구사항이 실현(문제가 해결)되어야 의미가 있다.
프로그래밍은 요구사항의 집합을 분석해서 적절한 자료구조와 함수의 집합으로 변환한 후, 그 흐름을 제어하는 것이다.
2장 - 자바스크립트
초창기 자바스크립트는 웹페이지의 보조적인 기능을 수행하기 위해 한정적인 용도로 사용되었다.
Ajax
1999년, 자바스크립트를 이용해 서버와 브라우저가 비동기(asynchronous) 방식으로 데이터를 교환할 수 있는 통신 기능인 Ajax가 XMLHttpRequest라는 이름으로 등장했다.
Ajax의 등장은 이전의 패러다임을 획기적으로 전환했다.
→ 웹페이지에서 변경할 필요가 없는 부분은 다시 렌더링하지 않고, 서버로부터 필요한 데이터만 전송받아 변경해야 하는 부분만 한정적으로 렌더링하는 방식이 가능해진 것이다.
jQuery
2006년, jQuery의 등장으로 다소 번거롭고 논라이 있던 DOM을 더욱 쉽게 제어할 수 있게 되었고 크로스 브라우징 이슈도 어느정도 해결되었다.
V8 자바스크립트 엔진
2008년 등장한 구글의 V8 자바스크립트 엔진의 등장으로 자바스크립트는 데스크톱 애플리케이션과 유사한 사용자 경험(UX)을 제공할 수 있는 웹 애플리케이션 프로그래밍 언어로 정착하게 되었다.
→ V8 자바스크립트 엔진으로 촉발된 자바스크립트의 발전으로 과거 웹 서버에서 수행되던 로직들이
대거 클라이언트(브라우저)로 이동
Node.js
Node.js는 구글 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임 환경
→ 브라우저의 자바스크립트 엔진에서만 동작하던 자바스크립트를 브라우저 이외의 환경에서도 동작할 수 있도록 자바스크립트 엔진을 브라우저에서 독립시킨 자바스크립트 실행 환경
Node.js 환경에서 동작하는 애플리케이션은 자바스크립트를 사용해 개발
→ frontend와 backend 영역에서 자바스크립트를 활용할 수 있다는 동형성
→ 자바스크립트는 크로스 플랫폼을 위한 가장 중요한 언어로 주목받음
Node.js는 비동기 I/O를 지원하며 단일 스레드 이벤트 루프 기반으로 동작함으로써 요청 처리 성능이 좋다.
→ 데이터를 실시간으로 처리하기 위해 I/O가 빈번하게 발생하는 SPA에 적합
ECMAScript
자바스크립트의 표준 사양인 ECMA-262
프로그래밍 언어의 값, 타임, 객체와 프로퍼티, 함수, 표준 빌트인 객체 등 핵심 문법을 규정
자바스크립트는 일반적으로 프로그래밍 언어로서 기본 뼈대를 이루는 ECMAScript와
브라우저가 별도 지원하는 클라이언트 사이드 Web API, 즉, DOM, BOM, Canvas, XMLHttpRequest, fetch, requestAnimationFrame, SVG, Web Storage, Web Component, Web Worker 등을 아우르는 개념
→ 클라이언트 사이드 Web API는 ECMAScript와는 별도로 월드 와이드 웹 콘소시엄에서 별도의 사양으로 관리(자세한 내용은 MDN web docs의 Web API 페이지 참고)
자바스크립트의 특징
웹 브라우저에서 동작하는 유일한 프로그래밍 언어
기본 문법은 C, 자바와 유사하고 셀프에서는 프로토타입 기반 상속을, 스킴에서는 일급 함수의 개념을 차용
자바스크립트는 개발자가 별도의 컴파일 작업을 수행하지 않는 인터프리터 언어
모던 자바스크립트 엔진은 인터프리터와 컴파일러의 장점을 결합해 비교적 처리 속도가 느린 인터프리터의 단점을 해결
인터프리터 언어와 컴파일러 언어의 구분
대부분의 모던 브라우저에서 사용되는 인터프리터는 전통적인 컴파일러 언어처럼 명시적인 컴파일 단계를 거치지는 않지만 복잡한 과정을 거치며 일부 소스코드를 컴파일하고 실행
→ 현재는 컴파일러와 인터프리터의 기술적 구분이 모호해져 감
→ 하지만 자바스크립트는 런타임에 컴파일되며 실행 파일이 생성되지 않고 인터프리터의 도움 없이 실행할 수 없기 때문에 컴파일러 언어 x
자바스크립트는 명령형, 함수형, 프로토타입 기반의 객체지향 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어
ES6 브라우저 지원 현황
인터넷 익스플로러를 제외한 대부분의 모던 브라우저는 ES6를 지원하지만 100% 지원하고 있지는 않다.
(브라우저에서 아직 지원하지 않는 최신 기능을 사용하거나 인터넷 익스플로러나 구형 브라우저를 고려해야하는 상황이라면, 바벨과 같은 트랜스파일러를 사용해 ES6 이상의 사양으로 구현한 소스코드를 ES5 이하의 사양으로 다운그레이드할 필요가 있다)
3장 - 자바스크립트 개발 환경과 실행 방법
모든 브라우저는 자바스크립트를 해석하고 실행할 수 있는 자바스크립트 엔진을 내장하고 있다.(Node.js 또한)
브라우저는 HTML, CSS, 자바스크립트를 실행해 웹페이지를 브라우저 화면에 렌더링하는 것이 주된 목적이지만,
Node.js는 브라우저 외부에서 자바스크립트 실행 환경을 제공하는 것이 주된 목적
→ 브라우저와 Node.js 모두 자바스크립트의 코어인 ECMAScript를 실행할 수 있지만 브라우저와 Node.js에서 ECMAScript 이외에 추가로 제공하는 기능은 호환x
예시1) 브라우저는 DOM API를 기본적으로 제공하지만, Node.js에서는 DOM API 제공 x (브라우저 외부 환경에서는 HTML 요소를 파싱해서 객체화한 DOM을 직접 다룰 필요가 없기 때문에
예시2) Node.js에서는 파일을 생성하고 수정할 수 있는 파일 시스템을 기본 제공하지만 브라우저는 지원x (보안상의 이유)
브라우저와 Node.js 환경
웹 브라우저 점유율
1위 크롬
2위 사파리
3위 파이어폭스
…
크롬의 개발자 도구(DevTools)
Elements: 로딩된 웹페이지의 DOM과 CSS를 편집해서 렌더링된 뷰 확인 가능(편집한 내용이 저장되지는 않음)
Console: 로딩된 웹페이지의 에러를 확인하거나 소스코드에 작성한 console.log 메서드의 실행 결과를 확인할 수 있음
(콘솔에서 여러 줄로 이뤄진 자바스크립트 코드를 실행할 때 줄바꿈이 필요한 경우에는 Shift키를 누른 상태에서 엔터키를 누르면 됨)
Sources: 로딩된 웹페이지의 자바스크립트 코드를 디버깅할 수 있음
Network: 로딩된 웹페이지에 관련된 네트워크 요청 정보와 성능 확인 가능
Application: 웹 스토리지, 세션, 쿠키를 확인하고 관리 가능
Node.js
프로젝트의 규모가 커지면 React, Angular, Lodash 같은 프레임워크 또는 라이브러리를 도입하거나 Babel, Webpack, ESLint 등 여러 도구를 사용할 필요가 있다. → Node.js와 npm이 필요
npm은 자바스크립트 패키지 매니저.
Node.js에서 사용할 수 있는 모듈들을 패키지화해서 모아둔 저장소 역할과 패키지 설치 및 관리를 위한 CLI 제공
Node.js가 제공하는 REPL을 사용하면 간단한 자바스크립트 코드를 실행해 결과를 확인해 볼 수 있다.
→ 터미널에서 node 명령어를 실행하고 자바스크립트 코드를 실행해보자(파일을 실행하려면 node 명령어 뒤에 파일 이름을 입력하자)
Code Runner 확장 플러그인
Code Runner 확장 플러그인을 사용하면 VS Code의 내장 터미널에서 단축키를 사용해 자바스크립트를 비롯해 다양한 프로그래밍 언어로 구현된 소스코드를 간단히 실행할 수 있다.
주의할 점: 클라이언트 사이트 Web API가 포함된 소스코드는 Code Runner 확장 플러그인을 통해 실행하지 말고 브라우저 환경에서 실행해야 한다. ( ex. alert 함수는 브라우저 환경에서만 유효하므로 “ReferenceError: alert is not defined”라는 에러가 뜸)
Live Server 확장 플러그인
Live Server 확장 플러그인을 이용하면 소스코드를 수정할 때마다 수정 사항을 브라우저에 자동으로 반영해줘서 편하다.
'Modern JS Deep Dive' 카테고리의 다른 글
[JS Deep Dive] 12장 정리 -함수에 대하여 (2) | 2024.10.01 |
---|---|
[JS Deep Dive] 10장, 11장 정리 - 객체 리터럴 | 원시 값과 객체의 비교에 대하여 (2) | 2024.10.01 |
[JS Deep Dive] 9장 정리 - 타입 변환과 단축 평가에 대하여 (3) | 2024.10.01 |
[JS Deep Dive] 6,7,8장 정리 - 데이터 타입, 연산자, 제어문에 대하여 (2) | 2024.09.17 |
[JS Deep Dive] 4,5장 정리 - 변수, 표현식과 문에 대하여 (2) | 2024.09.17 |