๐Ÿ‘ฉโ€๐Ÿ’ป
Megaptera Frontend
  • ์ฃผ์ฐจ๋ณ„ ํ•™์Šต
    • megaptera-front
    • 1. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
      • 1. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
      • 2. TypeScript
      • 3. React
      • 4. Testing Library
      • 5. Parcel & ESLint
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 2. JSX
      • 1. JSX
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 3. React๋กœ ์‚ฌ๊ณ ํ•˜๊ธฐ
      • 1. React Component
      • 2. React State
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 4. React Hooks
      • 1. Express
      • 2. Fetch API & CORS
      • 3. React์˜ Hook
      • 4. useRef & Custom Hook
      • 5. usehooks-ts
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 5. ํ…Œ์ŠคํŠธ
      • 1. TDD
      • 2. React Testing Library
      • 3. MSW
      • 4. Playwright
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 6. External Store
      • 1. External Store
      • 2. TSyringe
      • 3. Redux ๋”ฐ๋ผํ•˜๊ธฐ
      • 4. usestore-ts
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 7. React Router
      • 1. Routing
      • 2. Routes
      • 3. Router
      • 4. Navigation
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 8. CSS in JS
      • 1. Design System
      • 2. Style Basics
      • 3. CSS in JS
      • 4. styled-components
      • 5. props์™€ attrs
      • 6. Global Style & Theme
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 9. ์‡ผํ•‘๋ชฐ ๋ชฉ๋ก, ์ƒํ’ˆ ํŽ˜์ด์ง€
      • 1. ๊ฐœ๋ฐœํ•˜๊ธฐ ์ „ ์ค€๋น„
      • 2. ๋ชฉ๋ก ๋ณด๊ธฐ
      • 3. ์ƒํ’ˆ ์ƒ์„ธ ๋ณด๊ธฐ
      • 4. ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ณด๊ธฐ
      • 5. ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ƒํ’ˆ ๋‹ด๊ธฐ
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 10. ์‚ฌ์šฉ์ž ์ธ์ฆ, ์ธ๊ฐ€
      • 1. ๋กœ๊ทธ์ธ
      • 2. ๋กœ๊ทธ์•„์›ƒ
      • 3. ํšŒ์›๊ฐ€์ž…
      • 4. ์ฃผ๋ฌธ ๋ชฉ๋ก & ์ฃผ๋ฌธ ์ƒ์„ธ
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 11. ์ฃผ๋ฌธ, ๊ฒฐ์ œ
      • 1. ๋ฐฐ์†ก ์ •๋ณด ์ž…๋ ฅ
      • 2. ํฌํŠธ์› ๊ฒฐ์ œ ์š”์ฒญ
      • 3. ๋ฐฐ์†ก ๋ฐ ๊ฒฐ์ œ ์ •๋ณด ์ „๋‹ฌ
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 12. ์–ด๋“œ๋ฏผ
      • 1. ๊ด€๋ฆฌ์ž ์›น ์‚ฌ์ดํŠธ ๊ฐœ๋ฐœ ์‹œ์ž‘
      • 2. ๋กœ๊ทธ์ธ, ์‚ฌ์šฉ์ž ๋ชฉ๋ก
      • 3. ์นดํ…Œ๊ณ ๋ฆฌ ๊ด€๋ฆฌ
      • 4. ์ฃผ๋ฌธ ๊ด€๋ฆฌ
      • 5. ์ƒํ’ˆ ๊ด€๋ฆฌ
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
Powered by GitBook
On this page
  • 1. Thinking in React
  • Start with the mockup
  • Step 1: Break the UI into a component hierarchy
  • Step 2: Build a static version in React
  • 2. REST API ์™€ GraphQL
  • REST API๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
  • GraphQL์€ ์™œ ๋“ฑ์žฅํ–ˆ๋Š”๊ฐ€?
  • REST API vs GraphQL
  • 3. JSON
  • JSON
  • XML
  • JSON vs XML
  • 4. DSL(Domain-Specific Language)
  • 5. ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • 6. ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • 7. React component ์™€ props
  • Component-Based
  • ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ธฐ์ค€
  • Extract Function
  • Props
  • 8. SRP(๋‹จ์ผ ์ฑ…์ž„ ์›์น™)
  • ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ
  • 9. Atomic Design
  1. ์ฃผ์ฐจ๋ณ„ ํ•™์Šต
  2. 3. React๋กœ ์‚ฌ๊ณ ํ•˜๊ธฐ

