https://๋๋ฉ์ธ/๊ฒฝ๋ก1?ํ๋ผ๋ฏธํฐ1#/๊ฒฝ๋ก2?ํ๋ผ๋ฏธํฐ2
์์)
https://๋๋ฉ์ธ/?utm_source=utm์ ๋ณด/#/์ํ์์ธ๊ฒฝ๋ก?product_id=์ํ๋ฒํธ
>this.$router.push('/์ํ์์ธ๊ฒฝ๋ก?utm_source=utm์ ๋ณด&product_id=์ํ๋ฒํธ');
git branch protection rule
์ ํ์ฉํ์ฌ unexcepted deploy
๋ฅผ ๋ฐฉ์งํ๋ค.hmarr/auto-approve-action
์ ํ์ฉํ์ฌ ํน์ ๋ธ๋์น ์ด๋ฆ์ ๊ท์น๋ง ์๋ approve
name: Emergency-Approve
on:
pull_request:
jobs:
auto-approve:
if: github.repository == '๊ณ์ /repo๋ช
' && contains(github.head_ref, 'ํน์ ๋ธ๋์น๋ฌธ์์ด')
runs-on: ubuntu-latest
steps:
- uses: hmarr/auto-approve-action@v2.0.0
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
commit
๋ฒํธ๋ก ๋ฒ์ ์ unique
ํ๊ฒ ๊ตฌ๋ถํ๋ค.echo "{ \"version\": \"$(git rev-parse HEAD)\" }" > public/web-version.json
echo "{ \"version\": \"$(git rev-parse HEAD)\" }" > src/web-version.json
์ ๋ด์ฉ์ GitHub Actions์ ๋ฐฐํฌ ํ๋ก์ธ์ค์์
prebuild
๋ก ๋์์ํจ๋ค.
build
์ public์ json์ fetch์ฉ์ผ๋ก ์ด์ฉ๋๋ฉฐ, src์ json์ module์ฉ์ผ๋ก ์ด์ฉ๋๋ค.
getCurrentVersion() {
return require('src/web-version.json').version;
},
const { data } = await axios.get("/web-version.json", params);
const { version } = data;
ํ์ฌ ๋ฒ์ ๊ณผ ๋ฐฐํฌ๋ ์ต์ ๋ฒ์ ์ ๋น๊ตํ ํ, ์๋ก๊ณ ์นจ์ ํ์ฌ ์น ํ์ด์ง์ ๋ฒ์ ์ ์ ๋ฐ์ดํธํ๋ค.
HTML ํ์ผ์ด ์บ์ฑ๋์ด ์์ผ๋ฉด, ๊ฐ์
app.[hash].js
๋ฅผ ๋ถ๋ฌ์ค๋ฏ๋ก ๋ฒ์ ์ ๋ฐ์ดํธ๊ฐ ์คํจ๋๋ค.๋ฐ๋ผ์, ๋ธ๋ผ์ฐ์ ๊ฐ HTML ํ์ผ์ ์บ์๋ฅผ ์ฐ์ง ์๋๋ก ์๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค.
<meta
http-equiv="Cache-Control"
content="no-cache, no-store, must-revalidate"
/>
<meta http-equiv="Expires" content="0" />
<meta http-equiv="Pragma" content="no-cache" />
ํ๋ก ํธ์๋ ์ค๋ฅ ๋ก๊ทธ ์์ง๊ธฐ - Sentry ์ฌ์ฉ
๋ฌด๋ถ๋ณํ ๊ฐ์ ์ค๋ฅ, ๋ถํ์ํ ์ค๋ฅ ๋ฑ๋ฑ์ Sentry์ fingerprint
๋ก Grouping ์ ์ฉ
beforeSend
์์์ ๋ถ๋ฆฌ
// ----------------------------------------------------------------------------------------------------
import checkIE from "check-ie";
beforeSend: (event, hint) => {
// IE๋ ๋ฆฌํฌํ
๋ฌด์
const result = checkIE(window.navigator.userAgent);
if (result && result.isIE) {
event.fingerprint = ["IE-USAGE"];
if (event.exception.values[0]) {
event.exception.values[0].type = "IE์ฌ์ฉ๊ฐ์ง";
}
return event;
}
};
5000์ฌ ๊ฐ๊ฐ ๋๋ ์ปดํฌ๋ํธ ์ฌ์ฉ => vue-cli-service serve
์ ์๋ ๊ฐ์ ํ์
์ ์ฅ์ Hot Reload ๋ฐ์ ์๋: ์ฝ 7.46์ด => ๋ฎ์ ์์ฐ์ฑ
Vue-CLI์ Custom WebPack ์ค์ ์ ํตํด ๊ฐ์ => ์ฝ 4.26์ด๋ก ๊ฐ์ (๊ฐ๋ฐ ์์ฐ์ฑ ์ฆ๋)
module.exports = {
configureWebpack: {
devtool:
process.env.NODE_ENV === "production"
? "source-map"
: "eval-cheap-source-map",
},
};
์ปดํจํ ๋ฆฌ์์ค์์ด FrontEnd๋ฅผ ์ํ ๋ธ๋ก๊ทธ ๋ฐ ๋์ ์น ์ฌ์ดํธ๋ฅผ ๊ธฐํ
- ์ด๋ ฅ์ https://creco.today/about
- ํฌํธํด๋ฆฌ์ค https://creco.today/portfolio
- ์คํฌ ์ https://creco.today/about/skill
- ๋ธ๋ก๊ทธ https://creco.today/blog
GitHub Project Repo
โ GitHub Actions
โ S3
โ CloudFront
โ Route53
GitHub Data Repo
โ GitHub Actions
โ S3
โ CloudFront
โ Route53
marp-core
, tiny-slider
๊ธฐ์กด์ https://web.marp.app ์ ๋ฐํ๋ชจ๋๊ฐ ์๋ ๋จ์ ์ ์ฐฉ์
GitHub Actions๋ฅผ ํ์ฉํ NPM ์๋ publish
# ---------------------------------------------------------------------------------------------------------
on:
push:
branches:
- master
jobs:
publish-npm:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
with:
node-version: 12
registry-url: https://registry.npmjs.org/
- run: yarn install
- run: yarn build
- name: npm publish
env:
NODE_AUTH_TOKEN: ${{secrets.NODE_AUTH_TOKEN}}
run: npm publish
# ---------------------------------------------------------------------------------------------------------
GitHub Actions
๋ฅผ ํ์ฉํ ๋ฌด๋ฃ ์ค์ผ์ฅด๋ง ์ปดํจํ
๋ฆฌ์์ค
https://github.com/CreatiCoding/action-scheduler
on:
schedule:
- cron: "*/10 * * * *"
AWS Lambda๋ฅผ HTTP API GateWay๋ก ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉ์ ์ง์ ๋๋ฉ์ธ์ผ๋ก ์ ๊ณต(Route53)
์ด๋ฏธ์ง ์ ๋ก๋ ๋ง์ดํฌ๋ก ์๋น์ค ์ด์
marp-team/marpit README.md ๊ธฐ์ฌ
webpack-korea/webpack.js.org ๋ฒ์ญ ์ฐธ์ฌ
https://github.com/orgs/webpack-korea/people
ko.javascript.info ๋ฒ์ญ ํ๋ก์ ํธ ์ฐธ์ฌ
sequelize-auto help ๋ฌธ๊ตฌ ์์
vue-iamport ์ค๋ฅ ์์
vue-barcode-reader ๋ฐ๋ชจ ์ถ๊ฐ
Resume |
https://creco.today/about |
WebSite |
https://creco.today |
GitHub |
https://github.com/CreatiCoding |
Twitter |
https://twitter.com/creaticoding |
Email |
nodejsdeveloper@kakao.com |
Mobile |
010-5189-7852 |