soogoori

Kotlin

[Kotlin] ์ฝ”ํ‹€๋ฆฐ ๋ฌธ๋ฒ• ๊ธฐ์ดˆ 1

ํ”„๋กœ์ ํŠธ์—์„œ Kotlin์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐ„๋‹จํ•œ ๋ฌธ๋ฒ• ์ •๋ฆฌ๋ฅผ ํ•˜๊ณ ์ž ํ•œ๋‹ค. ์ž๋ฐ”๋ฅผ ์ ‘ํ•ด๋ณธ ์‚ฌ๋žŒ์€ ๋Ÿฌ๋‹ ์ปค๋ธŒ๊ฐ€ ๋‚ฎ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ ..์ฝ”ํ‹€๋ฆฐ์„ ํ™œ์šฉํ•˜๋Š” ๋ช‡๋ช‡ ๊ธฐ์—…๋„ ์žˆ์œผ๋‹ˆ ์ด๋ฒˆ ๊ธฐํšŒ์— ํ•œ ๋ฒˆ ํ•™์Šตํ•ด๋ด์•ผ๊ฒ ๋‹ค ์ƒ๊ฐํ–ˆ๋‹ค . .  ๋ณ€์ˆ˜(val | var) ๋ณ€์ˆ˜๋ช… : ๋ฐ˜ํ™˜ํƒ€์ž… = ๋ณ€์ˆ˜์— ๋‹ด์„ ๊ฐ’๋ณ€์ˆ˜ ์„ ์–ธval a : Int = 1ํƒ€์ž… ์ƒ๋žตval b = 1์ง€์—ฐ ํ• ๋‹นval c : Int // ํƒ€์ž… ๋ช…์‹œ ํ•„์ˆ˜c = 3โœด๏ธ val, var ์ฐจ์ด๐Ÿ”นval (value) : ์ž๋ฐ”์˜ final ํ‚ค์›Œ๋“œ์ฒ˜๋Ÿผ ํ•œ ๋ฒˆ ์ดˆ๊ธฐํ™” ํ›„์—๋Š” ๋‹ค์‹œ ์ดˆ๊ธฐํ™” X๐Ÿ”นvar (variable) : ๊ฐ€๋ณ€ ๋ณ€์ˆ˜์ด๋ฏ€๋กœ ์ดˆ๊ธฐํ™” ํ›„์—๋„ ๋‹ค์‹œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ๐Ÿ‘‰ var๋กœ ์„ ์–ธํ•˜๋”๋ผ๋„ ํƒ€์ž…์€ ๊ณ ์ •๋จ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ val d : String = "Hello"d = "World" /..

Spring/Spring WebFlux

[WebFlux] Reactive Streams

Reactive Programmingโœณ๏ธ ์ „ํ†ต์ ์ธ ์ฝœ๋ฐฑ ๊ธฐ๋ฐ˜ API๋‚˜ Future์™€ ๊ฐ™์€ JDK์˜ ๋น„๋™๊ธฐ ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐฉ์‹์— ๋น„ํ•ด ๋” ์œ ์—ฐํ•˜๊ณ  ํšจ์œจ์ 1. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์˜ ๊ฐ„์†Œํ™” : ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ŠคํŠธ๋ฆผ์˜ ํ˜•ํƒœ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ํ†ตํ•ด ๊ฐ ๋‹จ๊ณ„๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ์ค€๋น„๋˜๋Š” ์ฆ‰์‹œ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ2. ์„ ์–ธ์  API ์ œ๊ณต : Reactor, RxJava์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” map, filter, reduce์™€ ๊ฐ™์€ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์Šคํƒ€์ผ์˜ ์—ฐ์‚ฐ์ž๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ํ•˜๊ณ  ์กฐ์ž‘ํ•˜๋Š” ๊ณผ์ •์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„3. backPressure ์ง€์› : ๋ฐ์ดํ„ฐ ์†Œ๋น„์ž๊ฐ€ ๋ฐ์ดํ„ฐ ์ƒ์‚ฐ์ž์˜ ์†๋„๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ 4. ๋ณต์žก์„ฑ ๊ฐ์†Œ์™€ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ : ์—ฐ์‚ฐ์ž ์ฒด์ด๋‹์„ ํ†ตํ•ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ ๋†’์ด๊ณ  ๊ฐ ๋‹จ๊ณ„์˜ ์ž‘์—…์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€..