1. React Component

Previous3. React๋กœ ์‚ฌ๊ณ ํ•˜๊ธฐNext2. React State

Last updated 2 years ago

1. Thinking in React

๐Ÿ“Œ ๋ฆฌ์•กํŠธ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ธฐ์ดˆ

Start with the mockup

  • JSON API

  • ๋””์ž์ด๋„ˆ์˜ ๋ชฉ์—… - ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ์€ ์•„๋‹ˆ์ง€๋งŒ ๋ผˆ๋Œ€๊ฐ€ ๋˜๋Š” ํ‹€

# JSON API๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ์˜ˆ์‹œ ๋ฐ์ดํ„ฐ ํ˜•ํƒœ
 
[
  { category: "Fruits", price: "$1", stocked: true, name: "Apple" },
  { category: "Fruits", price: "$1", stocked: true, name: "Dragonfruit" },
  { category: "Fruits", price: "$2", stocked: false, name: "Passionfruit" },
  { category: "Vegetables", price: "$2", stocked: true, name: "Spinach" },
  { category: "Vegetables", price: "$4", stocked: false, name: "Pumpkin" },
  { category: "Vegetables", price: "$1", stocked: true, name: "Peas" }
]

BE์—์„œ JSON ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋Œ๋ ค์ฃผ๋Š” API๋ฅผ ์ œ๊ณตํ•œ๋‹ค๊ณ  ๊ฐ€์ •(๋Œ€๋ถ€๋ถ„์€ REST API ๋˜๋Š” GraphQL) FE๋Š” ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก UI๋ฅผ ๊ตฌ์„ฑ React๋Š” ์„ ์–ธํ˜•(HTML๊ณผ ์œ ์‚ฌํ•œ ๋ชจ์–‘์˜ DSL์„ ์‚ฌ์šฉ)์œผ๋กœ UI๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Œ

Step 1: Break the UI into a component hierarchy

UI๋ฅผ ์ปดํฌ๋„ŒํŠธ ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ๋‚˜๋ˆ„๊ธฐ

Step 2: Build a static version in React

React์—์„œ ์ •์  ๋ฒ„์ „ ๋นŒ๋“œ

2. REST API ์™€ GraphQL

REST API๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

  • GET, POST, PUT/PATCH, DELETE (CRUD - ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ)

  • Resource ์ค‘์‹ฌ์œผ๋กœ ์กฐ์ž‘

GraphQL์€ ์™œ ๋“ฑ์žฅํ–ˆ๋Š”๊ฐ€?

ํŽ˜์ด์Šค๋ถ ๊ฐœ๋ฐœ - ํŽ˜์ด์Šค๋ถ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ˆ˜๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•จ ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ์ „๋ถ€ ๋ฐ›์•„์™€์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” REST API์™€ ๋‹ฌ๋ฆฌ, ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ง€์ •ํ•ด์„œ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋น„์šฉ์ด ์ ˆ๊ฐ ๐Ÿ’ธ facebook, airbnb, github ๋“ฑ ์œ ๋ช…ํ•œ ์‚ฌ์ดํŠธ์—์„œ ์‚ฌ์šฉ ์ค‘

  • Graph ์ž๋ฃŒ ๊ตฌ์กฐ

  • Query์—์„œ ์–ป๊ณ ์ž ํ•˜๋Š” ํ•ญ๋ชฉ์„ ์ง€์ •

  • Graphql์€ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์œ ๋ฌด์— ๋”ฐ๋ผ Query, Mutation์„ ๊ตฌ๋ถ„

  • Query(Read), Mutation(Command: Create, Update, Delete), Subscription(Event)

โ“ ์งˆ์˜์–ด(query language)

REST API vs GraphQL

