Skip to content

Latest commit

ย 

History

History
340 lines (238 loc) ยท 10.2 KB

README.md

File metadata and controls

340 lines (238 loc) ยท 10.2 KB

Notion

ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋Š” Notion์„ react๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง์ ‘ ๋ ˆ์ด์•„์›ƒ๊ณผ ๊ธฐ๋Šฅ๋“ค์„ ๋ถ„์„ํ•˜ ํด๋ก  ์ฝ”๋”ฉํ•œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

Index


1. Tech skill & Built with

1) Tech skill

  • HTML
  • Type script , Java Script
  • SCSS , styled-components
  • React
  • Redux

2) Built with

  • sass
  • node-html-markdown
  • react-contenteditable
  • react-icons
  • react-redux, redux
  • react-router-dom
  • styled-component
  • react-helmet-async

2. Getting start

1) Install

 npm i

2) Start

npm run start

3.Description

1) Layout

Main

  • Sidebar
  • Editor
    • TopBar
    • Frame
      • Page header
      • Page content
        • block

Template


2) Data

A. State

a. Notion

Notion state๋Š” ์‚ฌ์ดํŠธ์—์„œ ์ƒ์„ฑ๋˜๋Š” page,block,comment๋“ค ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

* Notion state ๊ฐ€ ๋‹ด๊ณ  ์žˆ๋Š” data
  * page : ์œ ์ €๊ฐ€ ์ƒ์„ฑํ•œ ํŽ˜์ด์ง€
  * trash : ์‚ญ์ œ๋œ ํŽ˜์ด์ง€
  * template : ํŽ˜์ด์ง€์˜ ํ…œํ”Œ๋ฆฟ๋“ค

b. User

User state ๋Š” ํ•ด๋‹น Notion์„ ์‚ฌ์šฉํ•˜๋Š” user์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
  • User state ๊ฐ€ ๋‹ด๊ณ  ์žˆ๋Š” data
    • user name
    • user email
    • ์ฆ๊ฒจ ์ฐพ๊ธฐ ๋ชฉ๋ก
    • ์ตœ๊ทผ ๋ฐฉ๋ฌธํ•œ ํŽ˜์ด์ง€ ๋ชฉ๋ก

c. Side

Side state๋Š” side bar์˜ ํ˜•ํƒœ์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

* side bar ํ˜•ํƒœ
  * lock : ์™ผ์ชฝ์— ๊ณ ์ •๋จ
  * close : ์™ผ์ชฝ์— ๊ณ ์ •๋˜์—ˆ๋˜ side bar๊ฐ€ ํ™”๋ฉด์ƒ์—์„œ ์‚ฌ๋ผ์ง
  * float , floatHide : ๋ฒ„ํŠผ์— ๋งˆ์šฐ์Šค๋ฅผ ๋˜๋ฉด side bar๊ฐ€ ๋‚˜ํƒ€๋‚˜๊ณ  (float) ๋งˆ์šฐ์Šค๋ฅผ ๋–ผ๋ฉด ์‚ฌ๋ผ์ง€๋Š”(floatHide) ํ˜•ํƒœ

๐Ÿ”— State์—์„œ ์‚ฌ์šฉ๋œ type๋“ค์— ๋Œ€ํ•œ wiki ํŽ˜์ด์ง€๋กœ ์ด๋™

B. Component

๐Ÿ”— Component์— ๋Œ€ํ•œ wiki ํŽ˜์ด์ง€๋กœ ์ด๋™

3) Function

๋ ˆ์ด์•„์›ƒ์„ ๊ธฐ์ค€์œผ๋กœ notion์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋“ค์ž…๋‹ˆ๋‹ค.

A. Sidebar

