์ ์ฒด ๊ธ
[JavaScript] ์คํ ์ปจํ ์คํธ(execution context)
๋ค์ด๊ฐ๊ธฐ ์ ์คํ ์ปจํ ์คํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋์ ์๋ฆฌ๋ฅผ ๋ด๊ณ ์๋ ํต์ฌ ์๋ฆฌ์ด๋ค.๋ฐ๋ผ์ ์คํ์ปจํ ์คํธ๋ ์๋ ๊ฐ๋ ๋ค์ ๋์์๋ฆฌ๋ฅผ ๋ด๊ณ ์๋ค.- ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ค์ฝํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ณ์์ ์๋ณ์์ ๋ฐ์ธ๋ฉ๋ ๊ฐ์ ๊ด๋ฆฌํ๋ ๋ฐฉ์- ํธ์ด์คํ ์ด ๋ฐ์ํ๋ ์ด์ - ํด๋ก์ ์ ๋์ ๋ฐฉ์- ํ์คํ ํ์ ํจ๊ป ๋์ํ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ๋์ ๋ฐฉ์์คํ ์ปจํ ์คํธ๋?์คํ ์ปจํ ์คํธ๋ ์์ค์ฝ๋๋ฅผ ์คํํ๋ ๋ฐ ํ์ํ ํ๊ฒฝ ์ ๋ณด๋ฅผ ๋ชจ์๋์ ๊ฐ์ฒด์ด๋ค. ์ฆ, ์คํ ์ปจํ ์คํธ๋ ๋ณ์, ํจ์, ํด๋์ค ๋ฑ์ ์ด๋ฆ์ธ ์๋ณ์๋ฅผ ๋ฑ๋กํ๊ณ ๊ด๋ฆฌํ๋ ์ค์ฝํ๋ผ๋ ํ๊ฒฝ ์ ๋ณด๋ฅผ ๊ตฌ์ฑํ๊ณ , ์ปจํ ์คํธ๋ฅผ ์ฝ ์คํ์ ์์์ฌ๋ ค ๊ฐ์ฅ ์์ ์๋ ์ปจํ ์คํธ๋ฅผ ์คํํ์ฌ ์ฝ๋์ ์คํ์์๋ฅผ ๋ณด์ฅํ๋ค.์คํ ์ปจํ ์คํธ๊ฐ ์์ฑ๋๋ ์์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์คํฌ๋ฆฝํธ๋ฅผ ์ฒ์ ์คํํ ๋..
Express.js CORS ์ค๋ฅ ํด๊ฒฐ
๐๐ป ํด๊ฒฐ๋ฒ์ ๋งจ์๋์ํ์คํ๊ตฌํ์ค, ํ๋ก ํธ์์๋ axios ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฑ์๋์ API ์ฐ๋์ ์งํํ๋ ค๊ณ ํ์๋ค. ์ฝ๋์ ์ ์ง๋ณด์์ ์ฌ์ฌ์ฉ์ฑ์ ์ํด http ํด๋ผ์ด์ธํธ๋ฅผ ๋ฐ๋ก ๊ตฌ์ฑํ๋ ์ฝ๋๋ฅผ ๋ง๋ค์๊ณ , exportํ์ฌ axios๋ฅผ ๋ ๋ณด๊ธฐ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ํ์๋ค. // http.tsimport axios, { AxiosRequestConfig } from "axios";const BASE_URL = "http://localhost:3000";const DEFAULT_TIMEOUT = 30000;export const createClient = (config?: AxiosRequestConfig) => { const axiosInstance = axios.create({ baseU..
vscode snippet ๋ง๋ค๊ธฐ
console.log๋ก ๋ก๊ทธ๋ฅผ ์ฐ๋๋ค๊ฑฐ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๋ ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ๋์ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค๋๋ผ๋์ง ๊ธฐ๋ณธ์ ์ผ๋ก ๋ง๋ค์ด์ผํ๋ ๋ผ๋๋ฅผ ์์ฑํ๋ ๋ถ๋ถ์ ์ด์ ๋ ์์ ํ ์ตํ์ ธ์ snippet์ ์ฌ์ฉํ์ฌ ์ฌ์ฉํ๊ณ ์์๋ค.๐๐ป ๊ฒฐ๋ก ์ ์ผ๋ก ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉ์ ์ค, ํจ์ ํํ์ ๋ฑ ์ค์ ์์ด ์ค๋ํซ์ ์ฌ์ฉํ๊ธฐ ์ํ๋ค๋ฉด ์๋ extension(ES7+ React/Redux/React-Native snippets)์ ๋ค์ด๋ฐ์ ์ฌ์ฉํ์๊ธธ ๊ถ์ฅํ๋ค.ES7+ React/Redux/React-Native snippetsrafce๋ผ๋ ์ค๋ํซ์ ํจ์ ํํ์์ ๋น ๋ฅด๊ฒ ์์ฑํด์ฃผ์ด ์ฝ๋์์ฐ์ฑ์ด ๋น ๋ฅด๊ฒ ์ฆ๊ฐํ๋ค.๐๐ป ๋ง์ฝ ๋ค๋ฅธ ์ค๋ํซ์ ์ค์ ํ๊ณ ์ถ๊ฑฐ๋, ์ค๋ํซ ๋จ์ถํค๋ฅผ ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด ๋ ์๋์ ์ค์ ๋ฐฉ๋ฒ์ ์์ฑํด๋จ๋ค.Snippet..
zsh: command not found: nvm ํด๊ฒฐ
๋๋ณด๊ธฐvite๋ก ๋ฆฌ์กํธ ์ฑ์ ์์ฑํ๊ณ npm install์ ํ๋ค๊ฐ ์๋์ ๊ฐ์ ์ค๋ฅ๋ฅผ ๋ณด๊ฒ ๋์๊ณ , ํด๋น ์ค๋ฅ๋ ๋ ธ๋ ๋ฒ์ ์ด ์์ดํ๋ค๋ ๊ฒ์ด์๊ธฐ ๋๋ฌธ์ nvm์ ํตํด ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ํ๋ ค๊ณ ํ๋ค.๋ ธ๋ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ํด ์๋ ๋ช ๋ น์ด๋ฅผ ์คํํ๋๋ฐ ์๋ํ์ง ์์๋ค.$ nvm install 18.12.1zsh: command not found: nvm1. nvm ์ค์น ์ฌ๋ถ ํ์ธ๋ด ๊ฒฝ์ฐ nvm์ด ์ค์น๊ฐ ์๋์ด์๋ ๊ฒฝ์ฐ์๋ค. ๊ทธ๋์ ์๋์ ๊ฐ์ด nvm์ ์ค์นํด์ฃผ์๋ค.nvm -v // 0.39.7 ๋ฒ์ ์ด ๋จ์ง ์๋๋ค๋ฉด ํฐ๋ฏธ๋์์ Homebrew๋ก ์ค์นํด์ค๋ค.brew updatebrew install nvmmkdir ~/.nvm ์ค์นํ ์๋ 2๋ฒ ์งํ2. zshrc ์ค์ nvm์ด ์กด์ฌํ๋ค๋ฉด ํ๊ฒฝ๋ณ์ ์ค์ ์ด ์ ๋๋ก ๋์ด ์..
[ํ๊ณ ] ํ๋ก๊ทธ๋๋จธ์ค ํ์คํ ๋ฐ๋ธ์ฝ์ค ๋จ์ 2์ฐจ
ํ๊ณ ๊ฐ ๋ง์ด ๋ฆ์๋ค์.. ์คํ๋ฆฐํธ 2์ฐจ๊ฐ 6์7์ผ์ ๋๋ฌ์ต๋๋ค. ์ง๊ธ๊น์ง ๋ฐ๋ธ์ฝ์ค๋ฅผ ํ๋ฉด์ ์ ๊ณตํ๋ ๊ฐ์ ์ธ ์ด๋ค ํ๋๋ค์ ํ๋์ง ์์ฃผ๋ก ๋จ๊ฒจ๋์ผ๋ ค๊ณ ํฉ๋๋ค! ํ๋ก๊ทธ๋๋จธ์ค ๋ฐ๋ธ์ฝ์ค ๊ณ ๋ฏผ์ค์ด์ ๋ถ๋ค๊ป ๋์์ด ๋์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค.๋งค์ฃผ ์ ์ตํ์ง ์์ ์ ์ด ์๋ ๋ฆฌ์กํธ ์คํฐ๋4์๋ง๋ถํฐ ํ์ฌ๊น์ง ๋ฆฌ์กํธ ์คํฐ๋๋ฅผ ์งํํ๊ณ ์๋ ์ค์ ๋๋ค. ์ฐธ์ฌ๋ฅผ ํฌ๋งํ๋ 9๋ช ์ด ๋ชจ์ฌ ๋ชจ๋ ๋ฆฌ์กํธ ๋ฅ๋ค์ด๋ธ ์ฑ ์ ์ฝ๊ณ ๋ฉด์ ์ง๋ฌธ์ ๋ง๋ค์ด์ ์ง๋ฌธํ๊ณ ๋ตํ๋ ํํ๋ก ์คํฐ๋๊ฐ ์ด๋ค์ก์ต๋๋ค. ๋ฆฌ์กํธ ๋ฅ๋ค์ด๋ธ ์ฑ ์ด ๋์ด๋๊ฐ ์๋ค๋ณด๋ ๊ฐ๋ฐํ๋ฉด์ ์๊ฐํด๋ณด์ง ๋ชปํ๋ ๊น์ ๋ด์ฉ๊น์ง ๊ณต๋ถํ ์ ์์์ต๋๋ค. ๋ํ ๋ฉด์ ์ง๋ฌธ ํ์์ ํตํด ๋ต์ ํ ์ ์๋๋ก ๊ณต๋ถํ ๋ด์ฉ์ ๊ธฐ์ตํ๋ ค๊ณ ํ์๋๋ฐ ๊ต์ฅํ ์ ์ฉํ์ต๋๋ค. ์๋ก์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ์๊ฒ๋๊ณ , ๋ฆฌ์กํธ์ ๋ฒ์ ์..
[JavaScript] ๋ณ์์ ์ฌํ ๋น ๊ณผ์
๋ณ์์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๊ฐ ์ ์ฅ๋์ด ์๋ค. ๊ทธ๋ฌ๋๊น, ํน์ ๊ฐ์ด ์ ์ฅ๋์ด ์๋ ๊ฒ์ด ์๋, ํน์ ๊ฐ์ด ์ ์ฅ๋์ด ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ด๋ค. ๋ณ์์ ๊ฐ์ด ์ฌํ ๋น๋ ๋ ํด๋น ๊ฐ์ด ์คํ์ ์กด์ฌํ๋ฉด ๊ทธ ์คํ ์ฃผ์๋ก ํ ๋น๋๋ค๋ ๋ด์ฉ์ ๋ณธ ๊ฒ ๊ฐ์๋ฐ, ๊ฐ์ด ๊ฐ๋๋ผ๋ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ๊ฐ์ด ์ ์ฅ๋๋ ์ค ์์๋๋ฐ ๊ทธ๊ฒ ์๋์ด์ ์ข ๋ ์ ํํ๊ฒ ๊ณต๋ถํด์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.๋ณ์์ ์ข ๋ฅ์ ๋ฐ๋ผ ์ ์ฅ๋๋ ์์น๊ฐ ๋ค๋ฅด๋ค.๋ฉ๋ชจ๋ฆฌ๋ 4๊ฐ์ ์์ญ์ด ์๊ณ , ์ ์ญ๋ณ์, ์ง์ญ๋ณ์, ์ฝ๋, ๋์ ํ ํ ๋น์ ๋ฐ๋ผ ์ ์ฅ๋๋ ์์น๊ฐ ๋ค๋ฅด๋ค.์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํ์์ญ๊ณผ ์ฝ์คํ์ ์ฌ์ฉํ๋ค.์ฝ์คํ์์ ํ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค.๋ณ์์ ์ ์ฅ๋๋ ๊ฒ : ์ฝ์คํ์ ์ฃผ์ ๋ฉ๋ชจ๋ฆฌ ํ(heap ์์ญ)์ฐธ์กฐ ํ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค. (๋ฐฐ์ด, ๊ฐ์ฒด, ํจ์ ๋ฑ)..
[React] sitemap์ผ๋ก SEO ์์ ํ๊ธฐ
ํ๋ ๋์๋ฆฌ์๋ค์ ์ฌ๋ฌ๊ฐ์ง ์ฑ๊ณผ๊ฐ ์๊ธฐ๋ฉด์ ์ฑ๊ณผํ์ด์ง๋ฅผ ์ถ๊ฐ๋ก ๋ง๋ค๊ฒ ๋์๋ค. ์๋ก์ด ๊ธฐ์๋ฅผ ๋ฝ๊ธฐ ์ํ ํ๋ณด ๊ณผ์ ์์ ์ฑ๊ณผ๊ฐ ์ ์ฉํ๊ฒ ์์ฉํด์ผํ๊ธฐ์ SEO๊ฐ ๋ถ๊ฐํผํ๋ค. SEO์ ๋ํ ๊ฒฝํ์ด ์์ด์ ์ข์ ๊ธฐํ๋ผ๊ณ ์๊ฐํ๊ณ , ๊ฐ๋ฐ๋ก ๋๋๋ ๊ฒ์ด ์๋ ๊ธฐ๋ก์ผ๋ก ๋จ๊ธฐ๋ฉฐ ๊ณต๋ถ๋ฅผ ํด๋ณด๋ ค๊ณ ํ๋ค.1. ๊ฒ์์์ง ๊ฒฐ๊ณผ ํ์ด์ง(SERP)๊ฒ์์์ง์ SERP๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์๋์ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์น๋ค.ํฌ๋กค๋ง : ๊ตฌ๊ธ๋ด(์น ํฌ๋กค๋ฌ)์ด ์นํ์ด์ง์ ์ฝํ ์ธ ๋ฅผ ๋ณต์ฌํด์ ๋ชจ๋ ์ ๋ณด๋ฅผ ์์งํ ์ ๋ณด๋ฅผ ๊ฒ์์์ง์ผ๋ก ๊ฐ์ ธ์จ๋ค. ์ธ๋ฑ์ฑ : ๊ตฌ๊ธ๋ด์ด ๊ฐ์ ธ์จ ์ ๋ณด๋ฅผ ์ฃผ์ ๋ณ๋ก ์์ธํด์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๋ค.๋ญํน : ์์ธ๋ ์ฝํ ์ธ ๋ฅผ ๊ฒ์ ์๋์ ๋ง์ถฐ์ ์์๋ฅผ ๋ถ์ฌํ ๋ค์ ์ฌ์ฉ์๊ฐ ํด๋น ํค์๋๋ก ๊ฒ์ํ์ ๋ ๋ญํน ์์๋๋ก ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๋ค.2. ์ฌ์ดํธ๋งตSER..
api.channel.io API ๊ฐ์ ธ์ค๊ธฐ ์๋ฌ ํด๊ฒฐ - plugin key
์๋ง ๋๋ ๋์๋ฆฌ ์น์ฌ์ดํธ๊ฐ ๊ฐ์๊ธฐ POST ํธ์ถ ์ค์ ์๋์ ๊ฐ์ 403 forbidden ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉฐ ๋์ํ์ง ์์๋ค. {type: "constraintUrlError", status: 403, errors: [{message: "this url is constraint"}],…}errors : [{message: "this url is constraint"}]language : "ko"status : 403type : "constraintUrlError"constraintUrlError์ ๋ํด์ ๊ฒ์๋ ํด๋ดค์ง๋ง ๋ง๋ ํ ๋ต์ด ๋์ค์ง ์์๋ค. ๊ทธ๋ฐ๋ฐ ์ญ์, ์ค๋ฅ๋ฅผ ์์ธํ ๋ค์ฌ๋ค ๋ด์ผํ๋ค. ์ค๋ฅ์ ์๋์ ๊ฐ์ ์ฃผ์๊ฐ ์์๋ค. https://api.channel.io/front/v6/elastic/pl..
[Next.js] ํ๋ก์ ํธ ์์ฑ
Next.js๋ ์๋ฒ์ฌ์ด๋๋ ๋๋ง์ ์ง์ํด์ฃผ๋ ํ๋ ์์ํฌ์ด๋ค.์๋ฒ์ฌ์ด๋ ๋ ๋๋ง์ ์ฅ์ ์ ์๋ ํฌ์คํ ์ ์ ๋ฆฌํด๋์๋ค. SSR์ ๊ฒฝํ์ ์๊ณ ์ถ์ด์ Next.js๋ฅผ ์ฌ์ฉํด๋ณด๋ ค๊ณ ํ๋ค.2024.05.30 - [Front-end/React] - [React] ๋ชจ๋ ๋ฆฌ์กํธ ๋ฅ๋ค์ด๋ธ 4. ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง ์ฃผ์ ์ ๋ฆฌ [React] ๋ชจ๋ ๋ฆฌ์กํธ ๋ฅ๋ค์ด๋ธ 4. ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง ์ฃผ์ ์ ๋ฆฌ1. ์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์ด๋?์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ์์ธ SPA๋ ๋ ๋๋ง๊ณผ ๋ผ์ฐํ ์ ํ์ํ ๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ ์๋ฒ๊ฐ ์๋ ๋ธ๋ผ์ฐ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์กดํ๋ ๋ฐฉ์์ ์๋ฏธํ๋ค. SPAworld-developer.tistory.comํ๋ก์ ํธ ์์ฑํ๊ธฐnpx create-next-app@latest ๋ง์ฝ typescript๋ฅผ ์ฌ์ฉํ๊ณ ..