npx 명령어로 리액트 프로젝트 + 타입스크립트 + 리덕스 개발환경 세팅

 

https://www.npmjs.com/package/cra-template-redux-typescript

 

cra-template-redux-typescript

The official Redux+TS template for Create React App. Latest version: 2.0.0, last published: 2 years ago. Start using cra-template-redux-typescript in your project by running `npm i cra-template-redux-typescript`. There are no other projects in the npm regi

www.npmjs.com

 

$npx create-react-app travel-react-app --template redux-typescript

or

$yarn create react-app travel-react-app --template redux-typescript

 

 

 

 

 

기존 프로젝트인 경우 

npm i vuetify

 

 

 

main.js 에 추가해 준다

// main.js
import { createApp } from 'vue'
import App from './App.vue'

// Vuetify
import 'vuetify/styles'
import { createVuetify } from 'vuetify'
import * as components from 'vuetify/components'
import * as directives from 'vuetify/directives'

const vuetify = createVuetify({
  components,
  directives,
})

createApp(App).use(vuetify).mount('#app')

 

리액트를 이용하여 웹페이지를 구현하는데 빠르게 아이콘을 사용하고 싶을때 react-icons를 사용할 수 있다.

 

react-icons.github.io/react-icons/

 

React Icons

React Icons Include popular icons in your React projects easily with react-icons, which utilizes ES6 imports that allows you to include only the icons that your project is using. Installation (for standard modern project) npm install react-icons --save Usa

react-icons.github.io

 

 

해당 라이브러리 설치방법

npm install react-icons --save // npm
yarn add react-icons // yarn

 

설치 후 사이트 좌측을 보면 아이콘을 검색할 수 있는 검색창과 아이콘 종류들이 있다. 

Ctrl - F 를 눌러 우너하는 아이콘 페이지 내에서 검색해서 클릭 후 사용해도 되고 

다른 아이콘들도 찾아보고 싶다면 아예 왼쪽에 검색창에서 검색해서 찾아도 된다.

 

그 복사한 아이콘을 Import로 불러와야 하는데 아이콘 종류마다 불러오는 주소가 다르다.

 

 

import { BsSearch, BsYoutube } from 'react-icons/bs';

Test

 

 

UseParams hook 설치

useParams를 사용하기 위해서는 라우터 설치가 필수다.

// 설치
npm install react-router-dom

 

Useparams() 사용방법

1) useParams를 import 

import React from 'react';
import { useParams } from 'react-router-dom';

const test = () => {
  return (
    <div className="test">
      <p></p>
    </div>
  )
}

export default test;

 

2) useParams 정보를 하나의 변수에 저장한다.

import React from 'react';
import { useParams } from 'react-router-dom';

const test = () => {
  let { params } = useParams(); // 변수에 저장

  return (
    <div className="test">
      <p></p>
    </div>
  )
}

export default test;

 

3) 파라미터 값을 사용할 수 있다.

import React from 'react';
import { useParams } from 'react-router-dom';

const test = () => {
  let { params } = useParams();

  return (
    <div className="test">
      <p>현재 페이지의 파라미터는 { params } 입니다.</p>
    </div>
  )
}

export default test;

 

 

 

참조 : https://velog.io/@nemo/useParams

 

react-router-dom

 

useNavigate hook

// 설치
npm install react-router-dom

useNavigate는 페이지를 이동할 때 사용된다.

Link를 사용해도 이동 시킬 수는 있긴 하지만 단순 이동만 시킨다면 Link를 사용하면 되고

특정 이벤트가 실행됐을 때 동작하도록 하거나 추가적인 로직이 필요한 경우는 useNavigate를 사용한다.

 

사용방법

import { useNavigate } from 'react-router-dom';

 

1. react-router-dom으로부터 useNavigate를 import 한다.

const navigate = useNavigate();

2. useNavigate를 호출하면 양식이 제출된 후 프로그래밍 방식으로 탐색할 수 있는 함수를 반환한다고 공식문서에 나와 있다. 이것을 변수에 담아 사용한다.

  • useNavigate 훅을 실행하면 페이지 이동을 할 수 있게 해주는 함수를 반환
    • 반환하는 함수를 Navigate 라는 변수에 저장 후 navigate의 인자로 설정한 path값을 넘겨주면 해당 경로로 이동할 수 있다.

 

