Skip to content

EASYME-md/client

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

cartoon

๐Ÿ˜‰ EASYME.md

Generic badge Netlify Status
Buy Me a Coffee

#README #Markdown #๋ฆฌ๋“œ๋ฏธ #๋น ๋ฅด๊ณ ์‰ฝ๊ฒŒ #์—๋””ํ„ฐ

README.md๋ฅผ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•! EASYME.md

์‚ฌ์ดํŠธ ๋ฐ”๋กœ ๊ฐ€๊ธฐ ๐Ÿ‘‰ ํด๋ฆญ!


cover

Markdown ๋ฌธ๋ฒ•, ์•Œ๊ณ ๋Š” ์žˆ๋Š”๋ฐ.. README.md ์ž‘์„ฑํ•  ๋•Œ๋งŒ ๋˜๋ฉด ๋ฒ„๋ฒ…๊ฑฐ๋ฆฌ๋Š” ๋‹น์‹ .
์ง€๊ธˆ 'Markdown ์‚ฌ์šฉ๋ฒ•'์ด๋ผ๊ณ  ๊ฒ€์ƒ‰ํ•˜๊ณ  ๊ณ„์‹  ๊ฑฐ ์•„๋‹ˆ์ฃ ? ๐Ÿคญ
์ด์   ๋” ์ด์ƒ ๊ทธ๋Ÿด ํ•„์š”๊ฐ€ ์—†์–ด์š”. EASYME.md๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ Markdown์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฑฐ๋“ ์š”.
์™ผ์ชฝ ํ™”๋ฉด์— ๊ธ€์„ ์ž‘์„ฑํ•˜๋ฉด ์˜ค๋ฅธ์ชฝ ํ™”๋ฉด์— ์‹ค์‹œ๊ฐ„์œผ๋กœ Markdown์ด ์ ์šฉ๋œ ๊ธ€์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”. Markdown ๋ฌธ๋ฒ•์ด ์ž˜ ๊ธฐ์–ต๋‚˜์ง€ ์•Š๋Š”๋‹ค๊ณ ์š”? ๊ดœ์ฐฎ์•„์š”! ๐Ÿ™‚ ํˆด๋ฐ”์ฐฝ์— ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ ์šฉํ•˜๋ฉด ์ž๋™์œผ๋กœ Markdown ๋ฌธ๋ฒ•์ด ์ ์šฉ๋˜๋‹ˆ๊นŒ์š”.
์–ด๋•Œ์š”? ์ด์ œ ์‰ฝ๊ฒŒ README.md๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒ ์ฃ ?

(๐Ÿค™ ์ง€๊ธˆ ์ด ๊ธ€๋„ EASYME.md๋ฅผ ํ†ตํ•ด ์ž‘์„ฑํ•˜์˜€๋‹ต๋‹ˆ๋‹ค)


๐Ÿ“– Contents


๐ŸŒˆ Background

ํŒ€ ํ”„๋กœ์ ํŠธ ๋•Œ, README๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ๊ฒช์—ˆ๋˜ ๋ถˆํŽธํ•จ์„ ํ•ด์†Œํ•˜๊ธฐ ์œ„ํ•ด ์‹œ์ž‘ํ•œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. Markdown ๋ฌธ๋ฒ•์€ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์ž์ฃผ ์“ฐ์ง€ ์•Š๊ธฐ์— ๊ทธ๋•Œ ๊ทธ๋•Œ ์ฐพ์•„์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์™€ ๋น„์Šทํ•œ ๋ถˆํŽธํ•จ์ด ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค๋„ ๋ถ„๋ช… ์žˆ์„๊ฑฐ๋ผ ์ƒ๊ฐ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

EASYME.md๋ฅผ ํ†ตํ•ด ์กฐ๊ธˆ์ด๋ผ๋„ ๊ฐœ๋ฐœ์ž๋“ค์ด README๋ฅผ ์ž‘์„ฑํ•˜๋Š”๋ฐ ๊ฒช๋Š” ๋ถˆํŽธํ•จ์ด ํ•ด์†Œ๋˜๊ธธ ๋ฐ”๋ผ๋Š” ๋งˆ์Œ์œผ๋กœ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ”— Link