Sidebar simulation

  • ์‚ฌ์ด๋“œ๋ฐ” ๋ชจ์–‘ ๋ณ€๊ฒฝ(์™ผ์ชฝ์— ๊ณ ์ •, ๊ฐ์ถ”๊ธฐ, ๋„์šฐ๊ธฐ)
  • Quick Find: ํŽ˜์ด์ง€ ์ฐพ๊ธฐ
  • ํŽ˜์ด์ง€์˜†์— ์ƒ์„ฑ๋˜๋Š” ๋ฉ”๋‰ด๋ฒ„ํŠผ: ํŽ˜์ด์ง€ ์ƒ์„ฑ,์‚ญ์ œ,ํŽ˜์ด์ง€ ํƒ€์ดํ‹€์ด๋‚˜ ์•„์ด์ฝ˜ ๋ณ€๊ฒฝ, ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™, ์ฆ๊ฒจ์ฐพ๊ธฐ์— ์ถ”๊ฐ€ ๋˜๋Š” ์‚ญ์ œ
  • ํœด์ง€ํ†ต : ์‚ญ์ œ๋œ ํŽ˜์ด์ง€ ์˜๊ตฌ ์‚ญ์ œ ๋˜๋Š” ๋ณต๊ตฌ

B. Templates

๐Ÿ“ผ Templates simulation

  • template ์—ด๊ธฐ
  • template ์ˆ˜์ •
  • template ์ƒ์„ฑ
  • template ์‚ญ์ œ
  • template ์ด์šฉ
    • use template ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ํ˜„์žฌ ์˜คํ”ˆ๋œ ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ์ด template์˜ ๋‚ด์šฉ์œผ๋กœ ๊ต์ฒด๋จ

C. Editor

๐Ÿ“ผ Export page to PDF or Html or Markdown simulation

a. TopBar

๐Ÿ“ผ TopBar simulation

  • ํŽ˜์ด์ง€ ๊ฒฝ๋กœ ํ‘œ์‹œ, ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™
  • ํ˜„์žฌ ํŽ˜์ด์ง€๋‚ด ๋ชจ๋“  ์ฝ”๋ฉ˜ํŠธ ๋ณด๊ธฐ
  • ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€, ์‚ญ์ œ
  • ํŽ˜์ด์ง€ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ: ๊ธ€์žํฌ๊ธฐ,๊ธ€์ž ์Šคํƒ€์ผ, ํŽ˜์ด์ง€ ๋„ˆ๋น„
  • ํŽ˜์ด์ง€ ์‚ญ์ œ
  • ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™
  • ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ pdf,html,markdown ํ˜•ํƒœ๋กœ ์ €์žฅ (ํ˜„์žฌ ํŽ˜์ด์ง€ ๋‚ด์˜ ์ด๋ฏธ์ง€ ํŒŒ์ผ ํฌํ•จ์—ฌ๋ถ€์™€ ํ˜„์žฌ ํŽ˜์ด์ง€ ๋‚ด์˜ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋„ ์ €์žฅํ•˜๋Š” ์ง€ ์—ฌ๋ถ€ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Œ)

b. Frame

a) PageHeader

  • ํ˜„์žฌ page์˜ ํƒ€์ดํ‹€, ์•„์ด์ฝ˜, ์ปค๋ฒ„, comment ์ถ”๊ฐ€/๋ณ€๊ฒฝ/์‚ญ์ œ ๊ฐ€๋Šฅ

๐Ÿ“ผ pageHeader simulation

