๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ๊นํ๋ธ ์ก์
์ ํตํด ๋์ปค ํ๋ธ์ ํธ์ฌํ๋ ๊ณผ์ ๊น์ง๋ ์ด์ ๊ธ์. ์กฐ์ง ๋ด์ deploy์ฉ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ํ๋ ํ์ ์ฌ์ฉํ๋ค. ์ด๊ณณ์์ ๋์ปค ์ปดํฌ์ฆ๋ฅผ ์ด์ฉํด ๋ฐฑ์๋, ํด๋ผ์ด์ธํธ, nginx ์ธ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ฐ์์ ์คํํ๋ค. ๋จผ์ ๊นํ๋ธ ์ก์
๋ถํฐ. prod-deploy.yml name: Deploy to Ec2 on: workflow_dispatch: push: branches: - main jobs: build: name: Build runs-on: ubuntu-latest steps: - name: checkout uses: actions/checkout@master - name: create remote directory uses: appleboy/ssh-action@master wit..
๐ง๐ป ์งง์ํธํก

๊ฐ์ฒด๋ ์ํ๋ฅผ ๋ํ๋ด๋ property์ ๋์์ ๋ํ๋ด๋ method๋ก ์ด๋ฃจ์ด์ ธ์๋ค. ๋ฉ์๋๊ฐ ์์ ์ด ์ํ ๊ฐ์ฒด์ property๋ฅผ ์ฐธ์กฐํ๋ ค๋ฉด const someone = { name: '9yu', getName() { return someone.name; }; }; ์ด๋ ๊ฒ ํ ์ ๋ ์๊ฒ ์ง๋ง, ์ข์ ๋ฐฉ๋ฒ์ ์๋๋ค. const someone = { name: '9yu', getName() { return this.name; }; }; ๋์ ์ด๋ ๊ฒ this๋ฅผ ์ฌ์ฉํด์ ์์ ์ด ์ํ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ์ ์๋ค. 1. this ๋ฐ์ธ๋ฉ function printThis() { console.log(this); } printThis(); ์ง๋์ฃผ ํด๋ก์ ์์ ์คํ์ปจํ
์คํธ์ ๋ํด์ ํ๋ฒ ๋ดค์๋ค. ํจ์๋ฅผ ํธ์ถํ ๋ ์คํ์ปจํ
์คํธ..
๊นํ๋ธ ์ก์
๊ณผ ๋์ปค๋ฅผ ์ด์ฉํด ๋ฆฌ์กํธ ํ๋ก์ ํธ ์๋ ๋ฐฐํฌ ํ๊ฒฝ์ ๊ตฌ์ถํด๋ณด๊ธฐ. ๋์ปค์ ๊ดํ ์ธ๊ฐ์ ์ ์ญํ๊ณ ์ผ๋ง ์๋์๋ ์กฐ๊ธ ๋ฃ๋ค ๋ง์๊ณ , ๊ทธ ์ดํ๋ก CI/CD์ ๋ํ ๊ฒฝํ์ด ์์๊ธฐ ๋๋ฌธ์. ์ด ๊ธฐํ์ ์ ๋ฆฌ๋ฅผ ํด๋์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ ๋ค. ๋ด๊ฐ ํ ๋ถ๋ถ์ ํ๋ก ํธ ๋ ํฌ์งํ ๋ฆฌ ๊ด๋ จ ๋ฟ์ด์ง๋ง ํ์์ ๊ตฌ์ถํ ์ ์ฒด์ ์ธ ํ๋ฆ์ ์ ์ด๋ณด๊ฒ ์ต๋๋ค. ์ ์ฒด์ ์ธ ์ฝ๋๋ ์ด์ ์ ๊ณ ์ค๋ฝ ํ๋ก์ ํธ ํ๋ฉด์ ์ฐฌ์ง์ด๊ฐ ์ธํ
ํ๊ฑฐ ๋ณด๊ณ ์ด์ฌํ ๋ฏ์ด์ ๋ฐฐ์์์. ์ฌ์ฉํ ๊ฒ๋ค Github Actions Docker, Docker Compose Nginx ์ ์ฒด์ ์ธ ํ๋ฆ ํ๋ก ํธ ๋ ํฌ์งํ ๋ฆฌ์ main ๋ธ๋์น์ push Github Actions์์ ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ๋ฉด ๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๊ณ ๋์ปค ํ๋ธ๋ก push ์๋ก ๋ฐฐํฌ๋ฅผ ์ํ ๋ Deploy ๋ ํฌ์ง..
1. ์คํ ๋ฆฌ๋ถ ์ค์น ๊ธฐ์กด ํ๋ก์ ํธ์ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ ๋ด์์ ์คํ .storybook ๋๋ ํ ๋ฆฌ ์์ main.js์ preview.js๊ฐ ์์ฑ๋๋ค. # Add Storybook: npx storybook init npm run storybook ๋ช
๋ น์ด๋ฅผ ํตํด ๋ก์ปฌํธ์คํธ 6006๋ฒ ํฌํธ์์ ์คํํ ์ ์๋ค. 2. Styled-components ์ ์ฉ preview.js์์ ์ค์ ์ ํด์ค๋ค. import React from 'react'; import { ThemeProvider } from 'styled-components'; import { GlobalStyle } from '../src/lib/styles/global-style'; import { theme } from '../src/lib/styles/t..

