1. React란?
ⅰ. React란?
- A JavaScript library for building user interfaces
- 공식문서에서 소개내용
- 유저 인터페이스를 빌딩하기위한 자바스크립트 기반의 라이브러리
- UI란 사용자에게 보여주기 위한 사용자가 볼 수 있는 부분을 만드는 프론트엔드 영역
- UI를 Building한다는 것은?
- 웹 또는 앱 애플리케이션의 UI, 즉 보여지는 부분(프론트 엔드 영역)을 구축한다는 의미와 같음!!
React.js는 SPA 기반의 프론트엔드 개발 프레임워크 중 하나로서, 컴포넌트 단위의 독립적인 블록을 이용한 개발 방법을 이용함
비슷한 프레임워크로 AngularJS, VueJs가 있음
ⅱ. SPA(Single Page Application) 아키텍쳐
- SPA(Single Page Application) 아키텍쳐의 정의
- 한 개의 페이지로 이루어진 애플리케이션이라는 말
=> MPA(Multi page Application)과는 상반된 개념 - 웹인데 애플리케이션이라고 하는 이유
❓ why? 사용자 경험이 UX가 너무나 부드럽고 마치 Application을 만지는것과 비슷하다고 해서 사용, Web App이라는 말도 사용함
- 한 개의 페이지로 이루어진 애플리케이션이라는 말
- 기존 MPA의 문제점(super easy version)
- 웹사이트의 하나의 부분을 클릭하면 다시 로딩됨
- 요즘 시대에는 리렌더링(re-rendering) 즉, 페이지가 갱신되는 사오항이 엄청나게 많기 때문에 페이지가 계속해서 깜빡거리게됨
=> UX가 나빠짐
- SPA의 특징과 장점
- 한개의 페이지(Single Page)로 구성된 웹 앱
- 서버에 1회 리소스를 요청하게됨
- 그 이후에는 필요할 때, 데이터만 받아와서 기존 페이지를 수정해주는 방식으로 화면을 수정함
- 사용자 입장에선 깜빡임이 없기 때문에 굉장히 자연스러운 UX(User Experience)를 구현할 수 있음
- 비슷한 기술들로 Angular, Vue가 있지만 구현의 차이는 각각 존재함
- SPA단점
- SEO에 약함
- SEO(Search Engine Organization)을 위해서는 HTML 페이지 전체가 필요하지만 SPA페이지의 HTML 파일들은 아래와 같이 생겨서 검색엔진 즉, 로봇이 찾을 수 없음!
- ex) 구글에서 어던 키워드를 입력할 때 관련 페이지를 추천해주는데 이것이 동작하기 위해서는 구글에 잇는 검색을 도와주는 엔진이 찾으려고 하는 웹사이트들을 잘 찾을수 있도록 홈페이지가 HTML파일을 잘 전달해 줘야함
<html>
<head>
<title>리액트 프로젝트</title>
<link rel="stylesheet" href="app.css" type="text/css">
</head>
<body>
<div id="app"></div>
<script src="app.js"></script>
</body>
</html>
ⅲ. 왜 React일까?
- SPA 프레임워크의 종류
- ReactJS
✔ 페이스북이 만들고 유지보수
✔ 선발주자인 만큼 막강한 커뮤니티와 자료를 보유하고 있음 - VueJS
✔ easy to learn, simple
✔ 꾸준히 성장하는 중
✔ 후발주자라 어쩔수 없이 market share가 적음 => 관련 자료가 적음 - AngularJS
✔ 안정적인 프레임워크
✔ hard to learn, heavy. 나온지 꽤 됐음에도 점유율이 낮음
- ReactJS
- 그중에 React인 이유
- NPM trends
- RN(React Native)와의 상생, VR에서 활용가능
- 막강한 커뮤니티
- 채용공고가 많음
ⅳ. 컴포넌트란?
- 리액트가 채택한 개발 방법
- 컴포넌트는 하나의 벽돌이라 생각하면 쉬움
- 헤더(Header) 컴포넌트, 바디(body) 컴포넌트, 푸터(Footer) 컴포넌트 만들어서 벽돌을 쌓아 올리듯이 개발함
- 어떤 웹 사이트에 변경이 일어난다고 했을때
SPA 기반 : 컴포넌트 단위로 변경사항을 반영하기 때문에 깜빡임이 없음 => 렌더링
MPA 기반 : 하나의 변경사항을 반영하기 위해 전체 페이지 Re-load됨
2. React에서 자주 사용되는 필수 ES6 문법
ⅰ. 상수와 변수
- 상수 - const(constant : 변함없는 수)
- 재할당 불가, 내부 속성값은 수정 거눙
- 변수 - let
- 재할당 가능
- 둘다 block level scope를 가짐
const a = 1;
let b = 3;
// a = 3; TypeError: Assignment to constant variable.
// a라는 상수에 할당하려고 했다는 오류가 발생
b = 1; // 오류가 나지 않음
console.log("a", a);
console.log("b", b);
- var를 사용하면 안되는 이유 - 오해가 생길수 있음
- 블록레벨 스코프(block level scope) 때문에 중괄화 안에서 선언한 변수는 그 안에서만 유효해야 하는데 var는 그렇지 않음
if (1 == 1) {
// 항상 이안으로 들어옴
var a = 3;
console.log("a", a); // a 3
}
console.log("바깥a", a); // 바깥a 3
ⅱ. Object 선언, 단축 속성, 객체 복사
- 객체(object)에서 가장 중요한 것은 key - value pair
- value의 형태는 어떠한 것도 올 수 있음
- 단축속성 : key, value가 일치하면 생략할 수 있음(ES6)
const name = "wonjang";
const age = 21;
const testObj = {
name,
// age: age, 키와 value가 같은 모양이 있으면 ES6에서 이를 생략할수 있게해줌
age,
company: "Team Sparta",
doSomething: () => {},
};
- 복사!!
const obj1 = {
value1: 10,
};
const obj2 = obj1; // 1번째 방법
// obj2.value1 += 1;
const obj3 = JSON.parse(JSON.stringify(obj1)); // 새로운 객체, 새로운 메모리를 만들어냄
obj1.value1 += 1;
// 만약에 복사한 obj2를 바꾸면 어떻게 될까?
// 예상: obj2가 바뀌면 됨
// 실제: obj1도 함께 바뀌어버림
console.log("obj1", obj1);
console.log("obj2", obj2); // obj2 { value1: 11 }
console.log("obj3", obj3); // obj3 { value1: 10 }
❓ 위에 코드에서 얕은 복사가 생기는 과정
✔ const obj2 = obj1; 이런 식의 얕은 복사 방법은 주의 해야함!! => 의도치 않은 변경이 일어날 수 있으므로.
❗ JSON.parse같은 복사의 방법으로 새로 데이터를 복사해서 사용하는 방법이 좋음
ⅲ. Template Literals
- 백틱(``)안에 자바스크립트 문법을 넣을수 있음
- placeholder 안에 넣어주면 됨
- 멀티라인을 작성할때 좋음
const testValue = "제어하는 값";
console.log(`문자열 ${testValue} 입니다.`);
const testValue2 =
"asdfASDFASDFASD" +
"ASDFASDF" +
"멀티라인을 사용하고 싶으면 따옴표는 이렇게 해야됨";
const testValue1 = `
asdfasdfasdfasdf
asdfasdfasdfasdfasdf
asdfasdfasdfasdfasdf
다양한 라인을 쓸때 의미가 있어짐
`;
ⅳ. 배열 / 객체 비구조화(Array / Object Destructuring) / 구조분해 할당
- 비구조화를 구조분해 할당이라고도 함!!!
- De(out, 반대) + structur(구조) + ing
- 객체의 구조분해 할당은 key값을 가져와야함
- 배열의 구조분해 할당은 배열안에 위치와 동일해야함
// 객체
const person = {
name: "르탄",
age: "21",
};
const { name, age, notFound } = person;
console.log(`name ${name}`);
console.log(`age ${age}`);
console.log(`notFound ${notFound}`); // notFound undefined
// 배열
const testArr = [1, 2, 3, 4, 5];
const [one, two, three] = testArr;
console.log(`one ${one}`);
console.log(`two ${two}`);
console.log(`three ${three}`);
ⅴ. 전개 연산자(Spread Operator)
- 전개연산자(...)를 이용하여 아래와 같이 활용할 수 있음
// ... 뒤에 나머지 를 한번에 넣어주기
const [name, ...rest] = ["wonjang", 21, "Gyeongi"];
console.log(`name ${name}`); // name wonjang
console.log(`rest ${rest}`); // rest 21,Gyeongi
// ... -> 배열의 구조를 빼는것으로 활용함
const names = ["Steve", "John"];
const students = ["Tom", ...names, ...names];
console.log(`students ${students}`);
const tom = {
name: "Tom",
age: 10,
region: "Seoul",
};
const steve = {
...tom,
name: "Steve",
};
console.log(`tom ${tom}`);
console.log(`steve ${steve}`);
ⅵ. Arrow Functions
- 함수 선언 기본방법
function (매개변수) {
return문
} - 화살표 함수의 선언방법
const 변수명 = (매개변수) => {
return 문
} - 화살표함수에서는 매개변수가 한개일때 소괄호가 생략가능하고, return문 한줄만 있으면 return, 중괄호가 생략이 가능함
function mysum1(x, y) {
return x + y;
}
const mysum2 = (x, y) => x + y;
console.log(mysum1(1, 2));
console.log(mysum2(1, 2));
3. 개발환경 세팅하기
ⅰ. 필수 프로그램 설치
- 크롬 브라우저
- VScode
- git
- Node
- node를 설채해야지 npm을 설치할 수 있음
- npm 이란?
✔ NPM(Node Package Manager)은 무수히 많은 third-party 패키지들이 모여있는 집합소
✔ 우리는 npm에서 여러 패키지를 다운받아서 활용할 수 있음
📍 비슷한 것으론 yarn이 있음(명령어로써 비슷하다는 말) -> npm yarn 둘다 프론트엔드 의존성을 관리하기 위한 패키지 매니저!!!!
// 노드 버전 확인
node -v
- yarn
// 터미널에서 yarn 설치하기
// -g => global의 약자 패키지 베이스가 아니라 내 컴퓨터 전반에 있어서 무조건 쓸수 있음을 나타냄
npm install -g yarn
// yarn 설치 확인하기(버전확인)
yarn -v
// yarn으로 패키지 설치하는 방법
yarn add 설치할 패키지 이름
ⅱ. npm과 yarn
- 공통적인 특징
- 둘다 자바스크립트 런타임환경인 노드(Node.js)의 패키지 관리자
- 애플의 앱스토어나 구글의 플레이스토어처럼 전 세계의 많은 개발자들이 본인들이 만든 유용하고 다양한 패키지들 또는 프로그램을 온라인 데이터 베이스에 올려놓는데 그걸 쉽게 설치하고 삭제할 수 있도록 도와주는 관리자
- 차별적인 특징
- NPM
✔ node.js를 설치할 때 자동으로 생성됨
✔ Node Package Manager의 약자
✔ NPM platform 자체 - YARN
✔ 2016년 페이스북에서 개발한 패키지 관리자
✔ npm과 호환성이 좋고, 속도나 안정성 측면에서 npm보다 월등히 좋음 - 요약
✔ 속도: yarn이 빠름
✔ 보안: yarn이 좋지만 최근 npm의 보안 업데이트도 크게 향상됨
- NPM
- 명령어
📚 --save라는 명령어는 yarn에서는 하지 않음
package.json이라는 파일 안에는 이 프로젝트에 담겨있는 dependency라는것이 있음
dependency라는 것은 이 프로젝트가 의존하고 잇는 패키지들이라는 것
의존하고 있는 패키지들의 목룍을 넣기 위해서는 npm은 반드시 --save,
yarn은 add만 하면 기본적으로 save명령어가 내장되어 있음
어떠한 것을 사용해도 괜찮음
why? 지속적으로 관리되고 있고, 넓은 커뮤니티가 있기 때문에
이 강의에선 주로 yarn을 사용함!!!
ⅲ. javascript 런타임 환경 종류
- 런타임(runtime)이란?
- 프로그래밍 언어가 구동(runnint)되는 환경(environment)을 말함
- 자바스크립트 언어가 구동되는 환경을 말함
- 자바스크립트의 대표적인 런타임 환경은 2가지
- 브라우저(ex : Chrome, Microsoft Edge, Firefox)
- node 환경
// 아래 파일을 node 환경에서 실행하면 오류가 발생해요!
// test.js
function printAlert() {
alert('이 함수는 브라우저 환경에서만 실행됩니다.');
}
printAlert();
// ReferenceError: alert is not defined 오류 발생
// 브라우저의 고유 특성들은 node환경에서 먹히지 않음
- 리액트를 이용하여 웹 애플리케이션을 개발하는 과정에서는 노드 환경이아닌 브라우저 환경을 이용하여 개발함
'공부 > React' 카테고리의 다른 글
리액트 숙련주차 - 1 (0) | 2023.06.30 |
---|---|
리액트 입문주차 1주차 - 5 (0) | 2023.06.29 |
리액트 입문주차 1주차 - 4 (0) | 2023.06.27 |
리액트 입문주차 1주차 - 3 (0) | 2023.06.25 |
리액트 입문주차 1주차 - 2 (0) | 2023.06.23 |