React Component

데이터

ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμžλŠ” μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€(UI)λ₯Ό κ°œλ°œν•˜μ—¬ μ‚¬μš©μžμ—κ²Œ 데이터λ₯Ό λ³΄μ—¬μ£ΌλŠ” 역할을 λ‹΄λ‹Ήν•œλ‹€.

ReactλŠ” 데이터λ₯Ό UI둜 ν‘œν˜„ν•˜κΈ° μœ„ν•΄ 선언적인 방식(HTMLκ³Ό μœ μ‚¬ν•œ λͺ¨μ–‘μ˜ DSL을 μ‚¬μš©)으둜 κ°œλ°œν•œλ‹€.

λ°±μ—”λ“œλŠ” 데이터λ₯Ό JSON ν˜•νƒœλ‘œ λŒλ €μ£ΌλŠ” APIλ₯Ό μ œκ³΅ν•œλ‹€. (REST API, GraphQL)

REST API

HTTPλ₯Ό μ‚¬μš©ν•΄μ„œ μ„œλ‘œ μ •ν•΄λ‘” μŠ€νŽ™(end point, HTTP Method)을 ν™œμš©ν•˜μ—¬ 데이터λ₯Ό μ£Όκ³ λ°›μœΌλ©° ν†΅μ‹ ν•˜λŠ” 것

  • GET, POST, PUT/PATCH, DELETE -> CRUD

  • Resource 쀑심

REST API의 μ œμ•½μ‘°κ±΄ REST APIλŠ” 4가지 μ œμ•½μ‘°κ±΄μœΌλ‘œ μžμ›μ˜ 식별, 메세지λ₯Ό ν†΅ν•œ λ¦¬μ†ŒμŠ€ μ‘°μž‘, μžκΈ°μ„œμˆ μ  λ©”μ‹œμ§€, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μƒνƒœμ— λŒ€ν•œ μ—”μ§„μœΌλ‘œμ„œ ν•˜μ΄νΌλ―Έλ””μ–΄λ₯Ό λ§Œμ‘±ν•΄μ•Ό ν•˜λŠ”λ° 이미 λ§Žμ€ μ‚¬λžŒλ“€μ΄ 이 μ œμ•½μ‘°κ±΄μ„ 지킀지 μ•Šμ•„λ„ REST API라고 λΆ€λ₯΄κΈ° 떄문에 HTTP API와 같은 의미둜 μ‚¬μš©λ¨

GraphQL

Facebookμ—μ„œ κ°œλ°œν•œ Graph 자료ꡬ쑰의 Query μ–Έμ–΄ 쿼리(Query)λ₯Ό 톡해 μ–»κ³ μž ν•˜λŠ” 것을 μ„ μ–Έν•˜μ—¬ 데이터λ₯Ό μ–»λŠ”λ‹€.

  • 쿼리λ₯Ό κΈ°λ°˜μœΌλ‘œν•˜μ—¬ SQLκ³Ό λΉ„μŠ·ν•˜λ‹€.

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

REST API의 λŒ€μ•ˆμœΌλ‘œ λ‚˜μ˜€κ²Œλœ λ“±μž₯ λ°°κ²½

REST APIλ₯Ό μ‚¬μš©ν•  λ•Œ, ν΄λΌμ΄μ–ΈνŠΈλŠ” ν•„μš”ν•œ 데이터λ₯Ό κ°€μ Έμ˜€κΈ° μœ„ν•΄ μ—¬λŸ¬ 개의 API μ—”λ“œν¬μΈνŠΈλ₯Ό ν˜ΈμΆœν•œλ‹€. μ΄λ•Œ, λΆˆν•„μš”ν•œ 데이터도 ν•¨κ»˜ μ „μ†‘λ˜κΈ° λ•Œλ¬Έμ— λŒ€μ—­ν­ 낭비와 μ„œλ²„ λΆ€ν•˜ μ¦κ°€μ˜ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€.

GraphQL은 μ΄λŸ¬ν•œ λ¬Έμ œμ μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄, ν΄λΌμ΄μ–ΈνŠΈκ°€ ν•„μš”λ‘œ ν•˜λŠ” λ°μ΄ν„°λ§Œμ„ μ„ νƒμ μœΌλ‘œ μš”μ²­ν•˜κ³  μ‘λ‹΅μœΌλ‘œ λ°›μ•„μ˜¬ 수 μžˆλ„λ‘ μ§€μ›ν•œλ‹€.

