[React 01] - Node.js, NPM, JSX, CSS-IN-JS

yiwoojungยท2022๋…„ 6์›” 30์ผ
0

{C} Codecamp FE 06

๋ชฉ๋ก ๋ณด๊ธฐ
1/21
post-thumbnail

๋“ค์–ด๊ฐ€๊ธฐ ์ „..

ํ”„๋ก ํŠธ์—”๋“œ๋Š” UI๋งŒ ๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ์ด ์•„๋‹Œ๊ฐ€? ๋ผ๋Š” ์˜คํ•ด๊ฐ€ ๋งŽ๋‹ค.
ํ•˜์ง€๋งŒ ํ”„๋ก ํŠธ์—”๋“œ๋Š” UI 50% ๊ทธ๋ฆฌ๊ณ  javascript์™€ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์ด 50%๋ฅผ ์ด๋ฃฌ๋‹ค. 
UI๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ†ต์‹  ๋ถ€๋ถ„๋„ ๋“ค์–ด๊ฐ€์•ผ ํ”„๋ก ํŠธ์—”๋“œ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ—ฟ ์˜ค๋Š˜์˜ ๋ชฉํ‘œ

  1. Node.js
  2. NPM (node package module)
  3. React์˜ ์ƒˆ๋กœ์šด HTML, CSS, JS
  4. JSX์™€ CSS-IN-JS

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ์ „ ํ”„๋กœ๊ทธ๋žจ ์„ค์น˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

- OS(์šด์˜์ฒด์ œ Operating System - mac, window, linux ๋“ฑ ๋‚ด ์ปดํ“จํ„ฐ)์— ํ”„๋กœ๊ทธ๋žจ ์„ค์น˜
- ํด๋”์— ํ”„๋กœ์ ํŠธ ์„ค์น˜ํ•˜๊ธฐ

๊ทธ ์ „์— Node.js์™€ npm์ด ๋ฌด์—‡์ธ์ง€ ๊ทธ๋ฆฌ๊ณ  ์™œ ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž.


1. Node.js

- ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ๋„๊ตฌ

์˜ˆ์ „์—๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ• ์—†์ด HTML, CSS, JS๋ฅผ ๊ฐ€์ง€๊ณ  ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋งŒ๋“ค์–ด์™”๋‹ค.
๊ทธ๋ž˜์„œ ํ™ˆํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด๋ดค๋‹ค ํ•˜๋ฉด JS๋ฅผ ํ•ด๋ณธ ๊ฒฝํ—˜์ด ๋ฌด์กฐ๊ฑด ์žˆ์—ˆ๋‹ค.
์–ด๋–ค ๊ฐœ๋ฐœ์ž์ด๊ฑด๊ฐ„์— JS๋ฅผ ์•ˆํ•ด๋ณธ ์‚ฌ๋žŒ์ด ์—†์—ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
ํŒŒ์ด์ฌ, ์ž๋ฐ” ๋“ฑ์˜ ์–ธ์–ด๋“ค์ด ์žˆ๋Š”๋ฐ ์ด๊ฒƒ๋“ค๋กœ๋Š” ๊ฒŒ์ž„์ด๋‚˜ ๋ฉ”ํฌ๋กœ ๋“ฑ์„ ๋งŽ์ด ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ JS๋กœ๋Š” ๊ฒŒ์ž„ ๋“ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์—†์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜์˜จ๊ฒƒ์ด Node.js์ด๋‹ค. Node.js๋Š” ํŒŒ์ด์ฌ์ด๋‚˜ ์ž๋ฐ”, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๊ฐ™์€ ์–ธ์–ด๊ฐ€ ์•„๋‹ˆ๋ผ ์–ธ์–ด(์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ)๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ๋„๊ตฌ์ด๋‹ค.

https://nodejs.org/ko/

๋ฒ„์ „์ด ๋†’๋‹ค๊ณ ํ•ด์„œ ๋ฌด์กฐ๊ฑด ์ข‹์€๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. 
์•ˆ์ •์ ์ด๊ณ  ์‹ ๋ขฐ๋„๊ฐ€ ๋†’์€ 16.15.1 ๋ฒ„์ „์œผ๋กœ ๋‹ค์šด๋ฐ›๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค!

