Integrated Code Review Guide for Smart Bookmark

VerifiedSafe

This guide integrates Google, Palantir, Conventional Comments, and Pagepro review principles to establish senior-level code review standards, covering FSD architecture, naming conventions, and code quality.

Sby Skills Guide Bot
DevelopmentIntermediate
307/23/2026
Claude CodeCursorWindsurfCopilotCodex
#code-review#guidelines#frontend#react#typescript

Recommended for

Our review

This skill provides a comprehensive set of code review guidelines integrating practices from Google, Palantir, Conventional Comments, and React best practices, with a focus on Feature-Sliced Design and Atomic Design.

Strengths

  • Standardizes code review comments with clear prefixes
  • Encourages clean code practices like early return, DRY, and destructuring
  • Provides consistent naming conventions
  • Integrates project-specific architecture rules

Limitations

  • Highly specific to React/TypeScript and FSD architecture
  • May be too prescriptive for smaller teams
  • Requires team buy-in to be effective
When to use it

Use when establishing or enforcing a consistent code review process in a React/TypeScript frontend project using Feature-Sliced Design.

When not to use it

Avoid if the project uses a different architecture or language, or if the team prefers a more lightweight review process.

Security analysis

Safe
Quality score90/100

This skill is a static code review guide written in Markdown. It contains no executable instructions, shell commands, or code that could perform destructive actions, exfiltrate data, or disable safety features. The code snippets are purely illustrative and do not pose a security risk.

No concerns found

Examples

Review PR with guidelines
Review this pull request according to the integrated code review guidelines (Google, Palantir, Conventional Comments). Check FSD architecture, naming conventions, and code quality standards.
Check code quality
Examine this code for early return usage, proper destructuring, no magic numbers/strings, and ensure TypeScript types are used instead of 'any'.
Apply conventional comments
Provide code review comments using Conventional Comments prefixes (issue, suggestion, nit, praise) for this code diff.

๐Ÿ“– ์Šค๋งˆํŠธ ๋ถ๋งˆํฌ ํ†ตํ•ฉ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๊ฐ€์ด๋“œ๋ผ์ธ

๋ณธ ๊ฐ€์ด๋“œ๋ผ์ธ์€ Google, Palantir์˜ ๋ฆฌ๋ทฐ ์›์น™, Conventional Comments์˜ ์†Œํ†ต ๋ฐฉ์‹, Pagepro์˜ React ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค, ๊ทธ๋ฆฌ๊ณ  ๋ณธ ํ”„๋กœ์ ํŠธ์˜ ๊ณ ์œ  ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉํ•œ ์‹œ๋‹ˆ์–ด ์—”์ง€๋‹ˆ์–ด๋ง ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค.


๐Ÿ—๏ธ 1. ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ฒ˜ ํ‘œ์ค€ (FSD + Pages Router)

์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ๋Š” Feature-Sliced Design (FSD) ๊ณผ Atomic Design ํŒจํ„ด์„ ์—„๊ฒฉํžˆ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“‚ Layer ์ง€์นจ

  • shared: ๊ณตํ†ต UI(Atoms), ์œ ํ‹ธ๋ฆฌํ‹ฐ, ์ „์—ญ Hooks (์˜ˆ: src/shared/ui/Button.tsx)
  • entities: ๋ฐ์ดํ„ฐ ๋„๋ฉ”์ธ ํ•ต์‹ฌ ์—”ํ‹ฐํ‹ฐ (์˜ˆ: src/entities/bookmark)
  • features: ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋‹จ์œ„ (์˜ˆ: src/features/add-bookmark)
  • widgets: ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ์กฐํ•ฉํ•œ ํฐ UI ์กฐ๊ฐ (์˜ˆ: src/widgets/BookmarkList)
  • pages: ๋ผ์šฐํŒ… ์ „์šฉ ๋ ˆ์ด์–ด. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์—ฌ๊ธฐ์— ์ž‘์„ฑํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