JSON(Javascript Object Notation)

ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°„ 데이터λ₯Ό κ΅ν™˜ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ§„ 포맷 By Douglas Crockford

ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°„μ˜ 데이터λ₯Ό (HTTP)κ΅ν™˜ν•  λ•Œ 포맷은 JSON ν˜•μ‹μ΄μ§€λ§Œ λ¬Έμžμ—΄λ‘œ λ³€ν™˜λ˜μ–΄ μ£Όκ³  λ°›λŠ”λ‹€.

이런 JSON ν˜•μ‹μ˜ λ¬Έμžμ—΄μ„ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ JSON λ‚΄μž₯ 객체의 λ©”μ„œλ“œκ°€ μ œκ³΅λœλ‹€.

  • JSON.stringify() β†’ JSON 객체λ₯Ό λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•˜λŠ” ν•¨μˆ˜

  • JSON.parse() β†’ JSON ν˜•μ‹μ˜ λ¬Έμžμ—΄μ„ μžλ°”μŠ€ν¬λ¦½νŠΈ 객체둜 λ³€ν™˜ν•΄μ£ΌλŠ” ν•¨μˆ˜

DSL(Domain-Specific Language)

νŠΉμ •ν•œ 도메인에 맞게 μ„€κ³„λœ μ–Έμ–΄

νŠΉμ • λΆ„μ•Ό(도메인)μ—μ„œ 자주 μ‚¬μš©λ˜λŠ” μš©μ–΄μ™€ κ·œμΉ™μ„ κ°–λŠ” μ–Έμ–΄

ν•΄λ‹Ή λΆ„μ•Όμ—μ„œ κ°œλ°œμžλ“€μ΄ λ”μš± μ‰½κ²Œ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλ„λ‘ 도와쀀닀.

  • SQL β†’ λ°μ΄ν„°λ² μ΄μŠ€μ— κ΄€λ ¨λœ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” DSL μ–Έμ–΄ (λ°μ΄ν„°λ² μ΄μŠ€)

  • HTML β†’ μ›Ή νŽ˜μ΄μ§€λ₯Ό κ΅¬μ„±ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” DSL μ–Έμ–΄ (μ›Ή νŽ˜μ΄μ§€)

  • JSX β†’ UIλ₯Ό κ°œλ°œν•˜κΈ° μœ„ν•΄ Javascript + XML 문법을 κ²°ν•©ν•œ DSL μ–Έμ–΄ (UI)

μ„ μ–Έν˜• ν”„λ‘œκ·Έλž˜λ° vs λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ°

μ„ μ–Έν˜• ν”„λ‘œκ·Έλž˜λ°

μ„ μ–Έν˜• ν”„λ‘œκ·Έλž˜λ°μ€ '무엇을' ν•΄μ•Ό ν•˜λŠ”μ§€μ— 초점이 맞좰짐 κ°œλ°œμžλŠ” μ›ν•˜λŠ” κ²°κ³Όλ₯Ό μ„ μ–Έν•˜κ³  컴퓨터가 κ·Έ μ›ν•˜λŠ” μž‘μ—…μ„ λ‹¬μ„±ν•˜κΈ° μœ„ν•΄ 슀슀둜 μ²˜λ¦¬ν•˜λ„λ‘ ν•œλ‹€.

λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ°

λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ°μ€ 'μ–΄λ–»κ²Œ' ν•΄μ•Ό ν•˜λŠ”μ§€μ— 초점이 맞좰짐 κ°œλ°œμžλŠ” 컴퓨터가 μˆ˜ν–‰ν•΄μ•Ό ν•  λͺ…령문을 순차적으둜 μž‘μ„±ν•˜κ³  이λ₯Ό μ‹€ν–‰ν•˜μ—¬ μ›ν•˜λŠ” κ²°κ³Όλ₯Ό μ–»λŠ”λ‹€.

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°

ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” λͺ…λ Ήμ μœΌλ‘œ λ°˜λ³΅λ˜λŠ” μž‘μ—…μ„ μΆ”μƒν™”ν•¨μœΌλ‘œμ¨ λ™μΌν•œ μž‘μ—…μ„ μ„ μ–Έμ μœΌλ‘œ μž‘μ„±ν•  수 있게 ν•΄μ€€λ‹€.

