![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd9Tvh3%2Fbtq1E9Pb1xN%2FIni79176BxzwfHidOAPzq0%2Fimg.png)
JS ๋์์๋ฆฌ js๋ ์ฑ๊ธ ์ฐ๋ ๋ ๊ธฐ๋ฐ ์ธ์ด์ด๋ฏ๋ก ํธ์ถ ์คํ์ด ํ๋๊ณ ํ ๋ฒ์ ํ ์์ ๋ง ์ฒ๋ฆฌํ ์ ์๋ค. ์ด์ ๋ฐ๋ฅธ ๋ฌธ์ ๋ ํ๋์ ๋ก์ง์ ์ํํ๋๋ฐ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ฉด ๋ค๋ฅธ ๋ก์ง์ด ๋ฉ์ถฐ๋ฒ๋ฆฐ๋ค๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๋น๋๊ธฐ ์ฝ๋ฐฑ์ ์ฌ์ฉํ ์ ์๋ค. ๋ฐํ์ js ๋ฐํ์์ JS์์ง, web api, task queue, event loop, render queue๋ก ๋์ด์๋ค. ์์ง js ์์ง์ ๋ํ์ ์ธ ์๋ Google์ V8 ์์ง์ด๋ค. Chrome๊ณผ Node.js์์ ์ด๋ฅผ ์ฌ์ฉํ๋ค. memory heap : ๋ฉ๋ชจ๋ฆฌ ํ ๋น call stack : ํธ์ถ ์คํ ์์ ๋๊ฐ์ง๋ก ์์ง์ ๊ตฌ์ฑ๋์ด์๋ค. Web API DOM, Ajax, TimeOut ๋ฑ์ Web API๊ฐ ์๋ค. Callstack์์ ๋น๋๊ธฐ ํจ์๊ฐ ..
React array state๊ฐ ๊ฐฑ์ ๋์ด๋ view๊ฐ ๋ฐ๋์ง ์์ ๋ const [members, setMembers] = useState([]); const deleteMember = (index: number) => { // member ์ญ์ const tmp = members; tmp.splice(index, 1); setMembers(tmp); } return( { members.map((member: string, index: number) => {member} } ); members๋ผ๋ Array state์ ๊ฐ ํ๋๋ฅผ ์ญ์ ํ๋ ํจ์์ด๋ค. ํด๋น ํจ์๋ฅผ ์คํํด๋ ํ์๋๋ ํ์์ด ๋ณํ์ง ์๋ ์ด์๊ฐ ๋ฐ์ํ๋ค. ํ์ง๋ง ๊ฐ๋ฐ์๋๊ตฌ๋ฅผ ํตํด์ ๋ณด๋ฉด ๋ถ๋ช ํด๋น ์ปดํฌ๋ํธ์ members State๋ ๋ณ๊ฒฝ๋..
React ํ๊ฒฝ๋ณ์ ๋ฑ๋ก ๊ธฐ์กด ๊ฐ๋ฐ ์ ๊ฐ๋ฐ ํ๊ฒฝ์์ React๋ฅผ ํ๋ก ํธ๋ก ์ฌ์ฉํ ๋, ์ฝ๋ ์ฌ์์์ ํ๊ฒฝ๋ณ์๋ฅผ ์ด์ฉํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น? ์ต์์ ํด๋์ .env ํ์ผ์ ๋ง๋ ๋ค. .env ํ์ผ์ REACT_APP์ผ๋ก ์์ํ๋ ํ๊ฒฝ๋ณ์๋ฅผ ์ ์ํ๋ค. REACT_APP_ADMIN_KEY=hi ์ฝ๋ ์์์ process.env.REACT_APP_ADMIN_KEY์ ๊ฐ์ ํํ๋ก ์ฌ์ฉํ๋ค. ์ด๋ ๊ฒ ๊ฐํธํ๊ฒ ์ด์ฉํ ์ ์๋ค! ๋ฐฐํฌ ์ ํ์ง๋ง ์๋น์ค๋ฅผ ์ํ build ํ์๋ ํ๊ฒฝ๋ณ์๋ฅผ ์ฝ์ด๋ค์ผ ์ ์๊ธฐ ๋๋ฌธ์ build์ ๋์์ build์ ๋ํ ๋งค๊ฐ๋ณ์(argument)๋ก ํ๊ฒฝ๋ณ์๋ฅผ ์ธํ ํด์ฃผ์ด์ผํ๋ค. NERA๋ github action์์ docker/build-push-action@v1.1.0 ์ด๋ผ๋ action..
์ฟ ํค๊ฐ ๋ฐ๊ธ๋์ง ์์ ๋ KOS ํ๋ก์ ํธ๋ ํ๋ก ํธ์๋์ React.js๋ฅผ ์ฌ์ฉํ๊ณ ์๋ฒ๋ go lang ๋ผ์ด๋ธ๋ฌ๋ฆฌ gin์ ์ด์ฉํ์ฌ ์งํ์ค์ด๋ค. ์ฒ์์ api๋ฅผ ๋ง๋ค๊ณ ๋์๋ postman์ด๋ผ๋ ํด๋ก ์ ๋๋ก ๋์ํ๋์ง ๊ฒ์ฌํ๋ค. ์ฒ์์๋ api์ฐ๊ฒฐ์ด ์์กฐ๋กญ๊ฒ ๋๋ค๊ฐ ๋ก๊ทธ์ธ์ ์ํด์ ์ฟ ํค๋ฅผ ๋ฐ๊ธํ๋ api๋ฅผ ์์ฑํ ์ดํ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ์ฟ ํค๊ฐ ๋ฐ๊ธ๋์ง ์๋๋ค. ํ๋ก ํธ์๋์์ ๋ฐ์ Network๋ 200์ผ๋ก ์ ์์ด๊ณ set-cookie๋๋ ๊ฒ๊น์ง ๋ณด์ด๋ฉฐ response๋ฅผ ์ถ๋ ฅํด๋ณด์๋ ์ ์์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ์ ์ฟ ํค๊ฐ ๋ฐ๊ธ๋์ง ์์๊น? ๋ฐฑ์๋์์ ํ๋ก ํธ์๋์ ์ฟ ํค๋ฅผ ์ ์ฅ์ํค๊ธฐ ์ํด์๋ ์์ชฝ์ credential ์์ฑ์ ๋ชจ๋ ON ํด์ฃผ์ด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋จผ์ ๋ฐฑ์๋(go lang)์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค. // ..
SOP, COP Same Origin Policy document ๊ฐ์ฒด๋ ์ถ์ ์ธ origin์ ๊ฐ์ง๊ณ ์๊ณ , ์ด๋ js์์ `document.location.origin`์ผ๋ก ํ์ธํ ์ ์๋ค. document ๋ด์์ ๋ฆฌ์์ค๋ค๊ณผ ์ํธ์์ฉํ ๋, origin์ด ๋ค๋ฅด๋ค๋ฉด ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐ์ ์์ด์ ์ ํ์ ๋๊ฒ ๋ค๋ ๊ฒ์ด SOP(Same Origin Policy)์ด๋ค. Origin ํ๋จ Origin์ด ๊ฐ์ ์ง๋ Protocol, Host, Port๋ก ํ๋จํ๋๋ฐ url ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. http://localhost:3000 Protocol://Host:Port ์ธ ๊ฐ์ง๊ฐ ๋ชจ๋ ๊ฐ์ผ๋ฉด ๊ฐ์ Origin์ด๋ผ๊ณ ํ๋จ๋๋ ๊ฒ์ด๋ค. IE๋ ์์ชฝ ๋๋ฉ์ธ ๋ชจ๋ ๋์ ๋จ๊ณ์ ๋ณด์ ์์ค์ผ ๊ฒฝ์ฐ Same Origin ..
Ajax๋ js๋ฅผ ์ด์ฉํ ๋น๋๊ธฐ ํต์ ์ผ๋ก, ํด๋ผ์ด์ธํธ ์๋ฒ ๊ฐ์ xml(Extensible Markup Language)๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ธฐ์ ์ด๋ค. ์ ์ฒด ํ์ด์ง๋ฅผ ๋ฆฌ๋ก๋ํ์ง ์๊ณ ํ์ํ ๋ฐ์ดํฐ๋ง ๋ก๋ํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค. Ajax ๋ฐฉ์์ ์ด์ฉํ ์น API๋ XMLHttpRequest ๋ถํฐ ์์ํ์ฌ fetch๋ฅผ ๊ฑฐ์ณ axios๊น์ง ๋ค์ํ๋ค. XMLHttpRequest๋ ๋ณต์กํ๊ณ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๊ธฐ ๋๋ฌธ์ fetch api๊ฐ ES6์์๋ถํฐ ํ์ค์ด ๋์๋๋ฐ, ๋ฐ๋ผ์ ํ์ฌ fetch api๋ ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ฐ๋ก ์ค์นํ์ง ์๊ณ ์ฌ์ฉํด๋ ๋๋ค. axios๋ Node.js์์ XMLHttpRequests๋ฅผ ์ฌ์ฉํ๊ธฐ ์ข๊ฒ ๋ง๋ค์ด๋ api์ด๋ฉฐ ๋ฐ๋ก ์ค์นํด์ฃผ์ด์ผ ๋์ํ๋ค. TOP Ajax API๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋ ๋ง์..
ECMAScript ๊ณต๋ถ ES5 ์ด์ ES3 (1999) : ์ ๊ทํํ์, try/catch๋ฌธ string string.length : ๊ธธ์ด ์์ฑ string.indexOf(string, [start]) : ํด๋น ๊ธ์์ ์์ index ์์น ๋ฐํ string.lastIndexOf(string, [start]) : ํด๋น ๊ธ์์ ๋ง์ง๋ง ์์ index ์์น ๋ฐํ string.search(string) : indexOf์ ๋น์ทํ์ง๋ง ์ ๊ทํํ์ ์ฌ์ฉ x string.slice(index, index2) : index๋ถํฐ index2-1๊น์ง ์๋ฅด๊ธฐ ์์ index๋ ๋ค์์๋ถํฐ ์ string.substring(index, index2) : slice์ ๋น์ทํ์ง๋ง, ์์ ๋ถ๊ฐ string.substr(index, l..
ํ๋ก ํธ์์ 2๊ฐ์ง ํธ์ถ api๋ฅผ ๊ฐ์ ํจ์์ ๋๊ณ ๋์์ ํธ์ถํ์๋๋, ์๋ฒ์์ ๋ท ์์๋ก ํธ์ถ๋ api ์คํ ์ No database selecte error ๊ฐ ๋๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ : gorm.DB์ ์๋ sql.DB์ SetMaxOpenConns ํจ์๋ฅผ ์ด์ฉํ์ฌ, ๋์์ ํ์ฉ ๊ฐ๋ฅํ ์ต๋ ์ปค๋ฅ์ ๊ฐ์๋ฅผ ์ ํํด์ฃผ์ด์ผํ๋ค. Config.DB, err = gorm.Open(mysql.Open(Config.DBURL(Config.BuildDBConfig())), &gorm.Config{}) if err != nil { fmt.Println("Status: ", err) return } // ์๋์ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ค๋ค. db, err := Config.DB.DB() if err != nil { fmt.Print..
Comment