mir.pe (일반/밝은 화면)
최근 수정 시각 : 2024-12-01 12:14:14

Vanilla JS

1. 개요2. 특징3. 논점
3.1. 2020년대 이유
4. 여담5. 외부 링크6. 관련 문서

1. 개요

외부 라이브러리 프레임워크를 쓰지 않는 순수 JavaScript를 이르는 말이다. 사용자 정의된 라이브러리나 프레임워크 자체를 쓰지 않기 때문에 당연히 다른 라이브러리나 프레임워크를 사용했을 때보다 빠르고 호환성이 좋을 수밖에 없다. 또한 숙련된 사람일 수록 별의별 기능을 구현할 수 있다는 특징이 있다.

2. 특징

하지만 순수 자바스크립트의 특성상 라이브러리를 쓰면 간단하게 쓸 수 있는 코드가 길어지는 일이 왕왕 발생한다. 예를 들어서 jQuery를 쓰면
#!syntax javascript
$('li').css('color','red')
이렇게 간단하게 표현할 수 있는 걸
#!syntax javascript
document.querySelectorAll('li').forEach(item => item.style.color='red')
이런 식으로 forEach 같은 반복문을 명시적으로 써서 표현해야 하는 경우도 생기기 때문에 초심자의 경우 더 어렵게 느껴지기도 한다.[* 심지어 인터넷 익스플로러 같이 구형 브라우저를 맞추기 위해서는 더 복잡한 반복문을 사용하기도 한다.
#!syntax javascript
var lis = document.querySelectorAll('li');
for (var i = 0; i < lis.length; i++){
    lis[i].style.color='red'
}
]

그렇지만 디버그 기능에서는 바닐라 JS가 진가를 발휘한다. 바닐라 JS로 만든 구문은 디버그를 할 때에 해당 구문만을 조사하지만 라이브러리를 통해 만든 구문은 디버그를 할 때 해당 구문뿐 아니라 라이브러리 파일 안을 몇 바퀴 돌고 오는 일도 있기 때문이다. 또한 디버그가 아니더라도 라이브러리 파일 안을 몇 바퀴 돌고 오는 것은 실제 컴퓨터 연산 상에서 라이브러리를 사용할 때 존재하기 때문에 바닐라 JS를 사용하면 연산 시간을 크게 줄여준다.

3. 논점

실제로는 바닐라에 대한 명확한 개념이 없고 의미가 혼용되는 경우가 많기 때문에 아래의 여러 오해를 사기도 한다.
  1. 바닐라 js는 (새로 나온) 프레임워크가 아니다.
    여러 기사나 글에서 바닐라 js를 쓰자! 라는 이야기가 많기 때문에 가장 많은 사람들이 착각하게 되는 부분이다.
    바닐라 js는 어떠한 유형의 라이브러리나 프레임워크가 아니며, 따라서 추가적인 설치나 사용법을 배울 필요가 없다.
    그렇다면 왜 굳이 용어를 구분하는가, 또는 당연히 여러 라이브러리도 js를 기반으로 하는데 내가 쓰는 것은 자바스크립트가 아니란 말인가? 하는 혼동이 올 수 있으며 이는 아래의 오해들과 이어진다.
  2. 바닐라 js가 '무조건 좋은 것'이 아니다.
    어느 프로그래밍 언어나 마찬가지로, 기본 언어만으로 높은 생산성을 달성하기는 쉽지 않으며, 특히나 바퀴를 재발명하는 일이 있어서는 안 된다.
    js로 개발을 할 때 아무 라이브러리도 없이 개발을 하게 된다면 당연하겠지만 생산성이 급격하게 저하되며, 가뜩이나 부족하고 표준화되지 못한 js의 내장(정확히는 corejs의 Object밑에 있는 메서드들) 라이브러리로는 모든 요구사항을 따라잡기 버겁다.[1]
    바닐라 js를 지향하자는 말은 아무 라이브러리도 쓰지 말자는 것이 아니라 '라이브러리에 대한 지나친 의존'을 버리라는 것이 논점이다.
    즉 제이쿼리로 슬라이드 뷰를 쉽게 만들 수 있지만 js만 써서는 할 수 없다면 그것은 개발자로써 특정 도구에 지나치게 의존한다는 뜻이 된다.
    기억할 점은, 실제 현장에서는 당연히 제이쿼리를 쓰고, 리액트를 써서[2] 만들며, js만으로 만드는 경우가 오히려 드물다.
  3. 바닐라 js는 UI에 대해서만 말이 된다.
    js의 범위가 넓어짐에 따라 node 등으로 백엔드를 개발하는 js개발자에게는 바닐라 js라는 말 자체가 의미가 통하지 않는다.
    바닐라 js는 과거에 '구현이 복잡한 동적인 UI'를 쉽게 만들기 위한 제이쿼리같은 툴에 지나치게 의존하던 개발자들이 native DOM API 자체를 사용하지 않게 되면서 만들어진 용어이다. 즉, 과거엔 js가 제이쿼리와 사실상 동일시 되던 '브라우저 위에서 돌아가는 스크립트 언어' 정도의 위상이었고, 표준화되지 않은 여러 DOM API들로 인해 차라리 통일된 제이쿼리 같은 라이브러리가 오히려 브라우저 호환성(IE등도 지원)이 높았음을 고려해야 한다.
    따라서 현재의 js의 쓰임(백엔드 등)과 위상, 표준화된 문법(ES6+), 표준화된 브라우저 API등과 과거의 차이를 이해해야만 바닐라 js의 진정한 의미를 이해할 수 있다.