์ ์ : ํจ์์ ํจ์๊ฐ ์ ์ธ๋ ์ดํ์ ํ๊ฒฝ์ ์กฐํฉ ์ด๋ค ํจ์ A์์ ์ ์ธํ ๋ณ์ a๋ฅผ ์ฐธ์กฐํ๋ ๋ด๋ถ ํจ์ B๋ฅผ ์ธ๋ถ๋ก ์ ๋ฌํ ๊ฒฝ์ฐ, A์ ์คํ ์ปจํ
์คํธ๊ฐ ์ข
๋ฃ๋ ์ดํ์๋ ๋ณ์ a๊ฐ ์ฌ๋ผ์ง์ง ์๋ ํ์ 0. ์คํ ์ปจํ
์คํธ ์ ์ : ์คํํ ์ฝ๋์ ์ ๊ณตํ ํ๊ฒฝ ์ ๋ณด๋ค์ ๋ชจ์๋์ ๊ฐ์ฒด ํ์ธ์์ ๋์จ ํ์ฑ ๋ ์ฝ๋์ ๋น์ทํ ๊ฐ๋
..? // ------------------- (1) var a = 1; function outer() { function inner() { console.log(a); var a = 3; // --------------- (2) } inner(); // -------- (3) console.log(a); // ----------------- (4) } outer(); // --------..

1. OOP 1-1. ๊ฐ์ฒด์งํฅ์ 4๊ฐ์ง ํน์ฑ a. ๋คํ์ฑ ํ ๊ฐ์ง ์ญํ ์ด ์ํฉ์ ๋ฐ๋ผ ๊ฐ๊ธฐ ๋ค๋ฅธ ํ๋์ ํ๋ค. ์
ฐํ๊ฐ ํ๊ธฐ์นจ์_ํ๋ค() ๋ถ ์ฃผ๋ฐฉ์ฅ -> ๋์น๋ฅผ_๋ณธ๋ค() ์กฐ๋ฆฌ์ฅ -> ์๋ฆฌํ๋_์ฒ์_ํ๋ค() b. ์ถ์ํ ๊ณตํต๋ ๊ธฐ๋ฅ์ ๋ฝ์๋ธ๋ค. ํ์ค ์ธ๊ณ์ ๋ณต์กํ ํ์์ ๊ฐ๋จํ ํํ๋ก ๋ชจ๋ธ๋งํ๋ค. (simplify) ์ต์ํ์ ์ ๋ณด๋ฅผ ์ถ์ถ c. ์บก์ํ ๊ตฌํ ๋ด์ฉ์ ๋ด๋ถ์ ์จ๊ฒจ์ ์์ง๋๋ฅผ ๋์ด๋ ๊ฒ ์์ง๋ : ๊ฐ์ฒด๊ฐ ์์ ๊ณผ ๊ด๋ จ๋ ๊ฒ์ ์ค์ฌ์ ์ผ๋ก ํ๋ํ๋ค. c-1. ๊ฒฐํฉ๋ ๋ ๊ฐ์ฒด๊ฐ ์๋ก ๊ด๋ จ๋๊ฑฐ๋ ์์กดํ๋ ์ ๋ ์ ์ข์๊ฑฐ (๊ฐ์ฒด๋ฅผ ๋ผ์ด๋ด๊ฑฐ๋ ๋ณ๊ฒฝํ๊ธฐ ํ๋ค๋ค) c-2. ์บก์ํ๋ฅผ ์๋ฐํ ์ฌ๋ก ์ ๋ฌธ๋ฐฐ๋ฌ๋ถ๊ฐ ๊ณ ๊ฐ์ ์ง๊ฐ์ ๊ฐ์ ธ์์, ํ๊ธ์ ํ์ธํ๊ณ , ๋์ ๊ฐ์ ธ๊ฐ๋๊ฒ ์๋๋ผ ๊ณ ๊ฐ์ด ์์ ์ ์ง๊ฐ์ ํ๊ธ์ ํ์ธํ๊ณ , ๋์..

ํ์
์ถ๋ก ์ธํฐํ์ด์ค์ ์ ๋ค๋ฆญ์ ์ด์ฉํ ํ์
์ถ๋ก // ์ ๋ค๋ฆญ์ผ๋ก ๋๊ฒจ์ค ๊ฐ์ ์ธํฐํ์ด์ค์ ์์ฑ์ผ๋ก ์ฌ์ฉํ ์ ์์ interface Dropdown { value: T title: string; } var shoppingItem: Dropdown = { value: // ๋ง์ฐ์ค ์ฌ๋ฆฌ๋ฉด string์ผ๋ก ๋ฌ๋ค. ์ธํฐํ์ด์ค๋ฅผ extendsํด์ ์ฌ์ฉํ ๋๋, interface Dropdown { value: T title: string; } var items: Dropdown = { value: 10, title: 'a' } interface DetailedDropdown extends Dropdown { description: string; tag: T; } var detailItems: DetailedDr..

function logText(text: T):T { console.log(text); return text; } logText('ํ์ด'); //ํจ์๋ฅผ ํธ์ถํ๋ ์์ ์ ์ธ์์ ํ์
์ ์ง์ ํด์ฃผ๋๊ฒ ๊ธฐ์กด ํ์
์ ์ ๋ฐฉ์ : ํจ์๋ฅผ ์ค๋ณต์ผ๋ก ์ ์ธํด์ผํ๋ ๋ถํธํจ์ด ์๋ค. function logText(text: string) { console.log(text); return text; } function logNumber(num: number) { console.log(num); return num; } logText('a'); logNumber(10); ์ ๋์จ ํ์
๋ฐฉ์ : ๋ง์ฐ์ค๋ฅผ ์ฌ๋ ค ํ์
์ ํ์ธํ๋ฉด, string ๋๋ number ๊ฐ ์๋ ํญ์ string | number ์์ฒด๋ก ๋ณด์ฌ์ง๋ค. functio..