-
Front-end
Express ์ปค์คํ
์๋ฒ๋ฅผ Next.js API Routes๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๊ธฐ
๋ค์ด๊ฐ๋ฉฐ๋ ๊ฑฐ์ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ ๋ ๊ฐ์ฅ ์ด๋ ค์ด ์ ์ "์ ์ด๋ ๊ฒ ๋ง๋ค์ด์ก์๊น?"๋ฅผ ์ดํดํ๋ ๊ฒ์
๋๋ค. ์ ๊ฐ ๊ฐ๋ฐํ๊ณ ์๋ WMS(Warehouse Management System) ํ๋ก์ ํธ๋ ๋ง์ฐฌ๊ฐ์ง์์ต๋๋ค. Next.js ๊ธฐ๋ฐ ํ๋ก์ ํธ์์๋ ๋ถ๊ตฌํ๊ณ ๋ณ๋์ Express ์ปค์คํ
์๋ฒ๋ฅผ ์ด์ํ๊ณ ์์๋๋ฐ, ์ด๊ธฐ์๋ API ํ๋ก์ ๊ธฐ๋ฅ์ ๋น ๋ฅด๊ฒ ๊ตฌํํ๊ธฐ ์ํ ์ ํ์ด์์ ๊ฒ์
๋๋ค.ํ์ง๋ง ์๊ฐ์ด ์ง๋๋ฉฐ ์ด ์ ํ์ ๊ธฐ์ ๋ถ์ฑ๋ก ์์ฌ๊ฐ๊ณ , ๊ฒฐ๊ตญ 1,056์ค์ ๊ฑฐ๋ํ ๋จ์ผ ํ์ผ์ด ๋์ด ์ ์ง๋ณด์์ ๋ฐ๋ชฉ์ ์ก์์ต๋๋ค.๋ฌธ์ ์ํฉ1,056์ค์ง๋ฆฌ Express ์๋ฒ์ ํ๊ณWMS ํ๋ก ํธ์๋ ํ๋ก์ ํธ๋ Next.js ๊ธฐ๋ฐ์ด์ง๋ง, API ํ๋ก์๋ฅผ ์ํด ๋ณ๋์ Express ์ปค์คํ
์๋ฒ(server/index.js)๋ฅผ ์ฌ์ฉํ๊ณ ..
-
Front-end
Next.js ๋น๋ ์ต์ ํ : Babel โ SWC ์ ํ
๋ฌธ์ ์ํฉํ๋ก์ ํธ ๋น๋ ์๊ฐ์ด 1๋ถ 30์ด๋ฅผ ์ด๊ณผCI/CD ํ์ดํ๋ผ์ธ์์ ๋ณ๋ชฉ ๋ฐ์์์ธ ๋ถ์๋น๋ ๋ก๊ทธ ํ์ธ ๊ฒฐ๊ณผinfo - Disabled SWC as replacement for Babel because of custom Babel configuration ".babelrc"์ฃผ์ ๋ฌธ์ ์ :.babelrc ํ์ผ๋ก ์ธํ SWC ๋นํ์ฑํ738MB ํฌ๊ธฐ์ node_modules1MB ์ด์์ ๋์ฉ๋ ๋ฒ๋ค200๊ฐ ์ด์ ํ์ด์ง์ SSR ์ค์ ํด๊ฒฐ ๊ณผ์ 1. SWC ์ปดํ์ผ๋ฌ ํ์ฑํrm -f .babelrc// next.config.jsconst nextConfig = { // SWC ๊ฐ์ ํ์ฑํ swcMinify: true, // ๋น๋ ์ต์ ํ experimental: { forceSwcTransforms: t..
-
Front-end
Monorepo ๋์
๊ธฐ: ํ๋ก ํธ์๋ ๋ง์ด๊ทธ๋ ์ด์
์ค๊ณ ์ ๋ฆฌ
1. ๊ฐ์๋ณธ ๋ฌธ์์์๋ Legacy Web๊ณผ Mobile์ ๋ชจ๋
ธ๋ ํฌ ํ๋ก์ ํธ๋ก ํตํฉํ๋ ์ค๊ณ์ ์ ํ ์ ๋ต์ ์ ์ํฉ๋๋ค.2. ํ์ฌ ์ํฉ & ๋ฌธ์ ์ ๊ธฐ์ ์คํNext.js 12.3.6 + JavaScript(ES6)MobX 6.5.0, Material-UI v4React Query v3, Axios, npm์ฃผ์ ๋ฌธ์ ๊ฐ๋ฐ ํ๊ฒฝ ๋ณต์กExpress ๊ธฐ๋ฐ ์ปค์คํ
์๋ฒ(500+์ค), API ํ๋ก์ ์ค๋ณตํ๊ฒฝ ๋ณ์ ๊ด๋ฆฌ ๋์ด๋ ๋์ํด๋ ๊ตฌ์กฐ ๋นํ์คํv1/v2 ํผ์ฌ, Atomic Design ์ผ๋ถ ์ ์ฉ์ปดํฌ๋ํธ ์ฌ์ฌ์ฉ์ฑ ๋ฎ์์ฝ๋ ๋ฐ ์์กด์ฑ ์ค๋ณต๋์ผ ๋ก์งยทUI๋ฅผ ๋ ํ๋ก์ ํธ์ ์ค๋ณต ๊ตฌํ์์กด์ฑ 100% ์ค๋ณต ์ค์น๊ธฐ์ ๋ถ์ฑNext.js 12, React 17, MUI v4 ๋ฑ ๊ตฌ๋ฒ์ JavaScript โ TypeScript ํ์๋..
-
Front-end
Next.js ์ด๊ธฐ ๋ ๋๋ง ์ ๋ค๊ตญ์ด ๋ฌธ๊ตฌ๊ฐ ๋น์ด ๋ณด์ด๋ ๋ฌธ์ ํด๊ฒฐํ๊ธฐ
Next.js ์ ํ๋ฆฌ์ผ์ด์
์์ ๋ค๊ตญ์ด๋ฅผ localStorage ๊ธฐ๋ฐ์ผ๋ก ์ฒ๋ฆฌํ ๋ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.์ด๊ธฐ ํ๋ฉด ๋ก๋ฉ ์ ๋ฒํผ ํ
์คํธ๊ฐ ๋น์ด ์์์๋ก๊ณ ์นจ ํ์๋ ์ ์์ ์ผ๋ก ๋ค๊ตญ์ด ๋ฌธ๊ตฌ๊ฐ ํ์๋จ์ ๋ฌธ์ ์ ์์ธ์ ๋ถ์ํ๊ณ ํด๋ผ์ด์ธํธ ํ๊ฒฝ์์ ๋ค๊ตญ์ด๋ฅผ ๋ถ๋ฌ์ค๋๋ก ์์ ํ๊ณ , ์ฑ๋ฅ ์ต์ ํ ์์
์ ํด๋ณด์์ต๋๋ค.๋ฌธ์ ์์ธconst DUMMY_DATA = [ { id: 0, name: getLang("WD000266"), ... }, ...];getLang(code)๋ localStorage์์ ๋ค๊ตญ์ด ๋ฌธ์์ด์ ๋ถ๋ฌ์ค๋ ํจ์์
๋๋ค.export const getLang = (code) => { if (typeof window !== "undefined") { const langL..
-
Front-end
useState์ ๋น๋๊ธฐ์ฑ
์ด๋ฒ ๊ธ์์๋ useState๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ๋์ํ๋ ์๋ฆฌ์ ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ ํจํด์ ๋ํด ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค. ๋จผ์ ๋น๋๊ธฐ์ ์ด๋ผ๋ ๊ฒ์ setState๋ฅผ ํธ์ถํ ์งํ์ ์ํ๊ฐ ์ฆ์ ๋ฐ์๋์ง ์์์ ์๋ฏธํฉ๋๋ค.const [count, setCount] = useState(0);const handleClick = () => { setCount(count + 1); console.log(count); // ์ฌ์ ํ setCount ์ด์ ๊ฐ์ธ 0์ด ์ถ๋ ฅ๋จ}; ์ ์ฝ๋์์ handleClick์ ํธ์ถํ๋ฉด setCount(count + 1)์ด ์คํ๋์ง๋ง, console.log(count)๋ ์ฌ์ ํ ์ด์ ๊ฐ์ธ 0์ ์ถ๋ ฅํฉ๋๋ค. useState๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ๋์ํ๋ ์๋ฆฌ์ด๋ฌํ ๋น๋๊ธฐ์ฑ์ด ๋ฐ์ํ๋ ์ด์ ๋ ๋ ๋๋ง ์ฑ๋ฅ์ ์ต์ ..
-
Front-end
React key prop๊ณผ ์ํ ์ด๊ธฐํ
React์์ key prop์ ๋ฆฌ์คํธ๋ iterable ๊ฐ์ฒด ๋ ๋๋ง ์ ์ค์ํ ์ญํ ์ ํ์ง๋ง, ์ํ(state) ๊ด๋ฆฌ์๋ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.key์ ์ญํ React์์ key๋ ๊ฐ ์ปดํฌ๋ํธ์ ๊ณ ์ ์ฑ์ ๋ณด์ฅํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ํจ์จ์ ์ผ๋ก ๊ฐ์งํ๊ณ ์
๋ฐ์ดํธํ๋ ์ญํ ์ ํฉ๋๋ค.๋ฆฌ์คํธ๋ฅผ ๋ ๋๋งํ ๋ key๊ฐ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉด ๊ธฐ์กด์ ์ปดํฌ๋ํธ๊ฐ ์ ์ง๋๋ฉฐ, ๋ณ๊ฒฝ๋๋ฉด ํด๋น ์ปดํฌ๋ํธ๋ ์๋ก์ด ๊ฒ์ผ๋ก ์ธ์๋ฉ๋๋ค.key๊ฐ state์ ๋ฏธ์น๋ ์ํฅkey๊ฐ ๋ณ๊ฒฝ๋๋ฉด React๋ ๊ธฐ์กด ์ปดํฌ๋ํธ๋ฅผ ์ ๊ฑฐํ๊ณ ์๋ก์ด ์ปดํฌ๋ํธ๋ฅผ ์์ฑํฉ๋๋ค.์ฆ, key ๊ฐ์ด ๋ฐ๋๋ฉด ํด๋น ์ปดํฌ๋ํธ์ ์ํ๊ฐ ์ด๊ธฐํ๋ฉ๋๋ค.์ด๋ ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฌ์ฉํ๋ฉด์ ๊ฐ๋ณ์ ์ผ๋ก ์ํ๋ฅผ ์ ์งํ๊ณ ์ถ์ ๋ ์ ์ฉํ๊ฒ ํ์ฉํ ์ ์์ต๋๋ค.import { useStat..
-
Front-end
Timer Interval ์ง์ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ
์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ์งํํ๋ ์ค, ๊ธฐ์กด ๊ตฌํ๋ ํ์ด๋จธ์์ ์ธํฐ๋ฒ ์์ ์ด ์ง์ฐ๋๋ ๋ฌธ์ ๊ฐ ์๋ค๋ ํผ๋๋ฐฑ์ ๋ฐ์์ต๋๋ค.๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์๊ฐํด๋ณด์์ต๋๋ค.ย ์๋ ์ฝ๋๋ ์์๋ฅผ ์ํด ์์ฑ๋ ์ฝ๋์
๋๋ค.AS-IS. ์๊ฐ์ ์ง์ ๊ณ์ฐ, setInterval๋ก 1์ด๋ง๋ค ๊ฐฑ์ 'use client';import { useEffect, useState } from 'react';import { atomWithStorage } from 'jotai/utils';import { useAtom } from 'jotai';const startTimeAtom = atomWithStorage('inboundProcessStartTime', Date.now());export default function Timer() {..
-
DevOps
CDN (Content Delivery Network)
CDN์ด๋?CDN(์ฝํ
์ธ ์ ์ก ๋คํธ์ํฌ)์ ์ง๋ฆฌ์ ์ผ๋ก ๋ถ์ฐ๋ ์ฌ๋ฌ ๊ฐ์ ์๋ฒโ ์น ์ฝํ
์ธ ๋ฅผ ์ฌ์ฉ์์ ๊ฐ๊น์ด ๊ณณ์์ ์ ์กํจ์ผ๋ก์จ ์ ์ก ์๋๋ฅผ ๋์์น ํ์ด์ง, ์ด๋ฏธ์ง, ๋์์ ๋ฑ์ ์ฝํ
์ธ ๋ฅผ ์ฌ์ฉ์์ ์ค์ ์์น์ ๊ฐ๊น์ด ์๋ฒ์ ์บ์ฑ์ฌ์ฉ์์ ๊ฐ์ฅ ๊ฐ๊น์ด ์๋ฒ์์ ์ฝํ
์ธ ๋ฅผ ์ ์ก โ ํ์ด์ง ๋ก๋ ์๊ฐ ๋จ์ถ, ๋ ๋น ๋ฅธ ๊ณ ์ฑ๋ฅ ์น ํ๊ฒฝ ๊ฒฝํย CDN์ ๋์ ์๋ฆฌCDN์ ์ธ ๊ฐ์ง ์ข
๋ฅ์ ์๋ฒ์ ์์กด์ค๋ฆฌ์ง ์๋ฒ์ฝํ
์ธ ์ ์๋ณธ ๋ฒ์ ์ด ํฌํจ๋์ด ์์ผ๋ฉฐ ์๋ณธ ์์ค ์ญํ ์ ํจ์ฝํ
์ธ ๋ฅผ ์
๋ฐ์ดํธํด์ผ ํ ๋๋ง๋ค ์ค๋ฆฌ์ง ์๋ฒ์์ ๋ณ๊ฒฝ์ค๋ฆฌ์ง ์๋ฒ๋ ์ฝํ
์ธ ๊ณต๊ธ์
์ฒด๊ฐ ์์ ํ๊ณ ๊ด๋ฆฌ or ์จ๋ํํฐ ํด๋ผ์ฐ๋ ๊ณต๊ธ์
์ฒด์ ์ธํ๋ผ(Amazon์ AWS S3 ๋๋ Google Cloud Storage)์์ ํธ์คํ
์ฃ์ง ์๋ฒ์ ์ธ๊ณ ์ฌ๋ฌ ์ง๋ฆฌ์ ์์น์ ์์น..
-
DevOps
๋ฌด์ค๋จ ๋ฐฐํฌ (Zero Downtime Deployment)
๋ฌด์ค๋จ ๋ฐฐํฌ๋?๋ฌด์ค๋จ ๋ฐฐํฌ๋ ์๋น์ค ์ฅ์ ์ ๋ฐฐํฌ์ ๋ถ๋ด์ ์ต์ํํ๊ธฐ ์ํด ์ด์ ์ค์ธ ์๋น์ค๋ฅผ ์ค๋จํ์ง ์๊ณ ์ ๊ท ์ํํธ์จ์ด๋ฅผ ๋ฐฐํฌํ๋ ๊ธฐ์ ย ๋ธ๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ(Blue-Green Deployment)ย ๊ฐ๋
: ๋ ๊ฐ์ ํ๊ฒฝ(๋ธ๋ฃจ์ ๊ทธ๋ฆฐ)์ ์ ์งํ๋ฉฐ, ํ์ฌ ์ด์ ์ค์ธ ์๋น์ค ํ๊ฒฝ์ Blue, ์๋กญ๊ฒ ๋ฐฐํฌํ ํ๊ฒฝ์ Green์ด๋ผ๊ณ ํจ๋ฐฐํฌ ๊ณผ์ ์๋ก์ด ๋ฒ์ ์ ๊ทธ๋ฆฐ ํ๊ฒฝ์ ๋ฐฐํฌํ ํ, ์ถฉ๋ถํ ํ
์คํธ๋ฅผ ๊ฑฐ์นจํ
์คํธ ์๋ฃ ํ ํธ๋ํฝ์ ๋ธ๋ฃจ ํ๊ฒฝ์์ ๊ทธ๋ฆฐ ํ๊ฒฝ์ผ๋ก ์ ํ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ค์ ๋ธ๋ฃจ ํ๊ฒฝ์ผ๋ก ํธ๋ํฝ์ ์ ํํ์ฌ ๋กค๋ฐฑ ์ฉ์ด์ฅ์ ๋กค๋ฐฑ์ด ๊ฐ๋จํ๊ณ ์ํ์ด ์ ์ํ
์คํธ๊ฐ ์ถฉ๋ถํ ์ด๋ฃจ์ด์ง ํ์ ์ค์ ์๋น์ค์ ๋ฐ์ํธํ์ฑ ๋ฌธ์ ์์๋จ์ ๋ ๊ฐ์ ํ๊ฒฝ์ ์ ์งํด์ผ ํ๋ฏ๋ก ์ธํ๋ผ ๋น์ฉ ์ฆ๊ฐย ๋กค๋ง ๋ฐฐํฌ(Rolling Deployment)๊ฐ๋
:..
-
DevOps
PM2 Research
์
์ฌ ์ด๊ธฐ ํ๋ก ํธ์๋ ์๋น์ค ๋ฐฐํฌ ํ๊ฒฝ์ด EC2์ PM2๋ก ๊ตฌ์ถ๋์ด ์์์ต๋๋ค.PM2์ ๋ํด ๊ณต๋ถํ๋ฉฐ ๋ฆฌ์์นํ ๋ด์ฉ์
๋๋ค.PM2๋ Process Manager์ ์ฝ์๋ก NodeJS ํ๋ก์ธ์๋ฅผ ๊ด๋ฆฌํ๋, ์ํํ ์๋ฒ ์ด์์ ์ํ ํจํค์ง์๋น์ค๋ฅผ ์ ๊ณตํ๊ณ ์๋ ๋์ค ๊ฐ์๊ธฐ ์๋ฒ๊ฐ ์ค์ง๋์ด๋ ์๋ฒ๋ฅผ ๋ค์ ์คํNode.js๋ ์ฑ๊ธ ์ค๋ ๋ ๊ธฐ๋ฐ์ด์ง๋ง, ๋ฉํฐ ์ฝ์ด ํน์ ํ์ดํผ ์ค๋ ๋ฉ์ ์ฌ์ฉํ ์ ์๊ฒ ํด์คํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ด ์ฌ ๋ ์์์ ์์ฒญ์ ์ฌ๋ฌ ๋
ธ๋ ํ๋ก์ธ์ค์ ๊ณ ๋ฅด๊ฒ ๋ถ๋ฐฐ (๋ก๋ ๋ฐธ๋ฐ์ฑ)์๋ ์๋ฆฌPM2์ Cluster mode๋ Node.js์ Cluster module์ ํตํด ์๋Node.js Cluster module์ Node.js์์ ๋ฉํฐ์ฝ์ด ์์คํ
์ ์ด์ฉํ ์ ์๋๋ก Port๋ฅผ ๊ณต์ ํ๋ Child ..
-
Front-end
React Server Component๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์
React Server Component๋?์๋ฒ ์ปดํฌ๋ํธ(Server Components)๋ ์๋ก์ด ์ ํ์ ์ปดํฌ๋ํธ๋ก, ๋ฒ๋ค๋ง ์ ์ ๋ฏธ๋ฆฌ ๋ ๋๋ง๋๋ฉฐ, ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์
์ด๋ SSR ์๋ฒ์๋ ๋ณ๋์ ํ๊ฒฝ์์ ์คํ๋ฉ๋๋ค.์ด ๋ณ๋์ ํ๊ฒฝ์ด React ์๋ฒ ์ปดํฌ๋ํธ์์ ๋งํ๋ "์๋ฒ"์
๋๋ค.์๋ฒ ์ปดํฌ๋ํธ๋ ๋น๋ ์ CI ์๋ฒ์์ ํ ๋ฒ ์คํ๋๊ฑฐ๋, ๊ฐ ์์ฒญ๋ง๋ค ์น ์๋ฒ์์ ์คํ๋ ์ ์์ต๋๋ค.๋๋ณด๊ธฐ์ฌ๊ธฐ์ CI ์๋ฒ๋?CI ์๋ฒ๋ Continuous Integration(์ง์์ ํตํฉ)์ ์ฝ์๋ก, ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ์ฝ๋๋ฅผ ์๋์ผ๋ก ๋น๋ํ๊ณ ํ
์คํธํ๊ธฐ ์ํ ์๋ฒ๋ฅผ ๋งํฉ๋๋ค. CI ์๋ฒ๋ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ด๋ฅผ ์ ์ฅ์์ ํธ์ํ ๋, ๋ณ๊ฒฝ๋ ์ฝ๋๋ฅผ ์๋์ผ๋ก๋น๋ย (์ฝ๋๋ฅผ ์ปดํ์ผํ๊ฑฐ๋ ๋ฒ๋ค๋ง)ํ
์คํธย (์ ๋ ํ
์ค..
-
GSAP
GSAP ๊ธฐ์ด ์ ๋ฆฌ - Tween๊ณผ Timeline
GSAP์ด๋? GreenSock Animation Platform ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ ๋์์ด๋๋ค์ด ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ ์์ฃผ ๊ฐ๋ ฅํ ํ์๋ผ์ธ ๊ธฐ๋ฐ์ ์ ๋๋ฉ์ด์
์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. GSAP๋ CSS์ keyframe๊ณผ animation ๋ณด๋ค ๋ ์ ๋ฐํ ์ปจํธ๋กค์ ํ ์ ์์ผ๋ฉฐ ๊ฐ๋ณ๊ณ ์ฌ์ฉ๋ฐฉ๋ฒ์ด ์ฝ๋ค๋ ๊ฐ์ฅ ํฐ ์ฅ์ ์ด ์๋ค. Tween Tween์ ์ ๋๋ฉ์ด์
์ ์ ์ํ๋ ๊ฐ์ฒด ๊ฐ๋
์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. gsap.to("#b", 3, {delay:2, x:700, repeat:-1}); gsap.from("#g", 3, {delay:2, x:700, repeat:-1}); gsap.fromTo("#r", 3, {x:200}, {delay:2, x:700, repeat:-1}) ์ฝ๋์ ๊ฐ๊ฒฐ์ฑ์ ์ํด fromT..
-
Javascript
์๋ฐ์คํฌ๋ฆฝํธ์ ES6 ~ES2014
ECMAScript(ECMA-262) ๋ Javascript ๋ช
์ธ ๋๋ ์คํ์ ์๋ฏธํฉ๋๋ค. ECMA-262 : ECMA์ธํฐ๋ด์
๋(ํ์ค๊ธฐ๊ตฌ)์ ECMAScript ์ธ์ด์ ๊ณต์ ์ฌ์์ธ ECMA-262 ํ์ค์ ๋ง๋ค์์ต๋๋ค. ์ฆ, ECMAScript๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ค์ด๋ฉฐ ๋ผ๋(core)๋ฅผ ๊ตฌ์ฑํ๋ ์คํฌ๋ฆฝํธ ์ธ์ด์
๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ECMAScript ๋ช
์ธ ๋๋ ์คํ์ ๋ฐ๋ฅด๋ ์คํฌ๋ฆฝํธ ์ธ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ECMAScript 6 (2015) ES6์๋ ๋ค์๊ณผ ๊ฐ์ ์๋ก์ด ๊ธฐ๋ฅ์ด ์ถ๊ฐ ๋์์ต๋๋ค. - arrows (ํ์ดํ ํจ์) - classes (ํด๋์ค) - enhanced object literals (object ๋ฉ์๋ ์ ์ธ ๋ฐ ์์ฑ(๋์ ) ์ ์ธ) - template strings (ํ
ํ๋ฆฟ ๋ฌธ์์ด)..
-
Front-end
์น ํ์ค๊ณผ ์น ์ ๊ทผ์ฑ
์น ํ์ค์ ์ด๋ค ํ๊ฒฝ์์๋ ์ด์ฉํ ์ ์๋ ์นํ์ด์ง๋ฅผ, ์น ์ ๊ทผ์ฑ์ ์ด๋ค ์ฌ๋์ด๋ ์ด์ฉํ ์ ์๋ ์นํ์ด์ง๋ฅผ ๋ง๋ค ์ ์๋ ๋ฐฉ๋ฒ์ ๋ด๊ณ ์๋ค. ์น ํ์ค์ด๋? W3C(Wordl Wide Web Consortium)์์ ๊ถ๊ณ ํ๋ ์น์์ ํ์ค์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ธฐ์ ์ด๋ ๊ท์น ์ฌ์ฉ์๊ฐ ์ด๋ ํ ์ด์์ฒด์ ๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ์นํ์ด์ง๊ฐ ๋์ผํ๊ฒ ๋ณด์ด๊ณ ์ ์์ ์ผ๋ก ์๋ํ ์ ์๋๋ก ํ๋ ์นํ์ด์ง ์ ์ ๊ธฐ๋ฒ์ ๋ด๊ณ ์๋ค. ์น ๊ฐ๋ฐ์ ์ฌ์ฉํ๋ ์ธ์ด์ธ HTML, CSS, JavaScript ๋ฑ์ ๊ธฐ์ ์ ๋ค๋ฃฌ๋ค. ํ์ฌ๋ ํฌ๋กฌ, ์ฃ์ง, ์ฌํ๋ฆฌ ๋ฑ ์ต์ ์น ๋ธ๋ผ์ฐ์ ๋ค์ ๋ชจ๋ ์นํ์ค์ ์ง์ํ๋ค. ์น ํ์ค์ ๋ง์ถ์ด ์นํ์ด์ง๋ฅผ ์์ฑํ๋ฉด ์ด๋ค ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํ๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฌผ์ ์ป์ ์ ์๋ค. ์น ํ์ค์ ์ค์ํ๋ ๋ฐฉ๋ฒ 1. DOCTYP..
-
Front-end
๋ชจ๋ ๋ฒ๋ค๋ฌ์ Webpack
JavaScript ํ๋ ์์ํฌ์ธ React, Vue, Svelte, Angular ๋ฑ์ ์ฌ์ฉํ๋ค ๋ณด๋ฉด ๋ชจ๋ ๋ฒ๋ค๋ฌ(module bundler)๋ ํ์์ ์ผ๋ก ์ธ๊ธ๋๋ ๋ด์ฉ์
๋๋ค. ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ JavaScript ๋ชจ๋์ ๋ธ๋ผ์ฐ์ ์์ ์คํํ ์ ์๋ ๋จ์ผ JavaScript ํ์ผ๋ก ๋ฌถ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋๊ตฌ์
๋๋ค. ๋ชจ๋(Module) ์ ํ๋ฆฌ์ผ์ด์
์ ๊ธฐ๋ฅ์ด ๋ง์์ง์๋ก ์์ฑํด์ผํ๋ ์ฝ๋๊ฐ ๊ธธ์ด์ง ์ ์์ต๋๋ค. ๋ชจ๋ ์ฝ๋๋ฅผ ํ ๊ฐ์ ํ์ผ์ ์์ฑํ๋ ๋์ ๊ธฐ๋ฅ(๋ณ์, ๊ฐ์ฒด, ๋ฐฐ์ด, ํจ์, ํด๋์ค ๋ฑ)์ ๋ฐ๋ผ ๋ณ๋์ ํ์ผ์ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ ์ ์์ต๋๋ค. ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๋ ๊ธฐ์ค์ ๋ฐ๋ผ ํ์ผ์ด ์๋นํ ๋ง์์ง ์ ์์ง๋ง, ํ ๊ฐ์ ํ์ผ์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ๋ณด๋ค ์ฒด๊ณ์ ์ด๊ณ ์ ์ง๋ณด์๊ฐ ์ฌ์์ง๋๋ค. ๊ฒฐ๊ตญ ๋ชจ๋์ ๋ถ๋ฆฌ๋ ํ์ผ์ ์๋ฏธํฉ๋..
-
Javascript
์๋ฐ์คํฌ๋ฆฝํธ์ Promise์ await/async
Promise ์๋ฐ์คํฌ๋ฆฝํธ Promise ๊ฐ์ฒด๋ ๋น๋๊ธฐ ์์
์ ์ต์ข
์๋ฃ ๋๋ ์คํจ๋ฅผ ๋ํ๋ด๋ ๋
์์ ์ธ ๊ฐ์ฒด์ด๋ค. ๋น๋๊ธฐ ์์
์ด ๋๋ ๋๊น์ง ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ, ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๊ฒ ๋ค๋ '์ฝ์'์ ๋ฐํํ๋ค๋ ์๋ฏธ์์ Promise๋ผ ๋ช
๋ช
์ง์ด์ก๋ค๊ณ ํ๋ค. Promise ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ค๋ฉด new ํค์๋์ Promise ์์ฑ์ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ด๋ Promise ์์ฑ์ ์์ ๋๊ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฃ๊ฒ ๋๋๋ฐ, ์ฒซ ๋ฒ์งธ ์ธ์๋ ์์
์ด ์ฑ๊ณตํ์ ๋ ์ฑ๊ณต(resolve)์์ ์๋ ค์ฃผ๋ ๊ฐ์ฒด์ด๋ฉฐ, ๋ ๋ฒ์งธ ์ธ์๋ ์์
์ด ์คํจํ์ ๋ ์คํจ(reject)์์ ์๋ ค์ฃผ๋ ์ค๋ฅ ๊ฐ์ฒด์ด๋ค. const myPromise = new Promise((resolve, reject) => { // ๋น๋๊ธฐ ์์
..
-
Javascript
์๋ฐ์คํฌ๋ฆฝํธ์ ํธ์ถ ์คํ๊ณผ ์ด๋ฒคํธ ๋ฃจํ
์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์ ํ๊ฒฝ Call stack๊ณผ Event loop๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋์ ์๋ฆฌ๋ฅผ ์ดํดํ๊ธฐ ์ํด ๊ผญ ์์งํด์ผํ๋ ๊ฐ๋
์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ ํ๊ฒฝ์ ์๋ฏธํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์ ํ๊ฒฝ์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑ๋์ด ์๋ค. ํฌ๊ฒ Memory heap, call stack, web apis, callback queue, event loop๊ฐ ์๋ค. Call Stack ํธ์ถ ์คํ์ ํจ์์ ํธ์ถ์ ์คํ ๋ฐฉ์์ผ๋ก ๊ธฐ๋กํ๋ ์๋ฃ๊ตฌ์กฐ๋ค. ํ๋ก๊ทธ๋จ์์ ์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค ์์๋๋ก ์คํ์ ๋ด๊ณ , ๊ฐ์ฅ ๋์ค์ ๋ค์ด์จ ์์
์ ๋จผ์ ์ฒ๋ฆฌํ๋ LIFO(Last In First Out) ๊ตฌ์กฐ์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฑ๊ธ ์ค๋ ๋ ๊ธฐ๋ฐ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์ ํ๋์ ํธ์ถ ์คํ๋ง์ ๊ฐ์ง๊ณ ์๊ณ , ํ ๋ฒ์ ํ๋์ task๋ง ์ฒ๋ฆฌํ ์ ..
-
Javascript
์๋ฐ์คํฌ๋ฆฝํธ์ ๋น๋๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฑ๊ธ ์ค๋ ๋ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์ ํ ๋ฒ์ ํ๋์ ์์
๋ง ์ํํ ์ ์๋ค. ์ด์ ์์
์ด ์๋ฃ๋์ด์ผ ๋ค์ ์์
์ ์ํํ ์ ์๋ค. ์ด๋ฌํ ์ฝ๋ ์์ฐจ ์คํ์ ๋๊ธฐ(Synchronous)๋ผ๊ณ ํ๋ค. ๊ทธ๋ฌ๋ ์์
์ด ์ค๋ ๊ฑธ๋ฆฌ๊ฑฐ๋ ์๋ต์ด ๋ฆ์ด์ง๋ ๊ฒฝ์ฐ์ ์ ์ฒด์ ์ธ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์๋ค. ์๋ฅผ ๋ค์ด ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ์๋ต์ ๋ฐ์์ผ ํ๋ ์์
์ด ์๋ค๋ฉด, ์๋ต์ด ์ฌ ๋๊น์ง ๋๊ธฐํด์ผ ํ๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋์
๋ ๊ฐ๋
์ด ๋น๋๊ธฐ(Asynchronous)์ด๋ค. ๋น๋๊ธฐ๋ ํน์ ์์
์ ์๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค๋ฅธ ์์
์ ๋์์ ์ํํ ์ ์๊ฒ ํ๋ค. ๋น๋๊ธฐ๋ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์์
์ ๋ค๋ฅธ ๊ณณ์ ์ธ๊ฐํ์ฌ ์ฒ๋ฆฌ๋๊ฒ ํ๊ณ , ๊ทธ ์์
์ด ์๋ฃ๋๋ฉด ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฐ์ ์คํํ๋ ๋ฐฉ์์ผ๋ก, ์ฝ๊ฒ ๋งํด ์์
์ ๋ฐฑ๊ทธ๋ผ์ด..