๊ณตํ†ต์ 

  1. HTTP ํ†ต์‹ 

    • HTTP : ํ…์ŠคํŠธ, html์„ ์ „์†กํ•˜๋Š” ๋„๊ตฌ โ†’ ๊ฐ์ฒด๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์—†์–ด์„œ ํ…์ŠคํŠธ๋กœ ํ‘œ๊ธฐ (JSON)

    • JSON : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด ํ‘œ๊ธฐ๋ฒ•

  2. ๊ตฌ์„ฑ

    • ํ—ค๋” : ์š”์•ฝ ์ •๋ณด (โœ‰๏ธํŽธ์ง€๋ด‰ํˆฌ)

    • ๋ณด๋‚ด๋Š” ์ด, ๋ณด๋‚ด๋Š” ๋‚ด์šฉ ํ˜•ํƒœ

    • ๋ฐ”๋”” : ์ฃผ๊ณ ๋ฐ›์€ ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด์žˆ์Œ

์ฐจ์ด์ 

์ฐจ์ด์ 
REST
GRAPHQL

๋Œ€๊ทœ๋ชจ ์ ‘์†์ž ์ฒ˜๋ฆฌ

์–ด๋ ค์›€

์‰ฌ์›€

ํ˜•ํƒœ

์ฃผ์†Œ https://naver.com/board/1

ํ•จ์ˆ˜ board(1)

์‘๋‹ต ๋ฐ์ดํ„ฐ

๋ชจ๋“  ๋ฐ์ดํ„ฐ

ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๊ณจ๋ผ์„œ ์‘๋‹ต โ†’ ๋น„์šฉ์ ˆ๊ฐ

API์— ์ „์†ก์„ ์š”์ฒญํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

axios

apollo-client

API ํ…Œ์ŠคํŠธ

API ๋ช…์„ธ์„œ

  • GraphQL์€ ํ…Œ์ŠคํŠธ์™€ ๋ช…์„ธ์„œ๊ฐ€ ํ•ฉ์ณ์ ธ ์žˆ์–ด์„œ ํŽธ๋ฆฌ

3. JSON

JSON

Javascript ๊ฐ์ฒด ๋ฌธ๋ฒ•์œผ๋กœ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ ํฌ๋งท ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํฌ๋งท ์ค‘ ํ•˜๋‚˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€์˜ ํ˜ธํ™˜์„ฑ์ด ์ข‹์Œ ๋”๊ธ€๋ผ์Šค ํฌ๋กํฌ๋“œ๊ฐ€ ๋งŒ๋“ฆ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ธ ๋ฌธ์ž์—ด, ์ˆซ์ž, ๋ฐฐ์—ด, ๋ถˆ๋ฆฌ์–ธ, ๋‹ค๋ฅธ ๊ฐ์ฒด, null ํฌํ•จ ๊ฐ€๋Šฅ

์žฅ์ 

  • ํ…์ŠคํŠธ๋กœ ๊ตฌ์„ฑ๋˜์–ด, ์‚ฌ๋žŒ๊ณผ ์ปดํ“จํ„ฐ ๋ชจ๋‘ ์ฝ๊ณ  ์“ฐ๊ธฐ ์‰ฌ์›€

  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์™€ ํ”Œ๋žซํผ์— ๋…๋ฆฝ์  โ†’ ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ ๊ฐ„ ๊ฐ์ฒด๋ฅผ ๊ตํ™˜ํ•˜๊ธฐ ์šฉ์ด (์–ธ์–ด๊ฐ€ ๋‹ฌ๋ผ๋„ ์†Œํ†ต ๊ฐ€๋Šฅ)

  • api, config ํŒŒ์ผ์— ํ™œ์šฉ

  • ๊ฐ€๋ฒผ์›€

์ฃผ์˜์ 

  • key - value ๋งŒ ๋‹ด์„ ์ˆ˜ ์žˆ์Œ

  • "ํฐ ๋”ฐ์˜ดํ‘œ๋งŒ ์‚ฌ์šฉ"

  • undefined ๋ถˆ๊ฐ€

  • ๋ฉ”์†Œ๋“œ ๋ถˆ๊ฐ€