Github Repositories


๐Ÿ” Preview

title


๐Ÿ›  Features

  • Screen

    • ์™ผ์ชฝ ํ™”๋ฉด์€ ์ง์ ‘ ํ…์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” Editor์ž…๋‹ˆ๋‹ค.
    • ์˜ค๋ฅธ์ชฝ ํ™”๋ฉด์€ ์™ผ์ชฝ ํ…์ŠคํŠธ ์ž‘์„ฑ์— ๋”ฐ๋ผ Markdown ๋ฌธ๋ฒ•์ด ์ ์šฉ๋œ Preview๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ƒ๋‹จ์— Custom Toolbar๋ฅผ ํ†ตํ•ด ํ…์ŠคํŠธ Style์„ Markdown ๋ฌธ๋ฒ•์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Custom Toolbar

    • ์ปค์„œ ์œ„์น˜, ํ…์ŠคํŠธ ๋“œ๋ž˜๊ทธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ Markdown ๊ธฐ๋Šฅ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • ๋“œ๋ž˜๊ทธํ•œ ์˜์—ญ์„ ๋Œ€์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ˜•์„ ํ•ด์ค๋‹ˆ๋‹ค.
    • ๋“œ๋ž˜๊ทธํ•œ ์˜์—ญ์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.
    • ์ ‘๊ธฐ, ๋ชฉ์ฐจ, ํ…Œ์ด๋ธ” ๋“ฑ์˜ ํ…œํ”Œ๋ฆฟ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • Editor ํ™”๋ฉด๋งŒ ๋ณด๊ธฐ, Markdown ํ™”๋ฉด๋งŒ ๋ณด๊ธฐ, Full Screen ๋ชจ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ๊ณต์œ ํ•˜๊ธฐ / ์ €์žฅํ•˜๊ธฐ

    • ๊ณต์œ ํ•˜๊ธฐ ์•„์ด์ฝ˜ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์ž‘์„ฑํ•œ ๊ธ€์ด ์ €์žฅ๋˜๋ฉฐ ๋งํฌ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
    • ์ž‘์„ฑํ•œ ๊ธ€์„ ์ €์žฅํ•˜๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ์— ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ž‘์„ฑ ๋„์ค‘ ๋‹จ์ถ•ํ‚ค Ctrl+S(Command+S)๋กœ ๊ธ€์„ ์ €์žฅํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“ˆ Release Note

version log
0.1.0 ํˆด๋ฐ”์— ํ…์ŠคํŠธ ์ „์ฒด ์‚ญ์ œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€, Tab Key ๊ธฐ๋Šฅ ์ถ”๊ฐ€
~ 0.0.1 ๊ธฐ๋Šฅ ์ ์šฉ์‹œ ์Šคํฌ๋กค ์ตœ์ƒ๋‹จ์œผ๋กœ ๊ฐ€๋Š” ํ˜„์ƒ ๊ฐœ์„ , ์ €์žฅ ๋ฐ ๊ณต์œ  ๊ธฐ๋Šฅ ๊ฐœ์„ 

โš ๏ธ Requirement

์ตœ์‹  Chrome Browser ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.


โš™๏ธ Installation

Setup

  • Local ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ์‚ฌ์ „ ์ค€๋น„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Client

git clone https://github.com/EASYME-md/client
cd client
npm install
npm start
  • root ๋””๋ ‰ํ† ๋ฆฌ์— .env ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  <>์— ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ž…๋ ฅ ํ›„ ์ €์žฅํ•ด์ฃผ์„ธ์š”.
REACT_APP_SERVER_URI=https://api.easy-me.com
REACT_APP_CLIENT_URI=https://easy-me.com
REACT_APP_TRACKING_ID=<GA Tracking ID>

Server

git clone https://github.com/EASYME-md/server
cd server
npm install
npm start
  • root ๋””๋ ‰ํ† ๋ฆฌ์— .env ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  <>์— ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ž…๋ ฅ ํ›„ ์ €์žฅํ•ด์ฃผ์„ธ์š”.
