트위터 클론코딩 공부한 내용

dongmin·2023년 10월 16일
0

Firebase?

Firebase는 데이터베이스였는데 구글이 인수하고 확장함으로써 웹에서 백엔드 기능 서비스를 제공하고 있다. 사용하는 경우는 Firebase는 실제 프로젝트에 사용하기보다 아이디어가 있어서 프로젝트를 테스트 해보고 싶을 때 사용하기 적절한 서비스이다.

env?

env파일은 git에 코드를 올릴때 공개하고 싶지 않은 데이터를 저장해두는 파일이다.

fbase.js

import { initializeApp } from "firebase/app";
import "firebase/auth"
import { getAuth } from "firebase/auth";
const firebaseConfig = {
    apiKey: process.env.REACT_APP_API_KEY,
    authDomain: process.env.REACT_APP_AUTH_DOMAIN,
    projectId: process.env.REACT_APP_PROJECT_ID,
    storageBucket: process.env.REACT_APP_STORAGE_BUCKET,
    messagingSenderId: process.env.REACT_APP_MESSAGING_SENDER_ID,
    appId: process.env.REACT_APP_APP_ID
  };

const app = initializeApp(firebaseConfig);
export const authService = getAuth();

이 코드에서 fiarbaseConfig 부분을 보면 Key, Id와 같이 공개적으로 올리기에 민감한 데이터들이 있는데 이런 데이터들을 만약 Key, Id 값 그대로 작성하게 된다면 git에 코드를 올렸을 때 git에 Key, Id 같은 정보들이 그대로 공개될 것이다.

.env

REACT_APP_API_KEY=AIzaSyCPBm0zMfslT4Gl7rMkPm8WXPyiox-vJRo
REACT_APP_AUTH_DOMAIN=nwtitter.firebaseapp.com
REACT_APP_PROJECT_ID=nwtitter
REACT_APP_STORAGE_BUCKET=nwtitter.appspot.com
REACT_APP_MESSAGING_SENDER_ID=860508248363
REACT_APP_APP_ID=1:860508248363:web:0baebcc362534a468c4d6e

이와 같이 env파일을 작성해두면 js파일에서 process.env.변수명으로 호출하여 사용할 수있다.

.gitignore

# dependencies
/node_modules
/.pnp
.pnp.js

# testing
/coverage

# production
/build

# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*
.env

gitignore파일은 git에 프로젝트를 올릴 때 제외시키고 싶은 요소들을 작성하는 파일이다.
위와 같이 .env를 gitignore파일에 작성해주면 git에 코드를 올릴때 env파일을 제외하고 프로젝트를 push하게 된다.

따라서 민감한 데이터를 env파일 안에 작성해줌으로써 정보를 지켜줄 수 있는 것이다.
하지만, 결국에는 env파일에 있던 데이터가 페이지가 로드될 때 넘어가는 것이기 때문에 이 방법이 보안을 위한 방법이라기 보다는 git에 코드를 올릴 때에만 정보를 가려주는 용도이다.

데이터가 두번씩 호출되는 현상


위 이미지는 firestore를 통해서 데이터를 가져오는 과정 중에 I'm still hungry와 I'm always hungry 두 가지 데이터가 각각 두 번씩 실행되는 현상이 발생한 것이다.
이 문제는 리액트 프로젝트의 index.js파일에서 strictmode기능 때문인데 stricemode는 개발환경에서만 side effect를 줄이기 위해서 두 번씩 실행시키는 것이다.

import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './components/App';


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

그러므로 React.StrictMode부분을 제거해주면 해결된다.

해결된 모습

profile
아이스박스

0개의 댓글