프로그래밍이란 0,1밖에 모르는 기계가 실행할 수 있을 정도로 정확하고 상세하게 요구사항을 설명하는 작업이다.
이때 필요한 역량이 Computational Thinking(컴퓨팅 사고)이다.
해결과제를 작은 단위로 분해하고 패턴화해서 추출하며, 프로그래밍 내에서 사용될 모든 개념은 평가 가능하도록 정의해야 한다.
우리가 이해할 수 있는 언어(JS, python, JAVA, ...)를 기계가 이해하는 언어인 기계어(0,1)로 변경하기 위해 번역가 역할을 하는 컴파일러, 인터프리터가 필요하다
우리가 이해할 수 있는 언어는 구문과 의미의 조합으로 표현되며 문법에 맞춰 요구사항이 실현 되어야한다.
결국 프로그래밍은 요구사항의 집합을 분석해서 적절한 자료구조와 함수의 집합으로 변환한 후, 그 흐름을 제어하는 것이다.
JS는 1995년 웹 브라우저 시장의 90% 점유율을 가지고 있던 넷스케이프 커뮤니케이션즈가 웹페이지의 보조적인 기능을 수행하기 위해 채택한 언어이다.
경량 프로그래밍 언어였기 때문에 진짜 개같았다. +MS와 점유율경쟁...
1997년 7월 ECMAScript 초판(ES1)이 나오면서 JS의 기능들이 표준화되었다. 내가 태어났을때네ㅎ 그래서 JS에 끌리나?
2015년에 ES6이후 범용 프로그래밍 언어로서 갖춰야 할 기능들을 도입 한 후 아주 쓸만해졌따ㅎㅎ
ECMA에서 매년 작은 기능을 추가하는 수준으로 업데이트 한다고 한다
업데이트 되고있는 기능들은 아래 링크에서 확인 가능하다
https://github.com/tc39/proposals/blob/main/finished-proposals.md
구글맵을 브라우저로?
역사적인 사건으로는 1999년 구글이 비동비 방식으로 데이터를 교환하는 Ajax를 이용해서 구글맵을 브라우저에서 작동하게 만들었는데 데스크톱 애플리케이션과 성능, 화면 전환 효과가 비슷해서 팡 뜨고 웹 애플리케이션에 관심이 많아졌다.
V8엔진까지..! 이정도면 구글이 JS의 제2의 아버지인듯
그리고 또 한번 구글이 V8엔진을 만들면서 JS가 매울 빠르게 동작할 수 있게했다. 이때 server에서 하던 로직들이 client로 많이 넘어오며 FE 영역이 주목을 받기 시작했다.
브라우저 밖에서도 JS로! Node.js
2009년 라이언 달이 V8엔진으로 빌드된 JS런타임 환경인 Node.js를 발표하고 JS를 브라우저 밖에서도 쓸 수 있게되었다. 이를 기점으로 웹서버, 모바일, 데스크톱,머신러닝, 로보틱스 등 여러분야로 점점 발전해나갔다.
CBD방법론을 기반으로하는 SPA
FE 프레임워크 3대장이 다 씹어먹기 시작
JS는 ECMA보다 더 큰 개념인데 ECMA문법과 브라우저가 별도로 지원하는 Web API(DOM, BOM, Canvas, XMLHttpRequest, fetch, SVG, Web Storage, Web Component, Web Worker, ...)등을 아우르는 개념이다.
브라우저에서 작동하는 Client-side Web APIs와 브라우저 밖에서 작동하는 Node.js는 ECMA를 공통점으로 가지고 있지만 다르다
Client-side Web APIS는 World Wide Web Consortium : W3C에서 사양을 관리하고 있다.
W3C : https://www.w3.org/
Web API 내용들 : https://developer.mozilla.org/ko/docs/Web/API
JS는 웹 브라우저에서 동작하는 유일한 프로그래밍 언어로 여러 언어에서의 개념이 짬뽕되었다. 기본문법은 C, JAVA와 유사하고 Self는 프로토타입 기반 상속을, Scheme에서는 일급함수의 개념을 차용했다 (왜왜왜오애ㅙㅐ!!!)
JS는 대표적인 인터프리터 언어로 컴파일을 하지않지만 모던 자바스크립트 엔진(크롬 : V8, 파이어폭스: SpiderMonkey, 사파리: JavaScriptCore, 엣지 : Chakra, ...)이 인터프리터와 컴파일의 장점을 결합해 처리 속도가 느린 인터프리터의 단점을 해결했다.
=> 전통적인 컴파일러 언어처럼 명시적인 컴파일을 하지는 않지만 복잡한 과정을 거치며 일부 소스코드를 컴파일 하고 실행한다
=> 그래서 이제 인터프리터와 컴파일러의 구분이 모호해짐ㅎ,,,
컴파일
소스코드 전체를 한번에 CPU가 바로 실행할 수 있는 머신코드로 바꿔 실행파일을 생성함, 컴파일 단계와 실행이 분리되어 있어 코드 실행 속도가 빠름
인터프리터
한 줄씩 중간코드인 바이트코드(가장 머신에서 실행하도록 만든 바이너리 코드)로 변환 후 실행하며 실행파일을 따로 만들지 않는다.
따라서 인터프리터 단계와 실행 단계가 분리되어있지 않아 반복수행되므로 코드 실행 속도가 비교적 느리다.
기본적인 브라우저에서 JS사용법에 대해서 알려주고 있으며 개발자도구를 이용해서 콘솔과 디버깅하는 방법에대해서 알려주고 있다
주말에 콘솔과 디버깅에 대해서 구글의 'Tools for Web Developers : 콘솔 사용', 'Tools for Web Developers: Chrome DevTools'에 대해서 읽고 정리해보자
npm
npm은 node package manager로 JS패키키 매니저이다. Node.js에서 사용할 수 있는 모듈들을 패키지화해서 모아논 저장소로 설치 및 관리를 위한 CLI를 제공한다.
REPL(Read Eval Print Loop)
node.js를 설치하고 나면 터미널에서
> node
입력 후 JS 코드를 터미널에서 실행할 수 있다
> node index.js
이런식으로 js파일을 실행할 수도 있다 (.js는 안붙여도 됨)