Skip to content

Latest commit

ย 

History

History
431 lines (322 loc) ยท 11.6 KB

File metadata and controls

431 lines (322 loc) ยท 11.6 KB

๐Ÿš€ PLAYIDEA WEB PAGE

Index

  1. ์‹œ์ž‘ํ•˜๊ธฐ
  2. ๊ธฐ์ˆ  ์Šคํƒ
  3. ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ๊ฐ€์ด๋“œ
  4. ํ˜‘์—… ๋ฐฉ๋ฒ•
  5. ์ฝ”๋“œ ์ปจ๋ฒค์…˜

1. ์‹œ์ž‘ํ•˜๊ธฐ

1. Clone

$ git clone https://github.com/PI304/PinTalk-Front.git
$ cd PinTalk-Front
$ pnpm install

2. Run

$ pnpm run dev

2. ๊ธฐ์ˆ  ์Šคํƒ



3. ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ๊ฐ€์ด๋“œ

โ”œโ”€โ”€ @types
โ”œโ”€โ”€ components
โ”‚ย ย  โ”œโ”€โ”€ layouts
โ”‚ย ย  โ””โ”€โ”€ pages
โ”‚ย ย    ย  โ””โ”€โ”€ main
โ”œโ”€โ”€ constants
โ”œโ”€โ”€ pages
โ”‚ย ย  โ”œโ”€โ”€ _app.tsx
โ”‚ย ย  โ”œโ”€โ”€ _document.tsx
โ”‚ย ย  โ”œโ”€โ”€ index.tsx
โ”‚ย ย  โ””โ”€โ”€ main.tsx
โ”œโ”€โ”€ public
โ”œโ”€โ”€ styles
โ”‚ย ย  โ”œโ”€โ”€ globals.css
โ”‚ย ย  โ”œโ”€โ”€ global.ts
โ”‚ย ย  โ””โ”€โ”€ index.ts
โ”œโ”€โ”€ next-env.d.ts
โ”œโ”€โ”€ next.config.js
โ”œโ”€โ”€ tsconfig.json
โ”œโ”€โ”€ tailwind.json
โ”œโ”€โ”€ README.md
โ””โ”€โ”€ package.json

1. @types ๋””๋ ‰ํ† ๋ฆฌ

  1. ๋ชจ๋“  type ์„ ์–ธ์€ ์ด๊ณณ์—์„œ ํ•ด์ฃผ์„ธ์š”.
  2. ํŒŒ์ผ ์ด๋ฆ„์€ *.d.ts ํ˜•์‹์„ ์ง€์ผœ์ฃผ์„ธ์š”.
  3. import๊ฐ€ ํ•„์š”ํ•œ ํƒ€์ž… ์„ ์–ธ ์‹œ์—๋Š” @types/index.d.ts ํŒŒ์ผ์— ์„ ์–ธํ•ด์ฃผ์„ธ์š”.

PLEASE DO NOT - ๋‹ค๋ฅธ ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ์—์„œ ํƒ€์ž… ์„ ์–ธ

2. components ๋””๋ ‰ํ† ๋ฆฌ

  1. components/layouts - ๋ ˆ์ด์•„์›ƒ ์ปดํฌ๋„ŒํŠธ
  2. components/pages - ๊ฐ page์˜ ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ ๋ฐ ํ•ด๋‹น page์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ
  3. components/... - ์ถ”ํ›„ ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. constants ๋””๋ ‰ํ† ๋ฆฌ

  1. ์ค‘์š”ํ•œ ์ƒ์ˆ˜๋Š” ์ด๊ณณ์—์„œ ๊ด€๋ฆฌํ•ด์ฃผ์„ธ์š”. (์˜ˆ: paths, seo...)
  2. ์ค‘์š”ํ•จ์˜ ๊ธฐ์ค€ (1๊ฐœ ์ด์ƒ ์ถฉ์กฑ ์‹œ ์ค‘์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จ)
    1. 2๋ฒˆ ์ด์ƒ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ (์žฌ์‚ฌ์šฉ)
    2. ์ถ”ํ›„ ๋…ผ์˜์— ์˜ํ•ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ (์ถ”์ ์šฉ์ด)
    3. ๊ธฐํƒ€ ์‚ฌ์œ ๋กœ ์ค‘์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ๊ฒฝ์šฐ

