Dimohy Slog

์ด๊ณณ์— dimohy์˜ ์ตœ๊ทผ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋Œ“๊ธ€๋กœ ์ •๋ฆฌํ•˜๊ณ , ๋ณด์™„ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

  1. slog ๊ฐœ๋ฐœ
    slog๋Š” blog ์‹œ์Šคํ…œ๊ณผ ์œ ์‚ฌํ•˜๋‚˜ ์ฒœ์ฒœํžˆ ์ž์‹ ์˜ ๊ธ€์„ ์ž‘์„ฑํ•˜๊ณ  ํ™•์žฅํ•ด๋‚˜๊ฐ€๋Š” ์ปจ์…‰์œผ๋กœ ์˜ฌํ•ด ์ดˆ ๊ฐœ๋ฐœํ•˜๋‹ค ํ˜„์žฌ ๋ฉˆ์ถฐ ์žˆ๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค. DBMS ์˜์กด์„ฑ์„ ์—†์• ๊ธฐ ์œ„ํ•ด ์ž์ฒด ํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋ฅผ ์ทจํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.
    ๋™์ผํ•œ ์ปจ์…‰์œผ๋กœ DBMS์— ์˜์กด์ ์ด์ง€ ์•Š์œผ๋‚˜ ์ดํ›„ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋„๋ก EF Core์— ํŒŒ์ผ ๊ธฐ๋ฐ˜ Provider๋กœ ์žฌ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
    ๊ทธ๋ฆฌ๊ณ  ํ™”๋ฉด ๋ Œ๋”๋ง์€ ์˜ฌํ•ด ์ถฉ๋ถ„ํžˆ ๊ฒฝํ—˜ํ•œ Blazor Server๋ฅผ ์ด์šฉํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
    slog๊ฐ€ ์™„์„ฑ๋˜๊ธฐ์ „ ์ง„ํ–‰์ƒํ™ฉ์€ ์ด๊ณณ์— ๋Œ“๊ธ€๋กœ ๊ณผ์ •์„ ๊ณต์œ ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

  2. Raspberry Pi 4๋ฅผ ์ด์šฉํ•ด ๊ฐ•์˜์ž๋ฃŒ ์ƒ์„ฑ
    ํ˜„์žฌ ์‹ ๊ตฌ๋Œ€ ์‹œ๊ฐ„๊ฐ•์‚ฌ๋ฅผ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๋…„ 1ํ•™๊ธฐ์— Raspberry Pi ๋“ฑ์˜ SBC๋ฅผ ์ด์šฉํ•ด ๊ฐ•์˜๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ•์˜์ž๋ฃŒ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•™๊ต์—์„œ๋Š” python์–ธ์–ด๋ฅผ ์ด์šฉํ•ด ์ง„ํ–‰ํ•˜๋Š”๋ฐ, ๊ต์ˆ˜๊ป˜ ๊ฑด์˜ํ•˜์—ฌ .NET C#์œผ๋กœ ๊ฐ•์˜๋ฅผ ์ง„ํ–‰ํ•˜๋ ค๊ณ  ์ค€๋น„์ค‘์ž…๋‹ˆ๋‹ค.
    Raspberry Pi 4๋ฅผ ์ด์šฉํ•ด GPIO ๋ฐ ๋‹ค์–‘ํ•œ ํ†ต์‹  Interface๋ฅผ ์ด์šฉํ•ด Device๋ฅผ ์ œ์–ดํ•˜๋Š” ์˜ˆ์ œ๋“ค์„ ์ƒ์„ฑํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

  3. ์˜ฌํ•ด๊นŒ์ง€ ๊ฒฝํ—˜ํ•œ .NET ๊ธฐ์ˆ  ์ปจํผ๋Ÿฐ์Šค ์ž๋ฃŒ ์ƒ์„ฑ
    Raspberry Pi๋ฅผ ์ด์šฉํ•ด ๋ณผ๋ง ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•˜์—ฌ ํ˜„์žฌ ์šด์šฉ์ค‘์— ์žˆ์Šต๋‹ˆ๋‹ค. Blazor Server๋ฅผ ํ†ตํ•ด ์‹œ์ œํ’ˆ ์ˆ˜์ค€์˜ ์šฉ์—ญ ์†”๋ฃจ์…˜๋„ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝํ—˜์„ ๋ฐ”ํƒ•์œผ๋กœ ์ปจํผ๋Ÿฐ์Šค์—์„œ ๋ฐœํ‘œํ•  ์ž๋ฃŒ๋ฅผ ์ƒ์„ฑ ํ•˜๊ณ  ๋…์ž์—๊ฒŒ ์˜๋ฏธ์žˆ๋Š” ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