XML

๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ทœ์น™์„ ์ œ๊ณตํ•˜๋Š” ๋งˆํฌ์—… ์–ธ์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํฌ๋งท ์ค‘ ํ•˜๋‚˜ <> ํƒœ๊ทธ ๊ธฐ๋ฐ˜ </>

JSON vs XML

  • XML์ด ๋” ๋ฌด๊ฑฐ์›€ (๊ธ€์ž ์ˆ˜๊ฐ€ ๋งŽ์Œ)

  • XML์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์˜ค๋ธŒ์ ํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ๋ณต์žก

    • JSON์˜ ๊ฒฝ์šฐ, JSON.parse ์ด์šฉ

  • XML์˜ ํƒœ๊ทธ๋Š” ์ด๋ฆ„์ด ์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š์Œ (HTML๊ณผ์˜ ์ฐจ์ด์ )

์ฐจ์ด์ 
JSON
XML

๋ฌด๊ฒŒ

๊ฐ€๋ฒผ์›€

๋ฌด๊ฑฐ์›€

JS ํ˜ธํ™˜์„ฑ

์ข‹์Œ JSON.parse

๋‚˜์จ ์˜ค๋ธŒ์ ํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ๋ณต์žก

ํƒœ๊ทธ ์ด๋ฆ„

์ด๋ฆ„์ด ์ •ํ•ด์ ธ ์žˆ์Œ

์ด๋ฆ„์ด ์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š์Œ

4. DSL(Domain-Specific Language)

๋„๋ฉ”์ธ ํŠนํ™” ์–ธ์–ด(Domain-specific language) ํŠน์ •ํ•œ ๋„๋ฉ”์ธ์„ ์ ์šฉํ•˜๋Š”๋ฐ ํŠนํ™”๋œ ์ปดํ“จํ„ฐ ์–ธ์–ด Ex. HTML(Web)

FE๋Š” BE์—์„œ ๋„˜๊ฒจ์ค€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก UI๋ฅผ ๊ตฌ์„ฑ React๋Š” ์„ ์–ธํ˜•(HTML๊ณผ ์œ ์‚ฌํ•œ ๋ชจ์–‘์˜ DSL์„ ์‚ฌ์šฉ)์œผ๋กœ UI๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Œ

๐Ÿ’ก ์„ ์–ธํ˜•์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ โ†’ ๋‚ด๋ถ€ ๋‚ด์šฉ์ด ๋ฐ”๋€Œ์—ˆ์„ ๋•Œ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ

5. ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

  • ๋ฐ”๋กœ ๋ชฉ์  ์„œ์ˆ , ๋ชฉํ‘œ๋ฅผ ๋ช…์‹œ โ†’ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ณ  ๋””๋ฒ„๊น… ์šฉ์ด

  • Ex. React

โœ… React์˜ ํŠน์ง• ์ค‘ ํ•˜๋‚˜ React๋Š” ์„ ์–ธ์  API๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐฑ์‹ ์ด ๋  ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ๋ฌด์—‡์ด ๋ฐ”๋€Œ์—ˆ๋Š”์ง€๋ฅผ ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Œ ์ผ์ผ์ด ๋ณ€ํ™”๋œ ๋ถ€๋ถ„์„ ์ง€์ •ํ•ด ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ทธ๋ ‡๊ฒŒ ๋˜๋„๋ก ์„ ์–ธ โ‡’ ์ปดํฌ๋„ŒํŠธ์˜ ๊ฐฑ์‹ ์ด ์˜ˆ์ธก ๊ฐ€๋Šฅํ•ด์ง€๊ณ , ๋น ๋ฅธ ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ

React์˜ ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