MONGODB_ADDRESS=<mongoDB address>
CLIENT_URI=https://easy-me.com

๐Ÿชƒ Skills

Client

  • ES2015+
  • React
  • React Router
  • React Helmet
  • Redux Toolkit
  • Redux Saga
  • Google Analytics
  • Emotion

Server

  • ES2015+
  • Node.js
  • Express
  • MongoDB Atlas
  • Mongoose

Test

  • Client: Jest, Testing Library
  • Server: Mocha, Chai, Supertest

๐Ÿช› Project Control

  • Version Control: Git, Github
  • Task Control: Notion, Figma

๐Ÿš€ Deployment

  • Client: Netlify
  • Server: AWS Elastic Beanstalk

๐Ÿง— Challenges

2์ฃผ ๋™์•ˆ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ ๊ฒช์€ ์–ด๋ ค์›€ ๋˜๋Š” ๋„์ „์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.


1. React Quill์„ ์„ ํƒ, ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์•ˆ์—์„œ ๋„์ „

์ดˆ๊ธฐ ์—๋””ํ„ฐ ๊ตฌํ˜„์€ ํ˜„์žฌ ์ž‘์—…์ด ์™„๋ฃŒ๋œ <textarea>๊ฐ€ ์•„๋‹Œ React Quill์ด๋ผ๋Š” ์—๋””ํ„ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๋‹น์‹œ ์—๋””ํ„ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ ํƒํ•  ๋•Œ ์Šค์Šค๋กœ ๋ช‡ ๊ฐ€์ง€ ๊ธฐ์ค€์„ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

Markdown์„ ๋ฏธ๋ฆฌ ๋ณผ ์ˆ˜ ์žˆ์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— Markdown Preview์™€ ์—ฐ๋™์ด ์›ํ™œํ•ด์•ผ ํ•  ๊ฒƒ, Tool์˜ ๊ธฐ๋Šฅ๋“ค์€ ์ง์ ‘ ๊ตฌํ˜„ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— Markdown ๋ฌธ๋ฒ•์„ ์ง์ ‘ ์ œ๊ณตํ•˜๋Š” ์—๋””ํ„ฐ๋Š” ํ”ผํ•  ๊ฒƒ(๋˜๋Š” ์žˆ์–ด๋„ ์‚ฌ์šฉํ•˜์ง€ ๋ง ๊ฒƒ), ์ฆ‰ Toolbar๋ฅผ Customํ•˜๊ฒŒ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ ํƒํ•  ๊ฒƒ. ๊ทธ ์™ธ์—๋„ npm trends๋ฅผ ํ†ตํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํฌ๊ธฐ, ์ด์šฉ์ž ์ˆ˜, ์ด์Šˆ, ์—…๋ฐ์ดํŠธ ๋“ฑ์„ ํ™•์ธํ•˜์˜€๊ณ  ๊ฐ€์žฅ ์ ํ•ฉํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•œ React Quill์„ ์„ ํƒํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

1) ์—๋””ํ„ฐ์— HTML๋ฌธ๋ฒ•์ด ์ž๋™์œผ๋กœ ์ ์šฉ๋˜๋Š” ํ˜„์ƒ

Quill ์—๋””ํ„ฐ์—์„œ ํ…์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์ž๋™์œผ๋กœ HTML๋ฌธ๋ฒ•์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•ˆ๋…•ํ•˜์„ธ์š”๋ผ๋Š” ๊ธ€์ž๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์—๋””ํ„ฐ์—๋Š” ๋ณด์ด์ง€ ์•Š์ง€๋งŒ ๋‚ด๋ถ€์ ์œผ๋กœ <p>์•ˆ๋…•ํ•˜์„ธ์š”</p> ๋ผ๊ณ  ์ ์šฉ์ด ๋˜๋Š” ๊ฒƒ์ด์ฃ . ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๋ฌธ์ œ๋Š” Markdown Preview์—์„œ Markdown ๋ฌธ๋ฒ•์ด ์ œ๋Œ€๋กœ ๋ณด์ด์ง€ ์•Š๊ณ  HTML Tag๊ฐ€ ๊ทธ๋Œ€๋กœ ๋ณด์—ฌ์ง‘๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ…์ŠคํŠธ value๋ฅผ Quill์˜ ๋ฉ”์„œ๋“œ getText()์•ˆ์— ๋„ฃ์–ด์ฃผ๋ฉด HTML Tag๋ฅผ ์ œ์™ธํ•˜๊ณ  ์˜ค์ง ํ…์ŠคํŠธ๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋ ‡๊ฒŒ ํ•  ๊ฒฝ์šฐ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋Š”๋ฐ์š”.