์ข‹์•„์š” 3

Raspberry Pi 4์—์„œ ๊ตฌ๋™ํ•  ๋ชจ๋“ˆ์„ ๊ฐœ๋ฐœ ์ค‘์ž…๋‹ˆ๋‹ค. ์ด 4๊ฐ€์ง€ ๊ธฐ๋Šฅ์ด ์žˆ์œผ๋ฉฐ, TTS, STT, ์˜์ƒ์ธ์‹ ๋ฐ ์žฅ๋น„์ œ์–ด์ž…๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ๋ฒ„์ ผ์€ Google Cloud Text To Speech ๋ฐ Google Cloud Speech To Text๋กœ ๊ฐ๊ฐ TTS, STT๋ฅผ ๊ตฌํ˜„์ค‘์ด๋ฉฐ, API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ˆ˜์ค€์ด๋ฏ€๋กœ ํŠน๋ณ„ํžˆ ๋Œ€๋‹จํ•œ ์ฝ”๋“œ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์Šคํ”ผ์ปค ๋ฐ ๋งˆ์ดํฌ๋ฅผ ๊ฐœ๋ฐœํ™˜๊ฒฝ์ธ ์œˆ๋„์—์„œ ์ธ์‹ํ•˜๊ณ  Raspberry Pi์—์„œ ์†Œ์Šค์ฝ”๋“œ ์ˆ˜์ •์—†์ด ์ธ์‹ํ•˜๋Š” ์ •๋„์ด๊ณ ,
์žฅ๋น„์ œ์–ด๋Š” GPIO๋ฅผ ํ†ตํ•ด I/O๋ฅผ ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. (10๊ฐœ input ๋ฐ 10๊ฐœ output) .NET์—์„œ ์ด๋ฏธ GPIO์— ๋Œ€ํ•œ ์ง€์›์ด ์žˆ์œผ๋ฏ€๋กœ ์ด๊ฒƒ๋„ ๋Œ€๋‹จํ•œ๊ฑด ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋‚˜์ €๋‚˜ ์˜ˆ์ „์— ๋น„ํ•ด Raspberry Pi์— .NET ์œผ๋กœ ์ด๊ฒƒ์ €๊ฒƒ ๋งŒ๋“ค์ˆ˜ ์žˆ์–ด์„œ ์ข‹์Šต๋‹ˆ๋‹ค. .NET ํ•˜์‹œ๋Š” ๋ถ„ Raspberry Pi๋ฅผ ์žฅ๋‚œ๊ฐ์œผ๋กœ ์‚ด ๋งŒ ํ•ฉ๋‹ˆ๋‹ค.

์ข‹์•„์š” 1

๊ธ€ ์“ฐ๊ธฐ๋ฅผ ์œ„ํ•œ markdown ์ต์ˆ™ํ•ด์ง€๊ธฐ

  • Visual Studio Code์— markdown ํ™˜๊ฒฝ ๊ตฌ์„ฑ (Preview Plugin ๊นŒ์ง€ ํฌํ•จ. ์ฆ‰๊ฐ์ ์œผ๋กœ ๊ฒฐ๊ณผ ํ™•์ธํ•˜๊ธฐ)
  • markdown์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๊ณ  ๋ฐ˜๋“œ์‹œ ์ต์ˆ™ํ•ด์ ธ์•ผ ํ•  ๊ธฐ๋Šฅ๋“ค ํ™•์ธ ๋ฐ ์ˆ™๋‹ฌ
  • ์ตœ์ข…์ ์œผ๋กœ markdown์œผ๋กœ ๊ฐœ๋ฐœ๋ฌธ์„œ, ๋ฐœํ‘œ์ž๋ฃŒ ์ƒ์„ฑ

Caddy๋กœ ASP.NET Core ํ˜ธ์ŠคํŒ… ๋ฌธ์„œ ์ž‘์„ฑ์ค‘
Markdown ์—ฐ์Šตํ•˜๋ฉด์„œ ๋„์ „์ค‘์ด๋‹ค.
๋ฌด์–ธ๊ฐ€๋ฅผ ํ•™์Šตํ•˜๋Š”๊ฑด ํ•ญ์ƒ ๋ฌผ๋ฆฌ์ ์ธ ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๊ณ  ์–ด๋Š์ •๋„์˜ ์ง‘์ค‘๋œ ๋ฐ€๋„๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๊ท€์ฐฎ์€ ๊ณผ์ •๋„ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค.