4. hooks ๋””๋ ‰ํ† ๋ฆฌ

5. modules ๋””๋ ‰ํ† ๋ฆฌ

6. pages ๋””๋ ‰ํ† ๋ฆฌ

๋ผ์šฐํ„ฐ ์„ค์ •์„ ์œ„ํ•œ Next.js ์˜ˆ์•ฝ ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค.

7. public ๋””๋ ‰ํ† ๋ฆฌ

์ด๋ฏธ์ง€ ๋“ฑ asset์€ public/assets ์— ์ €์žฅํ•ด์ฃผ์„ธ์š”.

์ฐธ๊ณ  - SVG๋Š” ํŒŒ์ผ๋กœ ์ €์žฅํ•˜์ง€ ์•Š๊ณ , styles/svgs.tsx์— ์ƒ์ˆ˜๋กœ ์ •์˜ํ•˜์—ฌ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

8. styles ๋””๋ ‰ํ† ๋ฆฌ

9. Named Export & Re-Export in Index.ts

๊ฐ ๋””๋ ‰ํ† ๋ฆฌ์—๋Š” index.ts๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

// components/shared/index.ts
export * from './ContactWidget';
export * from './Navigator';
export * from './SpaceBackground';

๋””๋ ‰ํ† ๋ฆฌ ๋‚ด๋ถ€์˜ ํŒŒ์ผ๋“ค์„ ํ•œ๊บผ๋ฒˆ์— ๋ชจ์•„ ๋‹ค์‹œ๊ธˆ Re-Export ํ•˜์—ฌ,
๋‹ค๋ฅธ ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ์—์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ๋””๋ ‰ํ† ๋ฆฌ๋ช…๋งŒ์œผ๋กœ Import ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.

// components/layouts/WithNavigatorLayout.tsx
import { Navigator, ContactWidget } from '../shared';

์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ๊ฐ Importํ•˜๋Š” ๊ฒƒ์— ๋น„ํ•˜์—ฌ Import ๋ฌธ์„ ์งง๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ ,
์ถ”ํ›„ ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ ์ด๋ฆ„์ด ๋ฐ”๋€Œ๋Š” ๊ฒฝ์šฐ์— ๋Œ€์‘ํ•˜๊ธฐ ์šฉ์ดํ•˜๋‹ค๋Š” ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

export * from './์ปดํฌ๋„ŒํŠธ๊ฒฝ๋กœ' ํ˜•์‹์œผ๋กœ ํŒŒ์ผ์„ Re-Export ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”,
์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ์—์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ Default Export๊ฐ€ ์•„๋‹Œ Named Export๋กœ ๋‚ด๋ณด๋‚ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ปดํฌ๋„ŒํŠธ๋Š” ํ•ญ์ƒ Named Export ํ˜•์‹์œผ๋กœ ๋‚ด๋ณด๋‚ด์ฃผ์‹œ๊ณ , ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์˜ index.ts์—์„œ ์œ„์™€ ๊ฐ™์ด Re-Export ํ•ด์ฃผ์„ธ์š”.

์•„๋ž˜๋Š” ์ž˜๋ชป๋œ ์˜ˆ์‹œ์™€ ์˜ฌ๋ฐ”๋ฅธ ์˜ˆ์‹œ์˜ ๋น„๊ต์ž…๋‹ˆ๋‹ค.

// ์ž˜๋ชป๋œ ์˜ˆ์‹œ (Default Export)
export default function Component() {
  return <></>;
}

// ์ž˜๋ชป๋œ ์˜ˆ์‹œ (Default Export)
const Component = () => {
  return <></>;
};

export default Component;

// ์ž˜๋ชป๋œ ์˜ˆ์‹œ (Named Export + ์ผ๋ฐ˜ ํ•จ์ˆ˜)
export function Component() {
  return <></>;
};
// ์˜ฌ๋ฐ”๋ฅธ ์˜ˆ์‹œ (Named Export + ํ™”์‚ดํ‘œ ํ•จ์ˆ˜)
export const Component = () => {
  return <></>;
};

4. ํ˜‘์—… ๋ฐฉ๋ฒ•

