๐Ÿง‘‍๐Ÿ’ป ์งง์€ํ˜ธํก

๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ๊นƒํ—ˆ๋ธŒ ์•ก์…˜์„ ํ†ตํ•ด ๋„์ปค ํ—ˆ๋ธŒ์— ํ‘ธ์‰ฌํ•˜๋Š” ๊ณผ์ •๊นŒ์ง€๋Š” ์ด์ „ ๊ธ€์—. ์กฐ์ง ๋‚ด์— 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..
ํ•œ๊ทœ์ง„
'๐Ÿง‘‍๐Ÿ’ป ์งง์€ํ˜ธํก' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (3 Page)