Spring/Spring WebFlux

[WebFlux] ๋น„๋™๊ธฐ/๋™๊ธฐ, non-blocking/blocking, CompletableFuture

ํŒ€์—์„œ IoT๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด WebFlux๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.WebFlux์— ๋Œ€ํ•ด ์–•๊ฒŒ๋งŒ ์•Œ๊ณ  ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฒˆ ๊ธฐํšŒ์— ๊ณต๋ถ€ํ•ด๋ณด๊ธฐ๋กœ ํ•œ๋‹ค.  โœด๏ธ Sync(๋™๊ธฐ)์™€ Async(๋น„๋™๊ธฐ)๐Ÿ”ถ Sync : ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ → ๋ฉ”์„œ๋“œ ์ œ๊ณตํ•˜๋Š” ๊ณณ์—์„œ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ์ˆ˜ํ–‰ํ•ด ๊ฒฐ๊ณผ๊ฐ’์ด ๊ฒฐ์ •๋˜๋ฉด ๊ทธ๋•Œ ๋ฐ˜ํ™˜ ๐Ÿ‘‰ ์š”์ฒญํ•œ ์ž‘์—…์— ๋Œ€ํ•ด ์™„๋ฃŒ ์—ฌ๋ถ€๋ฅผ ์‹ ๊ฒฝ ์จ์„œ ์ž‘์—…์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ• ์ง€ ์•„๋‹Œ์ง€ ๊ฒฐ์ •๐Ÿ”ถ Async : ๊ฒฐ๊ณผ๊ฐ’์ด ๊ฒฐ์ •๋˜๊ธฐ ์ „์— ์ผ๋‹จ ๋ฐ˜ํ™˜ (์ˆœ์„œ ๋ณด์žฅ X)๐Ÿ‘‰ ์š”์ฒญํ•œ ์ž‘์—…์— ๋Œ€ํ•ด ์™„๋ฃŒ ์—ฌ๋ถ€๋ฅผ ๋”ฐ์ง€์ง€ ์•Š๊ณ  ์ž์‹ ์˜ ๋‹ค์Œ ์ž‘์—…์„ ๊ทธ๋Œ€๋กœ ์ˆ˜ํ–‰ โœด๏ธ Blocking๊ณผ Non-Blocking๐Ÿ”ท Blocking : ์š”์ฒญํ•œ ์ž‘์—…์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ์ž‘์—…ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๋‹ค๋ฆผ๐Ÿ”ท Non-Blocking : ์š”..

FE

[FE] ๋น„๋™๊ธฐ

