๐ TIL(98)
-
210816 ๊ฐ๋ฐ๊ธฐ๋ก: ์ ๊ทํํ์ ์ฌ์ฉํ์ฌ html ํ๊ทธ ๋ด๋ถ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
๐ HTML ํ๊ทธ๋ฅผ ์ง์ฐ๊ณ ๋ด๋ถ ๊ฐ์ ๊ฐ์ ธ์ฌ ๋ ์ด๋ฐ html ์ฝ๋๊ฐ ๋ฌธ์์ด๋ก ์กด์ฌํ ๋, div ๋ด๋ถ์ ๊ฐ(text: LIKE LION BABE) ๋ง ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ด ์๋ค. const html = ' LIKE LION BABE ' ๋ฐ๋ก ์ ๊ทํํ์์ ์ด์ฉํ ์ ๊ทผ์ด๋ค. const removeHtml = (html) => { html = html.replace(/ /ig, "\n"); // ํ๊ทธ ์ ๊ฑฐ html = html.replace(/]*)?(\s)*(\/)?>/ig, ""); // ํ๊ทธ ์์ฒด๋ฅผ ์์ค๋ค by replace() } ๋๋ฒ์งธ ์ ๊ท ํํ์์ ๊ทธ๋ฆผ์ผ๋ก ํ์ด ํด์ํด๋ณด์๋ค. ์ด๊ฑด ์ ๊ทํํ์ ๊ณต๋ถํ๋ฉด์ ์ ๋ฆฌํ ๋ด์ฉ. ๊ทธ์ ๊ป ์ฝ๋ฉํ ์คํธ์์ ์ ๊ทํํ์์ ์ฌ์ฉํด์ผ ํ ๊ฒ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๋ง๋ฌ๋ค. ์ ๊ท ํํ์์ ..
2021.08.16 -
210815 ๊ฐ๋ฐ๊ธฐ๋ก: ์ฌ๋ฌ๊ฐ์ query parameter string
๐ฟ ์ฌ๋ฌ ๊ฐ์ Query String Parameter ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ ์๋ ์ฒ๋ผ query string parameter ๋ฅผ ์ด์ฉํ์ฌ api ์์ฒญ์ ํ๊ณ ์์๋ค. const response = await fetch(`/v1/search/book?query=${query}`) ์ฒ์์ {query} ํ๋ผ๋ฏธํฐ ๋ง ํ์ํ์ผ๋, ์ถ๊ฐ์ ์ผ๋ก {display} ํ๋ผ๋ฏธํฐ ๋ ํ์ํ๋ค. ๋ฏธ์ธ๋จผ์ง ๊ฐ์ ์ํ์ฐฉ์ค๊ฐ ์์๋๋ฐ, ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ ๋ ๋ฌผ์ํ(?) ๊ฐ ์ฝ์ ๋๊ธฐ์, ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ ์๋ ๋ฌผ์ํ๊ฐ ํ์ํ๋ค๊ณ ์๊ฐํ๋ค (์ค๋ต). // Bad request const response = await fetch(`/v1/search/book?query=${query}?display={display}`) //..
2021.08.15 -
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
2021๋ 8์ 13์ผ ๋ถ๋ก ๊นํ์ ๋ชจ๋ operation/action(?) ์ ๊ฐ์ธ token์ ์ ๋ ฅํด์ผ ํฉ๋๋ค. remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. ์ ๋ git push ๋ฅผ ํ ๋, ์ด๋ฐ ์๋ฌ ๋ฉ์์ง๋ฅผ ๋ฐ์๋๋ฐ, ๊ฐ์ธ ํ ํฐ์ ๋ฐ๊ธ ๋ฐ์ ํ์๋ ์ด๋์๋ค ๊ฐ์ธ ํ ํฐ์ ์ ๋ ฅํด์ผ ํ ์ง ๋ชฐ๋ผ ํ์ฐธ ํด๋ฉจ์ต๋๋ค. 1. github์ ๊ฐ์ธ settings ํ์ด์ง๋ก ๊ฐ๋๋ค. 2. Developer Settings, click 3. personal access tokens ํญ์ ํด๋ฆญ ํ generate new token ์ ํด๋ฆญํฉ๋๋ค. 4. ..
2021.08.14 -
210813 ๊ฐ๋ฐ๊ธฐ๋ก: ๋ค์ด๋ฒ ๊ฒ์ api : Scope Status Invalid (error code 024) ํธ๋ฌ๋ธ์ํ
โ Scope Status Invalid: Authentication failed ( error code 024 ) ๋ค์ด๋ฒ (์ฑ ) ๊ฒ์ API ๋ฅผ ์ฌ์ฉํ๊ณ ์, api ํ ์คํธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ต๋๋ค. (Postman ๊ณผ ๋น์ทํ api ํ ์คํธ ๋๊ตฌ๋ก, Insomnia ๋ฅผ ์ฌ์ฉ์ค์ ๋๋ค) ์ ์ ํ query, Header ๊ฐ์ ๋ฃ๊ณ GET method ๋ก api๋ฅผ ํธ์ถํ์ง๋ง, Scope Status Invalid ( error code 024 ) ์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๊ฒ์api ์ด๋ฏ๋ก, query ๊ฐ์ ๊ฒ์์ด๋ฅผ ์ ๋ ฅํด์ผ ํฉ๋๋ค. query ๋๋ฝ์์ Bad Request 400 ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. Header ์๋ X-Naver-Client-Id ์ X-Naver-Client-Secret ๋ ๊ฐ์ ํ์์ ์ผ๋ก ๋ฃ์ด์ค์ผ ..
2021.08.13 -
210812 ๊ฐ๋ฐ๊ธฐ๋ก: Nullish Coalescing Operator(Null ๋ณํฉ ์ฐ์ฐ์) ์ฐฉ๊ฐํ ์ ์๋ ์
๐ If ๋ฌธ์ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ค๋ ค๋ค, Null ๋ณํฉ ์ฐ์ฐ์ ๊น์ง ์๋ค! if ๋ฌธ์ ๊ฐ๊ฒฐํ๊ฒ ํํํ๊ธฐ ์ํด ์ผํญ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ค. ES2020 ์์ ์ถ๊ฐ๋ Null ๋ณํฉ ์ฐ์ฐ์๋ฅผ ํตํด ์ผํญ ์ฐ์ฐ์์ ๊ธธ์ด๋ง์ ์ค์ผ ์ ์์๋ค. ์ด ๊ณผ์ ์์ ๋ด๊ฐ ์๋ชป ์๊ฐํ ๋ถ๋ถ์ ๊ธฐ๋กํด๋ณธ๋ค. const header = { ..., 'id': request.headers['id'] ? request.headers['id'] : null } header ๊ฐ์ฒด ๋ด๋ถ id ํ๋กํผํฐ๋ฅผ ํ ๋นํ๋ ๊ณผ์ ์ ๋ณด์. request.headers['id'] ๊ฐ ์กด์ฌํ๋ค๋ฉด, ๊ทธ ์์ฒด๋ฅผ ํ ๋นํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด null ๊ฐ์ ํ ๋นํ๋ค. ์ด๋ null ๋ณํฉ ์ฐ์ฐ์๋ฅผ ํ์ฉํ๋ฉด ์ฝ๋๋ฅผ ๋์ฑ ๊ฐ๋จํ๊ฒ ๋ง๋ค ์ ์๋ค. const header = { ...,..
2021.08.12 -
210810 ๊ฐ๋ฐ๊ธฐ๋ก: ํ๊ฒฝ๋ณ์๋ฅผ ์ฝ์ด๋ค์ด์ง ๋ชปํ ๋(feat. material UI icon)
์ํฉ 1 config ํ์ผ ์ค์ ์ํฉ์์, ์ด์ํ๊ฒฝ/๊ฐ๋ฐํ๊ฒฝ ํ์ผ์ ์์ฑํ๋ค. ๋์ ์์ด์ฝ ํํ๊ฐ ๋ค๋ฅด๊ธด ํ์ง๋ง, ๋ฌธ์ ๋์ง ์์ ๊ฒ์ด๋ผ ์๊ฐํ๋ค. ์ํฉ 2 .development.env file์ REDIS_PORT ๊ฐ์ ์ถ๋ ฅํ๋ คํ ๋, ์๋์ฒ๋ผ undefined ๊ฐ ์ถ๋ ฅ๋๋ค. trouble shooting ๊ณผ์ .development.env ํ์ผ์ด ์๋, production.env ํ์ผ์ ์ฌ์ฉํ์ฌ REDIS_PORT ๊ฐ์ ์ถ๋ ฅํ์, ์ ์์ ์ผ๋ก ๊ฐ์ด ์ถ๋ ฅ๋๋ค. ์ฒ์ ๋ .env ํ์ผ์ ์์ฑํ ๋, ์์ด์ฝ ํํ๊ฐ ๋ค๋ฅธ ์ ์์ ํ์ผ์์ฒด์ ๋ฌธ์ ๊ฐ ์์๊ฒ์ด๋ผ ์๊ฐํ๋ค. ์ค์ ๋ก .development.env ํ์ผ๋ช ์ ๋ค์ ํ์ธํด๋ณด๋, ์๋ ์ด๋ฏธ์ง์ฒ๋ผ, ํ์ผ๋ช ๋ง์ง๋ง์ ํ์นธ์ ๊ณต๋ฐฑ์ด ๋ค์ด๊ฐ์์๋ค. ์ด๋๋ฌธ์ ํ์ผ๋ช ์ด..
2021.08.11 -
210809 ๊ฐ๋ฐ๊ธฐ๋ก: ์๊ฒฉ์ ๋ธ๋์น ๋ฐ์์ค๊ธฐ
๐ ๊น ํด๋ก ์ผ๋ก๋ ๋ธ๋์น๊น์ง ํด๋ก ํ ์ ์๋ค! ์๊ฒฉ ์ ์ฅ์์์ ํ๋ก์ ํธ๋ฅผ ํด๋ก ํ ๋, ๋ธ๋์น๋ ๋น์ฐํ ๊ฐ์ด ํด๋ก ๋ ๊ฒ์ด๋ผ ์๊ฐํ๋ค. ์ ํ ์๋์๋ค &=^__^ ๋ก์ปฌ์์ ๋ธ๋์น๋ฅผ ํ์ธํด๋ณด๋, ๋ฌ๋ ๋ง์คํฐ ๋ธ๋์น ํ๋๋ง ์กด์ฌํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. git fetch ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋ธ๋์น๊น์ง ๋ฐ์์ ์ง์ง ์์๊น ์๊ฐํ๋์ ์ค์ฐ์ด์๋ค. โ ํด๊ฒฐ ์ฐ์ git branch -r ๋ช ๋ น์ด๋ก ์๊ฒฉ์ ๋ธ๋์น๋ช ๊ณผ ๋ฃจํธ๋ฅผ ์ ํํ ํ์ธํ๋ค. ๋ด๊ฐ checkout ํ๊ณ ์ ํ ๋ธ๋์น๋ช ์ production์ผ๋ก, origin/production ๋๋ ํ ๋ฆฌ์ ์กด์ฌํจ์ ํ์ธํ๋ค. git checkout ๋ช ๋ น์ด์ ํจ๊ป -t ์ต์ ๊ณผ ๋๋ ํ ๋ฆฌ(origin/production) ๊น์ง ์ ๋ ฅํด์ฃผ๋ฉด, 1) ์๊ฒฉ์ ๋ธ๋์น๋ฅผ trackingํ๊ฒ ๋..
2021.08.10 -
210807 ๊ฐ๋ฐ๊ธฐ๋ก: var, let ์ ์ฐจ์ด(feat. ํธ์ด์คํ )
๋ณธ ํฌ์คํ ์ ์๋์ ์ง๋ฌธ์ ๋๋ตํ ์ ์๋ ๊ฐ๋ ์ ํจ์ํฉ๋๋ค. ๐๐ปโ๏ธ Q. var ๊ณผ let ์ ์ฐจ์ด๋ ๋ฌด์์ธ๊ฐ? ๐ถ A. ์ค์ฝํ์ ๊ด์ ์์, var๋ ํจ์ ๋ ๋ฒจ ์ค์ฝํ, let์ ๋ธ๋ญ ๋ ๋ฒจ ์ค์ฝํ๋ค. ์ฌ์ ์ธ์ ๊ด์ ์์, var ๋ ์ด๋ฏธ ์ ์ธํ ๋ณ์๋ฅผ ์ฌ์ ์ธ์ด ๊ฐ๋ฅํ์ง๋ง, let์ ์ฌ์ ์ธ์ด ๋ถ๊ฐ๋ฅํ๋ค. let์ ์ฌํ ๋น๋ง ๊ฐ๋ฅํ๋ค (์ ์ธ๊ณผ ํ ๋น์ ์๋ฏธ๋ฅผ ๋ช ํํ ์ดํดํ์!) ๐๐ปโ๏ธ Q. var ๊ณผ let ์ ๋ณ์ ์์ฑ ๊ณผ์ ์ ์ด๋ค ์ฐจ์ด๊ฐ ์๋๊ฐ ๐ถ A. ๋ณ์ ์์ฑ ๊ณผ์ ์๋ var / let ์ ์ฐจ์ด๊ฐ ์๋ค. ์ฐ์ ๋ณ์๋ ์ ์ธ -> ์ด๊ธฐํ -> ํ ๋น ์ ๊ณผ์ ์ ๊ฑฐ์น๋ฉฐ ์์ฑ๋๋๋ฐ, var ์ ์ ์ธ๊ณผ ์ด๊ธฐํ ๊ณผ์ ์ด ๋์์ ์ด๋ฃจ์ด์ง๊ณ , let์ ์ ์ธ๊ณผ ์ด๊ธฐํ ๊ณผ์ ์ด ๋ถ๋ฆฌ๋์ด์๋ค. ์ฌ๊ธฐ์ ํธ์ด์คํ (hoist..
2021.08.08 -
210806 ๊ฐ๋ฐ๊ธฐ๋ก: switch(true)
ToastUI ๊ธฐ์ ๋ธ๋ก๊ทธ์ ํฅ๋ฏธ๋ก์ด ์ฝ์๊ฑฐ๋ฆฌ๊ฐ ๋ง๋ค. ๊ทธ์ค์์ switch(true) ํจํด์ ๊ดํ ๊ธ์ด ํฅ๋ฏธ๋ก์ ํ์ฌ ์ฝ๋์ ์ ์ฉํด๋ณด์๋ค. ๐ switch(true) ์ ๊ธฐ๋ณธ ์๋ฆฌ ์ฐ์ switch(true) ํจํด์ ์๋ฆฌ๋, ๊ธฐ์กด switch ๋ฌธ์ ์ ์ฉํ๋ ๊ฐ(value)์ ํํ์์ผ๋ก๋ ๋์ฒดํ ์ ์๋ค. ์ฌ๊ธฐ์ ํํ์์ด๋ boolean ๊ฐ์ ๋ฆฌํดํ๋ ์์ ์๋ฏธํ๋ค. ๐ฟ ๊ธฐ๋ณธ switch(Value) ํจํด ๊ธฐ์กด switch๋ฌธ ์ธ์์ Value๋ ํน์ ํ ๊ฐ(value) ๋ฅผ ์๋ฏธํ๋ค. Value ๋ณ์๊ฐ ์ด๋ค ๊ฐ์ ๊ฐ์ง๋์ ๋ฐ๋ผ ํด๋น case ๋ฌธ์ ์คํํ๋ค. ์ฝ๊ฒ ์๊ฐํ์ฌ Value ๊ฐ์ด case์ ๊ฐ๊ณผ ์ผ์นํ๋ ๊ฒ์ ์ฐพ๋ ๊ณผ์ ์ด๋ค,. // ๊ธฐ์กด switch ๋ฌธ switch (Value){ case "A": ..
2021.08.07