โš›๏ธ Atomic Design

  • Atoms: ๋ฒ„ํŠผ, ์ž…๋ ฅ์ฐฝ ๋“ฑ ๋” ์ชผ๊ฐค ์ˆ˜ ์—†๋Š” ์ตœ์†Œ ๋‹จ์œ„
  • Molecules: Atoms๊ฐ€ ์กฐํ•ฉ๋œ ๊ธฐ๋Šฅ์  ์ปดํฌ๋„ŒํŠธ (SearchBar ๋“ฑ)
  • Organisms: ๋„๋ฉ”์ธ ๋ฐ์ดํ„ฐ์™€ ์—ฐ๊ฒฐ๋œ ๋…๋ฆฝ์  ๊ตฌ์„ฑ ์š”์†Œ (BookmarkCard ๋“ฑ)

๐Ÿ“ฌ 2. PR ์ œ์ถœ ์ „ ์ฒดํฌ (Submission Rules)

๋ฆฌ๋ทฐ์–ด์˜ ์‹œ๊ฐ„์„ ์กด์ค‘ํ•˜๊ธฐ ์œ„ํ•ด ์ œ์ถœ ์ „ ์•„๋ž˜๋ฅผ ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • Lint ๋จผ์ € ์‹คํ–‰: ESLint, Prettier ์˜ค๋ฅ˜๋ฅผ ์ œ์ถœ ์ „ ์ง์ ‘ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  • ์…€ํ”„ ๋ฆฌ๋ทฐ: ํ”Œ๋žซํผ์—์„œ ์ง์ ‘ diff๋ฅผ ํ™•์ธํ•˜๊ณ  console.log, ์ฃผ์„ ์ž”์žฌ, ํฌ๋งท ์ด์Šˆ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • PR ์„ค๋ช… ํฌํ•จ: ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ์™œ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ๊ฐ„๋žตํžˆ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. (ํ•œ๋‘ ์ค„์ด๋ผ๋„)
  • UI ๋ณ€๊ฒฝ ์‹œ ์Šคํฌ๋ฆฐ์ƒท ์ฒจ๋ถ€: ๋ฆฌ๋ทฐ์–ด๊ฐ€ ์ง์ ‘ ์‹คํ–‰ํ•˜์ง€ ์•Š์•„๋„ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • PR ํฌ๊ธฐ ์ œํ•œ: ๋ณ€๊ฒฝ์ด ํฌ๋‹ค๋ฉด ์„œ๋ธŒ ๋ธŒ๋žœ์น˜๋กœ ๋‚˜๋ˆ  ์ž‘์€ ๋‹จ์œ„๋กœ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’Ž 3. ๋ช…๋ช… ๊ทœ์น™ (Naming Conventions)

  • Variables: camelCase
    • Boolean์€ is, has, should, can ์ ‘๋‘์‚ฌ ์‚ฌ์šฉ (์˜ˆ: isLoggedIn, hasToken)
    • visible โ†’ isVisible ์ฒ˜๋Ÿผ HTML ์†์„ฑ๊ณผ ํ˜ผ๋™๋˜์ง€ ์•Š๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • Constants: ์ „์—ญ ๋ถˆ๋ณ€๊ฐ’์€ SCREAMING_SNAKE_CASE (์˜ˆ: MAX_RETRY_COUNT)
  • Functions: camelCase + ๋™์‚ฌ ์‹œ์ž‘ (์˜ˆ: fetchData(), calculateTotal())
    • ๋ฐ˜ํ™˜ ๋ชฉ์ ์ด ๋ช…ํ™•ํ•˜๋ฉด ์ด๋ฆ„์— ๋“œ๋Ÿฌ๋ƒ…๋‹ˆ๋‹ค. parseData โ†’ parseToAPIFormat
  • React Components: PascalCase (์˜ˆ: BookmarkCard.tsx)
  • Types & Interfaces: PascalCase. I ์ ‘๋‘์‚ฌ(IBookmark) ์‚ฌ์šฉ ๊ธˆ์ง€.
  • Event Handlers: ๊ตฌํ˜„๋ถ€๋Š” handle, Prop ์ „๋‹ฌ ์‹œ on (์˜ˆ: <Button onClick={handleClick} />)

๐Ÿ’ป 4. ์ฝ”๋“œ ํ’ˆ์งˆ ์ง€์นจ (Code Quality)