💡 useNavigate를 직접 호출하지 않고 변수로 선언해서 반환된 함수를 호출하는 이유
import React, { useState } from 'react';
import { useNavigate } from 'react-router-dom';

export default function Videos() {
    const [text, setText] = useState('');
    const navigate = useNavigate();
    const handleChange = (e) => {
        setText(e.target.value);
    };
    const handleSubmit = (e) => {
        e.preventDefault();
        setText('') //텍스트초기화 
        navigate(`/videos/${text}`);
    }
    return (
    <div>
        Videos
        <form onSubmit={handleSubmit}>
            <input 
            type="text" 
            placeholder='video id: ' 
            value={text}
            onChange={handleChange}
            />
        </form>
    </div>
    );
}


hook의 규칙
- 컴포넌트 최상단에서 호출해야한다.
- 다른 조건문, 함수선언문, 반복문 등 중첩된 함수 안에서 호출 할 수 없다.
- 컴포넌트 내부 함수에서 callback으로도 호출 할 수 없다.
- 함수 컴포넌트에서 호출할 수 있다. (Custom hook에서 예외처리 가능)

 

Link 컴포넌트와 useNavigate hook의 차이 

1. Link 

- 클릭 시 바로 이동하는 로직 구현 시에 사용한다.

   ㄴ ex) 제품 리스트에서 제품 상세페이지로 이동 시 

 

2. useNavigate

- 페이지 전환 시 추가로 처리해야 하는 로직이 있을 경우 useNavigate 사용

   ㄴ ex) 로그인 

회원가입 되어 있는 사용자 -> Main 페이지로 이동

회원가입이 되어 있지 않은 사용자 -> SignUp 페이지로 이동

 

 

정리

리액트에서는 주로 Link 또는 useNavigate 훅을 사용하는데 이 둘의 차이점은 

Link는 조건 없이 이동할 때, useNavigate는 조건 있는(?) 이동을 할 때 사용된다.

리액트 개발에 필수인 크롬 개발자 도구를 소개하려 한다. 기본적으로 제공되는 크롬 개발자 도구에 리액트 정보를

확인할 수 없다. 필요한 플러그인을 설치하여 더욱 편리하게 이용해 보려고 한다.

 

 

크롬 웹 스토어에서 React를 검색하여 React Developer Tools을 설치한다.

 

 

설치가 완료되면 React로 구성된 페이지에서 개발자도구를 열면 React 탭이 나타난다. 리액트 컴포넌트들과 Props 값을 쉽게 확인할 수 있다.

 

또한 설정 모양의 아이콘을 클릭하고 Highlight Updates 옵션을 활성화하면 리렌더링 될 때마다 빈도에 따라서

하늘색 -> 초록색 -> 노란색 -> 발간색 순으로 표시가 된다.

 

 

Components

리액트 개발자도구를 열면 구조를 자세히 살펴 볼 수 있고

마우스 오버를 하면 어떤 영역인지 표시된다.

또한 전달받은 Props 도 확인 가능하고 reux , hook state도 확인이 가능하고 바로 수정도 된다.

 

Profiler

녹화해 주는 기능이다.

페이지 내에서 이동을 했을때 얼마나 걸리는지 알 수 있고 어떤 컴포넌트가 재 렌더링 되는지 체크를 해 볼 수 있다.

 

CRA를 이용하여 프로젝트 생성하기

1. 먼저 프로젝트를 생성할 디렉터리에서 다음 명령어를 실행한다.

npm init react-app <프로젝트 이름>
❓ npm이란?

패키지 관리 도구로 정식 명칭은 Node Pacackage Manager이다.
npm은 일종의 거대한 소프트웨어 등록소로, 프로그래머들이 만든 여러 유용한 모듈들을 보유하고 있다. (전세계 게임의 배급과 관리를 담당하는 플랫폼인 steam과 비슷한 개념이라고 생각하면 된다.) 이렇게 npm에 업로드되어 있는 노드 모듈을 패키지라고 하는데, 우리는 필요에 따라 이 패키지들을 다운로드하여 사용할 수 있다.

2. 설치가 완료되면 cmd(터미널)에 아래와 같은 메시지가 표시되며 디렉터리에는 프로젝트명의 폴더가 생성된다.

 