JSX๋Š” React.createElement๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ž๋ฐ”์ŠคํŠธ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ๋ณ€ํ™˜ ๋ณ€ํ™˜๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋Š” Virtual DOM ํŠธ๋ฆฌ๋ฅผ ๋ฐ”๊ฟ”์ฃผ๊ณ , VDOM๊ณผ ํ™”๋ฉด์„ ๋น„๊ตํ•ด์„œ ๋ฐ”๋€ ๋ถ€๋ถ„๋งŒ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์žฌ์กฐ์ • ๊ณผ์ •์ด ๋ฐœ์ƒ React ๋‚ด๋ถ€์—์„œ๋Š” ๋น„๊ต (diffing) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ๋ฌด์—‡์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ๊ณ„์‚ฐ์ด ์ผ์–ด๋‚จ ์ด๋Ÿฌํ•œ ์ ‘๊ทผ๋ฐฉ์‹์„ ํ†ตํ•ด React์˜ ์„ ์–ธ์  API๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง

6. ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

  • ์ ˆ์ฐจ๋ฅผ ์ผ์ผ์ด ๋‚˜์—ด, ์‹คํ–‰ํ•  ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ช…์‹œ

  • Ex. jQuery, C, JAVA

7. React component ์™€ props

Component-Based

โœ… React์˜ ํŠน์ง• ์ค‘ ํ•˜๋‚˜

Build encapsulated components that manage their own state, then compose them to make complex UIs. ์Šค์Šค๋กœ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์บก์Аํ™”๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“œ์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ์กฐํ•ฉํ•ด ๋ณต์žกํ•œ UI๋ฅผ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”. โ‡’ ๊ฐ„๋‹จํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ชจ์•„์„œ ๋ณต์žกํ•œ UI๋ฅผ ์กฐ๋ฆฝ

์ž‘์€ ์ปดํฌ๋„ŒํŠธ=๋ถ€ํ’ˆ์„ ๋งŒ๋“ค์–ด์„œ ์กฐ๋ฆฝ ์กฐํ•ฉ์€ ๊ฐ€์ง€์ˆ˜๋ฅผ ํญ๋ฐœ์ ์œผ๋กœ ๋Š˜๋ฆด ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ „ํ˜•์ ์ธ ๋ฐฉ๋ฒ• โš™๏ธ ์กฐํ•ฉํ•˜๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ ์ ์€ ๋ถ€ํ’ˆ๋งŒ ๊ฐ€์ง€๊ณ ๋„ ๋‹ค์–‘ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ

์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ธฐ์ค€

  1. SRP (Single Responsibility Principle)

    • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋„ˆ๋ฌด ์ปค์งˆ ๊ฒฝ์šฐ ๋ถ„๋ฆฌ๊ฐ€ ํ•„์š” (์ฑ…์ž„์ด ๋งŽ๊ณ , ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์งˆ ๋•Œ)

  2. CSS

    • ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๋Š” ๊ธฐ์ค€์„ ์žฌํ™œ์šฉ

  3. Designโ€™s Layer (๋””์ž์ธ ์ธก๋ฉด)

    • ๋ ˆ์ด์–ด๋„ ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์ง

  4. Information Architecture (JSON Schema์˜ ์˜ํ–ฅ)

    • ์‹ค์ œ๋กœ ์—„์ฒญ ๋งŽ์ด ์‚ฌ์šฉ

    • ์ž์—ฐ์Šค๋Ÿฌ์šด SRP๋ฅผ ์œ„ํ•ด์„œ ์‚ฌ์‹ค์ƒ ๊ฐ•์ œ๋จ

Extract Function

๐Ÿ›  ๋งˆํ‹ด ํŒŒ์šธ๋Ÿฌ <๋ฆฌํŒฉํ† ๋ง>

๋ฆฌํŒฉํ† ๋ง์—์„œ ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ฒ•

ํ•จ์ˆ˜ ์ถ”์ถœ์€ SRP๋ฅผ ์œ„ํ•ด ์ž์ฃผ ์“ฐ์ด๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜ ๋ณ€ํ™”์˜ ํฌ๊ธฐ(์˜ํ–ฅ ๋ฒ”์œ„)๋ฅผ ์ œ์•ฝ

  • ์ผ๋‹จ ๊ธธ๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ์ ์ ˆํžˆ ์ž๋ฅผ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด ๋ณด์ผ ๋•Œ ํ•จ์ˆ˜๋กœ ์ถ”์ถœ

  • ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์–ด๋ ค์šด ์ƒํ™ฉ์— ์ง๋ฉดํ–ˆ์„ ๋•Œ ํ•จ์ˆ˜๋กœ ์ถ”์ถœ