๊ธฐ๋ณธ ์›์น™

  • Early Return (Guard Clause): ์ค‘์ฒฉ if๋ฌธ ๋Œ€์‹  ์กฐ๊ฑด ๋ถˆ์ผ์น˜ ์‹œ ์ฆ‰์‹œ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.
  • No Magic Numbers/Strings: ์˜๋ฏธ ๋ถˆ๋ช…์˜ ๊ฐ’์€ ์ƒ์ˆ˜๋กœ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
  • Single Responsibility (SRP): ํ•˜๋‚˜์˜ ํ•จ์ˆ˜/์ปดํฌ๋„ŒํŠธ๋Š” ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค.
  • Destructuring: Props, ๊ฐ์ฒด๋Š” ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์œผ๋กœ ๊ฐ€๋…์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.
  • Avoid any: TypeScript any ์‚ฌ์šฉ ์ ˆ๋Œ€ ๊ธˆ์ง€. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ช…ํ™•ํžˆ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • No Code Repetition (DRY): ๋™์ผํ•˜๊ฑฐ๋‚˜ ์œ ์‚ฌํ•œ ๋กœ์ง์ด ์—ฌ๋Ÿฌ ๊ณณ์— ์žˆ๋‹ค๋ฉด ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.

์˜์กด์„ฑ & ์ž„ํฌํŠธ

  • ์ƒˆ npm ํŒจํ‚ค์ง€ ์ถ”๊ฐ€ ์‹œ ๋ฐ˜๋“œ์‹œ ๋ฆฌ๋ทฐ: ์ •๋ง ํ•„์š”ํ•œ์ง€ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋Šฅ ์ค‘๋ณต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ธˆ์ง€: ์˜ˆ) date-fns + moment ๋™์‹œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€.
  • Tree Shaking ๊ณ ๋ ค: ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ „์ฒด๋ฅผ ์ž„ํฌํŠธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
// โŒ ๋ฒˆ๋“ค ์ „์ฒด ํฌํ•จ
import _ from "lodash";

// โœ… ํ•„์š”ํ•œ ๊ฒƒ๋งŒ
import uniq from "lodash/uniq";

๋กœ์ง & ์•ˆ์ •์„ฑ

  • ํ•˜๋“œ์ฝ”๋”ฉ ๊ธˆ์ง€: ๊ฒฝ๋กœ, ์ด๋ฆ„, ๊ฐ’์€ ์ƒ์ˆ˜๋‚˜ ์„ค์ • ํŒŒ์ผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ํ•˜์œ„ ํ˜ธํ™˜์„ฑ ์œ ์ง€: ๊ธฐ์กด optional props๋ฅผ required๋กœ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ํ•จ์ˆ˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ๊ธฐ์กด ํ˜ธ์ถœ๋ถ€์— ์˜ํ–ฅ์ด ์—†๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ํผ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ: ๋ชจ๋“  ํผ ํ•„๋“œ์— ์ ์ ˆํ•œ validation์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์—๋Ÿฌ ํ•ธ๋“ค๋ง: API ์‘๋‹ต ์‹คํŒจ, try/catch์˜ catch ๋ธ”๋ก์ด ์ ์ ˆํžˆ ์ฒ˜๋ฆฌ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ๋น„๋™๊ธฐ ์ตœ์ ํ™”: async ํ•จ์ˆ˜๊ฐ€ ์ˆœ์ฐจ ์‹คํ–‰์ด ๊ผญ ํ•„์š”ํ•œ์ง€, ๋ณ‘๋ ฌ(Promise.all)๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•œ์ง€ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค.
// โŒ ๋ถˆํ•„์š”ํ•œ ์ˆœ์ฐจ ์‹คํ–‰
const user = await fetchUser();
const posts = await fetchPosts();

// โœ… ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ
const [user, posts] = await Promise.all([fetchUser(), fetchPosts()]);

๐Ÿ’ฌ 5. Conventional Comments (์†Œํ†ต ๋ฐฉ์‹)

