OSSCA : setting the Continue at vscode & Overview
ยท
What I Learn
์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ต์ง€ ์•Š์•˜๋˜ IDE์— Continue ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜ ๊ณผ์ •์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑํ•œ๋‹ค.Continue์—์„œ๋Š” Anthropic, Azure OpenAI, Amazon Bedrock, Gemini ๋“ฑ ๋งŽ์€ Provider๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. ๋‚œ ์—ฌ๊ธฐ์„œ OpenAI๋ž‘ Anthropic์„ ๊ฐ€์ง€๊ณ  ์ ์šฉํ•ด ๋ณผ ๊ฒƒ์ด๊ณ  ์ง€๊ธˆ ์“ฐ๊ณ  ์žˆ๋Š” IDE๋Š” vscode์ด๋‹ค. VSCode Extension์—์„œ Continue๋ฅผ ๋จผ์ € ์ธ์Šคํ†จํ•ด์ค€๋‹ค. ์ธ์Šคํ†จํ•˜๋ฉด Continue๋ฅผ ์˜ค๋ฅธ์ชฝ ํƒญ์œผ๋กœ ์˜ฎ๊ธฐ๋ผ๊ณ  ํ•˜๋Š”๋ฐ ๊ณ ๋ถ„๊ณ ๋ถ„ํ•˜๊ฒŒ ์‹œํ‚ค๋Š” ๋Œ€๋กœ ํ•ด์คฌ๋‹ค.  Open AI API Key  ๋จผ์ € Open AI ํ”Œ๋žซํผ์— ๋“ค์–ด๊ฐ€์„œ ๋กœ๊ทธ์ธํ•˜๊ณ  ์„ค์ •์— ๋“ค์–ด๊ฐ„๋‹ค.  ์ด์ œ Billing ๋“ค์–ด๊ฐ€์„œ ํฌ๋ ˆ๋”ง์„ ์„ค์ •ํ•ด์ค„๊ฑด๋ฐ, ๋ฌด๋ฃŒ ํ”Œ๋žœ์œผ๋กœ ๊ธฐ๋ณธ 5๋‹ฌ๋Ÿฌ? ์ง€์›ํ•œ๋‹ค๊ณ  ํ–ˆ๋˜..
์ „์—ญ์—์„œ ๋ชจ๋‹ฌ ์ƒํƒœ๊ด€๋ฆฌํ•˜๊ธฐ (redux-toolkit)
ยท
What I Learn
๋‹น์‹œ ํผ์˜ UI ๋””์ž์ธ์ด ๋‹ค ๊ฐ™์€ ์ž‘์€ ๋ชจ๋‹ฌ์ด์—ˆ๊ณ , ์ „์—ญ์—์„œ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋กœ์šฐ์—ฌ์„œ redux-toolkit์„ ๊ฒฝํ—˜ํ•ด๋ณด๊ณ ์ž ๋„์ž…ํ•˜๋ ค๊ณ  ํ–ˆ์—ˆ๋‹ค. ์•„๋ž˜๊นŒ์ง€ ์ž‘์„ฑ ํ›„์— UI ๋””์ž์ธ์ด ์ „๋ฉด์ ์œผ๋กœ ๋ฐ”๋€Œ์–ด์„œ ํŽ˜์ด์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ ๋‹น์‹œ ์ž‘์„ฑํ•œ ๋‚ด์šฉ์„ ๊ธฐ๋กํ•˜๊ณ  ์ดํ›„ ์จ๋จน๊ธฐ ์œ„ํ•ด ์ €์žฅํ•œ๋‹ค~ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋˜ Next.js ์ŠคํŽ™์€ v14 app router, ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋Š” src์ด๋‹ค.src ๋‚ด์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํด๋”, ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์— ํ•„์š”ํ•œ slice๋ฅผ ์กฐ๊ฐ์กฐ๊ฐ ์ž‘์„ฑํ–ˆ๋‹ค.// src/lib/slices/modalSlice.jsimport { createSlice } from "@reduxjs/toolkit";const initialState = { isOpen: false, modal..
์‚ฌ์šฉ์ž ์ •์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์œผ๋กœ ๋ณ„์ด ๋ฐ˜์งโœจ๋ฐฐ๊ฒฝ ๋งŒ๋“ค๊ธฐ (tailwindCSS)
ยท
What I Learn
box-shadow๋กœ ์ฃผ๋ณ€์„ ๋ฐํ˜”๋‹ค ์–ด๋‘ก๊ฒŒ ํ–ˆ๋‹ค ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ฐ˜์ง์ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์—ฐ์ถœํ•œ ๋ฐฉ์‹์„ ๋ณด๊ณ  ์ฐธ๊ณ ํ•ด์„œ ์ž‘์„ฑํ–ˆ๋‹ค. ํด๋ž˜์Šค๋ช…์œผ๋กœ ์‚ฌ์šฉํ•  ๋ฐฐ์—ด๋กœ ๊ฐ๊ฐ ๋ณ„์˜ ์‚ฌ์ด์ฆˆ, ํˆฌ๋ช…๋„, **์• ๋‹ˆ๋ฉ”์ด์…˜** (์•„๋ž˜์—์„œ ๋‚ด๊ฐ€ ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•  ๊ฒƒ, ์ด ํด๋ž˜์Šค๋ช…์—์„œ ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ๋‹ค.... ํ•˜๋‹จ์—์„œ ์„ค๋ช…ํ•  ๊ฒƒ)์„ ์„ ์–ธํ•˜๊ณ getRandomValue ํ•จ์ˆ˜๋กœ ๋ณ„์ด ๋ฟŒ๋ ค์งˆ ๋žœ๋คํ•œ ๊ฐฏ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ–ˆ๋‹ค.  ํŽ˜์ด์ง€์˜ ๊ธฐ๋ณธ ๋ฐฐ๊ฒฝ์œผ๋กœ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ด์—ˆ๊ธฐ์— ์‚ฌ์šฉ์ž๊ฐ€ ์“ฐ๋Š” ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์˜ ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ณ„์„ ๋ฟŒ๋ ค์ฃผ๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ, window๋ฅผ ์ฐธ์กฐํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ window is not defined ์—๋Ÿฌ๊ฐ€ ๋–ด๋‹ค. ์ฐพ์•„๋ณด๋‹ˆ nextjs๊ฐ€ ssr๋กœ ์„œ๋ฒ„์—์„œ ๋จผ์ €  HTML์„ ๊ทธ๋ ค๋†“๋Š”๋ฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ window์— ์ ‘๊ทผํ•˜๊ธฐ ์ „์— ๊ทธ๋ ค์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ฐธ์กฐ ์—๋Ÿฌ๊ฐ€ ๋‚˜์˜ค..
Make Calendar without Calendar library (@date-fns)
ยท
What I Learn
ํŽธํ•˜๊ฒŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์“ฐ๊ณ ์‹ถ์—ˆ๋Š”๋ฐ ๋‚ด๊ฐ€ ์›ํ•˜์ง€ ์•Š๋Š” ๋ชจ์–‘ ์“ฐ๊ธฐ ์‹ซ์–ด์„œ ใ„ฑ- ์ผ๋‹จ utils/calendar/getCalendarDate.ts ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์— ๋‚ ์งœ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. @date-fns ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ๊ฑด ์ฒ˜์Œ์ด๋ผ ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ๊ตฌ๊ฒฝํ–ˆ๊ณ .. ๊ทธ์ค‘์— ํ•œ ๋‹ฌ์˜ ๋‚ ์งœ๋ฅผ ์ฃผ๋ณ„๋กœ ๋‚˜๋ˆ„์–ด ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑ ํ•œ ๊ฑธ ๋ถ„์„ํ•ด์„œ ํƒ€์ž…์„ ์ถ”๊ฐ€ํ•ด์„œ ์ž‘์„ฑํ–ˆ๋‹ค. ๊ธฐ์–ต์ด ์ž˜ ์•ˆ๋‚˜๋Š”๋ฐ ๋ฒจ๋กœ๊ทธ ๊ธ€์ด์—ˆ๋˜ ๋“ฏ? ์ œ์ผ ์ดํ•ดํ•˜๊ธฐ ํŽธํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์…”์„œ ์ฐธ๊ณ ํ•ด ์ž‘์„ฑํ–ˆ๋‹ค.@date-fns ๋ฉ”์„œ๋“œ๋Š” ๊ณต์‹ ๋ฌธ์„œ๋ž‘ ๊ตฌ๊ธ€๋ง ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ์ฐพ์•„ ์‚ฌ์šฉํ•จ !! // ์ฃผ๋ฅผ ๋ฐ˜ํ™˜function takeWeek(selectedDate: Date = new Date()): () => Date[] { let date: Date = sta..