[๐Ÿ’ป ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE 44๊ธฐ]pre-project - 5์ผ์ฐจ

JiEunยท2023๋…„ 6์›” 15์ผ
0

โœ”๏ธ ์‹œ์ž‘

OAuth๋ฅผ ๋ฐ›์•„์˜ค๋Š” ์ž‘์—…์„ ๋จผ์ € ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด
๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จผ์ € ์ง„ํ–‰ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

๋‚˜๋Š” ํ—ค๋”๋ฅผ ๋‹ด๋‹นํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.


๐Ÿ“ Header

Header.jsx

import Logo from "../../assets/images/logo-stackoverflow.svg"

import { HeaderContainer, LogoContainer, LogoImg, Nav, LoginBtn } from "../common/Header.styled"

const Header = () => {
  return (
    <HeaderContainer>
      <LogoContainer>
        <a href="#">
          <LogoImg src={Logo} alt="logo" />
        </a>
      </LogoContainer>
      <Nav>
        <LoginBtn>๋กœ๊ทธ์ธ</LoginBtn>
      </Nav>
    </HeaderContainer>
  )
}

export default Header

๋กœ๊ทธ์ธ ์ „ ์ปดํฌ๋„ŒํŠธ๋งŒ ๊ตฌํ˜„ํ–ˆ๊ณ 
๋งŒ์•ฝ ๋กœ๊ทธ์ธ ํ›„, Router ๊นŒ์ง€ ์ง„ํ–‰ํ•œ๋‹ค๋ฉด ํƒœ๊ทธ๋‚˜ ์ฝ”๋“œ ๊ตฌ์กฐ๊ฐ€ ๋ณ€๊ฒฝ ๋  ๊ฒƒ ๊ฐ™๋‹ค.

Header.styled.jsx

import tw from "tailwind-styled-components";

export const HeaderContainer = tw.header`
  w-full
  flex
  top-0
  sticky
  justify-between
  items-center
  drop-shadow-lg
  bg-white
  space-x-0
  py-5
  px-40
`;

export const LogoContainer = tw.h1`
  
`

export const LogoImg = tw.img`
  w-52
`

export const Button = tw.button`
  text-lg
  text-white
  rounded-full
  px-6
  py-2
  transition duration-300 ease-in-out
`

export const Nav = tw.nav`
  flex
  gap-2
`

export const LoginBtn = tw(Button)`
  bg-[#FFA564]
  hover:bg-[#FF7E22] 
`

๋กœ๊ทธ์ธ ํ›„์˜ ๋ฐฐ์น˜๋„ ์žˆ์–ด์•ผํ•˜๊ธฐ์—
<Nav>์— display: flex๋ฅผ ๋ฏธ๋ฆฌ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

tawilwind css์—์„œ hover, active ์ฃผ๋Š”๊ฑฐ ์–ด๋ ค์šธ ์ค„ ์•Œ์•˜๋Š”๋ฐ
์ƒ๊ฐ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑ ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜๊ฑฐ ๊ฐ™๋‹ค.

export const LoginBtn = tw(Button)`
  bg-[#FFA564]
  hover:bg-[#FF7E22] 
`

๋งŒ์•ฝ ์›ํ•˜๋Š” ์ƒ‰์ƒ์ด ์—†์„ ๊ฒฝ์šฐ
bg-[์ƒ‰์ƒ ์ฝ”๋“œ] ์ด๋Ÿฐ ์‹์œผ๋กœ [์›ํ•˜๋Š” ๋‚ด์šฉ]์œผ๋กœ ์ž‘์„ฑํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.


โœ”๏ธ Keep

์•„์ง ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์ด ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•„ ๋กœ๊ทธ์ธ ํ›„, Router๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ์ด์ ์„ ๊ณ ๋ คํ•˜๋ฉฐ ์ž‘์—…์„ ์ง„ํ–‰ํ–ˆ๋‹ค.

tawilwind css๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ ์ข€ ๋” ์ต์ˆ™ํ•ด์ง„๋‹ค๋ฉด ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ๊ฐ„์ด ๋‹จ์ถ• ๋  ๊ฒƒ ๊ฐ™๋‹ค.

  • ๋˜ํ•œ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด ๋˜๋‹ˆ ์ด์ ๋„ ์ข‹๋‹ค ์ƒ๊ฐํ•œ๋‹ค.

