๐Ÿ“– TIL - ํ”„๋กœ์ ํŠธ 3์ผ์ฐจ: API ํ˜ธ์ถœ๊ณผ ์ƒํƒœ๊ด€๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  Git ํ˜‘์—…์˜ ๊ตํ›ˆ๋“ค

์Š˜ยท2025๋…„ 2์›” 14์ผ

๐Ÿ“– TIL

๋ชฉ๋ก ๋ณด๊ธฐ
56/90

๐Ÿคฆโ€โ™‚๏ธ ์˜ค๋Š˜์˜ ์‹œํ–‰์ฐฉ์˜ค

์ฒ˜์Œ์—๋Š” ๋‹น์—ฐํžˆ(?) Context API์—์„œ ๋ชจ๋“  ์ƒํƒœ๊ฐ’์„ ๊ด€๋ฆฌํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ, ํŠœํ„ฐ๋‹˜๊ป˜์„œ "๊ตณ์ด...?"๋ผ๊ณ  ํ•˜์‹œ๋Š” ๋ฐ”๋žŒ์— ํŒ€์›๋“ค๊ณผ ๊ณ ๋ฏผํ•˜๊ฒŒ ๋๋‹ค. ํ•œ ํŽ˜์ด์ง€์—์„œ๋งŒ ์“ฐ๋Š” ๊ฑด๋ฐ ์ „์—ญ์œผ๋กœ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์žˆ๋‚˜? ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค๋”๋ผ.

๐Ÿ’ก API ํ˜ธ์ถœ ์–ด๋–ป๊ฒŒ ํ• ๊นŒ?

// ์ด๋ ‡๊ฒŒ ๋”ฐ๋กœ ๋นผ๋‹ˆ๊นŒ ๊น”๋”ํ•˜๋‹ค!
export const fetchData = async (table) => {
  try {
    const { data } = await supabase.from(table).select("*");
    return data;
  } catch (error) {
    console.log("error", error);
  }
};

ํ…Œ์ด๋ธ”๋ช…๋งŒ props๋กœ ๋ฐ›์•„์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๊ฐ ์ปดํฌ๋„ŒํŠธ๋งˆ๋‹ค API ํ˜ธ์ถœ ๋กœ์ง์„ ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ, ํŒ€์›๋“ค๊ณผ ์ƒ์˜ ํ›„ api ํด๋”๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์„œ ๊ด€๋ฆฌํ•˜๊ธฐ๋กœ!

๐Ÿ˜… Promise? async/await?

์—ฌ๊ธฐ์„œ ์žฌ๋ฏธ์žˆ๋Š” ์‹ค์ˆ˜๊ฐ€ ์žˆ์—ˆ๋‹ค...

// ์ด๋ ‡๊ฒŒ ํ–ˆ๋”๋‹ˆ Promise๋ผ๊ณ  ๋œจ๋”๋ผ...
const newFeedsData = await fetchData("feeds");
setFeedsData(newFeedsData);

์•Œ๊ณ ๋ณด๋‹ˆ async ํ•จ์ˆ˜๋กœ ๊ฐ์‹ธ์•ผ ํ–ˆ๋‹ค! Supabase๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์ˆ˜๋ผ๋Š” ๊ฑธ ๋ฐฐ์› ๋‹ค. ๊ฒฐ๊ตญ ์ด๋ ‡๊ฒŒ ํ•ด๊ฒฐ:

useEffect(() => {
  async function fetchFeeds() {
    const newFeedsData = await fetchData("feeds");
    setFeedsData(newFeedsData);
  }
  fetchFeeds();
}, []);

๐Ÿค” ๋ชจ๋‹ฌ์€ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•˜์ง€?

๋ชจ๋‹ฌ์˜ ๊ฒฝ์šฐ๋Š” ์ข€ ๊ณ ๋ฏผ์ด ๋๋‹ค. ์ง€๊ธˆ์€ Feed ํŽ˜์ด์ง€์—์„œ๋งŒ ์“ฐ์ง€๋งŒ, ๋‚˜์ค‘์— ๋‹ค๋ฅธ ๊ณณ์—์„œ๋„ ์“ธ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ? ๊ฒฐ๊ตญ Context API๋กœ ๊ฐ€๊ธฐ๋กœ ๊ฒฐ์ •:

