본문 바로가기
내일배움캠프 TIL

2023-10-31 본 캠프 19일차 / 38일차 TIL

by KMS_99 2023. 11. 1.

2023-10-31 본 캠프 19일차 / 38일차 TIL

 

주요진행사항

- 리액트 입문반 강의 (내일배움캠프)

- 알고리즘 문제풀이


리액트 입문반 강의 (내일배움캠프)

React란?

 


UI를 구축하기 위한 JavaScript 라이브러리
- SPA(Single Page Application) 기반의 프론트엔드 개발 프레임워크 중 하나
- 컴포넌트 단위의 독립적인 블록을 이용한 개발방법 이용
- 다른 SPA 프레임워크인 AngularJS, VueJS 보다 월등한 인기

 


SPA란?


Single Page Application
한개의 페이지로 이루어진 애플리케이션

1. 왜 사용하는가?
기존에 MPA(Multi Page Application)는 누를 때만다 페이지가 리렌더링되는 문제가 발생
SPA를 사용하면 데이터만 변경하여 부드러운 UX를 구현할 수 있다.

2. 특징 
- 딱 한개의 페이지로 구성된 웹 앱
- 서버에 1회 리소스를 요청 (index.html 1개)
- 그 이후에 필요할 때 데이터만 받아와 기존 페이지 수정하는 방식
- 페이지 깜빡임이 없음, 부드럽고 자연스러운 UX 구현
- 비슷한 기술들이 존재 (Angular, Vue 등), 각각의 기술마다 차이점 존재

3. SPA의 단점
SEO (Search Engine Optimization) 를 위해 HTML 페이지 전체가 필요하지만
SPA 페이지의 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>


따라서 Search Engine이 페이지를 식별하는데 어려움이 있다. 페이지 검색 빈도 하락
이를 해결하기 위해 next.js 등장 (추후 공부)
결론적으로 검색 로봇이 페이지를 감지하기 어려움

4. SPA 프레임워크 종류
- ReactJS
  - 페이스북이 만들고 유지보수
  - 선발주자인 만큼 막강한 커뮤니티와 자료 보유
- VueJS
  - 배우기 쉽고 단순하다
  - 후발주자라 마켓 점유율이 적다
  - 꾸준한 성장세를 보인다
- AngularJS
  - 안정적인 프레임워크
  - 어렵고 프로그램이 어렵다. 점유율이 가장 낮음


CRA란?

Create React App 

명령 하나만 실행하여 최신 웹 앱을 설정

 

- 보일러 플레이트 코드?


어원은 신문사업에서 나왔다. 1890년대에 광고나 칼럼과 같이 계속 사용되는 텍스트 인쇄판은 부드러운 납 대신 강철로 찍기 시작함. 이를 보일러플레이트라고 불렀다.

CRA는 리액트 프로젝트를 시작할 때 세팅해야 할 것이 상당히 많지만 이러한 것들을 신경쓰지 안도록 알아서 세팅해준다. 따라서 CRA는 보일러 플레이트 코드라고 볼 수 있다.

 

파일 생성 명령어

yarn : yarn create react-app [생성할 폴더명]
npm : npx create-react-app [생성할 폴더명]

 

서버 시작

yarn : yarn start
npm : npm start

 

- CRA로 생성된 파일들

CRA로 생성된 리액트는 SPA로 서버를 통해 가져오는 페이지는 index.html 하나이다.

 

index.html에는

<div id='root'></div>

라는 코드 밖에 없다.
우리가 의도한 화면이 아니라는 뜻이다.

 

index.js에서는 

const root = ReactDOM.createRoot(document.getElementByID('root'));

를 통해 index.html의 해당 div 태그를 root로 지정한다.

 

다음으로
root.render(
    <App ./>
)
이라는 코드를 통해 <App ./> 부분을 랜더한다.
이 때 <App./>란 
상단의 import App from './App'; 부분을 통해 App.js에서 가져온 모듈이다.
이는 App.js의 것들을 화면에 띄운다는 뜻이다.


결론적으로 우리가 코드를 작성하는 부분은 App.js가 된다.


리액트 컴포넌트?

- 재사용 가능한 UI

- 각 조각을 개별적으로 살펴볼 수 있다.

- props 라는 input을 받고 React 엘리먼트를 반환

 

종류

1. 함수형 컴포넌트

2. 클래스형 컴포넌트

 

우리가 사용할 컴포넌트는 함수형 컴포넌트

why? 공식적으로 권장하는 방법, 쉽다

 

함수형 컴포넌트의 구조

// import 영역
import logo from "./logo.svg";
import "./App.css";

function App() { // 컴포넌트의 이름은 무조건 대문자로 시작
    //javascript 영역
  return (
    //jsx 영역
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        <p>
          Edit <code>src/App.js</code> and save to reload.
        </p>
        <a
          className="App-link"
          href="https://reactjs.org"
          target="_blank"
          rel="noopener noreferrer"
        >
          Learn React
        </a>
      </header>
    </div>
  );
}

// export 영역
export default App;

JSX란?

자바스크립트를 확장시킨 문법

JSX 내부 html 태그들은 DOM 요소가 아니라 리액드 돔을 구성하는 리액트 요소이다.


props?

컴포넌트끼리의 정보 교환방식, 데이터 교환 방식

- 부모 컴포넌트에서 자식 컴포넌트의 방향으로 값을 내려준다.

- 읽기 전용방식으로 변경 불가능하다.

function Son({ grandFatherName }) {
  return <div>나는 {grandFatherName} 손자에요!</div>;
}
function Mother({ grandFatherName }) {
  return <Son grandFatherName={grandFatherName} />;
}
function GrandFather() {
  const name = "흥할아버지";
  return <Mother grandFatherName={name} />;
}
function App() {
  return <GrandFather />;
}


단, props 드릴링에 유의해야한다.

중간 다리 역할의 컴포넌트가 많을 때 자식요소로 props를 넘겨주는 모습이 마치 드릴 처럼 보인다는 것이다.

 

propsChildren

props와 동일하지만 사용하는 법이 다르다.
이때 장점은 props를 통해 컴포넌트를 전달 할 수도 있다.

import React from "react";

function GrandFather(props) {
  const name = "흥할아버지";
  return (
    <>
      <div>{name}라고 합니다.</div>
      <span>{props.children}</span>
    </>
  );
}
function App() {
  return <GrandFather>가나다라</GrandFather>;
}

export default App;