3.1. 2020년대 이유

2020년대 중반 이후로는 용어만 남기고 개념은 사실상 사장된 상태이다. 2010년대 초 표준화를 통해 생태계를 위한 튼튼한 기반을 확보한 이후 기술이 급속도로 발전해 '단단한 표준 ECMAScript 기반 위에 세워진 프레임워크'라는 보편적 개념이 성립하게 되면서 사실상 SI 업계를 제외하면 프레임워크 레이어를 단 하나도 거치지 않는 경우를 찾기가 매우 힘들어졌다.

근 몇십년의 역사를 한 발 물러서서 큰 추세로 보면 월드 와이드 웹이라는 그 누구에게도 소유되지 않는다(unoccupied)는 기형적 특성과 탄생 배경을 가지고 태어난 JavaScript라는 언어가 적절한 표준과 상향평준화를 통해 차츰 안정화 되어가는 모양으로, 그러한 역사적 과도기에 등장해 현재와 같은 방향을 제시해 주었던 주요 개념 중 하나로 볼 수 있다. 이는 비슷한 역사적 변화를 겪은 PHP, BASIC등의 언어에선 잘 관측되고 처음부터 기반이 확고한 C#, Swift 등의 언어에선 잘 나타나지 않는 현상이다.

용어만큼은 아직 남아 각종 부트캠프나 코딩 강의에서 왜 (자신들의) JavaScript 강의를 들어야 하는지에 대한 이유로 널리 제시되고 있는데, 이런 경우 '바닐라 자바스크립트'라는 용어에 대한 잘못된 이해나 해석을 가지고 있는 경우가 많다. 대부분은 '프레임워크의 강력한 힘과 도구는 JavaScript라는 기초 위에 세워진 것이고, 따라서 그 기반이 되는 바닐라 JavaScript를 능숙하게 활용할 수 있어야 한다'는 합리적인 논지[3]이나 이게 심해질 경우 '프레임워크는 좋지 않은 습관, 바닐라는 좋은 습관' 처럼 흑백논리의 형태로 표출되기도 한다.

이는 상술된 Vanilla JavaScript라는 용어의 탄생 배경과 맥락을 충분히 고려하지 않는 사용으로, 해당 용어가 등장한 이유는 2010년대 이전 JavaScript 생태계 특유의 각종 비표준 혼용과 비호환성, 과도한 제이쿼리 의존성 남발 때문이다. 사실상 Vanilla JavaScript라는 용어가 처음 등장했을 때 자바스크립트 프레임워크라곤 점유율이 80%를 넘었던 제이쿼리 단 하나밖에 없었다. 이런 역사적 문제가 해소된 현재는 오히려 프레임워크를 사용하지 않는 것이 더 능률이 떨어지며, 이런 방식으로 일하는 직종은 갈라파고스화 된 한국에서는 웹 퍼블리셔라는 흔적으로 남았다.

주장 자체는 일리 있다고 생각할 수 있지만 잘 생각해보면 '프레임워크를 쓰기 전에 언어를 먼저 배워야 한다'는 것은 바닐라 자바스크립트라는 용어와 무관하게 그냥 상식이며, ' 유니티를 잘 다루기 위해선 C#을 배워야 한다'와 같이 자바스크립트를 다른 언어로 바꿔도 성립하는 말이다. 즉, 그것은 JavaScript만의 문제는 아닌 것.

4. 여담

Vanilla JS를 마치 하나의 프레임워크처럼 사이트를 만들기도 했다.

파일:vanillajs.png
공식 사이트(?)
Vanilla JS 자바스크립트 프레임워크로 다른 프레임워크나 jQuery보다도 압도적으로 빠르고 웹표준을 잘 지키는 웹브라우저들에 대해서는 크로스 브라우징이 잘 되는 특성이 있다. 페이스북, 구글, 유튜브 등등 유명한 해외 사이트에서 사용되었으며, 다른 플랫폼보다도 오래되었음에도 불구하고 꾸준히 업데이트 되어 온 프레임워크이다. 용량도 매우 가벼워서 압축을 하는 경우 압축을 하지 않은 경우보다 용량이 더 나가는 역설적인 무게를 자랑한다.

마치 다른 프레임워크 사이트처럼 다운로드 버튼이 있지만 어떤 옵션을 고르건 빈 js 파일 하나만 다운로드된다. 적용법 역시 실 운영 환경에서는 빈 줄 하나를 삽입하라고 되어 있는데, 부연설명으로 Vanilla JS는 너무나 유명해서 오랫동안 브라우저에 탑재되어 왔다는 내용을 적었다.

5. 외부 링크

6. 관련 문서


[1] 간단한 예로 데이터 처리를 들 수 있다. js의 sort메서드는 사용하기 복잡하며, 의도치 않은 결과를 낼 수 있고, 경우에 따라 브라우저마다 동작이 달라지는 일마저 생길 수 있다. 그리고 groupby처럼 고수준의 동작은 지원하지 않는다. 이런 단점을 해결하기 위해 Underscore.js(또는 lodash), stdjs등이 서드파티로 개발되는 것이다. [2] 리액트의 목적 자체가 컴포넌트의 재사용이다. 즉 이미 누가 만든 것이 있다면 새롭게 짤 필요가 없다. [3] 후술하지만 이게 결코 틀리거나 나쁜 주장이 아니라 오히려 합리적인 주장이다. 바닐라 자바스크립트라는 용어와 무관한 사실일 뿐.

분류