Git push ํ•˜๊ณ  PR ํ•  ๋•Œ ๊ตฌ์ฒด์ ์œผ๋กœ ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค.

  • ๋‚ด๊ฐ€ ์™œ ์ด๋Ÿฐ์‹์œผ๋กœ ์ž‘์„ฑํ–ˆ๋Š”์ง€ ์ž‘์„ฑ์„ํ•˜๋ฉด ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ดค์„ ๋•Œ ์˜๋ฌธ์ ์„ ์ค„ ์ผ ์ˆ˜ ์žˆ๋‹ค ์ƒ๊ฐํ–ˆ๋‹ค.
  • ์ž‘์—…ํ•œ ์บก์ฒ˜๋ณธ์„ ์ฒจ๋ถ€ํ•ด ๊ตณ์ด ํ•ด๋‹น ํŒŒ์ผ์„ cloneํ•˜์ง€ ์•Š์•„๋„ ๋‚ด๊ฐ€ ์–ด๋–ค ์ž‘์—…์„ ํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ์ž‘์„ฑํ–ˆ๋‹ค.

โœ๏ธ Problem

clone ํ›„ ํ™”๋ฉด์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด npm run dev๋ฅผ ํ–ˆ๋Š”๋ฐ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋‹ค.

  • client ํŒŒ์ผ์—์„œ ์ง„ํ–‰ํ•˜์ง€ ์•Š์•„์„œ ๊ทธ๋žฌ๋‹ค.. (๊ธฐ์ดˆ์ ์ธ ์‹ค์ˆ˜์˜€๋‹คใ… )

๊ณตํ†ต ์Šคํƒ€์ผ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ์ ์šฉํ•˜๋ ค๊ณ  ํ–ˆ์œผ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

export const CommonColor = {
  orange500 : "#FF7E22",
  orange200 : "#FFA564",
  green : "#03B800",
  gray900 : "#797979",
  gray700 : "#CACACA",
  gray500 : "DCDCDC",
  gray200 : "F7F7F7"
}

๊ณตํ†ต ์ƒ‰์ƒ์„ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด ๊ด€๋ฆฌํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค.

