Animated Rainbow Nyan Cat
no image
MSA
MSAMicroService Architecture์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋А์Šจํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ์„œ๋น„์Šค์˜ ๋ชจ์ž„์œผ๋กœ ๊ตฌ์กฐํ™”ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ณ ์Šคํƒ€์ผ-> ๊ฐ ์„œ๋น„์Šค๋“ค์ด ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜๊ณ  ์„œ๋กœ ํ†ต์‹ ์„ ํ•˜์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„๋•Œ ์„œ๋กœ ํฌ๊ฒŒ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š” ์œ ์—ฐํ•œ ์„œ๋น„์Šค ๊ตฌ์กฐ Monolithic Architecture๊ฐ ์„œ๋น„์Šค๋“ค์ด ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜์–ด ํ•˜๋‚˜์˜ ์ „์ฒด ์‹œ์Šคํ…œ์„ ์ด๋ฃจ๋Š” ๊ตฌ์กฐ Microservice Architecture์ž‘์€ ์„œ๋น„์Šค ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ๋А์Šจํ•œ ๊ฒฐํ•ฉ์„ ํ†ตํ•ด ๋ฒŒ์ง‘์ฒ˜๋Ÿผ ๋ชจ์—ฌ ํ•˜๋‚˜์˜ ์ „์ฒด ์‹œ์Šคํ…œ์„ ์ด๋ฃจ๋Š” ๊ตฌ์กฐ->ํ–ฅํ›„์˜ ์„œ๋น„์Šค ํ™•์žฅ์„ ๊ณ ๋ คํ•˜์—ฌ ์„ค๊ณ„๋œ ๊ตฌ์กฐ-์ „์ฒด ์‹œ์Šคํ…œ์„ ์ž‘์€ ์„œ๋น„์Šค ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌ-๊ฐ ์„œ๋น„์Šค๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ Service Mesh์„œ๋น„์Šค๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ ์ „๋ฐ˜์— ๊ฑธ์ณ ๋ฐ์ดํ„ฐ์™€ ์ผ๊ด€์„ฑ์„ ๊ณต์œ ํ•˜๋ฉฐ ์„œ..
2023.12.22
no image
Docker
docker run --name myhttpd -d –p 8089:80 httpdcmd ์ฐฝ์— ์ด๋Ÿฐ์‹์œผ๋กœ ์น˜๋ฉด docker desktop์—์ด๋Ÿฐ์‹์œผ๋กœ ์ƒ์„ฑ๋œ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.์›๋ž˜ docker ๋ช…๋ น์–ด ๋’ค์— container๋ฅผ ๋ถ™์—ฌ์•ผ ๋˜๋‚˜ run์€ ๊ทธ๋ƒฅ docker run์œผ๋กœ ํ•ด๋„ ๋œ๋‹ค.docker run ๋ช…๋ น์–ด๋Š” docker pull + docker create + docker start ๊ฐ€ ํ•ฉ์ณ์ง„ ๊ฒƒ์ด๋‹ค. (์ด๋ฏธ์ง€ ๋‚ด๋ ค๋ฐ›๊ธฐ + ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ + ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰)ํ•œ๊ธ€ ํŒŒ์ผ์ด ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ช…๋ น์–ด chcp 65001์„ ์น˜๋ฉด ๋œ๋‹ค.์ด๋Ÿฐ์‹์œผ๋กœ ์ž‘์„ฑํ•œ index.html ํŒŒ์ผ์„ ํ•ด๋‹น ๊ฒฝ๋กœ๋กœ ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•˜๋ฉด์ด๋Ÿฐ์‹์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.์ด๋Ÿฐ ๋ช…๋ น์–ด๋ฅผ ์น˜๋ฉด ์ปจํ…Œ์ด๋„ˆ ์•ˆ์œผ๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.์ด๋Ÿฐ์‹์œผ๋กœ ๋ช…๋ น์–ด๋ฅผ ์น˜๋ฉด..
2023.11.29
no image
Vue.js (Pinia, Spring Security JWT)
PiniaVue.js์šฉ ์Šคํ† ์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ์ƒํƒœ๊ด€๋ฆฌ ํ”„๋ ˆ์ž„์›Œํฌํ”„๋ก ํŠธ์—”๋“œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์ถ•์„ ์œ„ํ•ด ์„ค๊ณ„๋จ. ์ฃผ์š” ์šฉ์–ดStore : ์ „์—ญ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ์ €์žฅ์†ŒState : ์ „์—ญ ๋ฐ์ดํ„ฐ (๊ทธ๋ƒฅ ๋ฐ์ดํ„ฐ๋งŒ ๋งŒ๋“ค๋ฉด ๋จ.)Getter : ์ €์žฅ์†Œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ• (computed์†์„ฑ์œผ๋กœ ๋งŒ๋“ค๋ฉด ๋จ.)Actions : ์ €์žฅ์†Œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• (ํ•„์š”์— ๋”ฐ๋ผ์„œ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ๋”.. ๋ฉ”์„œ๋“œ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.) Option API๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ๊ณ , Composition API๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ref๋‚˜ reactive๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ state์— ์žˆ๋Š” ๊ฑธ ๋ฐ˜์‘ํ˜•์œผ๋กœ ๋งŒ๋“ค์ˆ˜ ์žˆ๋‹ค. Composition API๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์„๋•Œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.export const useCounterStore..
2023.11.13
no image
Vue.js (4)
์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ์›น ํŽ˜์ด์ง€์˜ ๊ตฌ์„ฑ๊ณผ ๊ณ„์ธต๊ตฌ์กฐ pinia ๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•œ๋‹ค. ref ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ๋•Œ๋Š” ๋ณ€์ˆ˜๋ช….value ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค. reactive๋Š” ๊ฐ์ฒด์˜ ์†์„ฑ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค. ๋ถ€๋ชจ์—์„œ๋Š” ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ†ตํ•ด ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•ด๋†จ๋‹ค๊ฐ€ emit์ด๋ผ๋Š” ํ•จ์ˆ˜์— ์˜ํ•ด์„œ ์‹ค์ œ๋กœ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹คํ• ๋•Œ ์ž์‹์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ๊ฐ€ ์ฒ˜๋ฆฌ๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค. Vue 3์˜ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ํ†ต์‹  ๋ฐฉ๋ฒ• : (1) props ๋ถ€๋ชจ์—์„œ ์ž์‹์œผ๋กœ (2) emit ์ž์‹์ด ๋ถ€๋ชจ์—๊ฒŒ (3) v-model (4) slots (5) provide/inject (6) pinia toRefs : ๋ฐ˜์‘์„ฑ์€ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๊ฐ€๊ณ  ์‹ถ์„ ๋•Œ.. ๋ฐ˜์‘์„ฑ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด ์ฒ˜๋ฆฌํ•˜๊ฒ ๋‹ค ๋ผ๋Š” ๋œป.. ์ž์‹ ์ปดํฌ๋„ŒํŠธ. ์ž์‹๋ฒ„ํŠผ ๋ถ€๋ชจ ์ปดํผ๋„ŒํŠธ์—์„œ ์ž์‹ ์ปดํฌ๋„Œ..
2023.11.10
no image
Vue.js (3)
date1์€ Composition API๋ฐฉ์‹์ด๊ณ , date2๋Š” Option API์ด๋‹ค. Composition API๋ฐฉ์‹์€ ๋‹ค ์ด ์•ˆ์—๋‹ค๊ฐ€ ๊ตฌํ˜„ํ•ด๋„ ๋จ. ๊ทธ๋Ÿฌ๋‚˜ Option API๋Š” ๋ฆฌํ„ดํ•˜๋Š” ๊ธฐ๋Šฅ๋งŒ ๊ตฌํ˜„ํ•˜๊ณ , watch๋‚˜ computed๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์•ผํ•จ. script setup์— ์ž„ํฌํŠธํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋“ฑ๋ก ๋œ๋‹ค. defineProps() , defineEmits()๋ฅผ ์‚ฌ์šฉํ•ด ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์™€ ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์œ„์˜ ์ฝ”๋“œ๋ฅผ script์— setup์†์„ฑ์„ ์ฃผ์–ด ๋ฐ‘์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. export default { setup() { const name = reactive({ firstName:"์˜๊ธ”", lastName:"์†ก" }); const updateN..
2023.11.09
no image
Vue.js (watch)
watch : ๊ฐ’์ด ๋ณ€ํ™”๋ ๋•Œ๋งˆ๋‹ค ์•Œ์•„์ฑ„์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ. ์–ด๋–ค ์†์„ฑ์„ ๊ฐ์‹œํ•  ๊ฒƒ์ธ์ง€ ์ •์˜ํ•ด์•ผ ํ•จ. watch: { // inputText ๊ฐ์‹œ inputText: function () { //console.log(this.forbiddenText); var pos = this.inputText.indexOf(this.forbiddenText); if (pos >= 0) { alert(this.forbiddenText + "๋Š” ์ž…๋ ฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); // ์ž…๋ ฅ๋ฌธ์ž์—์„œ ๊ธˆ์ง€ ๋ฌธ์ž๋ฅผ ์‚ญ์ œํ•œ๋‹ค. this.inputText = this.inputText.substr(0, pos); } }, ์—ฌ๊ธฐ์„œ๋Š” inputText๋ฅผ ๊ฐ์‹œํ•œ๋‹ค. ๋ณ€ํ™”ํ• ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น function์ด ์ˆ˜ํ–‰๋œ๋‹ค. methods: { cleanToD..
2023.11.08
no image
Vue.js
์ดˆ์ฐฝ๊ธฐ ์›น ๋ Œ๋”๋ง์ดˆ์ฐฝ๊ธฐ์—๋Š” ๋ชจ๋“  ์›นํŽ˜์ด์ง€๊ฐ€ ์ •์ ํŽ˜์ด์ง€์˜€๋‹ค.  Ajax๊ฐ€ ๋‚˜ํƒ€๋‚จ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ๋Œ์–ด์˜ฌ ํ•„์š”์—†์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋Œ์–ด์˜ฌ์ˆ˜ ์žˆ๊ฒŒ ๋จ. SPA(Single Page Application)๋ชจ๋˜ ์›น์˜ ํŒจ๋Ÿฌ๋‹ค์ž„. ๋ฐฐํฌ๊ฐ€ ๊ฐ„๋‹จํ•จ.๊ธฐ๋ณธ์ ์œผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•„์š”ํ•œ ๋ชจ๋“  ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ์ตœ์ดˆ ์ ‘๊ทผ ์‹œ ๋‹จ ํ•œ๋ฒˆ๋งŒ ๋‹ค์šด๋กœ๋“œ. ์ดํ›„ ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€ ์š”์ฒญ ์‹œ, ํŽ˜์ด์ง€ ๊ฐฑ์‹ ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ์„ JSON์œผ๋กœ ์ „๋‹ฌ๋ฐ›์•„ ํŽ˜์ด์ง€๋ฅผ ๊ฐฑ์‹ ํ•ด ์ „์ฒด์ ์ธ ํŠธ๋ž˜ํ”ฝ ๊ฐ์†Œ์‹œํ‚ด. -> ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ๋ฐฉ์‹ SSG(Static Site Generation)์ •์ ์ธ ๋‚ด์šฉ์€ ๋ฌถ์–ด์„œ CDN์œผ๋กœ ์ €์žฅํ•ด๋‘๊ณ  ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋กœ๋“œํ•˜๋ฉด ๋จ. Vue์„ ์–ธ์  ๋ Œ๋”๋ง : ํ‘œ์ค€ HTML์„ ํ…œํ”Œ๋ฆฟ ๋ฌธ๋ฒ•์œผ๋กœ ํ™•์žฅํ•˜์—ฌ Javascript ์ƒํƒœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ™”๋ฉด์— ์ถœ..
2023.11.06
no image
ECMAScript6
firstNumber: 100,secondNumber:20,print: function() { console.log(this); function add() { console.log(this); return this.firstNumber + this.secondNumber; } console.log(this.firstNumber + "+" + this.secondNumber + "=" + add());}์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ•จ์ˆ˜ ์•ˆ์— ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ ์•ˆ์—์„œ์˜ this๋Š” ์ž๊ธฐ์ž์‹  ์ฐธ์กฐ.์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ”„๋กœํ† ํƒ€์ž… ์ง€์›.. add()์•ˆ์˜ this๋Š” window๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•ด์„œ this.firstNumber๋กœ ๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜ค์ง€ ๋ชปํ•œ๋‹ค.firstNumber: 1..
2023.11.06
no image
Spring Security, ES6
spring security์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•ด ๋“ค์–ด๊ฐ€๋ฉด์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๊ฐ€ ๋‚ด์žฅํ•˜๊ณ  ์žˆ๋Š” ๋กœ๊ทธ์ธ ํผ์œผ๋กœ ์ž๋™์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค. ์œ ์ €, ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ œ๊ณตํ•ด์ค€๋‹ค. ์ธ์ฆ ๊ด€๋ จ Spring Security ์ฃผ์š” ๋ชจ๋“ˆ SecurityContextHolderSecurityContextHolder๋Š” SecurityContext๋ฅผ ์ œ๊ณตํ•˜๋Š” static ๋ฉ”์†Œ๋“œ(getContest)๋ฅผ ์ง€์› SecurityContext์ ‘๊ทผ ์ฃผ์ฒด์™€ ์ธ์ฆ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” Context์ฆ‰, Authentication ๊ฐ์ฒด๋ฅผ ๋‹ด๊ณ  ์žˆ์Œ. AuthenticationPrincipal๊ณผ GrantAuthority๋ฅผ ์ œ๊ณต์ธ์ฆ์ด ์ด๋ฃจ์–ด์ง€๋ฉด ํ•ด๋‹น Authentication์ด SecurityContext์— ์ €์žฅ๋จ.SecurityC..
2023.11.03