2. NPM (node package module) - npmjs.com

- ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ํŒจํ‚ค์ง• ๋œ ๋ชจ๋“ˆ์ด ๋ญ‰์ณ์ ธ ์žˆ๋Š” ์‚ฌ์ดํŠธ

๊ทธ๋ž˜์„œ ์ด์ œ ์‚ฌ๋žŒ๋“ค์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋„๊ตฌ๋“ค์„ ๋งŒ๋“ค๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์บ๋Ÿฌ์…€์„ ๋งŒ๋“ ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ ๋ชปํ•ด๋„ 2~300์ค„์˜ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๊ฑธ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋†“๊ณ  ์†Œ์Šค์ฝ”๋“œ๋งŒ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์–ผ๋งˆ๋‚˜ ํšจ์œจ์ ์ผ๊นŒ?๋ผ๋Š” ์ƒ๊ฐ์„ ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ  ๊ทธ๋ž˜์„œ ์ด๊ฒƒ(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)์„ ๊ณต์œ ํ•˜๋Š” ๋ฌธํ™”๊ฐ€ ์ƒ๊ธฐ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์—…๋กœ๋“œํ•˜๊ณ  ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ดํŠธ๊ฐ€ ์ƒ๊ฒผ๊ณ  ๊ทธ๊ฒƒ์ด npm์ด๋‹ค.

๋” ํšจ์œจ์ ์œผ๋กœ ์›น์‚ฌ์ดํŠธ๋ฅผ ์ œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ž˜ ๋งŒ๋“ค์–ด ๋†“์€ ๋ถ€ํ’ˆ๋“ค์„ ๋‹ค์šด๋ฐ›์•„์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Node.js์™€ npm / yarn์ด ํ•„์ˆ˜๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
yarn ์ด๋ผ๋Š”๊ฑด ํŽ˜์ด์Šค๋ถ์—์„œ ๋งŒ๋“  npm๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋Š” ์‚ฌ์ดํŠธ์ด๋‹ค.
sudo npm install -g yarn์œผ๋กœ ์„ค์น˜

npm์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ Git/Github๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณผ์ •๊ณผ ๋งค์šฐ ๋น„์Šทํ•˜๋‹ค.
(node.js ์„ค์น˜ํ•˜๋ฉด npm ์ž๋™ ์„ค์น˜ ๋Œ)

Git/Github
๋‚ด ์ปดํ“จํ„ฐ์— Git์„ ๋‹ค์šด๋ฐ›๋Š”๋‹ค.
git ๋ช…๋ น์–ด๋กœ ๋‚ด ์†Œ์Šค์ฝ”๋“œ๋ฅผ Github์— ์˜ฌ๋ฆฐ๋‹ค. 
git ๋ช…๋ น์–ด๋กœ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋ฐ›๋Š”๋‹ค. 

NPM
๋‚ด ์ปดํ“จํ„ฐ์— npm์„ ๋‹ค์šด๋ฐ›๋Š”๋‹ค.
npm ๋ช…๋ น์–ด๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‚ด vscode์— ๋‹ค์šด๋กœ๋“œ ๋ฐ›๋Š”๋‹ค.

๊ธฐ๋ณธ์ ์ธ ํ„ฐ๋ฏธ๋„(์‰˜) ๋ช…๋ น์–ด (CLI)

(CLI Command Line Interface <-> GUI - Grapic User Interface)