getText()๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๊ธฐ์กด์— ์ž˜ ์ž‘์„ฑ๋˜๋˜ ํ…์ŠคํŠธ๊ฐ€ 1๊ธ€์ž๋งŒ ์ณ์ง„๋‹ค๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” Quill ์ปดํฌ๋„ŒํŠธ์˜ ์†์„ฑ value๋ฅผ defaultValue๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋‹ˆ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋•Œ๊นŒ์ง€๋งŒ ํ•ด๋„ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋ผ๊ณ ๋Š” ์ƒ์ƒํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

2) GET ์š”์ฒญ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ๋•Œ ์ ์šฉ์ด ๋˜์ง€ ์•Š๋Š” ํ˜„์ƒ

๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์ด๊ฒƒ์ด ์œ„์™€ ์—ฐ๊ฒฐ๋˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. defaultValue๋ฅผ ์ ์šฉํ•  ๊ฒฝ์šฐ ์„œ๋ฒ„์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ๋•Œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. defaultValue๋ผ๋Š” ์ด๋ฆ„๊ณผ ๊ฑธ๋งž๊ฒŒ ๊ธฐ์กด์— ์„ธํŒ…ํ•ด๋‘” ํ…์ŠคํŠธ value๋งŒ ๋‚˜์˜ฌ ๋ฟ ์ƒˆ๋กœ ๋ฐ›์•„์˜จ ํ…์ŠคํŠธ value๋Š” ์ ์šฉ๋˜์ง€ ์•Š์•˜๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜๋Œ์•„๊ฐ€์„œ defaultValue๋ผ๋Š” ์†์„ฑ์„ value๋กœ ๋ฐ”๊พธ๋‹ˆ ์ž˜ ์ ์šฉ์ด ๋˜์—ˆ์ง€๋งŒ ์—ญ์‹œ ์œ„์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ 1๊ธ€์ž๋งŒ ์ณ์ง€๋Š” ํ˜„์ƒ์ด ์ƒ๊ฒผ๊ณ  ์ด ๋Œ€๋ฆฝ์˜ ์ƒํ™ฉ์— ์ „์ „๊ธ๊ธํ–ˆ์Šต๋‹ˆ๋‹ค.

์•„, ์ƒํƒœ! ๋– ์˜ฌ๋ž์Šต๋‹ˆ๋‹ค. ํ…์ŠคํŠธ value๋Š” ๋ชจ๋‘ ์ƒํƒœ์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ๊ณต์œ ๋ฉ๋‹ˆ๋‹ค. GET ์š”์ฒญ์œผ๋กœ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ ์—ญ์‹œ ์ƒํƒœ์— ์ €์žฅ๋˜๊ณ  ๊ณต์œ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด defaultValue์— ๊ฐ’์„ ๋„ฃ๊ธฐ ์ „์— ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ณ  ์œ ๋ฌด์— ๋”ฐ๋ผ ๊ฐ’์„ ์ œ์–ดํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ์š”? ๋งž์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์— ํ™”๋ฉด์ด ๋ Œ๋”๋ง ๋  ๋•Œ ๋กœ๋”ฉ ์ƒํƒœ๋กœ ๋‘๊ณ  ๋กœ๋”ฉ ์ƒํƒœ์ผ ๋•Œ ํ™”๋ฉด์„ ๋ณด์—ฌ์ฃผ์ง€ ์•Š๊ธฐ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๋”ฉ ์ƒํƒœ์ผ ๋•Œ GET ์š”์ฒญ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ณ  ์š”์ฒญ์ด ์„ฑ๊ณต ์—ฌ๋ถ€์— ๋”ฐ๋ผ ํ™”๋ฉด์„ ๋ณด์—ฌ์ฃผ๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” ์„ฑ๊ณต์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋กœ์จ ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ์œ ํ•œ์ƒํƒœ๊ธฐ๊ณ„๋ผ๋Š” ๊ฐœ๋…์„ ์ˆ™์ง€ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