3. 메시지에서 제안하는 바와 같이 생성된 프로젝트로 이동하여 npm start를 실행한다. 그러면 다음과 같은 초기 화면이 나타난다.

 

📁 CRA 디렉터리 구조

create-react-app을 통해 만들어진 폴더는 node_modules, public, src, .gitignore, package-lock.json, package.json, README.md, 그리고 숨겨져 있어서 당장은 보이지 않는 폴더인 .git으로 이루어져 있다.

 

 

node_modules

npm을 이용하여 설치한 모듈들이 저장되는 곳이다.
어떤 모듈들이 설치되었는지는 package.json의 dependencies에서 확인할 수 있다.

 

package.json

이 프로젝트에서 사용된 모듈과 모듈의 버전을 명시하는 파일이다.
node_modules 폴더는 크기가 상당하기 때문에 github과 같은 저장소에 프로젝트를 저장할 때 제외된다. 이렇게 해도 되는 건, package.json 파일에 내가 사용한 모듈들에 대한 정보가 있어 npm install 시 이 모듈들이 자동으로 설치되기 때문이다.

 

package-lock.json

좀 더 명확한 버전을 표시하기 위한 파일이다.
package.json에 명시된 모듈의 버전이 범위로 표기되어 있다면, 이 파일에 표기된 버전은 좀 더 명확하게 명시되어 있다.

 

public

HTML, img 등 정적 파일을 담는 디렉터리이다.

 

.git

commit 등 git 활동 기록이 저장되는 곳이다.
별도로 설치하지 않아도 commit이 가능한 것은 CRA 앱이 git 파일을 기본적으로 제공하기 때문이다. 숨김 파일이기에 숨김 파일 보기를 설정하기 전까지는 눈으로 확인할 수 없다.

 

src

우리가 작업하는 대부분의 코드는 이 디렉터리 내부에 위치하게 된다.
아래에서 좀 더 자세히 살펴보겠다.

 

src 디렉터리

App.js

function App() {
  return (
    <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>

        <p>안뇽, 일단 테스트 한번 해볼게 이거 재밌네</p>
      </header>
    </div>
  );
}

export default App;

 

이 프로젝트의 메인이 되는 최상위 컴포넌트이다.

 

index.js

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();
  • ReactDOM.render
    컴포넌트를 페이지에 렌더링하는 함수이다.
    첫 번째 인자로 페이지에 렌더링할 내용(JSX 형태)을, 두 번째 인자로 그 내용을 렌더링할 document 요소를 받는다. 이 코드에서 선택된 root 요소는 public/index.html 파일에서 확인할 수 있다.
  • React.StrictMode
    추후 사라지게 될 오래된 기능을 사용했을 때 경고를 출력하는 역할을 한다.

setupTests.js

추후 테스트 코드를 작성할 때 enzyme 및 어댑터 적용 시 이곳을 활용한다.

 

참조

'Language > React' 카테고리의 다른 글

React app + Typescript + Redux 설치하기  (0) 2024.01.24
[React-Icons]사용하기  (0) 2023.07.13
[React Router] useParams()  (0) 2023.07.08
[React Router] useNavigate  (0) 2023.07.08
[React] 개발자 도구 활용하기  (0) 2023.06.20
방송대 Android 스튜디오 프로젝트 

1. 안드로이드 프로젝트의 개념

안드로이드 프로젝트(Android Project]

하나의 앱을 개발하기 위해 통합 개발 환경(IDE)내에 구성하는 작업 공간(workspace)

 

 

개발에 필요한 기본 파일과 폴더

안드로이드 프로젝트를 생성하면 오른쪽 그림과 같이 지정된 경로에 다양한 기본 폴더와 파일들이

안드로이드 스튜디오에 의해 자동으로 생성된다.

 

안드로이드 프로젝트를 구성하는 주요 파일 및 폴더

파일 및 폴더명 설명
java/MainAcivity.java 스마트폰 화면을 구성하는 액티비티를 정의하는 파일로 앱 실행 시 처음으로 실행되는 코드를 정의
build/R,java(R 클래스/R.jar) 앱이 동작하면서 참조하는 자원(문자열, 이미지, 소리 등) 들의
ID가 정의된 파일
res/drawable 화면에 표시되는 이미지 파일(png,jpg,gif)이 저장되는 폴더
res/layout/activity_main.xml MainAcivity.java에 대한 레이아웃을 정의하는 XML 파일
res/values/strings.xml 앱이 동작하면서 참조하는 문자열들이 정의된 파일
AndroidManifest.xml 앱에 대한 전반적인 정보를 담고 있는 파일로
앱의 구성요소나 권한 등을 정의

 

 