b) PageContent

  • ์ฃผ์†Œ์ฐฝ์œผ๋กœ ํŽ˜์ด์ง€๊ฐ„ ์ด๋™ ๊ฐ€๋Šฅ

    • ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํŽ˜์ด์ง€ ์ž…๋ ฅ์‹œ , ํŽ˜์ด์ง€ ์—†์Œ์ด๋ผ๋Š” ํ™”๋ฉด์ด ๋‚˜์˜ด
    • ๊นƒํ—™์˜ ์ƒˆ๋กœ ๊ณ ์นจ ์ด์Šˆ๋กœ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ๋งŒ ๊ฐ€๋Šฅ
  • ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€ ์ž‘์„ฑ ์‹œ ์˜ต์…˜ ์„ ํƒ

    • ์˜ต์…˜
      • ํŽ˜์ด์ง€ ์•„์ด์ฝ˜ ์ถ”๊ฐ€
      • ํŽ˜์ด์ง€ ์•„์ด์ฝ˜์„ ๋žœ๋ค์œผ๋กœ ์ถ”๊ฐ€
      • ํ…œํ”Œ๋ฆฟ ์ด์šฉ
  • ํŽ˜์ด์ง€ ๋‚ด ๊ธ€ (block)์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ

    • block์ƒ์„ฑ
      • ํŽ˜์ด์ง€ ํ•˜๋‹จ ํด๋ฆญ ์‹œ ์ƒˆ๋กœ์šด ๋ธ”๋ก ์ƒ์„ฑ
      • ์ž‘์„ฑ ์ค‘์ธ block์—์„œ enter ํ‚ค ๋ˆ„๋ฅด๋ฉด, ๋์—์„œ ๋ˆ„๋ฅผ ๊ฒฝ์šฐ๋Š” ๋‚ด์šฉ์ด ๋นˆ ๋ธ”๋ก์ด ์ƒ์„ฑ๋˜๊ณ  block์˜ ๋‚ด์šฉ ์ค‘๊ฐ„์—์„œ enterํ‚ค ๋ˆ„๋ฅด๋ฉด ์ปค์„œ ๋’ท ๋ถ€๋ถ„์˜ ๋‚ด์šฉ์„ ๊ฐ€์ง„ ๋ธ”๋ก์ด ์ƒ์„ฑ
      • ๋ธ”๋Ÿญ ์˜†์— ์ƒ์„ฑ๋œ "+" ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์„œ ์ƒˆ๋กœ์šด ๋ธ”๋ก ์ƒ์„ฑ
    • block ๋ณต์ œ
    • block ๋‚ด์šฉ ์ˆ˜์ •
    • image ํƒ€์ž…์˜ block์˜ ๊ฒฝ์šฐ image์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์ˆ˜์ • ๊ฐ€๋Šฅ
    • block ํƒ€์ž… ์ˆ˜์ •
    • ๋นˆ ๋ธ”๋ก์—์„œ "/" ์ž…๋ ฅ์œผ๋กœ ๋ธ”๋ก ํƒ€์ž…์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” command ์ฐฝ์„ ์—ด์–ด์„œ ๋ธ”๋ก ํƒ€์ž…์„ ์ˆ˜์ •
    • ๋ฉ”๋‰ด(Menu), ๋ธ”๋Ÿญ ๋‚ด ๋‚ด์šฉ ์„ ํƒ(BlockStyler)์„ ํ†ตํ•ด์„œ ํƒ€์ž… ์ˆ˜์ •
    • block ์Šคํƒ€์ผ ๋ณ€๊ฒฝ
      • block ์ „์ฒด ์Šคํƒ€์ผ ๋ณ€๊ฒฝ (Menu)
      • block ๋‚ด ์ผ๋ถ€ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ (BlockStyler)
    • block์— ๋งํฌ ์ถ”๊ฐ€
    • block์— ๋Œ€ํ•œ comment ์ƒ์„ฑ,comment ์†์„ฑ(open,resolve)๋ณ€๊ฒฝ, ์‚ญ์ œ
    • block ์‚ญ์ œ
      • ๋‚ด์šฉ์ด ๋นˆ ๋ธ”๋ก์—์„œ backspace๋ฅผ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ๋ธ”๋ก ์‚ญ์ œ
      • ๋ฉ”๋‰ด์—์„œ ํ•ด๋‹น ๋ธ”๋ก ์‚ญ์ œ ๊ฐ€๋Šฅ
    • page ๋‚ด block ์œ„์น˜ ๋ณ€๊ฒฝ
      • ๋งˆ์šฐ์Šค ๋“œ๋ž˜๊ทธ๋ฅผ ํ†ตํ•ด block ์˜ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝ
      • ๋ณ€๊ฒฝ๋œ ์œ„์น˜์— ๋”ฐ๋ผ block์˜ ๋ถ€๋ชจ block๊ณผ subBlock(์ž์‹ block), page.firstBlocksId ์— ๋ณ€๋™ ์‚ฌํ•ญ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์Œ
    • tab ํ‚ค์™€ backspace ํ‚ค๋ฅผ ํ†ตํ•ด block ๋“ค์—ฌ์“ฐ๊ธฐ ๋‚ด์—ฌ์“ฐ๊ธฐ ๊ฐ€๋Šฅ
    • ํ‚ค๋ณด๋“œ ๋ฐฉํ–ฅํ‚ค๋ฅผ ํ†ตํ•œ ๋ธ”๋ก๊ฐ„์˜ ์ปค์„œ ์ด๋™
    • ๋ธ”๋Ÿญ์„ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™
  • comment

    • ๋ธ”๋ก ์ „์ฒด๋‚˜ ๋ธ”๋ก์˜ ์ผ๋ถ€๋ถ„์— ๋Œ€ํ•œ comment ์ƒ์„ฑ ๊ฐ€๋Šฅ
    • comment ์‚ญ์ œ,์ˆ˜์ •,์ˆ˜์ • ์ทจ์†Œ ๊ฐ€๋Šฅ
    • comment ํƒ€์ž…์€ open->resolve๋กœ ์ˆ˜์ • ๊ฐ€๋Šฅ

