๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๐ŸŒฎ ๐Ÿ’ฌ

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป58

[SSH] SSH ์„ธ์…˜์— ๋”ฐ๋ผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ์ด์Šˆ ๊ฐœ์š”๊ฐ™์€ ์„œ๋ฒ„์—์„œA PC → SSH ์ ‘์† → ์•ฑ ์‹คํ–‰ ์‹œ cuDNN ์—๋Ÿฌ + core dumpB PC → SSH ์ ‘์† → ๋™์ผ ์•ฑ ์‹คํ–‰ ์‹œ ์ •์ƒ ์ž‘๋™ ํ™•์ธB PC์—์„œ๋Š” fastapi ์•ฑ์ด ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š”๋ฐ, A PC์—์„œ๋Š” ๋™์ผ ์•ฑ ์‹คํ–‰ ์‹œ ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.Unable to load any of {libcudnn_cnn.so.9.1.0, libcudnn_cnn.so.9.1, libcudnn_cnn.so.9, libcudnn_cnn.so}Invalid handle. Cannot load symbol cudnnCreateConvolutionDescriptorAborted (core dumped) → cnDNN ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ์ง€ ๋ชปํ•จ→ ํ˜„์žฌ ์„ธ์…˜์—์„œ libcudnn_cnn.so.* ๋ผ์ด๋ธŒ๋Ÿฌ.. 2025. 6. 27.
[gradio] ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— path parameter ๋ถ™์—ฌ์„œ ํŠน์ • ๊ฒฝ๋กœ๋กœ ์„œ๋น™ํ•˜๊ธฐ ๊ฐœ์š”gradio๋กœ ์˜ฌ๋ฆฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ•˜๋‚˜ ์žˆ์—ˆ๋Š”๋ฐ~์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ•˜๋‚˜๋” ์ถ”๊ฐ€ํ•ด์„œ 2๊ฐœ ์˜ฌ๋ฆฌ๊ณ ,{domain}/a{domain}/b์ด๋ ‡๊ฒŒ path parameter๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์˜ฌ๋ฆฌ๊ณ ์‹ถ์–ด์„œ ๋„์ „~ ํ™•์ธ๊ธฐ์กด์— ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋˜์–ด์žˆ์—ˆ๋ƒ๋ฉด,def greet(name): return f"Hello, {name}!"gr_app = gr.Interface(fn=greet, inputs="text", outputs="text")gr_app.launch(server_name="0.0.0.0", server_port=8003) ์ด๋ ‡๊ฒŒ ๋‹จ์ˆœํ•˜๊ฒŒ 8003 ํฌํŠธ๋กœ ์˜ฌ๋ผ๊ฐ€๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด์—ˆ๋‹ค. ์‹œ์ž‘ํ• ๋•Œ, ์ฑ—์ง€ํ”ผํ‹ฐํ•œํ…Œ ๋ฌผ์–ด๋ณด๋‹ˆGradio Blocks ๊ธฐ๋ฐ˜ ์•ฑ ์ƒ์„ฑ ํ›„ `path` ์„ค์ •ํ•˜๊ณ FastAPI ์•ฑ์— ๋งˆ์šดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ.. 2025. 6. 20.
github์œผ๋กœ docker image ๊ณต์œ ํ•˜๊ธฐ (Docker packages > Containers) ๊ฐœ์š”Docker image๋ฅผ github์„ ํ†ตํ•ด ๊ณ ๊ฐ์—๊ฒŒ ๊ณต์œ ํ•˜๋ ค ํ•จDocker packages > Containers ์ง„ํ–‰1. Access Token ๋ฐœ๊ธ‰https://github.com/settings/tokens → "Generate new token (classic)" 2. token name, expiration, scopes ์ž…๋ ฅ ๋ฐ ์„ ํƒ 3. ์ƒ์„ฑ๋œ ํ† ํฐ ์ €์žฅํ•˜๊ธฐ (๋ฐ”๋กœ hide๋จ) 4. Docker loginecho | docker login ghcr.io -u --password-stdinLogin Succeeded→ ํ™•์ธ๋˜๋ฉด ๋กœ๊ทธ์ธ ์™„๋ฃŒ๋œ ๊ฒƒ 5. build imagedocker build -t ghcr.io//: . example:docker build -t ghcr.io/hyer.. 2025. 6. 6.
[MySQL] match ... against ํ•œ๊ธ€์ž ๊ฒ€์ƒ‰ ์˜ค๋ฅ˜ (innodb_ft_min_token_size, ngram_token_size) ๊ฐœ์š”SELECT * FROM articles_cn WHERE MATCH(ner_text) AGAINST('็ซ' IN BOOLEAN MODE); ์ด ์ฟผ๋ฆฌ๋กœ ๊ฒ€์ƒ‰์„ ํ•˜๋‹ˆ, ์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅ๋ฐ›์ง€ ๋ชปํ–ˆ๋‹ค. ํ˜น์‹œ๋‚˜ ํ•ด์„œ ๋‹ค๋ฅธ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฒ€์ƒ‰ํ–ˆ์„ ๋•SELECT * FROM articles_cn WHERE JSON_CONTAINS(ner, '"็ซ"'); ์ž˜ ๋‚˜์˜จ๋‹ค.. ๋ญ ๋•Œ๋ฌธ์— ์•ˆ๋‚˜์˜ค๋Š” ๊ฑธ๊นŒ? ํ™•์ธCREATE TABLE `articles_cn` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `content` text NOT NULL, `ner` json, `ner_text` text, PRIMARY KEY (`id`.. 2025. 5. 30.
[MySQL] Mac์— my.cnf ํŒŒ์ผ์ด ์—†๋‹ค (mysql ๋‹ค์šด๋ฐ›์•„์„œ ์ง์ ‘ ์„ค์น˜ํ–ˆ์„ ๊ฒฝ์šฐ) ๊ฐœ์š”ํ•œ ๊ธ€์ž ๊ฒ€์ƒ‰์„ ์œ„ํ•ด ngram_token_size๋ฅผ default 2์—์„œ 1๋กœ ์ˆ˜์ •ํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ, my.cnf ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค!homebrew๋กœ ์„ค์น˜ํ•œ ๊ฒŒ ์•„๋‹ˆ๊ณ  ์ง์ ‘ ๋‹ค์šด๋กœ๋“œํ•ด์„œ ์„ค์น˜ํ•ด์„œ ๊ทธ๋Ÿฐ๊ฐ€ .. ํ™•์ธ1๏ธโƒฃ config ํŒŒ์ผ ํ™•์ธmysql --help | grep -A 1 "Default options"Default options are read from the following files in the given order:/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf mysql์€ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ my.cnf๋ฅผ ์ฐพ๋Š”๋‹ค. 2๏ธโƒฃ ์ฒซ๋ฒˆ์งธ ๊ฒฝ๋กœ( /etc/my.cnf )์— my.cnf๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค. (์™œ๋ƒ๋ฉด .. ์ง์ ‘.. 2025. 5. 30.
[MySQL] ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ๋น„๊ต ๊ฐœ์š”- ner์„ ํฌํ•จํ•˜๋Š” ๊ธฐ์‚ฌ๋“ค์„ ์ถœ๋ ฅํ•  ๋•Œ, ํšจ์œจ์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ๋น„๊ต 1) JSON_CONTAIN 2) MATCH … AGAINST 3) MATCH … AGAINST + REGEXP- 100,000๊ฐœ์˜ article๋กœ ์ง„ํ–‰ ํ™•์ธEXPLAIN ANALYZE ๋กœ ๋ถ„์„์„ ์ง„ํ–‰ํ–ˆ๋‹ค. 1. JSON_CONTAINEXPLAIN ANALYZE SELECT * FROM articles WHERE JSON_CONTAINS(ner, '"์‚ผ์„ฑ"');-> Filter: json_contains(articles.ner,('"์‚ผ์„ฑ"')) (cost=10185.55 rows=98728) (actual time=0.148..102.554 rows=27555 loops=1)-> Table .. 2025. 5. 28.
[MySQL] FULLTEXT ์ธ๋ฑ์Šค ๊ฒ€์ƒ‰ ๊ธ€์ž์ˆ˜ ์ œํ•œ ๊ฐœ์š” article์ด ์žˆ๋Š” ํ…Œ์ด๋ธ”์—์„œ ํŠน์ • ner๋ฅผ ํฌํ•จํ•œ ๊ธฐ์‚ฌ๋“ค์„ select ํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑ ์ค‘์— ์žˆ์—ˆ๋‹ค. โœ… ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ ๋ฐœ์ƒ2๊ธ€์ž๋Š” ๊ฒ€์ƒ‰์ด ์•ˆ๋˜๊ณ , 3๊ธ€์ž๋ถ€ํ„ฐ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ 1๏ธโƒฃ ner ํ‚ค์›Œ๋“œ ์ค‘ "์‚ผ์„ฑ"์„ ํฌํ•จํ•œ ๊ธฐ์‚ฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ค๋Š” querySELECT * FROM articles WHERE MATCH(ner_text) AGAINST('+์‚ผ์„ฑ' IN BOOLEAN MODE);→ ์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅ ์•ˆ๋จ 2๏ธโƒฃ ์‚ผ์„ฑ์ „์ž๋ฅผ ํฌํ•จํ•œ ๊ธฐ์‚ฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ค๋Š” querySELECT * FROM articles WHERE MATCH(ner_text) AGAINST('+์‚ผ์„ฑ์ „์ž' IN BOOLEAN MODE);→ ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅ ํ™•์ธMySQL FULLTEXT ์ธ๋ฑ์Šค์—์„œ 2๊ธ€์ž ์ด์ƒ์ด ๊ฒ€์ƒ‰์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.SHOW VA.. 2025. 5. 28.
[MQTT] presence detection ์—์„œ qos ์™€ retain ์„ค์ • ์ตœ๊ทผ ์ง„ํ–‰ํ•œ ๊ฒƒ ์ค‘์— ์œ ์šฉํ•˜๊ฒŒ ์ž˜ ์‚ฌ์šฉํ•œ paho-mqtt option์ด ์žˆ์–ด์„œ ๊ธฐ๋กํ•œ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ mqtt ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์—ˆ๋‹คmqtt ํ†ต์‹ ์˜ ์‹ ๋ขฐ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด์„œ main client ์—์„œ sub client ์˜ ์—ฐ๊ฒฐ ์ƒํƒœ(online/offline)๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ qos, retain์„ ์„ค์ •ํ•˜๊ณ , will_set๋„ ๋“ฑ๋กํ–ˆ๋‹ค์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉฐ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž! โœจ ์—ฌ๊ธฐ์„œ ์ƒˆ๋กœ ์•Œ๊ฒŒ๋œ ์šฉ์–ด : presence detection→ IoT, MQTT, ์ฑ„ํŒ… ์‹œ์Šคํ…œ์— ๋งŽ์ด ์“ฐ์ด๋Š” ๊ฐœ๋…์ด๋‹ค.→ ํ˜„์žฌ ๋ˆ„๊ฐ€ ์—ฐ๊ฒฐ๋˜์—ˆ๋Š”์ง€(online), ๋ˆ„๊ฐ€ ์—ฐ๊ฒฐ์ด ๋Š์–ด์กŒ๋Š”์ง€(offline)์— ๋Œ€ํ•œ ์ƒํƒœ๋ฅผ ์‹œ์Šคํ…œ์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ํŒŒ์•…ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.→ "ํด๋ผ์ด์–ธํŠธ์˜ ์ ‘์† ์ƒํƒœ ๊ฐ์ง€" ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด .. 2025. 5. 8.
[MQTT] Keep Alive ์ตœ๊ทผ์— MQTT ํ†ต์‹  ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ Keep Alive ์„ค์ •์— ๊ด€๋ จํ•œ ๋ฌธ์ œ๋ฅผ ๊ฒช์—ˆ๋‹ค. Status Update ํ•˜๋Š” mqtt ํด๋ผ์ด์–ธํŠธ๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์ƒ์„ฑํ•˜๊ณ send_status ๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค. import paho.mqtt.client as mqttimport uuidimport timeclass RobotStatusUpdater: def __init__(self, broker_ip, topic="robot/status"): self.client = mqtt.Client(f"Robot_Status_Updater_{uuid.uuid4()}") self.client.connect(broker_ip, 1883) self.topic = to.. 2025. 3. 12.