Caddy๋Š” Go์–ธ์–ด๋กœ ์ž‘์„ฑ๋˜์—ˆ๋‹ค ํ•œ๋‹ค. ์ข…์†์„ฑ์ด ์—†๊ณ  30MB์ •๋„์˜ ๋‹จ์ผํŒŒ์ผ๋กœ ๋˜์–ด์žˆ๋‹ค. Caddy2๋กœ ASP.NET Core๋ฅผ ํ˜ธ์ŠคํŒ…ํ•œ ๊ธ€์ด ์—†์–ด Markdown๋„ ์—ฐ์Šตํ•  ๊ฒธ ํ•ด๋ณด๊ณ  ์žˆ๋‹ค.
๋‚ด์ผ ํฌ์ŠคํŒ… ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ

markdown์— ์ต์ˆ™ํ•ด์ง€์ž

  • ๋ฉ”๋ชจ์žฅ์—์„œ ํ™”์ดํŠธํŽ˜์ดํผ ํ˜•ํƒœ๋กœ ์ •๋ฆฌํ–ˆ๋˜ ์Šต๊ด€์„ markdown์„ ์ด์šฉํ•ด์„œ ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅ์ค‘์ด๊ณ  ์Šต๊ด€์„ ๋“œ๋ฆฌ๋ ค ํ•˜๊ณ  ์žˆ๋‹ค.
  • ๋งˆํฌ๋‹ค์šด์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ๋ฐ”๋กœ๋ฐ”๋กœ ํ™•์ธํ•˜๋ฉด์„œ ๋ฌธ์„œ์ž‘์„ฑํ•˜๋ฉด ์œ ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— Visual Studio Code์— ๊ด€๋ จ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•ด ์™ผ์ชฝ์€ markdown์œผ๋กœ ์ž…๋ ฅํ•˜๊ณ  ์˜ค๋ฅธ์ชฝ์€ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์„œ ๋ฌธ์„œ๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ๋‹ค.
  • ์ด๋Ÿฌํ•œ ๋…ธ๋ ฅ์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ slog์˜ ์ธํ„ฐํŽ˜์ด์Šค, ๋ฐฉํ–ฅ์„ฑ์„ ์žก์•„๊ฐ€๋Š”๋ฐ ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

ver 0.1 ์ •๋„ ์ˆ˜์ค€์˜ ๋ฌธ์„œ์ด์ง€๋งŒ, ๊ธฐ์กด Windows + IIS ํ™˜๊ฒฝ์—์„œ ์šด์˜ํ•˜๊ณ  ์žˆ์—ˆ๋˜ ๋””์ž์ธ์˜ค์›” (mayker5.com)์„ Ubuntu + Caddy ํ™˜๊ฒฝ์œผ๋กœ ์ž˜ ์ด์ „ํ–ˆ๋‹ค.
https ssl ์ธ์ฆ์„œ๋ฅผ ์•Œ์•„์„œ ๊ฐฑ์‹ ํ•ด์ค€ ๊ฒƒ ๋งŒ์œผ๋กœ๋„ ์œ ์šฉํ•œ๊ฒƒ ๊ฐ™๋‹ค.

Caddy๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Linux์— ASP.NET Core ํ˜ธ์ŠคํŒ… - ์ •๋ณด ๊ณต์œ  - ๋‹ท๋„ท๋ฐ๋ธŒ (dotnetdev.kr)

  • 12์›” ๋ง๊นŒ์ง€ ์™„๋ฃŒ ๋ชฉํ‘œ

  • .NET ์ปจํผ๋Ÿฐ์Šค ์ž๋ฃŒ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ค‘, Blazor Server ๊ฒฝํ—˜์„ ๊ณต์œ ํ•˜๋Š”๋ฐ ์ข€ ๋” ์ ‘๊ทผํ•˜๊ธฐ ์‰ฌ์šด ์˜ˆ์‹œ๊ฐ€ ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™์•„ ๋Œ€ํ•™๊ต ๊ฐ•์˜ ์ค‘์ธ ๊ธฐ๋ง๊ณ ์‚ฌ๋ฅผ Blazor Server๋ฅผ ์ด์šฉํ•ด ๊ฐ„๋‹จํžˆ ๊ตฌํ˜„ํ•ด ๋ดค์Šต๋‹ˆ๋‹ค.

  • ์†Œ์Šค์ฝ”๋“œ๋Š” ํ•™๊ต ๊ธฐ๋ง๊ณ ์‚ฌ ๋๋‚œ ํ›„ ๊ณต์œ  ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ•™์ƒ๋“ค ๊ธฐ๋ง๊ณ ์‚ฌ ์ค‘์ด๊ณ  ๋•๋ถ„์— 20๋ช… ๋™์‹œ์ ‘์† ํ…Œ์ŠคํŠธ๋„ ํ•˜๋Š” ์ƒ˜์ด๋„ค์š”.

