반응형
여승철
INTP 개발자
여승철
  • 분류 전체보기 (376)
    • CS (16)
      • 면접 준비 (7)
      • 운영체제 (0)
      • 네트워크 (2)
      • HTTP (6)
      • 스프링(Spring) IoC 컨테이너 (0)
      • 알고리즘 (1)
    • Web (13)
    • AWS (6)
    • Java (43)
    • JSP & Servlet (65)
      • 개념 (42)
      • 실습 (23)
    • Spring Framework (33)
    • Spring Boot (10)
    • Spring Data (22)
      • JPA (14)
      • Query DSL (7)
      • Redis (1)
    • Spring Security (9)
    • Spring Batch (4)
    • MyBatis (10)
    • Front-End (51)
      • JS (27)
      • Vue.js (17)
      • React (5)
      • JQuery (0)
      • d3.js (2)
    • DBMS (24)
      • SQL, RDBMS (16)
      • MongoDB (5)
      • Redis (3)
    • Kafka (3)
    • 리눅스 (Linux) (4)
    • 디자인 패턴 (3)
    • VCS (8)
    • API (0)
    • TOOL (3)
    • Reading Book (28)
      • 이펙티브 자바 (11)
      • Clean Code (10)
      • 1분 설명력 (4)
      • HOW TO 맥킨지 문제해결의 기술 (3)
    • C# (4)
    • NSIS (6)
    • ETC (11)

블로그 메뉴

  • 홈
  • 태그

인기 글

태그

  • 스트림
  • 회원 관리
  • 게시판
  • Dao
  • servlet
  • querydsl
  • Spring Batch
  • ubuntu
  • controller
  • 로그인
  • 환경 세팅
  • EC2
  • 이펙티브 자바
  • 디자인 패턴
  • JSTL
  • JDBC
  • HTTP
  • mybatis
  • 맥킨지
  • jsp

최근 댓글

최근 글

hELLO· Designed By 정상우.
여승철

INTP 개발자

React 기본 구조 완벽 정리, SPA(Single Page Application) 이해하기
Front-End/React

React 기본 구조 완벽 정리, SPA(Single Page Application) 이해하기

2024. 5. 22. 14:17
반응형

React 애플리케이션 구조

아래는 `create-react-app`을 사용하여 생성된 기본 React 애플리케이션의 구조 예시입니다.

my-app/
├── node_modules/
├── public/
│   ├── index.html
│   ├── favicon.ico
│   └── ...
├── src/
│   ├── App.css
│   ├── App.js
│   ├── App.test.js
│   ├── index.css
│   ├── index.js
│   ├── logo.svg
│   └── ...
├── .gitignore
├── package-lock.json
├── package.json
└── README.md

node_modules/

  • 프로젝트에서 사용하는 모든 외부 라이브러리와 모듈을 저장합니다.
  • `npm install` 또는 `yarn install` 명령어를 실행하면 이 디렉토리가 생성됩니다.

public/

  • 정적 파일을 저장하는 곳입니다. HTML 파일과 아이콘, 이미지 등이 포함됩니다.
  • `index.html`: 페이지 템플릿으로, React 애플리케이션의 진입점입니다. 모든 React 컴포넌트는 이 파일의 `<div id="root"></div>`에 렌더링됩니다.
  • `favicon.ico`: 브라우저 탭에 표시되는 아이콘입니다.

src/

  • 애플리케이션의 소스 코드(JS파일, CSS파일)가 포함된 디렉토리입니다.
  •  webpack은 빠른 빌드를 위해서, src 디렉토리 내부만 처리합니다. 때문에, src 디렉토리 이외에 소스 코드 파일을 넣는 것은 webpack이 보질 못합니다.
  • App.js: 기본 React 컴포넌트 파일로, 보통 애플리케이션의 루트 컴포넌트로 사용됩니다.
  • App.css: `App.js`에 스타일을 적용하는 CSS 파일입니다.
  • App.test.js: `App.js`의 유닛 테스트를 포함합니다.
  • index.js: 자바스크립트 시작점으로, ReactDOM을 사용하여 React 컴포넌트를 실제 DOM에 렌더링 해줍니다.
  • index.css: 전체 애플리케이션에 적용되는 글로벌 CSS 파일입니다.
  • logo.svg: React 로고 이미지 파일입니다.

