์œคํœด๋จผ
ddooyn.log
์œคํœด๋จผ
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (19)
    • FRONT-END (6)
      • Projects (0)
      • Retrospective (6)
    • HTML CSS (0)
    • JavaScript (6)
    • React (4)
    • Node.js (0)
    • Python (2)
    • Algorithm (0)
    • Tips (1)
    • Books (0)

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • Tip
  • ESLint
  • mongodb
  • react
  • AWS
  • PYTHON
  • jQuery
  • javascript
  • WIL
  • github
  • Next.js

์ตœ๊ทผ ๋Œ“๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.
์œคํœด๋จผ

ddooyn.log

[WIL] ๋ฆฌ์•กํŠธ ์‹ฌํ™”์ฃผ์ฐจ | ์ด๋…ธ๋ฒ ์ด์…˜ ์บ ํ”„ ๋™๋ถ๊ถŒ - 5์ฃผ์ฐจ ํšŒ๊ณ 
FRONT-END/Retrospective

[WIL] ๋ฆฌ์•กํŠธ ์‹ฌํ™”์ฃผ์ฐจ | ์ด๋…ธ๋ฒ ์ด์…˜ ์บ ํ”„ ๋™๋ถ๊ถŒ - 5์ฃผ์ฐจ ํšŒ๊ณ 

2022. 7. 24. 22:16

๐Ÿšข ์ด๋ฒˆ ํ•ญํ•ด๋Š”?

3์ฃผ๊ฐ„์˜ ์ฃผํŠน๊ธฐ ์ฃผ์ฐจ ๋งˆ์ง€๋ง‰๊นŒ์ง€ ์ž˜ ๋‹ฌ๋ ค์™”๋‹ค.๐Ÿฅณ

 

๋งค์ฃผ ๊ณผ์ œ์˜ ํ•„์ˆ˜ ๊ธฐ๋Šฅ๋“ค์„ ๊ตฌํ˜„ํ•ด ๋ณด๋ฉฐ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…์„ ํ•˜๋Š” ๊ณผ์ •์—์„œ ์ฑ…๊ณผ ๊ฒ€์ƒ‰์˜ ๋„์›€์„ ์ •๋ง ๋งŽ์ด ๋ฐ›์•˜๋‹ค. ๊ทธ๋Ÿฌ๋Š” ๊ณผ์ •์—์„œ ๋ฆฌ์•กํŠธ์˜ ๊ธฐ์ดˆ๋ฅผ ๋งŽ์ด ๋‹ค์งˆ ์ˆ˜ ์žˆ์—ˆ๊ณ , ํŒ€์› ๋ถ„๋“ค๊ณผ ๋” ๊ณต๋ถ€ํ•ด๋ณด๊ณ  ์‹ถ์€ ์ฃผ์ œ๋ฅผ ์ •๋ฆฌํ•ด์™€์„œ ์„œ๋กœ ๊ฐ€๋ฅด์ณ ์ฃผ๊ธฐ๋„ ํ–ˆ๋‹ค. ํŠนํžˆ ์ตœ์ ํ™”๋‚˜ ์„œ์ŠคํŽœ์Šค, ๋ฌดํ•œ์Šคํฌ๋กค ๋“ฑ ์ต์ˆ™์ง€ ์•Š์•˜์ง€๋งŒ ๊ด€์‹ฌ ์žˆ์—ˆ๋˜ ์ฃผ์ œ๋„ ๊ฐ™์ด ์ด์•ผ๊ธฐ ๋‚˜๋ˆ ๋ณผ ์ˆ˜ ์žˆ์–ด์„œ ์•Œ์ฐฌ ์‹œ๊ฐ„์ด์—ˆ๋‹ค. 3์ฃผ ๋™์•ˆ ๊ฐ™์€ ํŒ€์ด์—ˆ๋˜ ํŒ€์› ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌํ•˜๋‹ค.

 

๋ฆฌ์•กํŠธ ์ฃผ์ฐจ ํŒ€ ๊ณผ์ œ - ๋งก์€ ๋ถ„๋Ÿ‰ ์ •๋ฆฌ ๋…ธ์…˜

 

๐Ÿ’œ ๋งค๊ฑฐ์ง„ ํ”„๋กœ์ ํŠธ

์ด๋ฒˆ ๋ฆฌ์•กํŠธ ์‹ฌํ™”์ฃผ์ฐจ์˜ ๊ณผ์ œ๋Š” ๋กœ๊ทธ์ธ ์œ ์ €์šฉ ๋งค๊ฑฐ์ง„ ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

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

 

 