1. Branching Strategy

PR์„ ํ†ตํ•ด Feature ๋ธŒ๋žœ์น˜๋“ค์„ Develop์— ๋จธ์ง€ํ•˜๊ณ ,
์ตœ์ข… ๋ฐฐํฌํ•  ์‹œ๊ธฐ๊ฐ€ ๋˜๋ฉด Admin ๊ด€๋ฆฌ์ž๊ฐ€ Develop ๋ธŒ๋žœ์น˜๋ฅผ Production ๋ธŒ๋žœ์น˜์— ๋จธ์ง€ํ•˜์—ฌ ๋ฐฐํฌํ•˜๋Š” ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

2. ํ˜‘์—… ๊ณผ์ •

  1. ๋กœ์ปฌ์— Cloneํ•œ ๋ ˆํฌ์—์„œ Feature ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ฐœ๋ฐœ์ด ๋๋‚ฌ๋‹ค๋ฉด ๋‹ค์‹œ ํ•œ๋ฒˆ ์›๊ฒฉ ๋ ˆํฌ์˜ ์ตœ์‹  ์ปค๋ฐ‹์„ ๋ฐ›์•„์™€์ค๋‹ˆ๋‹ค.
// ์ฒดํฌ์•„์›ƒ ํ•˜๊ธฐ ์ „, Feature ๋ธŒ๋žœ์น˜์—์„œ์˜ ์ž‘์—… ๋‚ด์šฉ์„ ์ปค๋ฐ‹ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
$ git checkout develop
$ git pull origin develop
  1. ์ถ”๊ฐ€๋œ ์ตœ์‹  ์ปค๋ฐ‹์ด ์žˆ๋‹ค๋ฉด ๋‚ด๊ฐ€ ์ž‘์—…ํ•œ Feature ๋ธŒ๋žœ์น˜๋ฅผ, ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์ด ์ถ”๊ฐ€๋œ Develop ๋ธŒ๋žœ์น˜์˜ ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹์œผ๋กœ Rebase ํ•ฉ๋‹ˆ๋‹ค. (๋ง๊ทธ๋Œ€๋กœ base๋ฅผ ๋ฐ”๊พผ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค)
$ git checkout Feature/[๋ธŒ๋žœ์น˜๋ช…]
$ git rebase develop
  1. ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด, ์—๋””ํ„ฐ์—์„œ ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•œ ๋’ค ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
$ git add .
$ git rebase --continue
  1. ์ด์ƒ์ด ์—†๋‹ค๋ฉด Feature ๋ธŒ๋žœ์น˜๋ฅผ push ํ•ฉ๋‹ˆ๋‹ค.
$ git push origin Feature/[๋ธŒ๋žœ์น˜๋ช…]
  1. Github์—์„œ PR์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. PR ์‹œ ๋‚˜ํƒ€๋‚˜๋Š” ํ…œํ”Œ๋ฆฟ์„ ์ฑ„์›Œ์ฃผ์„ธ์š”.
## Feature Description

- ์ด๋Ÿฐ ์ด๋Ÿฐ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค

## To Reviewers

- ์ด๋Ÿฐ ์ด๋Ÿฐ ์ ์„ ์œ ์˜ํ•ด์ฃผ์„ธ์š”
  1. Review ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

  2. Self Merge ํ•ด์ฃผ์„ธ์š”.

  3. Squash Merge๋˜๋ฉฐ, Merge๋œ Feature Branch๋Š” ์ž๋™ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

  4. ๋กœ์ปฌ์—์„œ Develop ๋ธŒ๋žœ์น˜๋กœ ์ฒดํฌ์•„์›ƒํ•œ ๋’ค Pullํ•˜๊ณ , ์ƒˆ๋กœ์šด Feature ๋ธŒ๋žœ์น˜๋กœ ๋ถ„๊ธฐํ•˜์—ฌ ๋‹ค์Œ ์ž‘์—…์„ ์ง„ํ–‰ํ•ด์ฃผ์„ธ์š”.