package.json과 package-lock.json

  • package.json: 프로젝트의 메타데이터를 포함하는 파일로, 프로젝트의 의존성, 스크립트, 이름, 버전 등을 정의합니다. `npm install`을 하였을 때 해당 파일을 통해 node-modules/에 라이브러리 등을 저장할 수 있습니다. 또한 앱을 시작하거나, 빌드, 테스트할 때 사용할 스크립트 등도 명시되어 있습니다.
  • package-lock.json: 동일한 의존성 버전을 사용하여 일관된 빌드를 보장할 수 있도록, 프로젝트의 정확한 의존성 트리를 잠그는 파일입니다.

package.json

pacakge.json에는 앱을 시작하거나, 빌드, 테스트할 때 사용할 스크립트 등이 명시되어 있습니다.
React App을 시작하고 싶다면 npm run start를 입력 하면 되고, 빌드하고 싶다면 npm run build 명령어를 입력하면 됩니다.

💁 반드시 존재해야하는 파일들
아래 파일들은 이름이 수정되게 되면 React 애플리케이션이 정상 작동하지 않습니다.

1. public/index.html ← React 애플리케이션 진입점
2. src/index.js ← ReactDOM을 사용하여 실제 DOM에 렌더링하는 파일

index.html 페이지는 React 애플리케이션 default 진입점이기 때문에, 사이트 요청시 다른 페이지가 지정되어 있지 않으면 기본 페이지로 지정됩니다.
`www.example.com`으로 요청한 경우 `www.example.com/index.html`으로 요청한 것과 같습니다. 

 

SPA: Single Page Application

싱글 페이지 애플리케이션(SPA)은 하나의 페이지에 전체 페이지를 담아 동적으로 화면을 표현해줍니다. 아래 public/index.html과 src/index.js를 보도록 하겠습니다.

public/index.html & src/index.js

React 애플리케이션에 요청을 보내면 React 진입점인 public/index.html에 접근하게 됩니다. <div> 요소의 id가 root라고 되어 있는 것을 확인할 수 있습니다. 이제 자바스크립트의 시작점인 src/index.js에서 id가 root인 요소를 가져오고 그 요소 안에서 화면을 구성합니다. 기본적으로 요소 안에 <App />이라고 작성되어 있으며 <App />은 App.js 입니다.

 

즉, React Application에서는 index.html 페이지 하나만을 이용하여 페이지를 보여줍니다. 

그럼 페이지가 하나만 있고 그 안에서 동적으로 화면이 변환된다면, 이전 화면 이동 등은 어떻게 해줄까요? 바로 History API를 사용합니다.

 

History API

  • back(): 세션 기록의 뒤 페이지로 이동하는 메소드
  • forward(): 세션 기록의 앞 페이지로 이동하는 메소드 
  • go(): 지정한 세션 기록으로 이동하는 메소드,  go(-1)은 바로 뒤 페이지, go(1)은 바로 앞 페이지로 이동합니다.
  • pushState(): 주어진 데이터를 세션 기록 스택에 넣는 메소드, 직렬화 가능한 모든 JS 객체를 저장하는 것이 가능합니다.
  • replaceState(): 세션 기록 스택의 데이터를 주어진 데이터로 교체하는 메소드

 

 

그럼 JS 파일들이 id가 root인 요소 안에서 화면을 구성하는데 어떻게 UI를 구현하는지 다음 JSX 포스팅에서 이어 하도록 하겠습니다.

반응형

'Front-End > React' 카테고리의 다른 글

React Hooks 이해하기  (0) 2024.05.23
React Props와 State를 통한 데이터 관리  (0) 2024.05.22
React 리액트에서 UI를 정의할 때 사용하는 JSX: JavaScript XML  (0) 2024.05.22
React 리액트란? 기본 개념, 컴포넌트, 가상 DOM, 설치까지 한눈에 보기  (0) 2024.05.21
    여승철
    여승철

    티스토리툴바