2. 안드로이드 프로젝트 구조 

 

안드로이드 프로젝트 주요 파일들의 참조 관계

 

 

Activity 개념

  • Activity란 안드로이드 앱에서 하나의 화면을 표현하기 위한 구성요소를 뜻함
  • Activity 내에는 다양한 기능을 수행하기 위한 코드가 작성되는데 실행 부분데이터 부분으로 구분됨
  • 이렇게 코드들을 두 가지 유형으로 분리함으로써 개발 효율을 높일 수 있음
  • Activity 내에 입력하는 JAVA 소스코드가 실행 부분이라면 
  • Strings.xml과 activity_main.xml 내에 정의되는 XML 구조의 코드는 데이터 부분에 해당됨
  • 실행 부분과 데이터 부분의 연결은 R.java가 담당하고 있음
  • R.java는 XML 구조로 정의되는 데이터들을 실행 부분에서 활용할 수 있도록, 변수 형태의 ID와 주소값을 포함함

 

1. Activity_main.xml

  • 하나의 안드로이드 앱은 실행 부분과 데이터 부분으로 분리되어 있음
  • 데이터 부분 중 하나인 화면의 구조를 표현하는 레이아웃은 일반적으로 JAVA코드에 직접 기술하지 않고 XML에서 기술됨

 

프로그램 1.1 activity_main.xml 설명

  • RelativeLayout 이라는 레이아웃 안에 문자열 표시를 위한 View인 TextView를 배치하고 있음
  •  홑화살괄호('<', '>')로 정의된 각 구성요소 중 TextView의 android:text 속성에서는 @string/app_name값이 지정되어 있음
  • @string/app_name 값이 Strings.xml에서 정의된 'app_name'이라는 이름의 문자열 ID로 대체된다는 사실을 의마함
  • 문자열에 대한 정보는 R.java 파일에 저장되며, 실제 문자열의 내용은 strings.xml에 저장되어 있음

 

2. strings.xml

  • 안드로이드 앱이 사용하는 다양한 유형의 리소스 중 하나인 문자열은 관리의 편의성을 위해 XML 파일에 따로 정의됨
  • 문자열이 정의되는 XML 파일은 기본적으로 strings.xml 파일임

 

3. R.java(R.jar/R.class)

  • 안드로이드 앱이 사용하는 자원을 참조하기 위해 사용되는 ID가 정의된 클래스 R을 포함하고 있음
  • JAVA 프로그램이나 XML 파일에서 참조하는 리소스의 ID는 R.java 파일에서 정의됨
  • R 클래스나 내부의 16진수 정의는 개발 툴(AAPT)에 의해 자동적으로 작성됨 
  • 다른 리소스 파일들을 컴파일한 후에 자동으로 리소스 ID를 이 파일에 등록하게 됨
  • AAPT에 의해 자동적으로 정의되고 사용되는 정보이므로 개발자가 임의로 R.java 파일의 내용을 변경해서는 안됨
  • R 클래스의 필드인 R.layout.main 은 Java파일의 setContentView 가 인수로서 사용됨 

 

3.안드로이드 프로젝트의 구성 

1. MainActivity.java

개요

  • 안드로이드 앱의 화면을 구성하거나 사용자와 상호작용하는 Activity 클래스를 상속받아 새로운 액티비티를 생성함
  • 사용자가 발생시키는 이벤트에 반응하여 새로운 액티비티(화면)를 생성하거나 사용자의 요구사항을 만족시키는 동적 작업을 수행

 

2. AndroiManifest.xml

1) 안드로이드 주요 컴포넌트

  • 액티비티(Acitivity) : 하나의 스마트폰 화면을 관리하는 컴포넌트
  • 서비스(Service) : 스마트폰 화면 별도로 백그라운드에서 독립적으로 동작하는 컴포넌트
  • 방송 수신자 : 안드로이드 플랫폼에서 발생하는 다양한 이벤트를 수신하고 처리하는 컴포넌트
  • 컨텐츠 제공자 : 데이터를 체계적으로 관리하고 앱이 활용할 수 있도록 인터페이스를 제공하는 컴포넌트