export const LoginBtn = tw(Button)`
  bg-[#FFA564]
  hover:bg-[${CommonColor.orange500}] 
`

ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด๋กœํ–ˆ๋Š”๋ฐ ์ž๊พธ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋‹ค.
๊ทผ๋ฐ hover:bg-[#FF7E22] ์ด๋Ÿฐ์‹์œผ๋กœ ์ž‘์„ฑํ•˜๋ฉด ๋˜๋Š” ๊ฑฐ์˜€๋‹ค.

์›์ธ
Tailwind๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” CSS๋Š” ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹น์‹ ์˜ ์ฝ”๋“œ๊ฐ€ ์ปดํŒŒ์ผ๋ง ๋˜๋Š” ์‹œ์ ์—์„œ, Tailwind๋Š” ๋™์  ํ• ๋‹น์„ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๊ณ  stylesheet์—์„œ ์ง€์›Œ๋ฒ„๋ฆด ๊ฒ๋‹ˆ๋‹ค.

์›์ธ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด
ํ•ญ์ƒ ์™„์„ฑ๋œ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ผ๋Š” ๊ณต์‹ ๋ฌธ์„œ์˜ ๊ถŒ๊ณ 

์ฐธ๊ณ 
https://broheat.tistory.com/29

https://velog.io/@arthur/Tailwind-CSS-%EC%97%90%EC%84%9C-%EB%8F%99%EC%A0%81%EC%9C%BC%EB%A1%9C-%ED%81%B4%EB%9E%98%EC%8A%A4-%ED%95%A0%EB%8B%B9%ED%95%98%EA%B8%B0

์•Œ์•„๋ณด๋‹ˆ tawilwind์—์„œ๋Š” ํ…œํ”„๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™๋‹ค.
๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜๊ธธ ์›ํ•˜๋‹ค๋ฉด tailwind.config.js๋ผ๋Š” ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š”๊ฒƒ ๊ฐ™์•˜๋‹ค.

์šฐ๋ฆฌ๋Š” ๋Œ€์‹  ์ด๋ฏธ ์ƒ‰์ƒ์„ ์ •ํ•ด ๋‘์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์šฐ์„ ๋Š” hover:bg-[#FF7E22] ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.


๐Ÿš€ Try

์•ž์œผ๋กœ๋„ Git push ํ•˜๊ณ  PR ํ•  ๋•Œ๋Š” ๊ตฌ์ฒด์ ์œผ๋กœ ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

ํด๋”, ํŒŒ์ผ ์ƒ์„ฑ, ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ์—” ์ฆ‰๊ฐ ํŒ€์›๋“ค๊ณผ ๊ณต์œ ํ•˜๋„๋ก ํ•œ๋‹ค.

API ์š”์ฒญํ•˜๋Š” ๋ถ€๋ถ„์ด ์•„์ง ๋ถ€์กฑํ•ด ํ‹ˆํ‹ˆํžˆ ๊ณต๋ถ€๋ฅผ ์ง„ํ–‰ํ•ด์•ผ ๊ฒ ๋‹ค.

  • Redux Toolkit์œผ๋กœ ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ง‘์ค‘์ ์œผ๋กœ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

โœ๏ธ ๋งˆ์น˜๋ฉฐ

์šฐ๋ฆฌ ํŒ€์›๋“ค์ด ๋‹ค๋ฅธ ํŒ€์›๋“ค๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ ์ง„ํ–‰์ด ๋น ๋ฅธ ๊ฑฐ ๊ฐ™๋‹ค.

git์— ๋Œ€ํ•ด ์•„์ง ์ต์ˆ™ํ•˜์ง€ ์•Š์•„ ์ดˆ๋ฐ˜์— ๋งŽ์ด ํ—ค๋งธ๋˜๊ฑฐ ๊ฐ™๋‹ค.

์–ด๋Š ๊ฒƒ์„ branch๋กœ ๋”ฐ์•ผํ•˜๋Š”์ง€,
commit ์ž‘์„ฑํ•  ๋•Œ ๋ช…์นญ์„ ์–ด๋–ค์‹์œผ๋กœ ์ž‘์„ฑํ•ด์•ผํ•˜๋Š”์ง€,
images ํด๋”๊ฐ€ ํ•„์š”ํ•œ๋ฐ ๋ณธ์ธ branch์— ์ž‘์—…ํ•ด์•ผํ•˜๋Š”์ง€ ๋“ฑ ์—ฌ๋Ÿฌ ๊ณ ๋ฏผ์„ ํ–ˆ๋˜ ๋‚ ์ด์˜€๋‹ค.

๊ทธ๋งŒํผ ๋‚˜ ํ˜ผ์ž๊ฐ€ ์•„๋‹Œ ์—ฌ๋Ÿฌ๋ช…์—์„œ ์ง„ํ–‰ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋กœ
ํ•˜๋‚˜ ํ•˜๋‚˜ ์ž‘์—…ํ•˜๋Š”๋ฐ ์‹ ์ค‘ํ•ด ์ง€๊ณ  ์–ด๋–ป๊ฒŒ ์ž‘์„ฑ์„ ํ•ด์•ผ
ํŒ€์›๋“ค์ด ์•Œ์•„๋ณด๊ธฐ ์‰ฌ์šธ์ง€ ๊ณ ๋ฏผํ•˜๊ฒŒ ๋œ๋‹ค.

ํ˜‘์—…์„ ์ž์ฃผ ํ•ด๋ณด๋ฉด ์–ด๋Š ์ •๋„ ์ต์ˆ™ํ•ด ์ง€์ง€ ์•Š์„๊นŒ ์‹ถ๋‹ค.

profile
๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ชฉํ‘œ๋กœ ์„ฑ์žฅ ์ค‘! (์•Œ์•„๋ดค๋˜ ๋‚ด์šฉ ๋“ฑ์„ ์ •๋ฆฌํ•˜๊ธฐ)

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