๋กœ๊ทธ์ธ ์—ฌ๋ถ€๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ recoil๋กœ isLoggedInAtom์„ ๋งŒ๋“ค์–ด์„œ ๊ด€๋ฆฌํ–ˆ๊ณ , ์ง€๋‚œ ์ฃผ์—๋Š” ์ ์šฉํ•˜์ง€ ๋ชปํ–ˆ๋˜ redux-toolkit์„ ์ด๋ฒˆ ๊ณผ์ œ์—” ๋“œ๋””์–ด ๊ฐ„๋‹จํ•˜๊ฒŒ๋‚˜๋งˆ ์ ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

๋ฆฌ๋•์Šค ํˆดํ‚ท์€ thunk๋ฅผ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์–ด์„œ createAsyncThunk๋ฅผ ์‚ฌ์šฉํ•ด ๋น„๋™๊ธฐ ์ž‘์—… ๊ด€๋ จ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๊ณ , createSlice๋กœ ์ดˆ๊ธฐ๊ฐ’๊ณผ ์•ก์…˜, ๋ฆฌ๋“€์„œ(reducers, extraReducers)๋“ค์„ ํ•œ๊บผ๋ฒˆ์— ๊ฐ์ฒด ํ•˜๋‚˜์— ๋‹ด์•„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ๋ฆฌ๋•์Šค ํˆดํ‚ท์€ immer๋ฅผ ๋„์ž…ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด์˜ ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ƒํƒœ๊ฐ’์„ ์ง์ ‘ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ์—ˆ๋‹ค.

 

// postSlice.js

import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
import { db } from 'shared/firebase';
import { getDocs, addDoc, collection, query, orderBy } from 'firebase/firestore';

export const getPosts = createAsyncThunk('post/getPosts', async () => {
  // ...
});

export const createPost = createAsyncThunk('post/createPost', async (newPost) => {
  // ...
});

const postSlice = createSlice({
  name: 'post',
  initialState: [],
  reducers: {},
  extraReducers: {
    [getPosts.fulfilled]: (state, { payload }) => payload,
    [createPost.fulfilled]: (state, { payload }) => [payload, ...state],
  },
});

export default postSlice.reducer;

 

๊ทธ๋ฆฌ๊ณ  ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž…์„ ์œ„ํ•ด react-hook-form์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ์•„์ง ์‚ฌ์šฉํ•ด๋ณธ ๊ฒฝํ—˜์ด ์ ์–ด์„œ ์ž˜ ์‚ฌ์šฉํ•œ ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ํ™•์‹ ์€ ์—†์ง€๋งŒ, ํ™•์‹คํžˆ validation ์ฒ˜๋ฆฌ ๋ฐ ์กฐ๊ฑด ๋ฏธ์ถฉ์กฑ ์‹œ ๋ฒ„ํŠผ ๋น„ํ™œ์„ฑํ™” ๋“ฑ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

 

 

https://github.com/ddooyn/veryperi-magazine-2022

 

GitHub - ddooyn/veryperi-magazine-2022: ๋กœ๊ทธ์ธ ์œ ์ €์šฉ ๋งค๊ฑฐ์ง„ ์‚ฌ์ดํŠธ - ์ด๋…ธ๋ฒ ์ด์…˜ ์บ ํ”„ ๋ฆฌ์•กํŠธ ์‹ฌํ™”์ฃผ์ฐจ

๋กœ๊ทธ์ธ ์œ ์ €์šฉ ๋งค๊ฑฐ์ง„ ์‚ฌ์ดํŠธ - ์ด๋…ธ๋ฒ ์ด์…˜ ์บ ํ”„ ๋ฆฌ์•กํŠธ ์‹ฌํ™”์ฃผ์ฐจ ๊ณผ์ œ. Contribute to ddooyn/veryperi-magazine-2022 development by creating an account on GitHub.

github.com

 

๐Ÿค— Together