๋ชจ๋“  ๋ช…๋ น์–ด๋Š” ๋ช…๋ น์–ด ๋’ค์— โ€”help ์˜ต์…˜์„ ์ž‘์„ฑํ•˜๋ฉด ์ž์„ธํ•œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

  • ls : ๋ชจ๋“  ํด๋” ๋ณด๊ธฐ (list)
  • ls -al : ์ˆจ๊ฒจ์ง„ ํด๋”๊นŒ์ง€ ๋ชจ๋‘ ๋ณด๊ธฐ (list all)
  • mkdir : ํด๋” ๋งŒ๋“ค๊ธฐ (make directory)
  • cd 'ํด๋”๋ช…' : ํด๋” ์ด๋™ (change directory)
  • pwd : ํ˜„์žฌ ์ž‘์—… ํด๋” ๋ณด๊ธฐ (print working directory)
  • ../ : ์ด์ „ ํด๋”๋กœ ์ด๋™
  • mv A B : A๋ฅผ B๋กœ ์ด๋™ (move)
  • cp a B : ํŒŒ์ผ(a)์„ B๋กœ ๋ณต์‚ฌ (copy)
  • cp -R A B : ํด๋”(A)๋ฅผ B๋กœ ๋ณต์‚ฌ(copy recursive)
  • rm -f a : ํŒŒ์ผ(a) ์‚ญ์ œ(remove force a)
  • rm -rf A : ํด๋”(A) ์‚ญ์ œ(remove recursive force)
  • sudo : mac์—์„œ ๊ถŒํ•œ์ด ์—†์–ด์„œ ์„ค์น˜๊ฐ€ ์•ˆ๋œ๋‹ค๋Š” ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฏ€๋กœ ์„ค์น˜ ๋ช…๋ น์–ด ์•ž์— sudo๋ฅผ ๋ถ™์—ฌ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•จ (sudo npm install ~)

์‰˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด์„œ ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ํ”„๋กœ๊ทธ๋žจ๋“ค์„ ์„ค์น˜ํ•˜์ž!


ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ํ”„๋กœ๊ทธ๋žจ ์„ค์น˜ํ•˜๊ธฐ




์„ค์น˜๋ฅผ ์™„๋ฃŒํ•˜๊ฒŒ ๋˜๋ฉด ํด๋”๊ตฌ์กฐ๊ฐ€ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค.
์ด๋Ÿฐ ์ดˆ๊ธฐ ํด๋” ๊ตฌ์กฐ๋ฅผ ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ๋ผ๊ณ  ํ•œ๋‹ค.

  • pages ํด๋”, public ํด๋”๋Š” ์ด๋ฆ„์„ ๋งˆ์Œ๋Œ€๋กœ ๋ฐ”๊พธ๋ฉด ์•ˆ๋จ
  • README.md - ๊นƒํ—ˆ๋ธŒ์—์„œ ์ด ์‚ฌ์ดํŠธ๋Š” ์–ด๋–ค ์‚ฌ์ดํŠธ๋ผ๊ณ  ์†Œ๊ฐœํ•˜๋Š” ์„ค๋ช…์„œ์ž„
  • yarn.lock - ์„ค์น˜๋  ๋‹น์‹œ์˜ ๋ฒ„์ „์„ ์ž ๊ธˆํ•ด๋†“๋Š” ํŒŒ์ผ(๋‚˜์ค‘์—๋ผ๋„ ๊ฐ™์€ ๋ฒ„์ „์„ ๊น”์•„์ฃผ๋„๋ก ํ•จ)


React๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„

  • ์‹ค๋ฌด์—์„œ๋Š” html, cssํŒŒ์ผ ๋Œ€์‹ ์— ๋ชจ๋“  ํŒŒ์ผ์ด jsํŒŒ์ผ๋กœ ๋ฐ”๋€œ
  • function ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ํ•œ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ฌ
  • import ๋‚ด๋ณด๋‚ด๊ธฐ / export ๋ถˆ๋Ÿฌ์˜ค๊ธฐ


Javascript ๋ถˆ๋Ÿฌ์˜ค๊ธฐ


๊ธฐ์กด(HTML)์—๋Š” script ํƒœ๊ทธ๋กœ Javascript ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์™”์—ˆ๋‹ค๋ฉด

<script src='game.js'></script> 

React์—์„œ๋Š” export๋กœ js๋ฅผ ๋‚ด๋ณด๋‚ด๊ณ  import๋กœ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

export const apple = 10 
import {apple, banana} from 'game.js'

CSS ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

๊ธฐ์กด์—๋Š” link ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ cssํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์™”์—ˆ๋‹ค๋ฉด

<link href='./styles/game.css' rel='stylesheet'/> 

React์—์„œ๋Š” import๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

import styles from '../styles/Home.css' 


3. React์˜ ์ƒˆ๋กœ์šด HTML, CSS, JS


๋จผ์ € package.json์„ ๋ณด์ž.

ํฌ๊ฒŒ script, dependencies, devDependencies๊ฐ€ ์žˆ๋‹ค.

