컴퓨터를 실행시키기 위한 방법이 차례대로 작성된 명령어 모음
(프로그래밍 = 컴퓨터 안에 있는 논리적인 기계)
즉,사용자 입력값을 처리 방법과 순서에 따라 처리하여 결과를 산출해내는 명령문 집합체

프로그래밍 실행 입력 > 수동적으로 적혀진 명령어대로 작동 > 작동된 명령에 대한 산출물만 나옴
프로그램 언어를 이용해 프로그램을 만드는 일(구현의 모든 과정)
프로그램은 컴퓨터에게 내리는 명령어의 모음인데, 이 명령어의 모음을 만드는 일이 프로그래밍이다. 그리고 이 프로그래밍이 모여 소프트웨어가 된다.
명령어 모음(프로그램) > 명령어 모음 과정(프로그래밍) > 프로그램 모음 > 소프트웨어

문제 인식 > 프로그램 설계 > 프로그램 구현 > 테스트와 디버깅 > 프로그램 유지보수
프로그래밍 언어는 사람을 위한 언어로써 프로그래밍 언어로 작성된 프로그램을 '소스 코드(Source code)'라고한다.
이렇게 사람이 프로그래밍 언어로 입력하면 컴퓨터는 컴퓨터가 이해할 수 있는 언어인 이진 코드('0','1')로 번역을 한다. (컴퓨터 언어는 '머신 코드(Machine code)' 또는 '이진 코드(Binary code)'라고 부름)
소스코드를 컴퓨터가 이해할 수 있는 이진코드로 번역하기 위해서 '인터프리터' 또는 '컴파일러'를 활용한다.
프로그램 실행시 프로그램 언어 전체를 스캔하여 미리 컴퓨터 언어로 번역한다

프로그램 실행시 한번에 한 문장씩 컴퓨터 언어로 번역한다

!!인터프리터는 프로그램 언어를 바로 이진코드로 변환하지 않음!!
프로그램 실행시 > 프로그램 언어를 > 먼저 바이트 코드로 번역하고 > 바이트코드를 위한 "가상머신"이라는 프로그램을 통해 > 이진코드로 번역되어 실행된다
한 언어로 작성된 소스코드를 비슷한 수준의 추상화를 가진 다른 프로그래밍 언어로 변환해주는 도구

최신 버전의 자바스크립트 코드를 오래된 버전의 자바스크립트 코드로 변환해주는 역할
babel은 가장 인기 있는 자바스크립트 트랜스파일러 중 하나이다.
최신 문법과 기능을 지원하는 자바스크립트를 오래된 브라우저에서도 실행할 수 있게 됨!
1.크로스 브라우징
다양한 브라우저에서 호환성을 확보하기 위해 ES6+ 문법을 ES5 이하의 문법으로 변환준다. 이를 통해 모든 브라우저에서 일관된 동작을 보장할 수 있다.
2.최신 문법 사용
최신 자바스크립트 문법과 기능을 사용할 수 있다. 이는 개발자가 더 효율적이고 가독성이 좋은 코드를 작성할 수 있게 도와준다.
3.확장성
플러그인과 프리셋 시스템을 제공하여 개발자가 원하는 변환 규칙을 추가하고 설정할 수 있다. 이는 개발자가 프로젝트에 필요한 변환 로직을 자유롭게 커스터마이징할 수 있게 해준다.
4.다른 도구와의 통합
다양한 빌드 도구와 통합하여 사용할 수 있다.
ex) Webpack과 함께 사용하여 모듈 번들링과 트랜스파일링을 한번에 처리할 수 있다.
1.추가적인 빌드 단계
소스 코드의 변환 과정이 추가된다. 이는 빌드 시간을 증가시킬 수 있으며, 개발 환경 설정이 조금 더 복잡해질 수 있다.
2.성능 문제
소스 코드를 변환하는 과정에서 성능에 영향을 줄 수 있다. 특히 큰 규모의 프로젝트에서는 트랜스파일링 속도가 느려질 수 있다.
3.오래된 환경 지원의 한계
오래된 브라우저와 환경에서의 호환성을 제공하지만, 일부 기능이 완벽하게 지원되지 않을 수 있다. 모든 크로스브라우징 이슈를 해결하지 못할 수 있다는 의미.
바벨은 소스코드를 받아서 다른 소스코드로 반환하게 되는데, 이 과정에서 바벨은 파싱과 출력만 담당하게되고 변환 작업은 '플러그인'이 처리하게 된다.
커스텀하게 사용가능하다.
바벨의 수많은 플러그인들을 목적에 맞게 여러가지 플러그인을 모아놓은 것을 '프리셋' 이라고 한다.
n개의 plugin과 1개의 preset
커스텀하게 사용가능하다.
바벨은 ECMAScript2015+를 ECMAScript5 버전으로 변환할 수 있는 것만 빌드한다.
때문에 ECMAScript2015+에 없는 Promise는 ECMAScript5 버전으로 변환하지 못한다.
이처럼 변환하지 못하는 것들을 "폴리필"이라는 코드조각을 추가해서 변환할 수 있게한다.
각각의 모듈 의존성을 해결하여 여러개의 자바스크립트 파일을 하나의 파일로 번들링해주는 도구