const [isModalOpen, setIsModalOpen] = useState(false);
const toggleModal = () => setIsModalOpen(state => !state);

๐Ÿ˜ฑ ์ถ”๊ฐ€๋กœ ๋ฐœ์ƒํ•œ Git ์ด์Šˆ!

ํŒ€์›๋“ค๊ณผ ์ž‘์—…ํ•˜๋‹ค๊ฐ€ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. dev ๋ธŒ๋žœ์น˜์—์„œ pull์„ ๋ฐ›์•˜๋Š”๋ฐ, ๊ณตํ†ต ๋ ˆ์ด์•„์›ƒ ์ž‘์—…์ด ๋‚ด ์ปค๋ฐ‹ ์Šคํ…Œ์ด์ง•์— ์ถ”๊ฐ€๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฑฐ๋‹ค!

ํ•ด๊ฒฐ์ฑ…: stash ํ™œ์šฉํ•˜๊ธฐ

ํŠœํ„ฐ๋‹˜์ด ์ถ”์ฒœํ•ด์ฃผ์‹  stash๊ฐ€ ์ •๋ง ์œ ์šฉํ–ˆ๋‹ค. ๊ทธ๋ƒฅ ์ปค๋ฐ‹ํ•˜์ง€ ๋ง๊ณ  ์ž„์‹œ๋ณด๊ด€ ๊ฐœ๋…์œผ๋กœ ์ ‘๊ทผํ•˜๋ผ๊ณ  ํ•˜์‹œ๋”๋ผ.

# ํ˜„์žฌ ์ž‘์—… ์ž„์‹œ์ €์žฅ
git stash save "์ž‘์—…์ค‘์ด๋˜ ๋‚ด์šฉ"

# dev ๋ธŒ๋žœ์น˜์—์„œ pull
git pull origin dev

# ์ž„์‹œ์ €์žฅํ–ˆ๋˜ ์ž‘์—… ๋‹ค์‹œ ๊ฐ€์ ธ์˜ค๊ธฐ
git stash pop

Git ์ถฉ๋Œ ๊ด€๋ จ ๊ฟ€ํŒ

conflict ๊ด€๋ จ ์ฝ˜์†” ๋ฉ”์‹œ์ง€๊ฐ€ ๋œฐ ๋•Œ๋Š” ์ด๋ ‡๊ฒŒ ํ•˜๋ผ๊ณ  ํ•˜์…จ๋‹ค:

git config pull.rebase false

๐Ÿ’ญ ์˜ค๋Š˜์˜ ๊นจ๋‹ฌ์Œ

  • ๋ชจ๋“  ๊ฑธ ์ „์—ญ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒŒ ๋Šฅ์‚ฌ๋Š” ์•„๋‹ˆ๋‹ค
  • Supabase๋Š” async/await๊ฐ€ ์งฑ์นœ์ด๋‹ค
  • ์žฌ์‚ฌ์šฉ์„ฑ์„ ๊ณ ๋ คํ•œ ์ฝ”๋“œ ๊ตฌ์กฐ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค!
  • stash๋Š” ์ปค๋ฐ‹๋ณด๋‹ค ์œ ์—ฐํ•œ ์ž„์‹œ์ €์žฅ์†Œ
  • pull ๋ฐ›๊ธฐ ์ „์— ํ˜„์žฌ ์ž‘์—… ์ƒํƒœ ์ •๋ฆฌ๊ฐ€ ์ค‘์š”
  • ํŒ€ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” git ์ „๋žต์ด ์ •๋ง ์ค‘์š”ํ•˜๋‹ค!

๋‚ด์ผ์€ ์ด ๋ชจ๋‹ฌ์— ์‹ค์ œ ๊ธฐ๋Šฅ์„ ๋ถ™์—ฌ๋ณผ ์˜ˆ์ •. ๋ฒŒ์จ๋ถ€ํ„ฐ ๋จธ๋ฆฌ๊ฐ€ ์•„ํ”„๋‹ค... ๐Ÿ˜‚

profile
์ฃผ๋‹ˆ์–ด ํ”„๋ก ํŠธ์—”๋“œ ์„ฑ์žฅ๊ธฐ ๊ธฐ๋ก๊ธฐ๋ก

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