Repository: f-lab-edu/bs_memory_project
Pull request #9: Feature/#8/project structure
Author: login: EUNSUN23
Created: 2025-02-28T15:58:45Z | Merged: 2025-03-03T11:24:27Z

# 🎋 작업중인 브랜치 

Feature/#8/project structure

<br/>

# 💡 작업 내용 
> 풀 리퀘스트에 대한 간략한 설명을 여기에 입력해주세요

### 1. path alias 적용
### 2.기본 route 생성 
### 3.  tailwindcss theme 추가, 반응형 컨테이너 적용 
### 4. Home 퍼블리싱

<br/>

# 🔑  변경된 사항 
> 변경된 파일과 그에 대한 간략한 설명을 나열해주세요. 

## 1. path alias 적용 
<br/>

f8bdd250e15f576100038bac3b955cb07ef26369
- 파일 경로 alias 적용을 위해 필요한 패키지를 설치하고 tsconfig 파일을 수정했습니다. 


<br/>

## 2. 기본 route 생성

<br/>

fdf640d7c51144ffcacc29ef54d26cc80f29b0b8, 7341454e45833d58d5bc38cb82498a29790228d4
- react-router를 설치하고, 기본 페이지 route('/', '/drilling', '/exam')을 추가했습니다. 
- interface 대신 type 사용시 경고를 띄우는 eslint rule을 off했습니다.

<br/>

## 3.  tailwindcss theme 추가, 반응형 컨테이너 적용 

<br/>

6cbe29072a81787e4815d0cf2836aae069a04cc2
- tailwind.config.ts 파일에 색상, 반응형 theme을 추가했습니다.
- 프로젝트의 루트 레이아웃에 반응형 컨테이너를 적용했습니다. 

<br/>


## 4. Home 퍼블리싱

<br/>

950f5c747161f9c1b4d3d3967eee5aea43d7b853,
8bb3c45d4430735d9a1aa3ba2bcf3024605a2a49
- 아이콘 사용을 위해 react-icons/all-files 패키지를 설치했습니다.
- 애플리케이션 메인 화면을 퍼블리싱했습니다. 
<img width="1485" alt="image" src="https://github.com/user-attachments/assets/921ef096-0019-42ed-a2ff-2113f5f33980" />

<br/>

# ✏️  비고 (선택)
> 다른 리뷰어 또는 팀원에게 전달하고 싶은 추가 정보나 요청사항을 여기에 추가해주세요.


<br/>

# ✅  Todo 목록 (선택)
> Home에서 ui 혹은 feature 컴포넌트 분리



Diff:
diff --git a/.gitignore b/.gitignore
index 421a8cd..ee7c806 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,5 +23,5 @@ dist-ssr
 *.sln
 *.sw?
 /.pnp.cjs
-/.env
+/.env*
 /supabase/
diff --git a/package.json b/package.json
index cbde465..e723500 100644
--- a/package.json
+++ b/package.json
@@ -20,6 +20,7 @@
     ]
   },
   "dependencies": {
+    "@react-icons/all-files": "^4.1.0",
     "@supabase/supabase-js": "^2.49.1",
     "@tailwindcss/forms": "^0.5.10",
     "autoprefixer": "^10.4.20",
@@ -28,6 +29,7 @@
     "postcss": "^8.5.3",
     "react": "^19.0.0",
     "react-dom": "^19.0.0",
+    "react-router-dom": "^7.2.0",
     "tailwind-merge": "2.6.0",
     "tailwindcss": "3"
   },
@@ -58,6 +60,7 @@
     "typescript": "~5.7.2",
     "typescript-eslint": "^8.22.0",
     "vite": "^6.1.0",
+    "vite-tsconfig-paths": "^5.1.4",
     "vitest": "^3.0.6"
   }
 }
diff --git a/src/RootComponent.tsx b/src/RootComponent.tsx
new file mode 100644
index 0000000..ee03d5c
--- /dev/null
+++ b/src/RootComponent.tsx
@@ -0,0 +1,11 @@
+import { Outlet } from 'react-router-dom';
+
+function RootComponent() {
+  return (
+    <div className='responsiveContainer'>
+      <Outlet />
+    </div>
+  );
+}
+
+export default RootComponent;
diff --git a/src/components/Loader.tsx b/src/components/Loader.tsx
new file mode 100644
index 0000000..a953f79
--- /dev/null
+++ b/src/components/Loader.tsx
@@ -0,0 +1,5 @@
+function Loader() {
+  return <div className='loader'></div>;
+}
+
+export default Loader;
diff --git a/src/index.css b/src/index.css
index b5c61c9..5d2fe76 100644
--- a/src/index.css
+++ b/src/index.css
@@ -1,3 +1,32 @@
 @tailwind base;
 @tailwind components;
 @tailwind utilities;