μ»΄ν¬λ„ŒνŠΈ 계측 ꡬ쑰

λ‹¨μˆœν•œ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‘°ν•©ν•˜μ—¬ λ³΅μž‘ν•œ UIλ₯Ό κ΅¬ν˜„ν•œλ‹€. β†’ React κ°•λ ₯ν•œ νŠΉμ§•βœ¨ 쑰합은 κ°€μ§€μˆ˜λ₯Ό 폭발적으둜 늘릴 수 μžˆλŠ” κ°€μž₯ μ „ν˜•μ μΈ 방법

μ»΄ν¬λ„ŒνŠΈλ₯Ό λ‹¨μˆœν•˜κ²Œ κ΅¬ν˜„ν•˜κΈ° μœ„ν•œ λͺ‡κ°€μ§€ κΈ°μ€€

1. SRP(Single Responsibility Principle)

단일 μ±…μž„ 원칙 β†’ ν•˜λ‚˜μ˜ κΈ°λŠ₯은 였직 ν•˜λ‚˜μ˜ μ±…μž„λ§Œ κ°€μ Έμ•Ό ν•œλ‹€.

λͺ¨λ“ˆ, class, ν•¨μˆ˜ 와 같은 μ†Œν”„νŠΈμ›¨μ–΄μ˜ κ΅¬μ„±μš”μ†ŒλŠ” ν•˜λ‚˜μ˜ μ±…μž„λ§Œμ„ κ°€μ Έμ•Ό ν•˜λ©°, 변경이 λ°œμƒν•  λ•ŒλŠ” κ·Έ μ΄μœ κ°€ 단 ν•˜λ‚˜μ—¬μ•Ό ν•œλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.

이 원칙을 μ€€μˆ˜ν•˜λ©΄ μ½”λ“œμ˜ 응집도가 λ†’μ•„μ Έ μ½”λ“œμ˜ ν™•μž₯μ„±κ³Ό μœ μ§€λ³΄μˆ˜μ„±μ΄ 높아진닀.

μ»΄ν¬λ„ŒνŠΈκ°€ 컀지고 μžˆλ‹€λ©΄ SRPλ₯Ό μ€€μˆ˜ν•˜κ³  μžˆλŠ”μ§€ μ κ²€ν•΄λ³΄μž~

SOLID 원칙

Single Responsibility(단일 μ±…μž„)

Open/Close(개방-폐쇄)

Liskov’s Substitution(λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜)

Interface Segregation(μΈν„°νŽ˜μ΄μŠ€ 뢄리)

Dependency Inversion(의쑴 관계 μ—­μ „)

2. CSS

κΈ°λŠ₯λ³„λ‘œ κ΅¬λΆ„ν•˜μ—¬ μž‘μ„±ν•˜λŠ” CSS 클래슀 λͺ…μ΄λ‚˜ Styled Component 넀이밍은 μ»΄ν¬λ„ŒνŠΈλ₯Ό κ³„μΈ΅μ μœΌλ‘œ λ‚˜λˆ„λŠ” κ·œμΉ™μœΌλ‘œ ν™œμš©λ  수 μžˆλ‹€.

μ΄λŸ¬ν•œ 기쀀듀을 적극적으둜 ν™œμš©ν•˜μ—¬ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ„ΈλΆ€μ μœΌλ‘œ λ‚˜λˆ„κ³ , 각 μ»΄ν¬λ„ŒνŠΈκ°€ λͺ…ν™•ν•˜κ²Œ μ—­ν• κ³Ό μ±…μž„μ„ 가지도둝 ꡬ성할 수 μžˆλ‹€.

3. Design Layer

ꡬ쑰적으둜 잘 μ§œμ—¬μ§„ λ””μžμΈμ€ 트리 ν˜•νƒœμΈ λ ˆμ΄μ–΄ ꡬ쑰둜 μ§œμ—¬μ Έ μžˆλ‹€.

λ””μžμΈ ꡬ쑰λ₯Ό ν™œμš©ν•˜μ—¬ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ„ΈλΆ€μ μœΌλ‘œ λ‚˜λˆŒ 수 μžˆλ‹€.

4. Information Arhitecture