3. XML 레이아웃의 장점 

1) XML 코드

  • 안드로이드에서는 앱의 레이아웃을 위해 주로 JAVA 코드보다는 XML 코드를 이용함
  • XML은 'eXtensible Markup Language'의 약자로 HTML 과 같은 마크업 언어임

2) XML 레이아웃의 장점

  • 동적인 역할을 담당하는 JAVA 코드와 정적인 화면 영역을 담당하는 XML 코드의 레이아웃으로 구분되어 개발될 수 있음
  • JAVA 코드의 개발자 역할과 XML 코드 기반의 화면 설계의 레이아웃 디자이너의 역할이 분담되어 개발될 수 있음
  • 앱의 실행 코드는 JAVA를 통해 프로그래밍되고, 앱의 각 컴포넌트들(이미지,버튼 등)은 XML로 작성되므로 개발 난이도를 낮출 수 있음
  • 레이아웃 코드가 직관적이며 수정 및 관리가 매우 용이함
  • 역할의 분할은 상황과 조건에 따라 레이아웃을 변경하거나 텍스트를 쉽게 변경할 수 있음

 

4. 안드로이드 앱의 동작 원리

1) 앱의 실행 과정

실행하기 위한 과정

  • 안드로이드 앱은 JAVA 언어를 이용하여 작성됨
  • 개발자가 작성한 JAVA코드는 JAVA 컴파일러에 의해 JAVA 바이트 코드로 컴파일됨
  • JAVA 환경에서는 JAVA 바이트 코드를 JAVA 가상머신(virtual machine)을 통해 실행하지만 안드로이드는 ART/Dalvik이라고 하는 별도의 가상머신에서 JAVA 바이트 코드를 실행함

 

 

4. 안드로이드 앱의 동작 원리

1. 앱의 실행 과정

안드로이드 프로젝트 실행 과정

  • 배포 및 설치를 위한 .apk 파일의 생성은 AAPT(Android Asset Packaging Tool)라는 개발도구를 이용하고, 이 과정을  패키징(packaging)이라고 함 
  • 패키징 과정이 끝나 만들어진 .apk 파일을 플랫폼에 설치하면 런타임에서 실행 될 수 있음

2. 앱의 배포 과정

배포하는 과정

  • 안드로이드 앱은 .apk 파일 확장자로 패키징되어 배포됨
  • 안드로이드 프로젝트에 대한 코드 컴파일 작업이 수행되면, JAVA 프로그램의 .class 파일이 생성되고, .class 파일을 이용하여 안드로이드 실행환경(Dalvik/ART)에 적합한 ,dex 파일이 생성됨
  • 이후 서명 Key를 이용하여 .apk 파일에 서명 작업을 하여 .apk 파일이 타인에 의해서 위변조되는 것을 방지함
  • 서명 Key는 디버그 목적으로 앱을 빌드 할 때 사용하는 Debug Key와 배포 목적으로 빌드 할 때 사용하는 Release Key로 구분됨
  • 이러한 서명 작업에서 사용한 키 값은 안드로이드 앱의 업데이트에서 개발자의 식별에 사용됨 
  • 마지막으로 다양한 앱을 공유하거나 거래할 수 있는 마켓인 Google Play에 업로드를 수행함

 

 

정리하기

  • XML : XML 은 마크업 언어의 일종으로, 문서를 사람과 기계 모두가 읽을 수 있는 형식으로 부호화하는 규칙의 집합을 정의함
  • 레이아웃 : 안드로이드 화면출력 및 화면배치를 의미하며, 출력의 양식이나 양식의 설계 등을 모두 레이아웃이라는 말로 사용함
  • 런타임 : 컴퓨터 프로그램이 실행되고 있는 동안의 동작을 말함
  • Dalvik : JIT(Justln Time)방식의 컴파일 환경을 기반으로 안드로이드 스마트폰의 가상머신 
  • ART(Android RunTime) : 앱을 설치하기 전에 컴파일을 끝내고 앱을 실행하는 안드로이드 스마트폰의 가상머신

 

+ Recent posts