+
+/* HTML: <div class="loader"></div> */
+.loader {
+    width: 15px;
+    aspect-ratio: 1;
+    border-radius: 50%;
+    animation: l5 1s infinite linear alternate;
+}
+@keyframes l5 {
+    0%  {box-shadow: 20px 0 #000, -20px 0 #0002;background: #000 }
+    33% {box-shadow: 20px 0 #000, -20px 0 #0002;background: #0002}
+    66% {box-shadow: 20px 0 #0002,-20px 0 #000; background: #0002}
+    100%{box-shadow: 20px 0 #0002,-20px 0 #000; background: #000 }
+}
+
+::-webkit-scrollbar {
+    width: 8px;  /* 스크롤바의 너비 */
+}
+
+::-webkit-scrollbar-thumb {
+    height: 30%; /* 스크롤바의 길이 */
+    background: #242D35; /* 스크롤바의 색상 */
+
+    border-radius: 10px;
+}
+
+::-webkit-scrollbar-track {
+    background: rgba(33, 122, 244, .1);  /*스크롤바 뒷 배경 색상*/
+}
\ No newline at end of file
diff --git a/src/main.tsx b/src/main.tsx
index 2239905..12e8ddc 100644
--- a/src/main.tsx
+++ b/src/main.tsx
@@ -1,10 +1,34 @@
 import { StrictMode } from 'react';
 import { createRoot } from 'react-dom/client';
 import './index.css';
-import App from './App.tsx';
+import { createBrowserRouter, RouterProvider } from 'react-router-dom';
+import Home from '@pages/home';
+import Drilling from '@pages/drilling';
+import RootComponent from './RootComponent.tsx';
+import Exam from '@pages/exam';
+
+const router = createBrowserRouter([
+  {
+    element: <RootComponent />,
+    children: [
+      {
+        path: '/',
+        element: <Home />,
+      },
+      {
+        path: '/drilling',
+        element: <Drilling />,
+      },
+      {
+        path: '/exam',
+        element: <Exam />,
+      },
+    ],
+  },
+]);
 
 createRoot(document.getElementById('root')!).render(
   <StrictMode>
-    <App />
+    <RouterProvider router={router} />
   </StrictMode>,
 );
diff --git a/src/pages/drilling/index.tsx b/src/pages/drilling/index.tsx
new file mode 100644
index 0000000..c481dcb
--- /dev/null
+++ b/src/pages/drilling/index.tsx
@@ -0,0 +1,5 @@
+function Drilling() {
+  return <div>drilling</div>;
+}
+
+export default Drilling;
diff --git a/src/pages/exam/index.tsx b/src/pages/exam/index.tsx
new file mode 100644
index 0000000..339f982
--- /dev/null
+++ b/src/pages/exam/index.tsx
@@ -0,0 +1,5 @@
+function Exam() {
+  return <div>Exam</div>;
+}
+
+export default Exam;
diff --git a/src/pages/home/index.tsx b/src/pages/home/index.tsx
new file mode 100644
index 0000000..9670465
--- /dev/null
+++ b/src/pages/home/index.tsx
@@ -0,0 +1,76 @@
+import { Link } from 'react-router-dom';
+
+function Home() {
+  return (
+    <div className='flex justify-center'>
+      <div className='m-2 flex max-w-[600px] grow flex-col items-center justify-center'>
+        <h1 className='flex h-40 items-center text-5xl'>NAVI 성경 암송</h1>
+        {/* start 분리1 - 검색 input */}
+        <div className='w-[360px] mobile:w-full'>
+          <input
+            type='text'
+            value={''}
+            className='w-full rounded-md'
+            id='search'
+          />
+          <label htmlFor='search' className='sr-only'>
+            장절/제목 검색
+          </label>
+        </div>
+        {/* end 분리1 - 검색 input */}
+        {/* start 분리2 - 시리즈 그룹 */}
+        <ul
+          role='list'
+          className='my-8 w-[370px] space-y-3 mobile:my-4 mobile:w-full'>
+          <li className='rounded-2xl bg-yellow-400 py-2.5 text-center text-[26px]'>
+            <button className='w-full'>73구절</button>
+          </li>
+          <ul role='list'>
+            <li className='rounded-2xl bg-yellow-200 py-2.5 text-center text-[26px]'>
+              <button className='w-full'>5동행</button>
+            </li>
+            <ul
+              role='list'
+              className='max-h-[150px] divide-y divide-gray-200 overflow-y-auto px-4 py-1.5'>
+              <li className='flex items-center justify-around space-x-2 py-1.5'>
+                <input
+                  type='checkbox'
+                  id='check'
+                  className='checked:ring-0 focus-within:ring-0'
+                />
+                <label
+                  htmlFor='check'
+                  className='max-w-[90%] truncate text-lg font-medium mobile:text-base'>
+                  왜 QT를 가져야 하는가? - 하나님의 명령 이사야 30:18 dsfsdfs
+                </label>
+              </li>
+            </ul>
+          </ul>
+          <li className='rounded-2xl bg-yellow-400 py-2.5 text-center text-[26px]'>
+            242
+          </li>
+          <li className='rounded-2xl bg-yellow-400 py-2.5 text-center text-[26px]'>
+            180
+          </li>
+        </ul>
+        {/* end 분리2 - 시리즈 그룹 */}
+        {/* start 분리3 - Nav */}
+        <div className='my-2 flex w-full items-center justify-center space-x-4'>
+          <Link
+            to={`/drilling`}
+            className='w-[200px] rounded-3xl bg-secondary px-4 py-2.5 text-center text-2xl text-white mobile:w-[180px] mobile:text-base'>
+            암송하기
+          </Link>
+          <Link
+            to={`/exam`}
+            className='w-[200px] rounded-3xl bg-secondary px-4 py-2.5 text-center text-2xl text-white mobile:w-[180px] mobile:text-base'>
+            시험보기
+          </Link>
+        </div>
+        {/* end 분리3 - Nav */}
+      </div>
+    </div>
+  );
+}
+
+export default Home;
diff --git a/tailwind.config.js b/tailwind.config.js
index 53ac38e..6588840 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -1,12 +1,51 @@
 import { default as nesting } from 'tailwindcss/nesting';
 import { default as forms } from '@tailwindcss/forms';
 import { default as autoprefixer } from 'autoprefixer';
+import plugin from 'tailwindcss/plugin';
 
 /** @type {import('tailwindcss').Config} */
 export default {
   content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'],
   theme: {
-    extend: {},
+    extend: {
+      colors: {
+        primary: '#DEB841',
+        secondary: '#37323E',
+        danger: '#D22E1D',
+        disabled: '#aaaaaa',
+        greyBlue: '#4F5B67',
+        greyDarkblue: '#242D35',
+      },
+      screens: {
+        mobile: { max: '767px' },
+        tablet: '768px',
+        pc: '1280px',
+      },
+    },
   },
-  plugins: [nesting, autoprefixer, forms],
+  plugins: [
+    nesting,
+    autoprefixer,
+    forms,
+    plugin(function ({ addBase, theme }) {
+      const mobile = theme('screens.mobile', { max: 'max' });
+      const tablet = theme('screens.tablet', {});
+      const pc = theme('screens.pc', {});
+
+      addBase({
+        '.responsiveContainer': {
+          [`@media (max-width: ${mobile.max})`]: {
+            maxWidth: '340px',
+          },
+          [`@media (min-width: ${tablet})`]: {
+            maxWidth: '750px',
+          },
+          [`@media (min-width:${pc})`]: {
+            maxWidth: '1200px',
+          },
+          margin: '0 auto',
+        },
+      });
+    }),
+  ],
 };
diff --git a/tsconfig.app.json b/tsconfig.app.json
index 55abf71..bbee96c 100644
--- a/tsconfig.app.json
+++ b/tsconfig.app.json
@@ -18,7 +18,13 @@
     "noUnusedLocals": true,
     "noUnusedParameters": true,
     "noFallthroughCasesInSwitch": true,
-    "noUncheckedSideEffectImports": true
+    "noUncheckedSideEffectImports": true,
+    "baseUrl": "./",
+    "paths": {
+      "@components/*": ["src/components/*"],
+      "@utils/*": ["src/utils/*"],
+      "@pages/*": ["src/pages/*"]
+    }
   },
   "include": ["src"]
 }
diff --git a/vite.config.ts b/vite.config.ts
index 62117f7..9c82a66 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,9 +1,10 @@
 import { defineConfig as testConfig } from 'vitest/config';
 import { defineConfig } from 'vite';
 import react from '@vitejs/plugin-react';
+import tsconfigPaths from 'vite-tsconfig-paths';
 
 const config = defineConfig({
-  plugins: [react()],
+  plugins: [react(), tsconfigPaths()],
 });
 
 // Vitest configuration
diff --git a/yarn.lock b/yarn.lock
index 9d615d4..7b3c858 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -517,6 +517,11 @@
   resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
   integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
 
+"@react-icons/all-files@^4.1.0":
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/@react-icons/all-files/-/all-files-4.1.0.tgz#477284873a0821928224b6fc84c62d2534d6650b"
+  integrity sha512-hxBI2UOuVaI3O/BhQfhtb4kcGn9ft12RWAFVMUeNjqqhLsHvFtzIkFaptBJpFDANTKoDfdVoHTKZDlwKCACbMQ==
+
 "@rollup/rollup-android-arm-eabi@4.34.8":
   version "4.34.8"
   resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz#731df27dfdb77189547bcef96ada7bf166bbb2fb"
@@ -753,6 +758,11 @@
   dependencies:
     "@babel/types" "^7.20.7"
 
+"@types/cookie@^0.6.0":
+  version "0.6.0"
+  resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.6.0.tgz#eac397f28bf1d6ae0ae081363eca2f425bedf0d5"
+  integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==
+
 "@types/eslint-plugin-jsx-a11y@^6.10.0":
   version "6.10.0"
   resolved "https://registry.yarnpkg.com/@types/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.0.tgz#519d411f854e3c639fd0b90d74f978554b93d38d"
@@ -1418,6 +1428,11 @@ convert-source-map@^2.0.0:
   resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
   integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
 
+cookie@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/cookie/-/cookie-1.0.2.tgz#27360701532116bd3f1f9416929d176afe1e4610"
+  integrity sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==
+
 cross-spawn@^7.0.0, cross-spawn@^7.0.3, cross-spawn@^7.0.6:
   version "7.0.6"
   resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
@@ -1495,7 +1510,7 @@ data-view-byte-offset@^1.0.1:
     es-errors "^1.3.0"
     is-data-view "^1.0.1"
 
-debug@4, debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0:
+debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0:
   version "4.4.0"
   resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a"
   integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
@@ -2207,6 +2222,11 @@ globalthis@^1.0.4:
     define-properties "^1.2.1"
     gopd "^1.0.1"
 
+globrex@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098"
+  integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==
+
 gopd@^1.0.1, gopd@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
@@ -3268,6 +3288,23 @@ react-refresh@^0.14.2:
   resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9"
   integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==
 
+react-router-dom@^7.2.0:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-7.2.0.tgz#b8a7eae7827cd5207cf91e89807d01217737797d"
+  integrity sha512-cU7lTxETGtQRQbafJubvZKHEn5izNABxZhBY0Jlzdv0gqQhCPQt2J8aN5ZPjS6mQOXn5NnirWNh+FpE8TTYN0Q==
+  dependencies:
+    react-router "7.2.0"
+
+react-router@7.2.0:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/react-router/-/react-router-7.2.0.tgz#a8f2729d39f634a7a870d14dd906a1b406f39d6f"
+  integrity sha512-fXyqzPgCPZbqhrk7k3hPcCpYIlQ2ugIXDboHUzhJISFVy2DEPsmHgN588MyGmkIOv3jDgNfUE3kJi83L28s/LQ==
+  dependencies:
+    "@types/cookie" "^0.6.0"
+    cookie "^1.0.1"
+    set-cookie-parser "^2.6.0"
+    turbo-stream "2.4.0"
+
 react@^19.0.0:
   version "19.0.0"
   resolved "https://registry.yarnpkg.com/react/-/react-19.0.0.tgz#6e1969251b9f108870aa4bff37a0ce9ddfaaabdd"
@@ -3474,6 +3511,11 @@ semver@^7.6.0:
   resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f"
   integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==
 
+set-cookie-parser@^2.6.0:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz#3016f150072202dfbe90fadee053573cc89d2943"
+  integrity sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==
+
 set-function-length@^1.2.2:
   version "1.2.2"
   resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"
@@ -3917,6 +3959,16 @@ ts-interface-checker@^0.1.9:
   resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
   integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
 
+tsconfck@^3.0.3:
+  version "3.1.5"
+  resolved "https://registry.yarnpkg.com/tsconfck/-/tsconfck-3.1.5.tgz#2f07f9be6576825e7a77470a5304ce06c7746e61"
+  integrity sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==
+
+turbo-stream@2.4.0:
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/turbo-stream/-/turbo-stream-2.4.0.tgz#1e4fca6725e90fa14ac4adb782f2d3759a5695f0"
+  integrity sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==
+
 type-check@^0.4.0, type-check@~0.4.0:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
@@ -4029,6 +4081,15 @@ vite-node@3.0.6:
     pathe "^2.0.3"
     vite "^5.0.0 || ^6.0.0"
 
+vite-tsconfig-paths@^5.1.4:
+  version "5.1.4"
+  resolved "https://registry.yarnpkg.com/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.4.tgz#d9a71106a7ff2c1c840c6f1708042f76a9212ed4"
+  integrity sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==
+  dependencies:
+    debug "^4.1.1"
+    globrex "^0.1.2"
+    tsconfck "^3.0.3"
+
 "vite@^5.0.0 || ^6.0.0":
   version "6.1.1"
   resolved "https://registry.yarnpkg.com/vite/-/vite-6.1.1.tgz#c1f221749298357b9230782a04483e60ad83c8db"


Reviews:
user: login: f-lab-ash
body: 👍 
state: APPROVED
author_association: NONE
submitted_at: 2025-03-03T11:11:20Z
user: login: f-lab-ash
state: APPROVED
author_association: NONE
submitted_at: 2025-03-03T11:11:59Z
user: login: EUNSUN23
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-03-03T11:14:48Z
user: login: EUNSUN23
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-03-03T11:20:37Z

Review comments:
diff_hunk: @@ -23,3 +23,5 @@ dist-ssr
 *.sln
 *.sw?
 /.pnp.cjs
+/.env
+/.env.*
path: .gitignore
user: login: f-lab-ash
body: 요건 27번째라인만 있어도 될 것 같아요
created_at: 2025-03-03T11:11:55Z
author_association: NONE
diff_hunk: @@ -23,3 +23,5 @@ dist-ssr
 *.sln
 *.sw?
 /.pnp.cjs
+/.env
+/.env.*
path: .gitignore
user: login: EUNSUN23
body: 넵!
created_at: 2025-03-03T11:14:48Z
author_association: COLLABORATOR
diff_hunk: @@ -23,3 +23,5 @@ dist-ssr
 *.sln
 *.sw?
 /.pnp.cjs
+/.env
+/.env.*
path: .gitignore
user: login: EUNSUN23
body: ebee76e00451427607af32b85aab426a100f38c0 -> .env*로 통일했습니다.
created_at: 2025-03-03T11:20:37Z
author_association: COLLABORATOR

PR comments:
user: login: EUNSUN23
created_at: 2025-03-03T10:56:02Z
body: @f-lab-ash 58103e9ff9052b5382215c23bfc605a0a05de608, 145da2934a2a129c060e8b67ce3a8639f0eae9aa -> env파일 gitignore에 추가하고, index.tsx에서 컴포넌트 직접 export하도록 수정했습니다
author_association: COLLABORATOR
user: login: sonarqubecloud[bot]
created_at: 2025-03-03T11:24:31Z
body: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=f-lab-edu_bs_memory_project&pullRequest=9) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [3 New issues](https://sonarcloud.io/project/issues?id=f-lab-edu_bs_memory_project&pullRequest=9&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=f-lab-edu_bs_memory_project&pullRequest=9&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=f-lab-edu_bs_memory_project&pullRequest=9&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=f-lab-edu_bs_memory_project&pullRequest=9&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=f-lab-edu_bs_memory_project&pullRequest=9&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=f-lab-edu_bs_memory_project&pullRequest=9)


author_association: NONE