JSON Schema의 영ν–₯

μ„œλ²„μ—μ„œ μ£ΌλŠ” 데이터 ꡬ쑰λ₯Ό κΈ°μ€€μœΌλ‘œ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ„€κ³„ν•˜κΈ°λ„ ν•œλ‹€.

보톡은 UI μž‘μ—…μ΄ λ¨Όμ € μ§„ν–‰ν•˜κ³  μ„œλ²„ APIκ°€ 후에 λ‚˜μ˜€κΈ° λ•Œλ¬Έμ— UI λ””μžμΈμ— 더 μ ν•©ν•œ ν˜•νƒœλ‘œ μ„œλ²„ μΈ‘ 데이터λ₯Ό μž¬κ°€κ³΅ν•˜κ±°λ‚˜, 데이터 ꡬ쑰λ₯Ό λ³€κ²½ν•΄λ‹¬λΌλŠ” μš”μ²­μ„ μ„œλ²„ κ°œλ°œμžμ—κ²Œ ν•  λ•Œλ„ μžˆλ‹€.

μžμ—°μŠ€λŸ¬μš΄ SRPλ₯Ό μœ„ν•΄μ„œ 사싀상 κ°•μ œλ˜λŠ” 뢀뢄이기도 ν•˜λ‹€.

Atomic Design

μš°λ¦¬κ°€ 잘 μ•Œκ³  μžˆλŠ” 계측적 ꡬ쑰λ₯Ό λͺ‡κ°€μ§€ μΉ΄ν…Œκ³ λ¦¬λ‘œ 묢은 방법 [μžμ„Ένžˆλ³΄κΈ°]

μ»΄ν¬λ„ŒνŠΈκ°€ λ§Žμ•„μ‘Œμ„λ•Œ 계측 ꡬ쑰λ₯Ό μ μ ˆν•˜κ²Œ λ§Œλ“€ 수 μžˆλŠ” μ•„ν‚€ν…μ²˜λ₯Ό 제곡

μ•„ν† λ―Ή λ””μžμΈμ—μ„œ μ œμ‹œν•˜λŠ” κ°€μ΄λ“œλΌμΈμ— λ”± 맞좰 λ””μžμΈμ„ ν•˜λΌλŠ” 것이 μ•„λ‹ˆλΌ, μ•„ν† λ―Ή λ””μžμΈμ˜ κ°œλ…μ„ μ΄ν•΄ν•˜κ³  그에 κΈ°λ°˜ν•˜μ—¬ μžμ‹ μ˜ μž‘μ—…μ— μ μš©ν•˜λΌλŠ” μ˜λ―Έμ΄λ‹€.

atoms, molecules, organisms, templates, pages λ“± λͺ¨λ“  λ ˆμ΄μ–΄λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ•„λ„ 됨

atoms, molecules만 μ‚¬μš©ν•˜λŠ”κ³³λ„ 많음, κ·ΈλŸ¬λ‹ˆ ν”„λ‘œμ νŠΈμ— 맞좰 μ»€μŠ€ν…€

  • pages에 κ°€κΉŒμ›Œμ§ˆμˆ˜λ‘ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ λ‹€μˆ˜ μ²¨κ°€ν•˜κ²Œ λ˜λŠ” ꡬ쑰

  • atomsλŠ” μˆœμˆ˜ν•œ λ ˆμ΄μ•„μ›ƒ ꡬ쑰만 가지고 μžˆλ‹€κ³  μƒκ°ν•˜λ©΄ 됨

  • μ»€λ‹€λž€ 규λͺ¨μ˜ ν”„λ‘œμ νŠΈλŠ” λ””μžμΈ μ‹œμŠ€ν…œμ΄ λ³„λ„λ‘œ 있고, λ””μžμΈ μ‹œμŠ€ν…œμ„ μ‚¬μš©ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ λ ˆμ΄μ•„μ›ƒμ˜ μ‘μ§‘μœΌλ‘œ atomsλ₯Ό μ‚¬μš©ν•˜κΈ°λ„ ν•œλ‹€. moleculesλŠ” topbar와 같은 λΉ„μ¦ˆλ‹ˆμŠ€μ˜ μ΅œμ’… 결정체가 λ˜κΈ°λ„ν•¨