dependencies, devDependencies ๋Š” ์„ค์น˜ ๋ชฉ๋ก๋“ค์ด๋‹ค.
์ด ๋ชฉ๋ก๋“ค์€ node_modules์•ˆ์— ์‹ค์ œ๋กœ ์„ค์น˜๊ฐ€ ๋˜์–ด์žˆ๋‹ค.
๊ทธ๋ž˜์„œ ์„ค์น˜๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด node_modules๋ฅผ ์ง€์šฐ๊ณ  package.json ์ด ์žˆ๋Š” ์œ„์น˜์—์„œ yarn install ์„ ๋‹ค์‹œํ•˜๋ฉด ์ปดํ“จํ„ฐ๊ฐ€ ์ž๋™์œผ๋กœ ์„ค์น˜ ๋ชฉ๋ก๋“ค์„ node_modules์— ๋งŒ๋“ ๋‹ค.

script๋Š” ์‚ฌ์šฉ์„ค๋ช…์„œ ๋ถ€๋ถ„์ด๋‹ค. ์‹คํ–‰ ๋ช…๋ น์–ด๋“ค์ด ์ง‘ํ•ฉ๋˜์–ด์žˆ๋‹ค.

 dev - ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œํ‚ค๋Š” ๋ช…๋ น์–ด (yarn dev๋กœ ์‹คํ–‰)
 build - ๋ฐฐํฌ ์‹œ ํ•„์š”
 start - ๋ฐฐํฌ์‹œ ํ•„์š”
 lint - ์†Œ์Šค์ฝ”๋“œ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ์ฒดํฌํ•ด์ฃผ๋Š” ๋ช…๋ น์–ด 


pages ํด๋”

  • index.js : ํŽ˜์ด์ง€

  • _app.js : ๋ชจ๋“  ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์ดˆ๊ธฐ ์…‹ํŒ… ( ํŽ˜์ด์ง€๊ฐ€ ์•„๋‹˜ )




์ด์ œ package.json ์ด ์žˆ๋Š” class ํด๋” ์œ„์น˜์—์„œ yarn dev ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰์‹œ์ผœ์ค€๋‹ค. ์•„๋ž˜์˜ ์ฃผ์†Œ๊ฐ€ ๋œจ๋ฉด ๋œ๋‹ค.

http://localhost:3000

์ด์ œ Next.js์˜ ์ดˆ๊ธฐํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
(Next.js๋Š” React๊ฐ€ ์ด๋ฏธ ์žˆ๋Š” ์ƒํƒœ์—์„œ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— React์˜ ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฒ„์ „์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Œ)

stylesheet๋Š” ์ด๋ ‡๊ฒŒ import ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

return ์œ„์ชฝ์ด javascript์ด๊ณ  return ์•„๋ž˜์ชฝ์ด html์ด๋‹ค.

์ด์ œ ๊ทธ๋ ‡๋‹ค๋ฉด ์ด {์ค‘๊ด„ํ˜ธ}๋“ค์€ ๋ฌด์—‡์ผ๊นŒ.



4. JSX์™€ CSS-IN-JS


React์—์„œ๋Š” HTML ๋Œ€์‹  React ์ „์šฉ HTML์ธ JSX๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
๊ธฐ์กด HTML์—์„œ๋Š” class, onclick๋ผ๊ณ  ํ•˜๋˜ ๊ฒƒ์„ JSX์—์„œ๋Š” className, onClick์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

CSS ๋˜ํ•œ CSS-IN-JS ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

css๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜์— ๋“ค์–ด๊ฐ€์„œ ์‚ฌ์šฉ๋œ๋‹ค.
์•ˆ์˜ ์ฝ”๋“œ๋Š” css ์ฝ”๋“œ๊ฐ€ ๋งž์ง€๋งŒ class ์„ ํƒ์ž๋‚˜ id ์„ ํƒ์ž ๋ง๊ณ  ๊ทธ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

์™œ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ• ๊นŒ?

๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋˜ CSS ๋ฐฉ์‹์€ div๊ฐ€ ๋ญํ•˜๋Š” ๋†ˆ์ธ์ง€ ์•Œ๊ธฐ๊ฐ€ ์–ด๋ ค์› ๋‹ค.
๊ทธ๋ž˜์„œ ๋ณ€์ˆ˜๋ช…์„ ์‚ฌ์šฉํ•˜๋‹ˆ๊นŒ ์ด๊ฒŒ ์ด๋ฆ„์ด ๋ถ™์€ ํƒœ๊ทธ๋กœ ๋ญํ•˜๋Š” ๋†ˆ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. ํƒœ๊ทธ์— ๋‚˜๋งŒ์˜ ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๊ณ  ์ฝ”๋“œ์˜ ๊ธธ์ด๊ฐ€ ํ›จ์”ฌ ์งง์•„์กŒ๋‹ค๋Š” ์žฅ์ ์ด ์ƒ๊ฒจ๋‚˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ ์  CSS๊ฐ€ ์—†์–ด์ง€๊ณ  JS๋กœ ํ†ตํ•ฉ๋˜๊ณ  ์žˆ๋‹ค.

์ „์ฒด์ ์ธ ์ฝ”๋“œ๋กœ ๋ดค์„ ๋•Œ๋‹ค.
๊ธฐ์กด์˜ CSS๋ณด๋‹ค ํ›จ์”ฌ ๊ธธ์ด๋„ ์งง์•„์กŒ๊ณ  ๋ญํ•˜๋Š” ํƒœ๊ทธ์ธ์ง€ ํ•œ๋ˆˆ์— ๋“ค์–ด์˜จ๋‹ค.
๋˜ ๋ณ€์ˆ˜๋ฅผ ํ•œ๋ฒˆ ๋งŒ๋“ค์–ด๋†จ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ๋ณ€์ˆ˜๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ๊ต‰์žฅํžˆ ํšจ์œจ์ ์œผ๋กœ ๋ณ€ํ–ˆ๋‹ค.

CSS-IN-JS ๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์˜ ์žฅ์ 

  1. ๊ฐ„๊ฒฐํ•œ ์ฝ”๋“œ
  2. ํƒœ๊ทธ์— ์˜๋ฏธ ๋ถ€์—ฌ
  3. ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ ์ฆ๊ฐ€


Emotion ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

์ด์ œ CSS-IN-JS์˜ ์ข…๋ฅ˜ ์ค‘ ํ•˜๋‚˜์ธ Emotion์„ ์‚ฌ์šฉํ•ด๋ณด์ž.
(CSS-IN-JS์˜ ๋ฐฉ์‹์—๋Š” styled-components, emotion ๋“ฑ์ด ์žˆ๋‹ค.)

1. emotion์„ import ํ•ด์ค€๋‹ค.
2. css๋ฅผ ์ƒ์ˆ˜๋กœ ์ง€์ •ํ•ด์ค€๋‹ค.
3. JSX์˜ ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•ด์ค€ ์ƒ์ˆ˜๋กœ ๋ณ€๊ฒฝํ•ด์ค€๋‹ค.
  • ์ด๋ฏธ์ง€์˜ ๊ฒฝ๋กœ๋Š” public ํด๋”์—์„œ ์‹œ์ž‘ํ•œ๋‹ค.
  • CSS๋Š” CSS๋งŒ ๋„ฃ์–ด์ฃผ๊ณ  HTML์˜ ์†์„ฑ๋“ค์€ ์›๋ž˜์ฒ˜๋Ÿผ ํƒœ๊ทธ์•ˆ์— ๋„ฃ์–ด์ค€๋‹ค.
  • ์‹ค๋ฌด์—์„œ๋Š” margin๋ณด๋‹ค padding์„ ์“ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ padding์„ ๋จผ์ € ์จ๋ณด๊ณ  ์•ˆ๋˜๋ฉด margin์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜์ž.
  • ๊ป๋ฐ๊ธฐ๋“ค์˜ ๋†’์ด๊ฐ’์€ ์ง€์ •ํ•˜์ง€ ๋ง๋„๋ก ํ•˜์ž. ์•Œ๋งน์ด๋“ค(๋‚ด์šฉ๋ฌผ)์˜ ๊ธธ์ด๊ฐ€ ๊ธธ์–ด์กŒ์„ ๋•Œ ๋‚ด์šฉ์ด ์งค๋ฆฌ๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
profile
ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€