๋ฆฌ๋ทฐ ๋Œ“๊ธ€์€ ์•„๋ž˜ ์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์—ฌ ์˜๋„๋ฅผ ๋ช…ํ™•ํžˆ ํ•ฉ๋‹ˆ๋‹ค.

  • issue: (ํ•„์ˆ˜ ์ˆ˜์ •) ์ฝ”๋“œ ์˜ค๋ฅ˜, ๋…ผ๋ฆฌ์  ๊ฒฐํ•จ, ๋ณด์•ˆ ๋ฌธ์ œ
  • suggestion: (๊ถŒ์žฅ) ์„ฑ๋Šฅ ๊ฐœ์„ , ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ ์ œ์•ˆ
  • nit: (์„ ํƒ) ์‚ฌ์†Œํ•œ ๊ฐœ์„  ์‚ฌํ•ญ (์˜คํƒ€, ๋„ค์ด๋ฐ ์Šคํƒ€์ผ ๋“ฑ)
  • praise: (์นญ์ฐฌ) ์ž˜ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋‚˜ ์„ค๊ณ„์— ๋Œ€ํ•œ ๊ธ์ •์  ํ”ผ๋“œ๋ฐฑ

๋ฆฌ๋ทฐ ์†Œํ†ต ์›์น™

  • ์™œ ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค: "A๋ฅผ B๋กœ ๋ฐ”๊พธ์„ธ์š”"๊ฐ€ ์•„๋‹ˆ๋ผ ์ด์œ ๋ฅผ ํ•จ๊ป˜ ์ ์Šต๋‹ˆ๋‹ค.
  • ์ž˜๋œ ๋ถ€๋ถ„์€ ์นญ์ฐฌํ•ฉ๋‹ˆ๋‹ค: ํŒ€ ๋ถ„์œ„๊ธฐ์™€ ๋™๊ธฐ ๋ถ€์—ฌ์— ์ง์ ‘ ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค.
  • ์Šคํƒ€์ผ ์ด์Šˆ๋Š” ๋ฐ˜๋ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค: ๊ฐ™์€ ์Šคํƒ€์ผ ๋ฌธ์ œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ณณ์— ์žˆ๋‹ค๋ฉด, ํ•œ ๋ฒˆ๋งŒ ์–ธ๊ธ‰ํ•˜๊ณ  ์ „์ฒด ํ•ด๊ฒฐ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ๋ฅผ ์ดํ•ด ๋ชป ํ–ˆ๋‹ค๋ฉด ์งˆ๋ฌธํ•ฉ๋‹ˆ๋‹ค: ๋น„ํŒ์ด ์•„๋‹Œ ํ˜ธ๊ธฐ์‹ฌ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ๋ฆฌ๋ทฐ์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

๐ŸŒ 6. ๊ธ€๋กœ๋ฒŒ ๊ธฐ์—… ๋ฆฌ๋ทฐ ์ฒ ํ•™ (Google & Palantir)

  • ์ฝ”๋“œ ํ’ˆ์งˆ์ด ์šฐ์„  (Google): ์ „์ฒด์ ์ธ ์ฝ”๋“œ๋ฒ ์ด์Šค ํ’ˆ์งˆ์ด ๊พธ์ค€ํžˆ ๋‚˜์•„์ง€๋Š” ์ˆ˜์ค€์ด๋ผ๋ฉด ์Šน์ธํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹จ์ˆœํ•จ์ด ์ตœ๊ณ  (Palantir): ์ฝ๋Š” ์‚ฌ๋žŒ์ด ๋ฐ”๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ๋ช…ํ™•ํ•˜๊ณ  ๋‹จ์ˆœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”’ 7. ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ ๊ณ ์œ  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง (Guest Tracker)

  • ๋น„ํšŒ์› 20๊ฐœ ์ œํ•œ: ๋ถ๋งˆํฌ ์ €์žฅ ์‹œ ๋ฐ˜๋“œ์‹œ ๋น„ํšŒ์› ์—ฌ๋ถ€์™€ ํ˜„์žฌ ์ €์žฅ ๊ฐœ์ˆ˜๋ฅผ ์ฒดํฌํ•˜๋Š” ๋กœ์ง์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ์ด์ „: ๋กœ๊ทธ์ธ ์‹œ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์‹ ๊ณ„์ •์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์ด์ „ํ•˜๋Š” ๋กœ์ง์„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.