2. React Quill์„ ๊ฑท์–ด๋‚ด๋‹ค

Quill์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ๋ฉ”์„œ๋“œ์™€ Custom Toolbar ๋“ฑ์œผ๋กœ ์ž‘์—…์„ ์‹œ์ž‘ํ•œ 1์ฃผ ์ฐจ์— ๊ธฐ๋Šฅ ๊ตฌํ˜„์ด ๊ฑฐ์˜ ๋งˆ๋ฌด๋ฆฌ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒ๊ฐ๋ณด๋‹ค ์ผ์ฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„์ด ๋๋‚ฌ๊ธฐ ๋•Œ๋ฌธ์— ์Šค์Šค๋กœ์—๊ฒŒ๋„ ๊ณ ๋ฏผ์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ ์™ธ์˜ ๊ฒƒ๋“ค์„ ๋” ์‹ ๊ฒฝ ์“ธ ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์ด ํ™•๋ณด๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์€ ๊ธ์ •์ ์ธ ์‚ฌ์‹ค์ด๋‚˜, '๊ธฐ์ˆ ์ ์ธ ๋„์ „๊ณผ ์„ฑ์žฅ'์— ์ดˆ์ ์„ ๋‘์—ˆ์„ ๋•Œ ์Šค์Šค๋กœ ์ด๋กœ์šด ๋ฐฉํ–ฅ์€ ์•„๋‹ ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ณผ๊ฐํ•˜๊ฒŒ Quill์„ ๊ฑท์–ด๋‚ด๊ณ  ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” <textarea>๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ, <textarea>๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์˜คํžˆ๋ ค ์ด๋กœ์šด ์ ์ด ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์— Quill์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ๋Š” Quill์— ์˜์กดํ•˜์—ฌ ์ œํ•œ์ ์ธ ๋ถ€๋ถ„์ด ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. Quill์—์„œ๋Š” module๊ณผ format์„ ์„ธํŒ…ํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ์—ˆ๊ณ , module์•ˆ์— Custom Toolbar์˜ Event Handling์„ ๊ตฌํ˜„ํ•  ๋•Œ ๊ฐ๊ฐ Component๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ Event Handling ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ๋„ฃ์–ด์ค˜์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ๊ฐ์˜ Tool์„ ๋ณด์—ฌ์ฃผ๋Š” Component๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์— ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ๋™์ž‘ํ•˜๋Š” Event Handling ํ•จ์ˆ˜๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋”ฐ๋กœ ๋ฐ”๊นฅ์— ๋งŒ๋“ค์–ด์ฃผ๊ณ  export ์‹œ์ผœ์ค€ ํ•จ์ˆ˜๋ฅผ import ๋ฐ›์•„์„œ module์— ์ ์šฉํ•ด์•ผ๋งŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํด๋” ๊ตฌ์กฐ๋‚˜ ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง„๋‹ค๋Š” ๋‹จ์ ๋„ ์กด์žฌํ–ˆ์Šต๋‹ˆ๋‹ค.