๐Ÿ“ผ PageContent simulation

์ฃผ์†Œ์ฐฝ์„ ์ด์šฉํ•œ ํŽ˜์ด์ง€ ์ด๋™

์ฃผ์†Œ์ฐฝ์„ ์ด์šฉํ•œ ํŽ˜์ด์ง€ ์ด๋™

block ์ƒ์„ฑ ๋ฐ ํƒ€์ž… ๋ณ€๊ฒฝ

make newBlock and change block type

image ํƒ€์ž… ๋ธ”๋Ÿญ ์ƒ์„ฑ ๋ฐ image ์‚ฌ์ด์ฆˆ ๋ณ€๊ฒฝ

imgBlock

comment


blockStyler

blockStyler_web


๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ๋ธ”๋ก ์ด๋™

๋ธ”๋ก ์œ„์น˜ ๋ณ€๊ฒฝ


๊ธฐํƒ€: ํ‚ค๋ณด๋“œ๋ฅผ ํ†ตํ•œ ์กฐ์ž‘, ๋ธ”๋Ÿญ ์‚ญ์ œ, ๋ธ”๋Ÿญ ๋‚ด์šฉ ์„ ํƒ๋“ฑ๋“ฑ

etc function

c) mobile browser

mobile browser

4. Update

๐Ÿ”ง2022.12 ์—…๋ฐ์ดํŠธ

  • sideBar,allComment ๋ณ€๊ฒฝ
  • ๋ชจ๋ฐ”์ผ์—์„œ๋„ ImageContent ์‚ฌ์ด์ฆˆ ๋ณ€๊ฒฝ๊ฐ€๋Šฅํ•˜๋„๋ก ์ˆ˜์ •