โœ… ๋น ๋ฅธ ๋ฆฌ๋ทฐ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

PR ์ œ์ถœ ์ „

  • [ ] Lint ์˜ค๋ฅ˜ ์—†์Œ
  • [ ] console.log ์ œ๊ฑฐ
  • [ ] PR ์„ค๋ช… ์ž‘์„ฑ
  • [ ] UI ๋ณ€๊ฒฝ ์‹œ ์Šคํฌ๋ฆฐ์ƒท ์ฒจ๋ถ€

์•„ํ‚คํ…์ฒ˜

  • [ ] FSD ๋ ˆ์ด์–ด ๊ทœ์น™ ์ค€์ˆ˜ (pages์— ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์—†์Œ)
  • [ ] Atomic Design ๋ถ„๋ฅ˜ ์ ์ ˆํ•จ

์ฝ”๋“œ ํ’ˆ์งˆ

  • [ ] any ํƒ€์ž… ์—†์Œ
  • [ ] ํ•˜๋“œ์ฝ”๋”ฉ๋œ ๊ฐ’ ์—†์Œ
  • [ ] ์ค‘๋ณต ๋กœ์ง ์—†์Œ (DRY)
  • [ ] ์ปดํฌ๋„ŒํŠธ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ ์ค€์ˆ˜
  • [ ] Early Return ์ ์šฉ

์˜์กด์„ฑ

  • [ ] ์ƒˆ ํŒจํ‚ค์ง€ ์ถ”๊ฐ€ ์ด์œ  ๋ช…ํ™•ํ•จ
  • [ ] ๊ธฐ๋Šฅ ์ค‘๋ณต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—†์Œ
  • [ ] ์ „์ฒด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž„ํฌํŠธ ์—†์Œ

์•ˆ์ •์„ฑ

  • [ ] ์—๋Ÿฌ ํ•ธ๋“ค๋ง ์ ์ ˆํ•จ
  • [ ] ํผ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์žˆ์Œ
  • [ ] ๋น„๋™๊ธฐ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๊ฒ€ํ† ๋จ
  • [ ] ํ•˜์œ„ ํ˜ธํ™˜์„ฑ ๊นจ์ง€์ง€ ์•Š์Œ

๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง

  • [ ] ๋น„ํšŒ์› 20๊ฐœ ์ œํ•œ ๋กœ์ง ํฌํ•จ (ํ•ด๋‹น ์‹œ)
  • [ ] ๋กœ๊ทธ์ธ ์‹œ ๋ฐ์ดํ„ฐ ์ด์ „ ๋กœ์ง ๊ฒ€์ฆ (ํ•ด๋‹น ์‹œ)
  1. alan2207/bulletproof-react โ€” โ˜…34k github.com/alan2207/bulletproof-react React ์•„ํ‚คํ…์ฒ˜ ๋ ˆํผ๋Ÿฐ์Šค๋กœ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์ธ์ •๋ฐ›๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ˆ์š”. ์ง€๊ธˆ Anso๊ฐ€ ๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ๋“ค๊ณผ ๊ฑฐ์˜ ์ •ํ™•ํžˆ ๊ฒน์ณ์š”.

Feature ๊ธฐ๋ฐ˜ ํด๋” ๊ตฌ์กฐ (FSD๋ž‘ ์‚ฌ์‹ค์ƒ ๋™์ผํ•œ ๊ฐœ๋…) ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ ๊ธฐ์ค€, ๋„ค์ด๋ฐ, Custom Hook ์„ค๊ณ„ ๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ ๊ทœ์น™ (shared โ†’ features โ†’ app) ESLint๋กœ ๋ ˆ์ด์–ด ๊ฐ„ import ๋ฐฉํ–ฅ ๊ฐ•์ œํ•˜๋Š” ๋ฐฉ๋ฒ•๊นŒ์ง€ ์„ค๋ช…

์ง€๊ธˆ ๋งŒ๋“œ๋Š” ๊ฐ€์ด๋“œ๋ผ์ธ์˜ ์‹ค์ œ ์ฝ”๋“œ ๋ฒ„์ „์ด๋ผ๊ณ  ๋ณด๋ฉด ๋ผ์š”.

Related skills