멋쟁이사자처럼/JavaScript
[멋사 프론트엔드 부트캠프 14기] Learn JavaScript | Day 1
JeonLay
2025. 6. 11. 00:10
프로그래밍과 자바스크립트의 이해
드디어 JavaScript 배우게 된 첫 번째 날이다.
UI 프로젝트를 끝낸 뒤 처음 듣는 수업이었는데.. 집중력이 많이 떨어짐을 느꼈다ㅠㅠ
그렇지만 열심히 정신을 차리고 수업을 들었다..!
오늘은 프로그래밍을 처음 배우는 입장에서 꼭 알아야 할 개념들과, JavaScript가 어떻게 웹의 핵심 언어가 되었는지를 배웠다.
프로그래밍이란?
: 컴퓨터에게 일을 시키기 위한 명령어를 작성하는 과정
이때 사람과 컴퓨터 간 소통을 위해 사용하는 도구가 바로 프로그래밍 언어이다.
컴퓨터는 자연어를 이해하지 못한다!
- 컴퓨터는 한국어, 영어 같은 자연어를 이해하지 못한다.
- 대신, 정의된 문법을 가진 언어(프로그래밍 언어)로만 명령을 인식한다.
프로그래밍 언어의 종류
1. 머신 코드 (Machine Code)
- 컴퓨터가 직접 이해할 수 있는 유일한 언어
- 0과 1로 이루어져 있으며, CPU마다 해석 방식이 다릅니다
- 사람이 직접 작성하거나 해석하기 매우 어렵습니다
2. 저수준 언어 (Low-Level Language)
- 머신 코드에 가까운 언어로, 하드웨어 제어에 적합합니다
- 대표 예시: 어셈블리 언어
MOV AL, 61 ; 레지스터 AL에 61 넣기
3. 고수준 언어 (High-Level Language)
- 사람이 읽고 쓰기 쉬운 언어
- 하드웨어보다는 생산성과 유지보수에 유리
- 예시: JavaScript, Python, Java, C 등
컴파일러 vs 인터프리터
| 구분 | 컴파일러 | 인터프리터 |
| 실행 방식 | 전체 코드 번역 후 실행 | 한 줄씩 읽어 실행 |
| 실행 속도 | 빠름 | 느림 |
| 에러 처리 | 번역 후 일괄 처리 | 실행 중 바로 발생 |
| 출력 결과 | 실행 파일 생성 | 별도 실행 파일 없음 |
| 예시 언어 | C, Java | Python, JavaScript |
JavaScript는 대표적인 인터프리터 언어
💡 인터미디에이트 코드 (중간 코드)
- 컴파일러 + 인터프리터의 중간 단계
- 일부만 번역한 문서
- 예: Java → 바이트코드 → JIT → 실행
➕ 트랜스파일러 (Transpiler)
- 한 고수준 언어를 다른 고수준 언어로 변환하는 것
JavaScript란?
: 웹 브라우저에서 동작하는 대표적인 고수준 언어
현재는 프론트엔드뿐 아니라 서버(Node.js), 데스크탑, 모바일 등으로 영역이 확장되었다.
| 특징
- 인터프리터 기반 언어
- 동적 웹 제작에 필수
- 사용자와의 상호작용, HTML/CSS 조작, 애니메이션 등 가능
JavaScript의 역사와 생태계
1. 탄생 배경
- Netscape가 동적인 웹을 만들기 위해 JavaScript의 초기 형태인 Mocha 개발
- 이후 LiveScript를 거쳐 JavaScript라는 이름으로 재탄생
2. 브라우저 전쟁
- Netscape vs Microsoft (JavaScript vs JScript)
- 호환성 문제로 인해 ECMA에서 표준화 → ECMAScript
3. AJAX의 등장
- 페이지 전체를 새로고침하지 않고 서버와 통신 가능
- Gmail, SPA 등의 기반 기술로 사용됨
4. 현재와 미래
- Node.js를 통해 서버 개발까지 가능
- V8 엔진, WebAssembly, 프레임워크(React 등)를 통해 지속 발전 중
JavaScript 엔진
JavaScript 코드를 실제로 실행해주는 프로그램을 엔진이라고 부른다.
| 대표 엔진
- V8 (Chrome, Node.js 등)
- SpiderMonkey (Firefox)
- JavaScriptCore (Safari)
| V8의 실행 과정
- 코드 입력 - 사용자가 작성한 JavaScript 코드를 받음
- 구문 해석 (AST 생성) - 코드를 구조적으로 분석
- 바이트코드 생성 - Ignition 인터프리터 실행 준비
- 실행 중 분석 - 자주 실행되는 부분(핫 코드) 감지
- JIT 컴파일 - TurboFan이 핫 코드를 최적화된 머신 코드로 변환
- 최적화 반복 - 실행 중 성능 개선을 지속적으로 수행
| V8의 주요 특징
- 빠른 실행 속도 - 바이트코드와 JIT 컴파일로 성능 극대화
- 실행 중 최적화 - 코드를 분석하며 성능을 점점 높임
- 플랫폼 독립성 - 다양한 운영체제와 환경에서 동일하게 실행
- Node.js 호환 - 서버에서도 JavaScript 실행 가능하게 함
JavaScript 실행 환경
- 웹 브라우저 (Chrome, Safari 등): 클라이언트 측 실행
- Node.js 런타임: 서버 측 실행
JavaScript 사용 방법
| 스크립트 작성 방식
<!-- 내부 스크립트 -->
<script> console.log(2025); </script>
<!-- 외부 스크립트 -->
<script src="./js/main.js"></script>
<!-- 모듈 사용 -->
<script type="module" src="./module.js"></script>
| 경로 설정
- 상대 경로: ./js/main.js
- 절대 경로: /js/main.js 또는 CDN 사용
콘솔(Console) 사용법
: 개발 중 실행 결과나 오류를 확인하는 도구
- 브라우저에서 F12 또는 Ctrl + Shift + I로 열 수 있음
- console.log()를 사용해 로그 출력
console.log('콘솔 출력 예시');
| 자주 발생하는 문제
- net::ERR_FILE_NOT_FOUND:
- 파일 경로나 파일명이 잘못되었을 때 발생
- HTML 파일의 <script src="..."> 경로를 다시 확인
- 코드 수정 후 변화가 안 보임:
- JS 파일을 저장하지 않았거나, 브라우저 새로고침을 하지 않은 경우
- 반드시 저장 후 새로고침!
- 캐시 문제:
- 브라우저 캐시가 켜져 있으면 코드 수정 사항이 반영되지 않을 수 있음
- 개발 중에는 캐시 비활성화 권장
- (DevTools의 "Disable cache" 옵션 활용)
+ 빌드(Build)와 보일러플레이트(Boilerplate)
- 빌드: 코드를 실행 가능한 형태로 변환하는 과정 (예: 컴파일, 링크, 패키징 등 포함)
- 보일러플레이트: 자주 반복되는 코드의 기본 틀이나 템플릿
예: HTML 기본 구조, API 요청 기본 코드 등
오늘의 느낀 점 !
글의 서두에서도 언급했다싶이 집중력이 많이 떨어졌다고 느꼈다..
그 이유로 예상컨데 프로젝트 끝난 뒤 3일의 휴식 기간동안 생활패턴이 요란해져서(?) 그런 것이 아닐까😭
다시 배움의 시간이니만큼, 집중할 수 있도록 잠을 제대로 자고 체력을 길러야겠다!!