일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- multiprocessing
- select tag
- 2인 사무실
- XFrameOptions
- typescript
- python
- Domination Game
- 구로 공유 오피스
- html
- iframe
- turborepo
- Django
- Regexp
- 동료리뷰
- 리더
- javascript
- 스타트업
- 테드스페이스
- JS
- select css
- PM
- 공유 오피스
- 빠른 서버
- React
- 개발자
- css
- 느린 서버
- ai로 앱 만들기
- 좋은 리더란
- 구로 디지털 단지 사무실
- Today
- Total
개발하는 일상
프론트 프레임워크를 왜 쓸까? (React, Vue 쓰는 이유) 본문
이 글은 자바스크립트를 조금 알고, 프론트 프레임워크를 시작한 지 얼마 되지 않은 초보, 입문 개발자의 입장에서 작성되었습니다.
0. 프레임워크가 할 수 있는 일은 모두 바닐라 JS로 할 수 있다
먼저 분명히 해 두고 싶은 점입니다. React나 Vue로 할 수 있는 일은 모두 바닐라 JS(순수 자바스크립트)로 구현할 수 있습니다.
그럼에도 사람들이 프레임워크를 쓰는 이유가 무엇일까요?
1. 데이터의 변화를 화면에 적용하기 쉽다
프레임워크(React)를 개발한 페이스북 페이지를 예시로 들어, 바닐라 JS와 프레임워크의 차이점을 알아보겠습니다.
페이스북 메인화면입니다. 이 화면에서 저의 이름(눈치볼나이)이 들어가는 곳을 파란 네모로 표시해두었습니다.
제가 만약 이름을 바꾼다면, 화면에서 저 세 부분이 바뀌어야 할 것입니다. 먼저 바닐라 JS로 코드를 작성해보겠습니다.
바닐라 JS로 만들 때
const nameElements = document.querySelectorAll('.username');
let newName = '눈치없는나이';
nameElements.forEach((nameElement)=>{
nameElement.innerText = newName;
});
// 만약에 newName이 바뀐다면 nameElements의 이름은 변할까요?
newName = '눈치있을나이';
바닐라 JS에서 데이터가 변해서 DOM을 업데이트하려면 위 코드와 같은 두 절차의 작업이 필요합니다.
- 바꾸려는 데이터가 쓰인 DOM Element를 가져와서
- 변경 내용을 적용
당연히 제가 마지막 줄에 적은 것처럼 데이터를 변경시키는 것 만으로는 DOM이 업데이트 되지 않습니다. 데이터가 변하면 또 위 두 가지의 작업을 해줘야하는 것이죠.
여기서 웹 페이지의 규모가 커지면 커질 수록 몇 가지 문제가 발생합니다.
- 어느 데이터가 어느 DOM Element에 적용되었는지 기억해야 합니다.
- 데이터의 업데이트가 많이 일어날 수록, 중복적으로 작성하는 코드(dom을 선택하고, 업데이트하는)의 양도 많아집니다.
이런 문제를 프론트 프레임워크에서는 어떻게 해결했는지 아마 이미 알고 계실 것입니다.
프론트 프레임워크를 쓸 때
React에서는 state를, Vue에서는 data를 변경하기만 하면, DOM은 알아서 업데이트 됩니다. 내가 이 데이터가 어디에 쓰였는지 모두 알지 못해도 상관없습니다. 프론트 프레임워크가 알아서 그 데이터가 적용된 모든 DOM을 업데이트할 것입니다.
리액트 홈페이지에는 이런 문구가 작성되어 있습니다.
React는 상호작용이 많은 UI를 만들 때 생기는 어려움을 줄여줍니다. 애플리케이션의 각 상태에 대한 간단한 뷰만 설계하세요. 그럼 React는 데이터가 변경됨에 따라 적절한 컴포넌트만 효율적으로 갱신하고 렌더링합니다.
2. 컴포넌트화 하기 쉽다
커다란 웹 사이트는 당연히 작게 쪼개어 개발하는 것이 훨씬 수월합니다. 디자인이나 기능을 토대로 큰 웹 사이트를 작은 부품으로 분리해 놓은 것을 보통 컴포넌트라고 부릅니다. 컴포넌트를 만들고, 적용하는 것이 각각의 경우 어떻게 다른지 알아보겠습니다.
바닐라 JS를 쓸 때
<div>
<img src="#" alt="카드 썸네일">
<div>
<h3>카드 타이틀</h3>
<p>카드 설명</p>
</div>
</div얖>
이렇게 생긴 카드를 반복해서 사용하기 위해 JS로 만들어 보겠습니다.
const card = document.createElement('div');
const cardThumbnail = document.createElement('img');
const cardBody = document.createElement('div');
const cardBodyHeader = document.createElement('h3');
const cardBodyDescription = document.createElement('p');
card.appendChild(cardThumbnail);
card.appendchild(cardBody);
...생략
단지 DOM element를 만드는 코드일 뿐인데 뭐가 이렇게 긴걸까요. 저도 결국 다 적지 못하고 생략하였습니다. 만들 땐 어떻게 만들었다고 하더라도, 나중에 저 코드를 다시 본다면 어떤 엘리먼트를 만든건지 감을 잡는 것도 어려울 것 같습니다.
프론트 프레임워크를 쓸 때
Vue를 통해 카드 컴포넌트를 만들어 보겠습니다.
<template>
<div>
<img :src="imgUrl" alt="카드 썸네일">
<div>
<h3>{{ title }}</h3>
<p>{{ description }}</p>
</div>
</div>
</template>
<script>
export default {
name: 'Card',
data() {
return {
imgUrl: '#',
title: '카드 타이틀',
description: '카드 설명',
};
},
}
</script>
카드 컴포넌트가 어떻게 생겼는지 한눈에 들어올 뿐만 아니라, 간단한 코드로 데이터 바인딩까지 모두 완료한 상태입니다.
결론
크게 두 가지로 프론트 프레임워크를 사용하는 이유를 작성해보았습니다.
- 데이터의 갱신이 간편하다.
- 컴포넌트 단위 개발을 하기 편리하다.
이 두 가지 장점은 개발하는 규모가 커지고, 관리하는 데이터가 많으면 많을 수록 느끼기 좋습니다. 다르게 말하면, 작은 웹 페이지의 경우 프론트 프레임워크가 개발에 필요 없을 수 있다는 말도 되겠죠. 프론트 프레임워크를 무조건 사용하기 보다는, 적절히 필요에 따라 사용하실 줄 알게 되시길 바랍니다.
'개발 간단 팁' 카테고리의 다른 글
border-radius 파헤치기(css로 원기둥 만들기) (0) | 2020.11.24 |
---|---|
상태 관리에서 Vue와 React의 차이점과 불변성(Difference of state management between Vue and React) (0) | 2020.11.22 |
파이썬으로 파일 수정하기(edit file with python) (0) | 2020.11.08 |
CORB(Cross-Origin Read Blocking)에 대하여 (0) | 2020.11.06 |
python multiprocessing 으로 병렬 작업하기(Django 서버 동시에 여러개 켜기, run multiple Django server) (0) | 2020.10.19 |