-
Grafana Dashboard ์ค์
{ "annotations": { "list": [ { "builtIn": 1, "datasource": { "type": "grafana", "uid": "-- Grafana --" }, "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "type": "dashboard" } ] }, "editable": false, "fiscalYearStartMonth": 0, "graphTooltip": 0, "links": [], "liveNow": false, "panels": [ { "datasource": { "type": "prometheus", "uid": "d594a822-806b-41e9-8c74-135eb41505a2" }, "gridPos": { "h": 3, "w": 24, "x": 0, "y": 0 }, "id": 1, "targets": [ { "datasource": { "type": "prometheus", "uid": "d594a822-806b-41e9-8c74-135eb41505a2" }, "refId": "A" } ], "type": "welcome" }, { "datasource": { "type": "prometheus", "uid": "d594a822-806b-41e9-8c74-135eb41505a2" }, "gridPos": { "h": 9, "w": 24, "x": 0, "y": 3 }, "id": 123123, "targets": [ { "datasource": { "type": "prometheus", "uid": "d594a822-806b-41e9-8c74-135eb41505a2" }, "refId": "A" } ], "type": "gettingstarted" }, { "datasource": { "type": "prometheus", "uid": "d594a822-806b-41e9-8c74-135eb41505a2" }, "gridPos": { "h": 15, "w": 12, "x": 0, "y": 12 }, "id": 3, "links": [], "options": { "folderUID": "", "includeVars": false, "keepTime": false, "maxItems": 30, "query": "", "showHeadings": true, "showRecentlyViewed": true, "showSearch": false, "showStarred": true, "tags": [] }, "pluginVersion": "10.3.3", "targets": [ { "datasource": { "type": "prometheus", "uid": "d594a822-806b-41e9-8c74-135eb41505a2" }, "refId": "A" } ], "title": "Dashboards", "type": "dashlist" }, { "datasource": { "type": "prometheus", "uid": "d594a822-806b-41e9-8c74-135eb41505a2" }, "gridPos": { "h": 15, "w": 12, "x": 12, "y": 12 }, "id": 4, "links": [], "options": { "feedUrl": "https://grafana.com/blog/news.xml", "showImage": true }, "targets": [ { "datasource": { "type": "prometheus", "uid": "d594a822-806b-41e9-8c74-135eb41505a2" }, "refId": "A" } ], "title": "Latest from the blog", "type": "news" } ], "refresh": "", "schemaVersion": 39, "tags": [], "templating": { "list": [] }, "time": { "from": "now-6h", "to": "now" }, "timepicker": { "hidden": true, "refresh_intervals": [ "5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d" ], "time_options": [ "5m", "15m", "1h", "6h", "12h", "24h", "2d", "7d", "30d" ], "type": "timepicker" }, "timezone": "browser", "title": "Home", "version": 0, "weekStart": "" }์ด JSON์ Grafana ๋์๋ณด๋ ์ค์ ํ์ผ์ ๋๋ค. ๊ตฌ์ฒด์ ์ผ๋ก๋ Grafana์์ “Home"์ด๋ผ๋ ์ด๋ฆ์ ๊ธฐ๋ณธ ๋์๋ณด๋๋ฅผ ์ ์ํ ๊ตฌ์ฑ์ ๋๋ค. ์๋์ ์ฃผ์ ํญ๋ชฉ๋ค์ ์ค๋ช ๋๋ฆฌ๊ฒ ์ต๋๋ค.
CreatedTue, 20 May 2025 20:20:45 +0900 -
๋์์ ์คํธ๋ฆฌ๋ฐ์ ์ฌ์ฉ๋๋ ์ฃผ์ ๊ธฐ์ ๋ฐ ํด์ ๋ค์ํ ๋ชฉ์ (์: ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ, VOD, ์ฝํ ์ธ ์ ์ก, ์ธ์ฝ๋ฉ, ํ๋ ์ด์ด ๊ตฌํ ๋ฑ)์ ๋ฐ๋ผ ๊ตฌ๋ถ๋ฉ๋๋ค. ์๋์ ์ฃผ์ ๊ธฐ์ ๊ณผ ํด์ ์์ญ๋ณ๋ก ์ ๋ฆฌํด๋๋ฆด๊ฒ์.
1. ๋น๋์ค ์ธ์ฝ๋ฉ ๋ฐ ํธ๋์ค์ฝ๋ฉ
- FFmpeg: ์คํ์์ค ๋ฉํฐ๋ฏธ๋์ด ์ฒ๋ฆฌ ๋๊ตฌ. ์ธ์ฝ๋ฉ, ๋์ฝ๋ฉ, ํธ๋์ค์ฝ๋ฉ, ํฌ๋งท ๋ณ๊ฒฝ, ํํฐ๋ง ๋ฑ์ ์ฌ์ฉ.
- x264 / x265: ๊ฐ๊ฐ H.264, H.265 ํ์ค ์ธ์ฝ๋ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
- AWS Elemental MediaConvert: AWS์์ ์ ๊ณตํ๋ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ํธ๋์ค์ฝ๋ฉ ์๋น์ค.
2. ์คํธ๋ฆฌ๋ฐ ํ๋กํ ์ฝ
- HLS (HTTP Live Streaming): ์ ํ์ด ๊ฐ๋ฐ. ๋๋ถ๋ถ์ ํ๋ซํผ์์ ์ง์๋๋ฉฐ, ์ธ๊ทธ๋จผํธ ๋ฐฉ์.
- DASH (Dynamic Adaptive Streaming over HTTP): MPEG ํ์ค ๊ธฐ๋ฐ์ผ๋ก, HLS์ ๋น์ทํ์ง๋ง ํ๋ซํผ ๋ ๋ฆฝ์ .
- RTMP (Real-Time Messaging Protocol): ์ฃผ๋ก ๋ผ์ด๋ธ ๋ฐฉ์ก์ ์ฌ์ฉ๋๋ฉฐ, YouTube Live, Twitch ๋ฑ์์ ์ฌ์ ํ ํ์ฉ.
- WebRTC: ์ง์ฐ์ด ๊ทนํ ๋ฎ์ ์ค์๊ฐ ์๋ฐฉํฅ ํต์ ์ ์ต์ ํ๋ ์คํธ๋ฆฌ๋ฐ ํ๋กํ ์ฝ.
3. ์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ (CDN)
- Cloudflare Stream / CDN: ๋น ๋ฅด๊ณ ์์ ์ ์ธ ์ฝํ ์ธ ์ ์ก์ ์ํ ๊ธ๋ก๋ฒ ๋คํธ์ํฌ.
- AWS CloudFront, Akamai, Fastly: ๋ํ ์คํธ๋ฆฌ๋ฐ ์๋น์ค์์ ๋ง์ด ์ฌ์ฉ.
4. ํ๋ ์ด์ด ๋ฐ ํ๋ก ํธ์๋ ๋๊ตฌ
- Video.js: HTML5 ๊ธฐ๋ฐ์ ์คํ์์ค ๋น๋์ค ํ๋ ์ด์ด.
- Shaka Player: ๊ตฌ๊ธ์ด ๋ง๋ MPEG-DASH ๋ฐ HLS ์ง์ ์คํ์์ค ํ๋ ์ด์ด.
- HLS.js: JavaScript ๊ธฐ๋ฐ HLS ์ฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
- ExoPlayer (Android), AVPlayer (iOS): ๋ชจ๋ฐ์ผ ์ฑ์ฉ ๊ธฐ๋ณธ ํ๋ ์ด์ด SDK.
5. ๋ผ์ด๋ธ ์คํธ๋ฆฌ๋ฐ ํ๋ซํผ/์๋น์ค
- OBS Studio (Open Broadcaster Software): ๋ฌด๋ฃ ๋ผ์ด๋ธ ๋ฐฉ์ก ๋๊ตฌ, Twitch, YouTube์ ๋ฐฉ์ก ๊ฐ๋ฅ.
- StreamYard, Restream, Wirecast: ๋ผ์ด๋ธ ๋ฉํฐํ๋ซํผ ์คํธ๋ฆฌ๋ฐ ํด.
- Wowza Streaming Engine: ์ํฐํ๋ผ์ด์ฆ๊ธ ๋ผ์ด๋ธ ๋ฐ VOD ์คํธ๋ฆฌ๋ฐ ์๋ฒ.
6. DRM (๋์งํธ ์ ์๊ถ ๊ด๋ฆฌ) ๋ฐ ๋ณด์
- Widevine (Google), PlayReady (Microsoft), FairPlay (Apple): ๊ฐ ํ๋ซํผ์ฉ DRM ์์คํ .
- AES-128 Encryption: HLS์ ํจ๊ป ์ฌ์ฉ๋๋ ์ฝํ ์ธ ์ํธํ ํ์ค.
7. ๋ชจ๋ํฐ๋ง ๋ฐ ๋ถ์
- Mux, Conviva, Bitmovin Analytics: ์ฌ์ฉ์ ๊ฒฝํ, ๋ฒํผ๋ง, ์์ฒญ ํ๋ ๋ถ์ ๋ฑ ์ ๊ณต.
- Prometheus + Grafana: ์๋ฒ ์ธก ์คํธ๋ฆฌ๋ฐ ์ฑ๋ฅ ๋ฐ ์งํ ๋ชจ๋ํฐ๋ง.
CreatedSun, 18 May 2025 20:20:45 +0900 -
MySQL์์ Slow Query(์ฌ๋ก์ฐ ์ฟผ๋ฆฌ) ๋ฅผ ๋ชจ๋ํฐ๋งํ๋ ๊ฒ์ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํ ์ค์ํ ์์ ์ ๋๋ค. ๋ค์์ ์ฌ๋ก์ฐ ์ฟผ๋ฆฌ๋ฅผ ๋ชจ๋ํฐ๋งํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ๋ค์ ๋๋ค:
1. ์ฌ๋ก์ฐ ์ฟผ๋ฆฌ ๋ก๊ทธ ํ์ฑํํ๊ธฐ
์ฌ๋ก์ฐ ์ฟผ๋ฆฌ๋ฅผ ๊ธฐ๋กํ๊ธฐ ์ํด MySQL ์ค์ ์ ์กฐ์ ํฉ๋๋ค.
๋ฐฉ๋ฒ 1:
my.cnf๋๋my.iniํ์ผ ์์ [mysqld] slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 1 log_queries_not_using_indexes = 1slow_query_log: ์ฌ๋ก์ฐ ์ฟผ๋ฆฌ ๋ก๊ทธ ๊ธฐ๋ฅ ํ์ฑํslow_query_log_file: ๋ก๊ทธ ํ์ผ ์์นlong_query_time: ๋ช ์ด ์ด์ ๊ฑธ๋ฆฌ๋ ์ฟผ๋ฆฌ๋ฅผ ๋๋ฆฐ ์ฟผ๋ฆฌ๋ก ๊ฐ์ฃผํ ์ง ์ค์ (์ด ๋จ์)log_queries_not_using_indexes: ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ฟผ๋ฆฌ๋ ๋ก๊ทธ์ ๊ธฐ๋ก
์ค์ ํ MySQL์ ์ฌ์์ํด์ผ ๋ฐ์๋ฉ๋๋ค.
CreatedTue, 13 May 2025 20:20:45 +0900 -
temperature์top-p(๋๋ nucleus sampling)๋ ์์ฐ์ด ์์ฑ ๋ชจ๋ธ์ด ์ถ๋ ฅํ ๋จ์ด๋ฅผ ์ ํํ ๋์ ๋๋ค์ฑ ์กฐ์ ํ๋ผ๋ฏธํฐ์ ๋๋ค. ๋ ๊ฐ๋ ์ ์ ์ฌํ ์ญํ ์ ํ์ง๋ง ์๋ ๋ฐฉ์์ด ๋ค๋ฆ ๋๋ค. ์๋์ ๊ฐ ๊ฐ๋ ์ ๋ํ ์์ธํ ์ค๋ช ๊ณผ ์์ ๋ฅผ ์ ๊ณตํ๊ฒ ์ต๋๋ค.
๐ฅ Temperature: “์ ํ์ ํ๋ฅ ์ ๋ถ๋๋ฝ๊ฒ ์กฐ์ ”
๊ฐ๋
temperature๋ ๋ชจ๋ธ์ด ๋ค์ ๋จ์ด๋ฅผ ์ ํํ ๋์ ํ๋ฅ ๋ถํฌ๋ฅผ ์ผ๋ง๋ ํํํ๊ฒ ๋ง๋ค์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.- ๊ธฐ๋ณธ๊ฐ์
1.0์ด๋ฉฐ, ์ด ๊ฐ์ ๋ฎ์ถ๋ฉด ๋ ๊ฒฐ์ ๋ก ์ (deterministic), **๋์ด๋ฉด ๋ ์ฐฝ์์ (random)**์ด ๋ฉ๋๋ค.
์๋ ๋ฐฉ์
-
๋ชจ๋ธ์ด ์์ฑ ๊ฐ๋ฅํ ๋จ์ด์ ๋ํด logit(์ ์)์ ๋ถ์ฌํ ํ softmax ํจ์๋ฅผ ํตํด ํ๋ฅ ์ ๋ง๋ญ๋๋ค.
CreatedTue, 13 May 2025 18:20:45 +0900 -
CQRS (Command Query Responsibility Segregation)๋ **๋ช ๋ น(Command)**๊ณผ **์กฐํ(Query)**์ ์ฑ ์์ ๋ถ๋ฆฌํ๋ ์ํํธ์จ์ด ์ํคํ ์ฒ ํจํด์ ๋๋ค. ์ด ํจํด์ ์ฝ๊ธฐ์ ์ฐ๊ธฐ์ ๋ชจ๋ธ์ ๋ถ๋ฆฌํจ์ผ๋ก์จ ํ์ฅ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํค๋ ๋ฐ ๋ชฉ์ ์ด ์์ต๋๋ค.
๐น ํต์ฌ ๊ฐ๋
-
Command (๋ช ๋ น)
- ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ์์ฒญ (์: ์์ฑ, ์์ , ์ญ์ )
- ์:
createUser(),updateOrderStatus()
-
Query (์กฐํ)
- ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ์์ฒญ (๋จ์ํ ์ฝ๊ธฐ๋ง ํจ, ๋ณ๊ฒฝ X)
- ์:
getUserById(),getOrderListByUser()
-
์ฑ ์ ๋ถ๋ฆฌ
- ์ฐ๊ธฐ ๋ชจ๋ธ(Command Model): ๋๋ฉ์ธ ๋ก์ง๊ณผ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํฌํจ
- ์ฝ๊ธฐ ๋ชจ๋ธ(Query Model): ์ฃผ๋ก DTO๋ก ๊ตฌ์ฑ๋๋ฉฐ, ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํ ์ ์ฉ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง (์: denormalized view)
๐น ์ ํต์ ์ธ CRUD ๋ฐฉ์๊ณผ์ ์ฐจ์ด์
ํญ๋ชฉ ์ ํต์ CRUD CQRS ๋ชจ๋ธ ๊ณต์ ์ฝ๊ธฐ/์ฐ๊ธฐ ๋์ผํ ๋ชจ๋ธ ์ฌ์ฉ ์ฝ๊ธฐ์ ์ฐ๊ธฐ ๋ชจ๋ธ ๋ถ๋ฆฌ ํ์ฅ์ฑ ์ ํ์ ์ฝ๊ธฐ/์ฐ๊ธฐ ๊ฐ๊ฐ ํ์ฅ ๊ฐ๋ฅ ๋ณต์ก๋ ๋ฎ์ ์๋์ ์ผ๋ก ๋์ ์ฑ๋ฅ ์ต์ ํ ์ด๋ ต๋ค ์ฝ๊ธฐ์ ์ต์ ํ๋ ๊ตฌ์กฐ ๊ฐ๋ฅ
๐น ์ฌ์ฉ ์์
- ์ด์ปค๋จธ์ค ์์คํ : ์ฃผ๋ฌธ์ ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์ด ๋ง๊ณ , ์ฃผ๋ฌธ ๋ด์ญ ์กฐํ๋ ๋น ๋ฅธ ์๋ต์ด ์ค์ํ ๋
- ๋ง์ดํฌ๋ก์๋น์ค: ์๋น์ค๋ณ ์ฑ ์ ๋ถ๋ฆฌ๋ฅผ ํ ๋ Command/Query ๋ชจ๋ธ์ ๊ฐ๊ฐ ๋ค๋ฅธ ์๋น์ค๋ก ๋ถ๋ฆฌ ๊ฐ๋ฅ
๐น ์ฅ์
- ํ์ฅ์ฑ ํฅ์: ์ฝ๊ธฐ์ ์ฐ๊ธฐ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ฅ ๊ฐ๋ฅ
- ์ฑ๋ฅ ์ต์ ํ ์ฉ์ด: ์กฐํ ์ ์ฉ ๋ชจ๋ธ์ ์บ์๋ ๋น์ ๊ทํ๋ DB๋ก ๊ตฌ์ฑ ๊ฐ๋ฅ
- ๋ณต์กํ ๋๋ฉ์ธ ๋ชจ๋ธ์ ๋จ์ํ: Command ๋ชจ๋ธ์๋ง ๋ณต์กํ ๋๋ฉ์ธ ๊ท์น์ ์ ์ฉ ๊ฐ๋ฅ
๐น ๋จ์
- ๋ณต์ก๋ ์ฆ๊ฐ: ์ฝ๋ ๊ตฌ์กฐ์ ์ด์ ํ๊ฒฝ์ด ๋ณต์กํด์ง
- ๋ฐ์ดํฐ ์ผ๊ด์ฑ ์ฒ๋ฆฌ ํ์: Command/Query ๋ชจ๋ธ ๊ฐ ๋๊ธฐํ ํ์ (์ด๋ฒคํธ ๊ธฐ๋ฐ ์ฒ๋ฆฌ ๋ฑ)
- ๋ฌ๋ ์ปค๋ธ: ๋์ ์ ๊ฐ๋ฐ์์ ์ดํด๋ ์๊ตฌ
๐น CQRS์ Event Sourcing์ ์กฐํฉ
CQRS๋ ์ข ์ข Event Sourcing๊ณผ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค.
CreatedFri, 09 May 2025 09:20:45 +0900 -
-
@Transactional์ด๋ ธํ ์ด์ ์ Java์์ ํธ๋์ญ์ ์ฒ๋ฆฌ๋ฅผ ์ํ ํต์ฌ ์๋จ์ผ๋ก,springframework.transaction.annotation.Transactional๊ณผjakarta.transaction.Transactional์ ๋น์ทํด ๋ณด์ด์ง๋ง ๋ค์๊ณผ ๊ฐ์ ์ฃผ์ ์ฐจ์ด์ ์ด ์์ต๋๋ค:
1. ํจํค์ง ์ถ์ฒ
ํญ๋ชฉ Spring ์ด๋ ธํ ์ด์ Jakarta ์ด๋ ธํ ์ด์ ์ด๋ ธํ ์ด์ ๊ฒฝ๋ก org.springframework.transaction.annotation.Transactionaljakarta.transaction.Transactional์์ Spring Framework Jakarta EE (๊ตฌ Java EE) API ๋ ๋ฒจ Spring ์ ์ฉ ๊ธฐ๋ฅ Java ํ์ค ์ฌ์ (JSR-907 ๋ฑ) ๊ธฐ๋ฐ
2. ์ ์ฉ ๋์์ ์ฐจ์ด
-
Spring
@Transactional- Spring AOP ๊ธฐ๋ฐ์ผ๋ก ๋์.
- ํ๋ก์ ๋ฐฉ์์ผ๋ก ํธ๋์ญ์ ์ ๊ด๋ฆฌ.
- Spring Data JPA, Spring JDBC, MyBatis ๋ฑ ๋ค์ํ Spring ๊ธฐ์ ์คํ๊ณผ ์์ฐ์ค๋ฝ๊ฒ ํตํฉ๋จ.
- ์ธ๋ฐํ ์ ์ด๊ฐ ๊ฐ๋ฅ:
propagation,isolation,timeout,rollbackFor,readOnly๋ฑ ์์ฑ ๋ค์.
-
Jakarta
@Transactional
CreatedThu, 01 May 2025 23:40:45 +0900 -