<textarea>๋กœ ๋ณ€๊ฒฝํ•œ ํ›„์— ํ›จ์”ฌ ์œ ์—ฐํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ฐ ๊ธฐ๋Šฅ๊ณผ ๋™์ž‘์„ Component ์•ˆ์—์„œ ๋ชจ๋‘ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. Component๋„ ํ›จ์”ฌ ๊น”๋”ํ•ด์กŒ์Šต๋‹ˆ๋‹ค. Quill ๋‚ด๋ถ€์— ๊ฐ’๋“ค์„ console.log๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ด๊ฐ€๋ฉฐ ๊ธฐ๋Šฅ์„ ์ ์šฉํ–ˆ๋˜ ๊ฒฝํ—˜์ด <textarea>์—์„œ๋„ ๊ณ ์Šค๋ž€ํžˆ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ปค์„œ์˜ ์œ„์น˜, ๋“œ๋ž˜๊ทธ ์˜์—ญ ๊ณ„์‚ฐ, ๋“œ๋ž˜๊ทธ๊ฐ€ ์—ฌ๋Ÿฌ ํ–‰์ผ ๊ฒฝ์šฐ ๊ฐ ํ–‰์˜ ์ฒซ ๋ฒˆ์งธ index๋ฅผ ์ฐพ๋Š” ๊ฒƒ ๋“ฑ <textarea>๊ฐ€ Quill์— ๋น„ํ•ด ์ž˜ ์ •์ œ๋˜์–ด ์žˆ์ง€๋Š” ์•Š์•˜์ง€๋งŒ ๋ณด๋‹ค ๋‚ด๋ถ€ ๋ฉ”์„œ๋“œ๋‚˜ value๊ฐ€ ๋ฐฉ๋Œ€ํ–ˆ๊ณ  ์ž˜ ์ ์šฉํ•˜๊ธฐ๋งŒ ํ•œ๋‹ค๋ฉด ์ œํ•œ์ ์ธ ๋ถ€๋ถ„์ด ๋œํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— <textarea>๋กœ ์ด์ „ํ•œ ๊ฒƒ์€ ์ข‹์€ ๊ฒฐ์ •์ด์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.


3. Redo, Undo๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋‹ค

<textarea>๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ํฐ ๋ฌธ์ œ์ ์ด ํ•˜๋‚˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ redo, undo(Ctrl/Command+Z ํฌํ•จ)๊ฐ€ ์ž‘๋™๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. textarea์˜ current.value ๊ฐ’์„ ์ฐพ์•„์„œ ์ง์ ‘ ๋ณ€๊ฒฝํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „ ๊ฐ’์„ ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•ด document.execCommand()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ MDN์— ๋”ฐ๋ฅด๋ฉด ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ๋ช…์‹œ๋˜์–ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋žœ ์‹œ๋„์™€ ๋„์ „ ๋์— '๋ณ€๊ฒฝ๋œ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ returnํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ returnํ•˜๊ธฐ ์ „์— replace๋ฅผ ํ•ด์ฃผ๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?'๋ผ๋Š” ์•„์ด๋””์–ด๊ฐ€ ๋–  ์˜ฌ๋ž๊ณ  replace()๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ๋๋‚ด ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ์ฑ…์„ ๋งˆ๋ จํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์ฐจ๋ก€ ๋ฐฉ๋ฒ•์„ ๋ชจ์ƒ‰ํ•˜๋˜์ค‘ text-field-edit์ด๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ž์ฒด์ ์œผ๋กœ ํ…์ŠคํŠธ๋ฅผ ๋‹ค๋ฅธ ํ…์ŠคํŠธ๋กœ ๊ฐ์‹ธ์ฃผ๊ฑฐ๋‚˜ insertText ๊ธฐ๋Šฅ ๋“ฑ Markdown ๋ฌธ๋ฒ•์„ ์ ์šฉํ•˜๊ธฐ์— ํ›จ์”ฌ ์ˆ˜์›”ํ•˜๊ฒŒ ์„ค๊ณ„๋˜์–ด ์žˆ์—ˆ๋˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜€์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹จ์ˆœํžˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์‰ฝ๊ฒŒ ์ ์šฉํ•˜๋Š” ๊ฒƒ์€ ์Šค์Šค๋กœ ์„ฑ์žฅ์—๋„ ๋„์›€์ด ๋˜์ง€ ์•Š์„ ๊ฑฐ๋ผ ํŒ๋‹จํ–ˆ๊ณ , textarea ์•ˆ์— ์š”์†Œ๋“ค์„ ํ† ๋Œ€๋กœ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒŒ ๋” ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹ ์— ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ replace ๊ธฐ๋Šฅ๋งŒ ํ™œ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐ์— ์ƒ๊ฐํ–ˆ๋˜ ์•„์ด๋””์–ด์˜ ๊ฐ€๋Šฅ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ณ  ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ replace๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ redo, undo๊ฐ€ ์ž‘๋™๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์•„์ด๋””์–ด๊ฐ€ ์–ด๋Š ์ •๋„ ์ฆ๋ช…๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์—์„œ ๋ฟŒ๋“ฏํ•จ์„ ๋Š๋‚€ ๊ฒƒ์€ ์‚ฌ์‹ค์ด์ง€๋งŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋„์›€ ์—†์ด ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๋˜ ๋งˆ์Œ์ด์—ˆ๊ธฐ์— ๋‚ด์‹ฌ ์•„์‰ฌ์›€๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ์—ฌ๊ธฐ์„œ ๋๋‚ด์ง€ ์•Š๊ณ  ์Šค์Šค๋กœ๊ฐ€ ๋” ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง์ ‘ ๊ตฌํ˜„์— ๋„์ „ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.