κ³ λ―Όν•˜λ©΄ 쒋은 것듀

  • ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈλŠ” λΉ„μ¦ˆλ‹ˆμŠ€μ— κ°€κΉŒμš΄μ§€, 곡톡 μ»΄ν¬λ„ŒνŠΈμ— κ°€κΉŒμš΄μ§€

    • 곡톡 μ½”λ“œμ— 가깝닀면 곡톡 λ ˆμ΄μ•„μ›ƒμ„ μ •μ˜ν•˜κ³ , ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈμ—λŠ” λ§ˆν¬μ—… λ‘œμ§λ§Œμ„ κ°–κ²Œν•˜μž.

  • λΉ„μ¦ˆλ‹ˆμŠ€λ₯Ό μ œκ³΅ν•œλ‹€λ©΄ λ‘œμ§μ€ μ»€μŠ€ν…€ ν›…μœΌλ‘œ 뢄리

    • λ‹¨μˆœν•œ useState라도 μ»€μŠ€ν…€ ν›…μœΌλ‘œ λ³„λ„λ‘œ κ΄€λ¦¬ν•˜λŠ”κ²Œ μ’‹λ‹€.

    • λΉ„μ¦ˆλ‹ˆμŠ€ λ ˆμ΄μ•„μ›ƒμ€ μ–Έμ œλ“ μ§€ 변경될 수 μžˆμœΌλ―€λ‘œ μƒνƒœ, λ‘œμ§μ€ ν›…μœΌλ‘œ 뢄리

  • μ»΄ν¬λ„ŒνŠΈμ˜ 계측을 λ§Œλ“€μž.

    • 곡톡/λΉ„μ¦ˆλ‹ˆμŠ€ λ“±μ˜ μ‚¬μš©λ˜λŠ” κ΄€μ μ˜ 계측, μ½”λ“œ λ ˆλ²¨μ—μ„œ λΆ„λ¦¬ν•˜κΈ° μœ„ν•œ κ³„μΈ΅μ˜ ν•„μš”

Compound Pattern

  • μ•„ν† λ―Ήν•œ μƒνƒœ, λ ˆμ΄μ•„μ›ƒμ„ μƒν˜Έ μ°Έμ‘°ν•˜λŠ” atomicν•œ ν”„λ‘ νŠΈ ν™˜κ²½μ—μ„œ 자주 μ‚¬μš©λ˜λŠ” νŒ¨ν„΄

  • μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈλ“€μ„ λͺ¨μ•„ ν•˜λ‚˜μ˜ λ™μž‘μœΌλ‘œ μ‚¬μš©ν•˜κΈ° μœ„ν•¨

  • λ™μž‘ κ΅¬ν˜„μ— ν•„μš”ν•œ μƒνƒœλ“±μ„ λ‚΄λΆ€ context λ“±μœΌλ‘œ 가지고 μžˆκΈ°μ— λ‚΄λΆ€ λ™μž‘μ΄ λ“€μ–΄λ‚˜μ§€ μ•ŠμŒ

  • λ‚΄λΆ€ λ™μž‘μ΄ λ“€μ–΄λ‚˜μ§€ μ•ŠκΈ°μ— 주석 등에 μ˜μ‘΄ν•˜μ—¬, μ‚¬μš© ν˜•νƒœκ°€ ν•˜λ‚˜λ‘œ κ³ μ •λ˜λŠ” 단점 쑴재

  • λ””μžμΈ μ‹œμŠ€ν…œ, ν˜Ήμ€ μ—¬λŸ¬ μ°Έμ‘°ν•˜λŠ” λ ˆμ΄μ•„μ›ƒ 사둀에 적합함

    • ex: λ²„νŠΌμ— left, right에 μΆ”κ°€μ μœΌλ‘œ λ“€μ–΄κ°ˆ 수 μžˆλŠ” λ ˆμ΄μ•„μ›ƒμ΄ λ“€μ–΄κ°€λŠ” νŒ¨ν„΄μ΄ μžˆλ‹€λ©΄ leftSide, rightSIdeλ₯Ό μ»΄ν¬λ„ŒνŠΈν™” ν•˜μ—¬ μ—°κ²°ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” λ“± 쀑볡 λ‘œμ§μ— λŒ€ν•΄ μΌ€μ–΄ν•  수 μžˆλ”°.γ„΄

Last updated