[ํฌํธํด๋ฆฌ์ค ์ ์ ๊ณผ์ ] ํ๊ฒฝ ์ค์ (React์ TypeScript๋ฅผ ์ฌ์ฉํ๋ ์ด์ )
๋จผ์ , ๋๋ React, TypeScript๋ฅผ ๊ธฐ๋ฐ์ผ๋ก CSS ์คํ์ผ๋ง์ Styled-Component๋ฅผ ์ฐ๊ณ , ๊ฒ์ํ ๊ธฐ๋ฅ์ ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ Firebase๋ฅผ ์ฌ์ฉํ๋ค.
ํ๋ก ํธ์๋ ๊ฐ๋ฐ ๊ณผ์ ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํด๋ดค๋ React๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ํธํด์๋ ์์ง๋ง, ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ๋ค.
- ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ์ฉ์ดํ๋ค.
- ์ปดํฌ๋ํธ์ ๊ธฐ๋ฅ๊ณผ ์ญํ ์ ๊ตฌ๋ถํด์ ์ ์ง๋ณด์์ ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ๊ณ , ๋ฐ๋ณต ์ฌ์ฉ์ด ํ์ํ ๊ฒฝ์ฐ ๋ถ๋ฆฌํด์ ์ ์ฅํด๋๊ณ ๋ค์ ์ฌ์ฉํ ์ ์๋ค.
- Virtual DOM์ ์ด์ฉํด์ ์ฑ๋ฅ ํฅ์์ด ๊ฐ๋ฅํ๋ค.
- Virtual DOM์ ์ค์ DOM์ ๋ณต์ฌ๋ณธ์ผ๋ก, ๊ฐ๋ฐ์๊ฐ ๋ณํ๋ฅผ ์ฃผ๊ณ ์ถ์ ๋ถ๋ถ๋ง Virtual DOM์ ๋ณ๊ฒฝํ ๋ค์ ์ค์ DOM๊ณผ ๋น๊ตํด์ ๋ณํ๊ฐ ์ผ์ด๋ ๋ถ๋ถ ์ฆ, ์ค์ DOM๊ณผ Virtual DOM์ ์ฐจ์ด์ ๋ง DOM์ ๋ฐ์ํ ์ ์๋ค.
- ๋ง์ฝ Virtual DOM์ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ, ์ ์ ์ ์ธํฐ๋์ ์ ๋ฐ๋ผ ์ด๋ค ์ํ ๋ณํ๊ฐ ๋ฐ์ํ ๋๋ง๋ค ๋ ํฐ ํธ๋ฆฌ ์ฌ์์ฑ, ์์์ ์คํ์ผ ๊ณ์ฐ, ํจ์ธํ ๋ฑ์ ๋ค์ ํด์ฃผ์ด์ผ ํ๊ณ , ์ํ ๋ณํ๊ฐ ๋น๋ฒํ๊ฒ ๋ฐ์ํ๋ฉด ์์คํ ์ด ์ํํด์ผ ํ๋ ์ฐ์ฐ์ด ๋งค์ฐ ๋ง์์ง๊ธฐ ๋๋ฌธ์ ๋นํจ์จ์ ์ผ ์ ์๋ค.
- ๊ฑฐ๋ํ ์ปค๋ฎค๋ํฐ์ ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์
- JSX ๋ฌธ๋ฒ ์ง์
- JSX๋ JavaScript + XML์ ์๋ฏธํ๊ณ , ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ฅ ๋ฌธ๋ฒ์ด๋ค.
- ์๋์ ๊ฐ์ด return()๋ฌธ์ ์ด์ฉํด์ HTML์ ์ปดํฌ๋ํธํํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
- ์ดํ Babel์์ ํด๋น ์ฝ๋๋ฅผ ์ปดํ์ผํ๋ ๊ณผ์ ์์ ๋ฌธ๋ฒ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ ์ ์๋ค.
import React from "react";
const App = () => {
return (
<div className="App">
Hello
</div>
);
};
export default App;
๋์ ํ์ ์ธ์ด์ธ JavaScript์ ์ ์ ํ์ ์ ์ถ๊ฐํ TypeScript๋ ๋ค์ ์ด์ ๋ก ์ฌ์ฉํ๋ค.
- ์ด๋ฆ ๊ทธ๋๋ก, Type ์ฆ, ์๋ฃํ์ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ณ์์ ๊ฐ์ด ๋ค์ด๊ฐ ๋ ์ด๋ค ํ์ ์ ๊ฐ์ด ๋ค์ด๊ฐ์ง ์ ์ธํด์ฃผ๋๋ฐ, ์ปดํ์ผ ๊ณผ์ ์์ ๋ง์ง ์์ ํ์ ์ด ๋ค์ด๊ฐ๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ์๋ฌ๋ฅผ ๋ฐฉ์งํ๊ณ ์์ฝ๊ฒ ๋๋ฒ๊น ํ ์ ์๋ค.
- ์ง๊ด์ ์ธ ์ฝ๋
- Javascript๋ก ์ฝ๋๋ฅผ ์์ฑํ ๋, ๊ฐ์ฒด์ ํ๋๋ ํจ์์ ๋งค๊ฐ๋ณ์๋ก ๋ค์ด์ค๋ ๊ฐ์ด ๋ฌด์์ธ์ง ์๊ธฐ ์ํด ์ฌ๋ฌ ํ์ผ์ ์ดํด์ผ ํ์ง๋ง TypeScript๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋ณ์์ ์ด๋ฆ๋ฟ๋ง ์๋๋ผ ๊ทธ ๋ฐ์ดํฐ์ ์๋ฃํ๊น์ง ์ ์ ์๊ฒ ๋๋ค.
- ๊ทธ๋์ ์ฝ๋ ์์ฑ์ ์ฝ๊ณ ์ง๊ด์ ์ผ๋ก ํ ์ ์๋ค.
๋ฒ์ธ๋ก, JavaScript๋ ์ฝ๋๋ฅผ ํ ์ค ํ ์ค ํด์ํ๋ฉด์ ๋ฐ๋ก ์ฒ๋ฆฌํ๋ '์ธํฐํ๋ฆฌํฐ ์ธ์ด'์ด๊ณ , TypeScript๋ ์์ค ์ฝ๋ ์ ์ฒด๋ฅผ ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋ ๊ธฐ๊ณ์ด๋ก ์ปดํ์ผ ํ ๋ค์ ์คํํ๋ '์ปดํ์ผ ์ธ์ด'์ด๋ค.
์ปดํ์ผ ์ธ์ด๋ ์์ค์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๋ ๋ณํ ๊ณผ์ ์ด ๋ฐ๋ก ํ์ํ๊ธฐ ๋๋ฌธ์ ์ธํฐํ๋ฆฌํฐ ์ธ์ด๋ณด๋ค๋ ๋๋ฆฌ์ง๋ง, ๋ฐํ์ ์ํฉ์์๋ ๋ชจ๋ ์์ค์ฝ๋๊ฐ ๋ณํ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด๊ฒ ์คํํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
React+TypeScript ํ๋ก์ ํธ ์์ฑ
npx create-react-app project-name --template typescript
- npx๋ ์๋ฐ์คํฌ๋ฆฝํธ ํจํค์ง ๊ด๋ฆฌ ๋ชจ๋์ธ npm(node package module)์ ์ผ์ข ์ ์คํ ๋๊ตฌ์ด๋ค.
- npm๊ณผ ๋ฌ๋ฆฌ ๋ชจ๋์ ๋ก์ปฌ์ ์ ์ฅํ์ง ์๊ณ ๋งค๋ฒ ์ต์ ๋ฒ์ ์ ํ์ผ๋ง์ ๋ถ๋ฌ์์ ์์๋ก ๋ถ๋ฌ์์ ์คํํ ๋ค์ ๋ค์ ๊ทธ ํ์ผ์ด ์์ด์ง๋ ๋ฐฉ์์ผ๋ก ๋ชจ๋์ด ๋์๊ฐ๊ณ ์๋ค.
- CRA์ ๊ฐ์ ๋ชจ๋์ ๋ณ๊ฒฝ์ด ์ฆ์ ๋ณด์ผ๋ฌํ๋ ์ดํธ์ ๊ฒฝ์ฐ ๋ฒ๊ทธ๋ ๊ธฐ๋ฅ ์ ๋ฐ์ดํธ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ์ต์ ๋ฒ์ ์ ์ ์งํด์ฃผ๋ ๊ฒ์ด ์ข์๋ฐ, ์ด๋ฅผ ์ํด npx๋ฅผ ์ด์ฉํด์ ์คํํด์ฃผ๋ ๊ฒ์ด ์ข๋ค.
Styled-Components ์ค์น
// styled-components ์ค์น
npm i styled-components
// typescript ํ์
์ ์ ๋ฐ๊ธฐ
npm i -D @types/styled-components
npm i ์ ๋ํ ์์ธํ ์ค๋ช ์ ์ด ๊ธ์ ์ฐธ๊ณ ํ์๋ฉด ์ข์ต๋๋ค.
Global Style ์ ์ฉ
import { createGlobalStyle } from 'styled-components';
export const GlobalStyle = createGlobalStyle`
*{
margin:0;
padding:0;
box-sizing:border-box;
}
`
import { GlobalStyle } from './GlobalStyle';
const root = ReactDOM.createRoot(
document.getElementById('root') as HTMLElement
);
root.render(
<>
<GlobalStyle/>
<App/>
</>
);
src ํด๋ ๋ฐ์ GlobalStyle.tsx ํ์ผ์ ์์ฑํด์ ๋ชจ๋ ์ปดํฌ๋ํธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฉํ Global Style์ ์ ์ธํด์คฌ๋ค.
Firebase + React + TypeScript ์ฐ๋
https://velog.io/@song961003/react์-firebase-์ฐ๋ํ๊ธฐ-with-Typescriptใ
firebase์ react ํธ์คํ ํ๊ธฐ with firestore
๋ฆฌ์กํธ์ ํ์ด์ด๋ฒ ์ด์ค๋ฅผ ๊ฐ์ด ์ฌ์ฉํ์!!
velog.io
์ ๊ธ์ ๋ฐ๋ผํ๋ฉด์ ์ฐ๋์ ์๋ฃํ๋ค!
ํ์ด์ด๋ฒ ์ด์ค ํ๋ก์ ํธ ์์ฑ ๊ณผ์ ์์ ๋ฐ๊ธ๋ฐ์ API_KEY, ๊ถํ ์์ด๋ ๋ฑ์ .env ํ์ผ์ ๋ง๋ค์ด์ ์ ์ฅํด๋๊ณ gitignore ํ์ผ์ ํฌํจํด๋๋ค.