๐Ÿ™ ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ..

"๊ฐ€๋Šฅํ• ๊นŒ? ๊ฐ€๋Šฅํ•˜๋‹ค!"

๊ฐœ๋ฐœ์ž๋กœ ์ „ํ–ฅ์„ ๋งˆ์Œ๋จน๊ธฐ ์ „, ์Šคํƒ€ํŠธ์—… ํšŒ์‚ฌ์—์„œ ๋งˆ์ผ€ํ„ฐ๋กœ 3๋…„ ๊ฐ€๊นŒ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ณ ๊ฐ๋“ค์˜ ๋ถˆํŽธํ•จ์„ ํ•ด์†Œํ•ด์ฃผ๋Š” ์ผ๋“ค์„ ์˜†์—์„œ ์ง€์ผœ๋ณด๊ณ  ๋™์ฐธํ•˜๋ฉด์„œ ์–ธ์  ๊ฐ„ '๋‚ด๊ฐ€ ์ง์ ‘ ๋งŒ๋“  ์ œํ’ˆ์ด ๊ณ ๊ฐ๋“ค์˜ ๋ถˆํŽธํ•จ์„ ์กฐ๊ธˆ์ด๋‚˜๋งˆ ํ•ด์†Œํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹๊ฒ ๋‹ค'๋Š” ์ƒ๊ฐ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ์ฒซ ์‹œ์ž‘์ด ์ด ํ”„๋กœ์ ํŠธ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์Šค์Šค๋กœ ๊ณ ๊ฐ(์—ฌ๊ธฐ์„œ๋Š” ์ˆ˜๋งŽ์€ ๊ฐœ๋ฐœ์ž ์ค‘ ํ•œ ๋ช…์ด๊ฒ ์ฃ )์ด ๋˜์–ด README๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๊ฒช์—ˆ๋˜ ๋ถˆํŽธํ•จ์„ ๊ฐœ์„ ํ•ด๋ณด๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ๋จธ๋ฆฟ์†์— ๋‘ฅ๋‘ฅ ๋– ๋‹ค๋‹ˆ๋Š” ์•„์ด๋””์–ด๊ฐ€ '๊ฐ€๋Šฅํ• ๊นŒ?'๋ผ๋Š” ํ˜ธ๊ธฐ์‹ฌ ์–ด๋ฆฐ ๋ฌผ์Œ์—์„œ '๊ฐ€๋Šฅํ•˜๋‹ค!'๋ผ๋Š” ๋งˆ์นจํ‘œ๋ฅผ ์ฐ์—ˆ๋‹ค๋Š” ์ ์—์„œ ์˜๋ฏธ๊ฐ€ ๊นŠ์Šต๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘์œผ๋กœ ์ƒˆ๋กœ์šด ๋งˆ์นจํ‘œ๋“ค์„ ํ•˜๋‚˜๋‘˜์”ฉ ์ฐ์–ด๊ฐ€๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค ๐Ÿ™‚

About

Write the README, now do it easily here!

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published