๐Ÿ”ง2023.3 ์—…๋ฐ์ดํŠธ ๋ฐ ์ˆ˜์ •

  • ๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉ๋  block ์— ๋Œ€ํ•œ ๋ฉ”๋‰ด์™€ ๊ทธ ์‚ฌ์ด๋“œ ๋ฉ”๋‰ด๋ฅผ ๋‹ด๋‹นํ•˜๋Š” MobileBlockMenu, MobileSideMenu ์ถ”๊ฐ€
  • ๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ block์˜ contents ์ค‘ ํŠน์ • ๊ธ€์ž๋ฅผ ์„ ํƒํ•  ๋•Œ ํ•ด๋‹น ๊ธ€์ž์— ๋Œ€ํ•œ BlockStyler ์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ˆ˜์ •
  • block ์ „์ฒด ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ผ๋ถ€ ๋‚ด์šฉ์— ๋Œ€ํ•ด์„œ๋„ comment ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Œ
  • ๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ธ”๋Ÿญ๊ฐ„ ์ด๋™์ด ์•ˆ๋˜๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

๐Ÿ”ง2023.7-8 ์—…๋ฐ์ดํŠธ ๋ฐ ์ˆ˜์ •

  • ์ด๋ฏธ์ง€ ํฌ๊ธฐ ์กฐ์ ˆ ๋ฒ„ํŠผ ์˜ค๋ฅ˜ ์ˆ˜์ •
  • react ์ตœ์ ํ™” ์™„๋ฃŒ
  • ์ฐพ๋Š” ํŽ˜์ด์ง€๊ฐ€ ์—†๊ฑฐ๋‚˜, ํŽ˜์ด์ง€ ์ž์ฒด๊ฐ€ ์—†์„๋•Œ ๋ณด์ด๋Š” ํ™”๋ฉด ์˜ค๋ฅ˜ ์ˆ˜์ •
  • ๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ €์˜ ์Šคํฌ๋กค ์˜ค๋ฅ˜ ์ˆ˜์ •
  • HashRouter ์—์„œ BrowserRouter ๋ณ€๊ฒฝ
  • react-helmet-async๊ณผ robots.txt๋ฅผ ํ™œ์šฉํ•œ SEO ๊ฐœ์„ 
  • ๊นƒํ—™ ํŽ˜์ด์ง€์—์„œ ์ฃผ์†Œ์ฐฝ ๋ณ€๊ฒฝ์œผ๋กœ ํŽ˜์ด์ง€ ์ด๋™ ์‹œ ์ฟผ๋ฆฌ ์Šคํฌ๋ง์œผ๋กœ ์ธํ•œ ์˜ค๋ฅ˜ ์ˆ˜์ •
  • css-sprite, webP ํ˜•์‹ ์ด๋ฏธ์ง€ ์‚ฌ์šฉ์œผ๋กœ ์ด๋ฏธ์ง€ ์ตœ์ ํ™”
    • gif๋ฅผ ์ œ์™ธํ•œ ์ด๋ฏธ์ง€๋“ค์„ webPํ˜•์‹์œผ๋กœ ์ €์žฅ๋˜๊ณ  ์ƒ์„ฑ๋˜๋ฉฐ, webP๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” jpeg ํ˜•์‹์„ ์ง€์›ํ•˜๋„๋ก ํ•จ
  • ๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ธ”๋Ÿญ ์ด๋™,selection ๊ธฐ๋Šฅ ์‚ฌ์šฉ ์‹œ ๋งค๋„๋Ÿฝ์ง€ ๋ชปํ•œ ๋ถ€๋ถ„ ์ˆ˜์ •
  • ๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์Šคํฌ๋กค๋กœ ์ธํ•œ "overflow:hidden" ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •
  • react-window ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉํ•ด, page ๋ชฉ๋ก ๋‚˜์˜ค๋Š” ๋ถ€๋ถ„ ์ตœ์ ํ™”
  • ๊ธ€์ž, ์•„์ด์ฝ˜์˜ ์ƒ‰์ƒ ๋Œ€๋น„ ๊ฐœ์„ 

๐Ÿ”ง 2023.12 ์—…๋ฐ์ดํŠธ

  • React Portals๋ฅผ ์ด์šฉํ•ด ๋ชจ๋‹ฌ ๋ฆฌํŒฉํ† ๋ง ์ง„ํ–‰