3. ์ฝ”๋“œ ๋ฆฌ๋ทฐ

  1. PR ์‹œ joooonis์„ Reviewer๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ˆ˜์ •์ด ํ•„์š”ํ•˜๋ฉด Request Changes๋กœ ์ฝ”๋“œ ์ˆ˜์ •์„ ์š”์ฒญ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
  3. ์ด์ƒ์ด ์—†์œผ๋ฉด Approve ํ•ฉ๋‹ˆ๋‹ค.
  4. Approve๋œ PR์„ ์ฝ”๋“œ์ž‘์„ฑ์ž๊ฐ€ Self Merge ํ•ฉ๋‹ˆ๋‹ค.

4. ๋ธŒ๋žœ์น˜ ์ด๋ฆ„ ์ปจ๋ฒค์…˜

Feature/[๊ธฐ๋Šฅ์š”์•ฝ]

- ๋งจ ์ฒซ๊ธ€์ž F๋งŒ ๋Œ€๋ฌธ์ž๋กœ, ๊ธฐ๋Šฅ์š”์•ฝ์€ ์†Œ๋ฌธ์ž๋กœ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”
- ๊ธฐ๋Šฅ์š”์•ฝ์€ ์˜์–ด๋กœ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”

ex) Feature/modal-publishing

5. ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€ ์ปจ๋ฒค์…˜

<ํƒœ๊ทธ>: <์ œ๋ชฉ>

- : ๋’ค์—๋งŒ ๋„์–ด์“ฐ๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค
- ์ œ๋ชฉ์€ ํ•œ์˜ ํ˜ผ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค (๊ฐ€๊ธ‰์  ์˜์–ด๋กœ)
- ํƒœ๊ทธ์˜ ์ฒซ๊ธ€์ž๋Š” ๋Œ€๋ฌธ์ž๋กœ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”
- ํƒœ๊ทธ๋Š” ์•„๋ž˜์— ์ ํžŒ ๊ฒƒ๋“ค๋งŒ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”

Feat: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€, ๊ธฐ๋Šฅ ๋กœ์ง ๋ณ€๊ฒฝ
Fix: ๋ฒ„๊ทธ ์ˆ˜์ •
Refactor: ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง (๊ธฐ๋Šฅ ๋ณ€ํ™” X)
Style: ์ฝ”๋“œ ํฌ๋งทํŒ…, ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ์—†๋Š” ๊ฒฝ์šฐ
Chore: ๋นŒ๋“œ ์—…๋ฌด ์ˆ˜์ •, ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์ˆ˜์ •
Docs: ๋ฌธ์„œ ์ˆ˜์ •, ์ฃผ์„

5. ์ฝ”๋“œ ์ปจ๋ฒค์…˜

1. EsLint ๊ด€๋ จ

EsLint Rule์„ ์ž„์˜๋กœ ํ•ด์ œํ•˜์ง€ ๋ง์•„์ฃผ์„ธ์š”.

2. Type ๊ด€๋ จ

  1. Props Type ์„ ์–ธ ์‹œ Type์„ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”. (Interface X)
  2. Props Type์˜ ์ด๋ฆ„์€ [์ปดํฌ๋„ŒํŠธ์ด๋ฆ„]+Props ์˜ ํ˜•์‹์œผ๋กœ ์ง€์–ด์ฃผ์„ธ์š”.
type HeaderProps = {
  onOpenDrawer: (e: React.MouseEvent) => void;
};

type PublicationBoxElementProps = {
  title: string;
  writer: string;
  img: string;
  pdf: string;
};
  1. Interface ์„ ์–ธ ์‹œ, ํด๋ž˜์Šค์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์‚ฌ์šฉํ•  ๋ชฉ์ ์ด ์•„๋‹ˆ๋ผ๋ฉด ์ ‘๋‘์‚ฌ I๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์ฃผ์„ธ์š”.

3. Constant ์ •์˜ ์‹œ

๊ฐ์ฒด๋กœ ์ •์˜ํ•˜๋˜, as const ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ read-only ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”.

export const Paths = {
  new: '/new',
  newComplete: '/new/complete',
  main: '/main',
  reply: '/reply',
  replyComplete: '/reply/complete',
  view: '/view',
} as const;

4. sytled-components๊ฐ€ ์„ค์น˜๋Š” ๋˜์—ˆ์œผ๋‚˜ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. TailwindCss๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”.