언어/자바스크립트

자바스크립트란?

SuhyeokRoh 2024. 3. 20. 19:55
"자바스크립트는 동기인가요 비동기인가요?"

면접장에서 이 질문을 받고, 잠깐동안 머리가 멈췄었다.

 

'비동기는 일 여러개를 한번에 처리하는거 아닌가? 자바스크립트는 코드 위에서부터 아래로 하나씩 실행하니까 동기인가? 아 그거랑 상관없나? 비동기가 이게 아닌가? 동기랑 비동기가 정확히 뭐였지....? 아 어차피 둘 중 하나일텐데 그냥 찍어봐? 아냐 틀리면 그게 더 큰 일이지...'

이런 생각을 하다가 아무 말도 못하고 질문이 넘어갔다.

(질문의 3분의 2는 대답 못하고 모르겠다고 넘겼었는데 특히 이 질문이 머리속에 오래 남았다)

 

면접이 끝나고, 해당 질문이 적힌 종이를 가져가서 대답을 찾아가면 도움이 많이 될 거라며 챙겨가도 된다는 얘기를 듣고 종이를 챙겨서 나오는 길에 검색했다.

'자바스크립트는 동기? 비동기?'

 

언어 사용해서 개발하고, 프로젝트 얘기하고 다니면 뭐하나 뭐 제대로 알지도 못하는데...

다시 처음부터 제대로 공부하자는 마음이 생겨 자바스크립트의 기초적인 내용부터 시작한다.


 자바스크립트(Javascript)

Javascript는 프로토타입 기반, 다중 패러다임, 단일 스레드, 동적 언어
  • Javascript는 HTML, CSS와 함께 웹을 구성하는 요소 중 하나로 웹 브라우저에서 동작하는 유일한 프로그래밍 언어
  • 인터프리터 언어(Interpreter language)에 해당
    1. 인터프리터 언어
      • 코드가 실행될 때 한 줄씩 중간 코드인 바이트코드로 변환한 후 즉시 실행함
      • 실행 파일을 생성하지 않음
      • 인터프리터 단계와 실행 단계가 분리되어 있지 않음 
      • 코드가 실행될 때마다 인터프리터 과정이 반복 수행되어 코드 실행 속도가 비교적 느림
    2. 컴파일러 언어
      • 코드가 실행되기 전 단계인 컴파일 타임에 소스코드 전체를 한번에 머신 코드로 변환한 후 실행함
      • 실행 파일을 생성함
      • 컴파일 단계와 실행 단계가 분리되어 있음
      • 명시적인 컴파일 단계를 거치고 실행 파일을 실행함, 컴파일은 단 한번 수행됨
      • 코드 실행 속도가 빠름
  • Chrome V8은 자바스크립트를 바이트코드로 컴파일 후, 실행하는 방식을 사용(JIT, Just-in-time complier)
  • 명령형, 함수형, 프로토타입 기반 객체지향 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어

클라이언트와 서버 측 JavaScript 차이점

  • 클라이언트
서버의 서비스를 받아 사용하는 장치(데스크톱, 노트북 등)나 프로그램(웹 브라우저)을 의미
  • 다양한 브라우저 공급 업체에서는 자체 JavaScript 실행 엔진을 제공
  • 브라우저에서 웹페이지와 상호 작용할 수 있음 - API 기능을 사용
  • 작동 방식
    1. 웹 페이지 방문 시, 브라우저가 웹 페이지를 로드
    2. 로드하는 동안, 브라우저는 버튼, 레이블, 드롭다운 박스와 같은 페이지 및 모든 요소를 문서 객체 모델(DOM)이라는 데이터 구조로 변환
    3. 브라우저의 JavaScript 엔진은 JavaScript 코드를 바이트코드로 변환
    4. 버튼에 대한 마우스 클릭과 같은 다양한 이벤트는 연결된 JavaScript 코드 블록의 실행을 트리거, 이 후 엔진은 바이트코드를 해석해서 DOM을 변경
    5. 브라우저에 새 DOM이 표시
  • 서버
네트워크를 통해 클라이언트로부터 요청을 받아 서비스를 제공하는 시스템 
  • 브라우저에서 엔진을 추출하여 브라우저 외부에서 실행할 수 있도록 하는 것이 목적
  • 다른 작업에 JavaScript를 활용할 수 있음
  • 기타 API(파일 시스템으로 작업하거나 들어오는 HTTP 요청 처리 등)
애플리케이션 프로그래밍 인터페이스 (Application Programming Interface, API)

- 컴퓨터나 컴퓨터 프로그램 사이의 연결
- 일종의 소프트웨어 인터페이스이며 다른 종류의 소프트웨어에 서비스를 제공
- 목적은 시스템이 동작하는 방식에 관한 내부의 세세한 부분을 숨기는 것으로, 내부의 세세한 부분이 나중에 변경되더라도 프로그래머가 유용하게 사용할 수 있고 일정하게 관리할 수 있는 부분들만 노출
- API는 일반적으로 두 개의 범주로 나뉨
   1. 브라우저 API : 웹 브라우저에 내장되어 있으며, 주변 컴퓨터 환경의 데이터를 노출하거나 유용한 복잡한 작업을 수행
   2. 서드파티 API : 브라우저에 내장되어 있지 않으며, 일반적으로 웹에서 해당 코드와 정보를 가져와야 함