Blazor Server์˜ ๊ฒฝ์šฐ, HTML ์ƒ์„ฑ์ด ์„œ๋ฒ„์—์„œ ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, StateHasChanged()์ด ํ˜ธ์ถœ๋˜์—ˆ์„ ๋•Œ ๋žœ๋”๋ง์ด ์žฌ ํ‰๊ฐ€ ๋˜๊ณ , ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒƒ๋งŒ SignalR๋กœ ํด๋ผ์ด์–ธํŠธ์— ์ „์†ก๋˜์–ด ๋ถ€๋ถ„ ์žฌ ๋žœ๋”๋ง ๋œ๋‹ค ํ•˜๋”๋ผ๋„ foreach ๋ฌธ ๋“ฑ CPU ์ž์›์„ ๋งŽ์ด ์‚ฌ์šฉํ•  ์—ฌ์ง€๊ฐ€ ์žˆ์–ด ๋ณด์ž…๋‹ˆ๋‹ค.

B2B๋ชจ๋ธ์ด๊ฑฐ๋‚˜ ์‚ฌ๋‚ด ์†”๋ฃจ์…˜ ์ •๋„์˜ ๊ทœ๋ชจ๋Š” ์–ด์จŒ๋“  Blazor Server๊ฐ€ ๋งค๋ ฅ์ ์ด๊ธฐ๋Š” ํ•ฉ๋‹ˆ๋‹ค. ์ด์œ ๋Š”,

์„œ๋ฒ„์—์„œ ์—ฐ๊ฒฐ ๋‹น ์ปจํ…์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ €์ ˆ๋กœ ์‹ค์‹œ๊ฐ„ ๋‹ค์ค‘์ ‘์†์ž ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ„ํŽธํ•ด์ง‘๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์—ฐ๊ฒฐ๋œ ํด๋ผ์ด์–ธํŠธ ๋“ค์—๊ฒŒ ์ „ํŒŒํ•  ์ˆ˜ ์žˆ๊ณ  (์˜ˆ๋ฅผ ๋“ค์–ด ์ฑ„ํŒ…๋ฐฉ) ์ฆ‰๊ฐ์ ์ด์ฃ .

slog๋Š” ์–ด๋–ค ์„œ๋น„์Šค ํ˜•ํƒœ๊ฐ€ ๋ ๊นŒ?

๊ฝค ์ „๋ถ€ํ„ฐ ์œ ์‹ฌํžˆ ์ง€์ผœ๋ณด๋˜ ์‚ฌ์ดํŠธ๊ฐ€ ์žˆ๋Š”๋ฐ velog์ž…๋‹ˆ๋‹ค.
๊ทธ ์‚ฌ์ด ๋งŽ์€ ๊ฐœ๋ฐœ์ž ๋ถ„๋“ค์ด ๊ฐ€์ž…์„ ํ•ด์„œ ํ™œ์šฉ์ด ํญ๋ฐœ์ ์œผ๋กœ ๋Š˜์–ด๋‚ฌ๊ณ , ์ปจํ…์ธ ์˜ ์งˆ๋„ ์ƒ๋‹นํžˆ ๋†’์•„์กŒ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์„œ๋น„์Šค์˜ ๋ฐฉํ–ฅ์„ฑ์€ ๋ฌผ๋ก  ๋‹ค๋ฅด์ง€๋งŒ, slog์˜ ์ฒซ๋ฒˆ์งธ ํ˜•ํƒœ๋Š” ์•„๋งˆ velog๋ฅผ ๋‹ฎ์•„์žˆ์ง€ ์•Š์„๊นŒ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ง๊ณ ์‚ฌ์šฉ์œผ๋กœ Blazor Server๋ฅผ ์ด์šฉํ•ด ๊ฐ„๋‹จํžˆ ๋งŒ๋“  ์†Œ์Šค์ฝ”๋“œ ๊ณต์œ  ํ•ฉ๋‹ˆ๋‹ค.

์ข‹์•„์š” 2