์ฝœ๋ฐฑ๊ณผ ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒดcalback ํ•จ์ˆ˜ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜๋‹ค๋ฅธ ํ•จ์ˆ˜์— ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋˜์–ด ํ•ด๋‹น ํ•จ์ˆ˜์˜ ๋‚ด๋ถ€์—์„œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๊ธฐ๋ณธ์ ์ธ ์‹คํ–‰์˜ ๋‹ค์Œ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๋Š” ์žฅ์  ๊ฐ€์ง€๊ณ  ์žˆ์Œ์‚ฌ์šฉํŒจํ„ด ๋ถˆํŽธ (์ฝœ๋ฐฑ์ง€์˜ฅ)Promise๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด async-awaitAsync-awaitํ•จ์ˆ˜ ์•ž์— async ๋ถ™์ด๋ฉด ํ•ญ์ƒ promise ๋ฐ˜ํ™˜ await ํ‚ค์›Œ๋“œ๋Š” async ํ•จ์ˆ˜ ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ promise๊ฐ€ ํ•ด๊ฒฐ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆผ   ์˜ˆ์™ธ์ฒ˜๋ฆฌ (then, catch, finally)then์ž‘์—…์ด ์„ฑ๊ณตํ–ˆ์„ ๋•Œ ์‹คํ–‰๋  ํ•จ์ˆ˜ ์„ค์ •catch์ž‘์—…์ด ์‹คํŒจํ–ˆ์„ ๋•Œ ์‹คํ–‰๋  ํ•จ์ˆ˜ ์„ค์ •finally์ตœ์ข…์ ์œผ๋กœ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜๋˜ ํ˜น์€ ๊ฑฐ๋ถ€๋˜๋˜ ์ƒ๊ด€์—†์ด ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์‹คํ–‰ํ•  ๋‚ด์šฉ ์„ค์ •try-catchtry { //..

FE

[FE] Vuex

Vue.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์ค‘์•™ ์ง‘์ค‘์‹ ์ƒํƒœ ๋ถ„๋ฆฌ ํŒจํ„ด ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ โ“์‚ฌ์šฉํ•˜๋Š” ์ด์œ   ์ค‘์•™ ์ง‘์ค‘์‹ ์ƒํƒœ ๊ด€๋ฆฌ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์— ๊ณต์œ ๋˜๋Š” ์ƒํƒœ๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ  ์ƒํƒœ ํ๋ฆ„ ์˜ˆ์ธก ๊ฐ€๋Šฅ ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์ƒํƒœ(state)๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ํŠน์ •ํ•œ ๋ฐฉ๋ฒ•(mutations)์„ ํ†ตํ•ด์„œ๋งŒ ์ƒํƒœ ๋ณ€๊ฒฝํ•˜๋„๋ก ๊ฐ•์ œํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์ถ”์ ํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ฆ์ƒํƒœ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ํ•ญ์ƒ ๋ช…์‹์ ์ธ ๋ณ€์ด(mutations)์„ ํ†ตํ•ด์„œ๋งŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ์ฝ”๋“œ์˜ ๋ชจ๋“ˆํ™” ๊ฐ€๋…์„ฑ ๋†’์ด๊ณ  ๊ฐ ๋ชจ๋“ˆ์„ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ๋ณต์žกํ•œ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ์ปดํฌ๋„ŒํŠธ ๊ฐ„์— ์ƒํƒœ ๊ณต์œ  ๋˜๋Š” ๋น„๋™๊ธฐ ์ž‘์—…(API ํ˜ธ์ถœ)์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์˜ ๋ณต์žก์„ฑ ๊ฐ์†Œ  Vuex Store ๊ตฌ์„ฑ mo..

FE

[FE] Vue2 ๋ฌธ๋ฒ• ์ •๋ฆฌ 1

Vue ๋ฌธ๋ฒ• ์ •๋ฆฌ 1Vue2 ๊ธฐ์ค€์œผ๋กœ ์ •๋ฆฌ   1. ์ธ์Šคํ„ด์Šค์™€ ๋ผ์ดํ”„์‚ฌ์ดํด โœด๏ธ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ // main.jsimport Vue from 'vue';import App from './App.vue';new Vue({ render: h => h(App),}).$mount('#app'); ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋ฐ์ดํ„ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  DOM๊ณผ์˜ ์ƒํ˜ธ์ž‘์šฉ ์ฒ˜๋ฆฌ โœณ๏ธ ์ฃผ์š” ์†์„ฑ ๋ฐ ์˜ต์…˜ ๋ฐ์ดํ„ฐ (Data) : Vue ์ธ์Šคํ„ด์Šค์˜ ๋ฐ์ดํ„ฐ๋Š” data ์˜ต์…˜์„ ํ†ตํ•ด ์ •์˜๋˜๋ฉฐ ๋ฐ˜์‘์„ฑ์„ ๊ฐ€์ง ๐Ÿ‘‰ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด DOM์ด ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋จnew Vue({ el: '#app', data: { message: 'Hello, Vue!' }}); ๋ฉ”์„œ๋“œ (Methods) : Vue..

FE

[FE] Vue ๊ฐœ๋… ๋ฐ ์„ค์น˜

Vue๋ž€ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜ ๊ฐ€๋ฒผ์šด ํฌ๊ธฐ์™€ ์ง๊ด€์ ์ธ ๋ฌธ๋ฒ•๐Ÿ‘‰ Virtual DOM์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ DOM ์กฐ์ž‘์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋น ๋ฅธ ๋ Œ๋”๋ง ์†๋„์™€ ํšจ์œจ์ ์ธ ์—…๋ฐ์ดํŠธ ๊ด€๋ฆฌ ์ œ๊ณต ์ž์ฒด์ ์œผ๋กœ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ์ธ Vue jsx ๋‚ด์žฅ๐Ÿ‘‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ณต์‹ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŽ˜์ด์ง€ ์ „ํ™˜์„ ์œ„ํ•œ ๊ธฐ๋Šฅ์ธ Vue js Router ์ œ๊ณต ๐Ÿ‘‰ ํŽ˜์ด์ง€ ๊ฐ„์˜ ์ „ํ™˜๊ณผ URL ๊ธฐ๋ฐ˜์œผ๋กœ ๋ทฐ๋ฅผ ๋™์ ์œผ๋กœ ๋กœ๋”ฉํ•˜๊ณ  ๊ด€๋ฆฌ๊ธฐ์กด html๊ณผ ์œ ์‚ฌํ•œ Template ํ˜•์‹ ์ œ๊ณต๊ฐœ๋ฐœ ๋ฐฉ์‹์˜ ๋‹จ์ˆœํ•จ๐Ÿ‘‰ ๋™์ ์ธ ํ‘œ์‹œ ์œ„ํ•ด v-if ๋ฌธ๋ฒ•๋งŒ ์ œ๊ณต ๋ฐ˜์‘์„ฑ (Reactivity)๋ฐ์ดํ„ฐ ๊ฐฑ์‹ ํ•˜๋ฉด ํ™”๋ฉด๋„ ๋ฐ”๋€œ ๐Ÿ› ๏ธ Vue ๋„๊ตฌํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž : npm, yarn Vue CLI : ์‹ ์†ํ•œ Vue.js ..

Spring/Spring & Spring Boot

[Spring/Spring Boot] SSE (Server-Sent Events)์™€ EventSource ์ ์šฉํ•ด๋ณด๊ธฐ

SSE (Server-Sent Events)๋ž€?์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ „์†กํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค. ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ง€์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ๋˜ํ•œ ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ(์ฃผ์‹ ์‹œ์„ธ, ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…, ์•Œ๋ฆผ ๋“ฑ)์— ์‚ฌ์šฉ๋˜๋ฉฐ HTTP ๊ธฐ๋ฐ˜์œผ๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ์›น ์„œ๋ฒ„ ๊ฐ„์˜ ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด์ง€ ์•Š๊ณ ๋„ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ , ํด๋ผ์ด์–ธํŠธ๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์˜ EventSource API๋ฅผ ์‚ฌ์šฉํ•ด ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•œ๋‹ค. ํ”„๋กœ์ ํŠธ์—์„œ ์•จ๋ŸฐAI์—๊ฒŒ ์งˆ๋ฌธ์„ ์š”์ฒญํ•˜๋ฉด ์‘๋‹ต์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ›๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๊ณ ์ž ํ–ˆ๋‹ค.์‹ค์ œ๋กœ ํ”„๋กœ์ ํŠธ์—์„œ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋Š”์ง€ ์•Œ์•„๋ณด์ž !   WebClientService ์ฝ”๋“œ ๊ตฌํ˜„ - ๋น„๋™๊ธฐ๋กœ ..

soogoori
'๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (10 Page)