๐Ÿ’ก ๋ฐ”๋กœ ๋‹ค๋ฅธ ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์•„๋„ ๋จ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ธฐ์ค€์ด ์• ๋งคํ•˜๋ฉด ๋‹ค์‹œ ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ํ•ฉ์ณค๋‹ค๊ฐ€(Inline Method) ๋‹ค์‹œ ๋‚˜๋ˆ ์ค˜๋„ ๋จ

Props

๋ชจ๋“  React ์ปดํฌ๋„ŒํŠธ๋Š” ์ž์‹ ์˜ props๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ๋ฐ˜๋“œ์‹œ ์ˆœ์ˆ˜ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ๋™์ž‘ํ•ด์•ผ ํ•œ๋‹ค.

์ปดํฌ๋„ŒํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•, ๋‚˜๋ˆ ์ง„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„œ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ• ์ปดํฌ๋„ŒํŠธ์˜ ์ž์ฒด props๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ์•ˆ๋จ โš ๏ธ TypeScript๋ฅผ ์ž˜ ์“ฐ๊ฑฐ๋‚˜ ์ž˜๋ชป ์“ฐ๊ฒŒ ๋˜๋Š” ํฌ์ธํŠธ ์ค‘ ํ•˜๋‚˜ ์ ์ ˆํ•œ ๊ท ํ˜•์ ์„ ์žก๋Š” ๊ฒƒ์ด ์ค‘์š”

  • ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌ

  • ๊ฐ’์— ์ด๋ฆ„์„ ๋ถ™์—ฌ์„œ ์ „๋‹ฌ

  • properties์˜ ์ค„์ž„๋ง

  • ์ •์ , ๋™์  ๋ฐ์ดํ„ฐ(state), ์ปดํฌ๋„ŒํŠธ ์ „๋‹ฌ ๊ฐ€๋Šฅ

  • ์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ props๊ฐ€ ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค, ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ re-render ๋  ๋•Œ๋งˆ๋‹ค re-render๋จ

โ„๏ธ ์ˆœ์ˆ˜ ํ•จ์ˆ˜

  • ๋™์ผํ•œ Input์„ ๋ฐ›์•˜์„ ๋•Œ, ํ•ญ์ƒ ๋™์ผํ•œ Output์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜

  • ํ•จ์ˆ˜ ์‚ฌ์šฉ ์‹œ, ํ•จ์ˆ˜ ๋‚ด์— ์‚ฌ์ด๋“œ์ดํŽ™ํŠธ๊ฐ€ ์—†์–ด์•ผ ํ•จ

8. SRP(๋‹จ์ผ ์ฑ…์ž„ ์›์น™)

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์ด๋ž€ ๋ชจ๋“  ํด๋ž˜์Šค(React๋Š” ์ปดํฌ๋„ŒํŠธ)๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ง€๋ฉฐ, ํด๋ž˜์Šค๋Š” ๊ทธ ์ฑ…์ž„์„ ์™„์ „ํžˆ ์บก์Аํ™”ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ ํ•œ ํด๋ž˜์Šค๋ฅผ ํ•œ ๊ด€์‹ฌ์‚ฌ์— ์ง‘์ค‘ํ•˜๋„๋ก ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ํด๋ž˜์Šค๋ฅผ ๋”์šฑ ํŠผํŠผํ•˜๊ฒŒ ๋งŒ๋“ฆ

์ฑ…์ž„(Responsibility)์„ ๋ณ€๊ฒฝํ•˜๋ ค๋Š” ์ด์œ ๋กœ ์ •์˜ํ•˜๊ณ , ์–ด๋–ค ํด๋ž˜์Šค๋‚˜ ๋ชจ๋“ˆ์€ ๋ณ€๊ฒฝํ•˜๋ ค๋Š” ๋‹จ ํ•˜๋‚˜ ์ด์œ ๋งŒ์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

  • ํด๋ž˜์Šค : ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜๋Š” ์–ธ์–ด์—์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ  ์ค‘ ํ•˜๋‚˜

๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ

๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ(separation of concerns, SoC)๋Š” ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ๋ณ„๋œ ๋ถ€๋ถ„์œผ๋กœ ๋ถ„๋ฆฌ์‹œํ‚ค๋Š” ๋””์ž์ธ ์›์น™ ๊ด€์‹ฌ์‚ฌ๋ž€ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์ •๋ณด์˜ ์ง‘ํ•ฉ์ด๋ฉฐ, ๊ฐ ๋ถ€๋ฌธ์€ ๊ฐœ๊ฐœ์˜ ๊ด€์‹ฌ์‚ฌ๋ฅผ ํ•ด๊ฒฐ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋Š” ์ •๋ณด๋ฅผ ์ž˜ ์ •์˜๋œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ ๋ถ€๋ถ„ ์•ˆ์— ์บก์Аํ™”(์ •๋ณด ์ˆจ๊ธฐ๊ธฐ์˜ ํ•œ ์ˆ˜๋‹จ) ์‹œํ‚ด์œผ๋กœ์จ ๋‹ฌ์„ฑ ๊ณ„์ธตํ™”๋œ ๋””์ž์ธ์€ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ตฌํ˜„ (Ex. ํ‘œํ˜„ ๊ณ„์ธต, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ณ„์ธต, ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต, ํผ์‹œ์Šคํ„ด์Šค ๊ณ„์ธต) ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋Š” ์ถ”์ƒํ™”์˜ ์ผ์ข…

์žฅ์ 

  • ์ฝ”๋“œ์˜ ๋‹จ์ˆœํ™” ๋ฐ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ด (์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์Œ)

  • ๋‹ค๋ฅธ ๋ถ€๋ถ„์˜ ์„ธ์„ธํ•œ ์‚ฌํ•ญ์„ ๋ชจ๋ฅด๋”๋ผ๋„, ํ•˜๋‚˜์˜ ๊ด€์‹ฌ์‚ฌ์˜ ์ฝ”๋“œ ๋ถ€๋ถ„์„ ๊ฐœ์„ ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Œ

9. Atomic Design

์šฐ๋ฆฌ๊ฐ€ ์ž˜ ์•Œ๊ณ  ์žˆ๋Š” ๊ณ„์ธตํ˜• ๊ตฌ์กฐ๋ฅผ ๋ช‡ ๊ฐ€์ง€ ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ๋ฌถ์€ ๋ฐฉ๋ฒ•

  • ์ด๋Œ€๋กœ ํ•ด์•ผ ํ•œ๋‹ค๊ฐ€ ์•„๋‹Œ, ์šฐ๋ฆฌ๊ฐ€ ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋ฐฉ๋ฒ•

  • ๊ฐœ๋…์ ์ธ ๊ฒƒ

  • ์›์†Œ๋“ค์„ ๊ฐ€์ง€๊ณ  ์„ธ์ƒ์„ ๊ตฌ์„ฑํ•˜๋“ฏ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž˜ ์กฐํ•ฉํ•ด ์›ํ•˜๋Š” ๊ฒƒ์„ ๋งŒ๋“ค์ž๋Š” ์˜๋ฏธ

  • ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž˜๊ฒŒ ๋‚˜๋ˆŒ์ˆ˜๋ก atom์— ๊ฐ€๊นŒ์›Œ์ง

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ •๋ณด ์‹œ์Šคํ…œ์— ์งˆ์˜๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ณ ๊ธ‰ ์ปดํ“จํ„ฐ ์–ธ์–ด Ex. GraphQL, SQL

Thinking in React
๐Ÿ”— ์‹ค์Šต ๋งํฌ
GraphQL
raphQL is the better REST
GraphQL Playground
์งˆ์˜์–ด
JSON(JavaScript Object Notation)
XML(Extensible Markup Language)
DSL
์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
Extract Function
Inline Function
Passing Props to a Component
Components์™€ Props
SRP (Single Responsibility Principle)
๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ
Atomic Design
ํฌ์ŠคํŠธ๋งจ
ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ
์Šค์›จ๊ฑฐ
ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ
atomic-design