๊ธˆ์š”์ผ๋ถ€ํ„ฐ ๋“œ๋””์–ด ์Šคํ”„๋ง ์ฃผํŠน๊ธฐ๋ฅผ ์„ ํƒํ•œ ๋ฐฑ์—”๋“œ ๋ถ„๋“ค๊ณผ ํ•จ๊ป˜ ๋ฏธ๋‹ˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ 2๋ช…, ๋ฐฑ์—”๋“œ 3๋ช…์œผ๋กœ ํŒ€์ด ๊ตฌ์„ฑ๋˜์—ˆ๋‹ค. API๋ฅผ ๊ธˆ,ํ† ์š”์ผ์— ๊ฐ™์ด ์„ค๊ณ„ํ•˜๊ณ , ๋ฐ›์€ ํ”ผ๋“œ๋ฐฑ์„ ํ†ตํ•ด ๋ณด์™„ํ•˜๋ฉด์„œ ํ”„๋ก ํŠธ์™€ ๋ฐฑ์—”๋“œ ์‚ฌ์ด์˜ ์ถฉ๋ถ„ํ•œ ์†Œํ†ต์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ฃผ์ œ๋Š” ๊ณต๋™๊ตฌ๋งค๋‚˜ ๋ฐฐ๋‹ฌ, ๊ณต์—ฐ/์ „์‹œํšŒ์— ํ•จ๊ป˜ ํ•  ์‚ฌ๋žŒ์„ ๋ชจ์ง‘ํ•˜๋Š” ํ”Œ๋žซํผ์œผ๋กœ ์ •ํ•ด์กŒ๋‹ค. ๊ทธ๋ž˜์„œ HeyYo ๋ผ๋Š” ์ด๋ฆ„์„ ์ง€์–ด๋ณด์•˜๋Š”๋ฐ ํ•จ๊ป˜ํ•ด์š” ๊ฐ™์ดํ•ด์š” ๋ผ๋Š” ๋œป์„ ๋‹ด๊ณ  ์žˆ๋‹ค.

 

ํ”„๋ก ํŠธ๋ฅผ ํ•จ๊ป˜ ๋งก๊ฒŒ๋œ ํŒ€์›๋ถ„๊ณผ react-query์™€ Suspense์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ํ™•์‹คํžˆ ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ์— ์ž„ํ•˜๊ณ  ์‹ถ์–ด์„œ ์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ์Šคํ„ฐ๋””๋ฅผ ์ œ์•ˆํ•ด ๋ฐ˜๋‚˜์ ˆ ๋™์•ˆ ํ•จ๊ป˜ ํ–ˆ๋‹ค. react-query ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ถˆ๊ณผ ์ผ์ฃผ์ผ๋„ ์•ˆ๋œ ์‚ฌ์ด์— deprecated ๋˜์–ด์„œ ๋‹นํ™ฉํ–ˆ์ง€๋งŒ ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฝ์œผ๋ฉฐ @tanstack/react-query ์™€ @tanstack/react-query-devtools ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๋ฐ”๋€ 4๋ฒ„์ „์— ๋Œ€ํ•ด ๊ฐ™์ด ์ •๋ฆฌํ•˜๋ฉฐ ๊ณต๋ถ€ํ–ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ฐ™์ด ๊ณต๋ถ€ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋งŒ์กฑ์Šค๋Ÿฌ์›Œ์„œ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์— ์ž˜ ํ™œ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ํ”„๋กœ์ ํŠธ ๊ฒฐ๊ณผ๊ฐ€ ๋ฒŒ์จ ๊ธฐ๋Œ€๋œ๋‹ค.

    'FRONT-END/Retrospective' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [WIL] React Hooks์™€ ์ปดํฌ๋„ŒํŠธ ์ตœ์ ํ™” | ์ด๋…ธ๋ฒ ์ด์…˜ ์บ ํ”„ ๋™๋ถ๊ถŒ - 4์ฃผ์ฐจ ํšŒ๊ณ 
    • [WIL] DOM๊ณผ ์„œ๋ฒ„๋ฆฌ์Šค | ์ด๋…ธ๋ฒ ์ด์…˜ ์บ ํ”„ ๋™๋ถ๊ถŒ - 3์ฃผ์ฐจ ํšŒ๊ณ 
    • [WIL] ES๋ž€? | ์ด๋…ธ๋ฒ ์ด์…˜ ์บ ํ”„ ๋™๋ถ๊ถŒ - 2์ฃผ์ฐจ ํšŒ๊ณ 
    • [WIL] ์ด๋…ธ๋ฒ ์ด์…˜ ์บ ํ”„ ๋™๋ถ๊ถŒ - 1์ฃผ์ฐจ ํšŒ๊ณ 
    ์œคํœด๋จผ
    ์œคํœด๋จผ
    ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž ์ค€๋น„ ์ค‘. ๋””ํ…Œ์ผ๊ณผ ์กฐํ™”๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ISFP๐Ÿ˜Š

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”