๐ฉ๐ป๐ป58 Celery๋ฅผ ์ด์ฉํ ํฌ๋กค๋ง ์์ ๊ฐ์Airflow์ Celery๋ฅผ ๋น๊ตํ๋ค. ํฌ๋กค๋ง ๊ด๋ฆฌ Airflow vs Celery๊ฐ์๊ธฐ์กด ํ๋ก์ ํธ์ ํฌ๋กค๋ง ์์คํ ์ Airflow๋ก ๊ด๋ฆฌํ๋ค.Airflow ์ด์ ์ค์ด๋ ์๋ฒ์ ๋ฌธ์ ๊ฐ ๋ง์๋ ๋ฐ, ๊ทธ ์ค์์ ์ ์ผ ํฐ ๋ฌธ์ ๋ cpu ์ ์ ์จ์ด 100์ผ๋ก ์น์์ ๋๊ฐ ๋ง์๋ค๋ ๊ฒ์ด๋ค.Airflow๋ก ์ด์bonory.tistory.com ํฌ๋กค๋ง ์งํ ์, Celery๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๋ ์ ํฉํ๋ค๋ ํ๋จ๊ณผ ํจ๊ป ์์ ๋ฅผ ์์ฑํ๋ค. FastAPI + Celery + requests + BeautifulSoup ๋ฅผ ํ์ฉํ ํฌ๋กค๋ง ์์ ์ ์ํํ๋ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ ์์ ํฌ๋กค๋ง์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋๋๋ก ์งํ๊ธฐ๋ณธ ๊ตฌ์กฐFastAPI: ์ฌ์ฉ์๊ฐ API๋ฅผ ํตํด ํฌ๋กค๋ง ์์ฒญ์ ๋ณด๋Celery: ์์ฒญ์ ํ์ ๋ฃ๊ณ , ๋ฐฑ๊ทธ๋ผ์ด๋์์ .. 2025. 2. 5. ํฌ๋กค๋ง ๊ด๋ฆฌ Airflow vs Celery ๊ฐ์๊ธฐ์กด ํ๋ก์ ํธ์ ํฌ๋กค๋ง ์์คํ ์ Airflow๋ก ๊ด๋ฆฌํ๋ค.Airflow ์ด์ ์ค์ด๋ ์๋ฒ์ ๋ฌธ์ ๊ฐ ๋ง์๋ ๋ฐ, ๊ทธ ์ค์์ ์ ์ผ ํฐ ๋ฌธ์ ๋ cpu ์ ์ ์จ์ด 100์ผ๋ก ์น์์ ๋๊ฐ ๋ง์๋ค๋ ๊ฒ์ด๋ค.Airflow๋ก ์ด์ํ๋ ๊ฒ์ด ๋ง์ด ๋ฌด๊ฒ๊ณ ์ค๋ฒํค๋๊ฐ ํฌ๊ธฐ ๋๋ฌธ์ ์ด๋ฒ์ Airflow๊ฐ ์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋์ง์ ๋ํด ์กฐ์ฌ ๋ฐ ์ ๋ฆฌ๋ฅผ ํด๋ณด๋ ค๊ณ ํ๋ค.ํ์ธAirflow๋ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ ๋ฐ ์ํฌํ๋ก์ฐ ๊ด๋ฆฌ์ ์ต์ ํ๋ ๋๊ตฌ์ด๋ค. ํฌ๋กค๋ง ๊ฐ์ ๋จ์ํ ์์ ์ ์คํํ ๋์๋ Celery๊ฐ ๋ ์ ํฉํ๋ค.Airflow์ Celery๋ฅผ ๋น๊ตํด๋ณด๋ฉด ๋น๊ต ํญ๋ชฉCeleryAirflow์ฃผ์ ๋ชฉ์ ๋น๋๊ธฐ ์์ ์คํ (ํ์คํฌ ํ)๋ฐ์ดํฐ ์ํฌํ๋ก์ฐ ๋ฐ ํ์ดํ๋ผ์ธ ๊ด๋ฆฌ์์ ์คํ ๋ฐฉ์๋น ๋ฅธ ์คํ, ๋จ์ํ ์์ ์ฒ๋ฆฌDAG ๊ธฐ๋ฐ,.. 2025. 2. 4. [Proxy] ๋ฆฌ๋ฒ์ค ํ๋ก์ Reverse Proxy ์ ๋ฆฌ ๊ฐ์ ํน์ port์ ์๋น์ค์๋ง HTTPS 443 SSL ์ ์ฉํ๊ธฐ๊ฐ์์ด์์ค์ธ ์๋น์ค ์ค์์ 8003 ํฌํธ์๋ง ssl ์ ์ ์ฉํ๋ ค๊ณ ํ๋ค.์งํ ์์ฝ๋๋ฉ์ธ ์ด๋ฆ์ด ์์ด IP๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ OpenSSL๋ก ์์ฒด ์๋ช ์ธ์ฆ์๋ฅผ ์์ฑํด์ผ ํ๋ค.NGINX๋ฅผ HTTPS ์ฒ๋ฆฌ ๋ด๋น์๋ก ๋๊ณ ,bonory.tistory.com8003 ํฌํธ์๋ง https ์ ์ฉํ๋ฉด์ ๋ฆฌ๋ฒ์ค ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ค. ์ด ๋ถ๋ถ์ ๋ํด์ ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค.ํ์ธProxy ์ค์ ์ฝ๋:location / { proxy_pass http://127.0.0.1:8003; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'u.. 2025. 1. 24. ํน์ port์ ์๋น์ค์๋ง HTTPS 443 SSL ์ ์ฉํ๊ธฐ ๊ฐ์์ด์์ค์ธ ์๋น์ค ์ค์์ 8003 ํฌํธ์๋ง ssl ์ ์ ์ฉํ๋ ค๊ณ ํ๋ค.์งํ ์์ฝ๋๋ฉ์ธ ์ด๋ฆ์ด ์์ด IP๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ OpenSSL๋ก ์์ฒด ์๋ช ์ธ์ฆ์๋ฅผ ์์ฑํด์ผ ํ๋ค.NGINX๋ฅผ HTTPS ์ฒ๋ฆฌ ๋ด๋น์๋ก ๋๊ณ , ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ฐฑ์๋ ์๋น์ค๋ก ํ๋ก์ํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ์ค์ openssl ์ธ์ฆ์ ์ฌ์ฉ ์ “์ฃผ์ ์ํจ” ๊ฒฝ๊ณ ํ์ธ → ๋ฌด๋ฃ ๊ณต์ธ ์ธ์ฆ์ ๋ฐ๊ธ ์งํ์ธ์ฆ์ ์๋ ๊ฐฑ์ ์ค์ ์งํ1. openssl๋ก ์ธ์ฆ์ ๋ฐ๊ธsudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/ssl/private/selfsigned.key \ -out /etc/ssl/certs/selfsigned.crt-x509: ์์ฒด ์๋ช ์ธ์ฆ์๋ฅผ ์์ฑ-d.. 2025. 1. 22. RPC vs gRPC RPC (Remote Procedure Call)ํ๋ก์ธ์ค ๊ฐ ํต์ (IPC)์ ์ํ ํ๋กํ ์ฝ๋ก์ปฌ ํ๊ฒฝ์์ ํจ์ ํธ์ถ์ ํ๋ฏ์ด ๋คํธ์ํฌ๋ฅผ ํตํด ๋ค๋ฅธ ์ปดํจํฐ๋ ์๋ฒ์ Procedure(ํจ์)๋ฅผ ํธ์ถํ๋ ๊ฐ๋ ํต์ฌ ๊ฐ๋ : ๋คํธ์ํฌ๋ฅผ ํตํด ์๊ฒฉ ์๋ฒ์ ํจ์๋ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋๋ค.์๋ ๋ฐฉ์:ํด๋ผ์ด์ธํธ๋ ํธ์ถํ๋ ค๋ ํจ์์ ์ธํฐํ์ด์ค๋ฅผ ์์ง๋ง, ํจ์๊ฐ ์ค์ ๋ก ์คํ๋๋ ์๋ฒ์ ์์น๋ ์ถ์ํ๋์ด ์๋ค.์์ฒญ์ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ๋ฌ๋๊ณ , ๊ฒฐ๊ณผ๋ ๋ฐํ๋๋ค.๊ตฌํ ๋ฐฉ์:XML-RPCJSON-RPCSOAP ๋ฑ …์ฅ์ :๋ก์ปฌ ํธ์ถ์ฒ๋ผ ๋ณด์ด๋๋ก ์ถ์ํํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ฝ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ๋จ์ :๋คํธ์ํฌ ์ฑ๋ฅ์ ์์กด๋ฐ์ดํฐ ์ง๋ ฌํ/์ญ์ง๋ ฌํ์ ์ถ๊ฐ ๋น์ฉ ๋ฐ์์ํธ ์ด์ฉ์ฑ ์ ํ(๋ค๋ฅธ ์ธ์ด๋ ์์คํ ๊ฐ ์ฐ๊ฒฐ์ด ๋ณต์กํ ์ ์๋ค)gRPCRPC์ ํ๋์ .. 2025. 1. 14. [MongoDB] ๊ฐ๋จํ ๊ฐ๋ ์ ๋ฆฌ ๊ฐ์์ด๋ฒ์ ํฌ๋กค๋งํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ชฝ๊ณ ๋๋น์ ์ ์ฌํด๋ฌ๋ผ๋ ์์ฒญ์ ๋ฐ์์ ์งํํ๋ค.์ฒ์์ผ๋ก ๋ชฝ๊ณ ๋๋น๋ฅผ ์ ํด๋ณด๋ ๊ฒธ ๊ฐ๋ ์ ๋ฆฌ๋ฅผ ํด๋ณผ๊น ํ๋ค.๋ชฝ๊ณ ๋๋น MongoDB์คํ์์ค์ด๋คNoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ JSON ์ ์ฌํ ๋ฌธ์ ํํ๋ก ์ ์ฅ๋๋๊ฒ ํน์ง์ด๋ค.์ ํต์ ์ธ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(RDBMS)์๋ ๋ฌ๋ฆฌ, ์คํค๋ง๊ฐ ์๋ค. ํน์ง(1) ๋ฌธ์ ๊ธฐ๋ฐ(Document-oriented) ์ ์ฅ- ๋ฐ์ดํฐ๋ฅผ ํ ์ด๋ธ์ ํ(row)์ผ๋ก ์ ์ฅํ๋ RDBMS์ ๋ฌ๋ฆฌ, MongoDB๋ BSON(Binary JOSN) ํฌ๋งท์ ๋ฌธ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.- ์:{ "name": "John", "age": 30, "skills": ["Python", "JavaScript"]} (2) ์คํค๋ง๋ฆฌ์ค(Schema-less)- ๋ฐ์ด.. 2025. 1. 10. [python] gRPC ๊ฐ๋จํ๊ฒ ๊ตฌํํด๋ณด๊ธฐ ๋คํธ์ํฌ ํต์ ํ๋กํ ์ฝ gRPC์ websocket์ ๋น๊ตํด๋ณด์๋ค [gRPC] gRPC๊ณผ websocket ๋น๊ต ์ ๋ฆฌ๊ธฐ์กด์ ๊ฐ๋ฐํ๋ ์๋น์ค์์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ํต์ ์ websocket ์ผ๋ก ๊ตฌํํ๋ค.๋ค ๋๋ด๊ณ ๋์ ํด๋ผ์ด์ธํธ, ์๋ฒ ํต์ ํ๋ ๋ฐฉ๋ฒ์ ์ข ๋ ์์นํด๋ณด๊ณ ์ถ์๋ค๊ทธ๋ ๊ฒ ์๊ฒ๋ gRPC. ์ ๋ฆฌํด๋ณด์ โ gRPCbonory.tistory.com ์ต์ํ์ง ์์ gRPC๋ฅผ python์ผ๋ก ๊ฐ๋จํ๊ฒ ๊ตฌํํด๋ณด์๋ค 1. Protocol Buffers (Protobuf) ์ ์gRPC์ ํต์ฌ์ API ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ Protobuf ํ์ผ์ด๋ค!.proto ํ์ผ ์์ฑํ๋ค = ์๋น์ค์ ๋ฉ์์ง์ ์คํค๋ง๋ฅผ ์ ์ํ๋ค greeter.protosyntax = "proto3";service Greeter { rpc Sa.. 2025. 1. 2. [python] PySide6๋ก ์ฌ๋ฆฐ gui๋ก ์๊ฒฉ ์๋ฒ์ ํ์ผ ๋ค์ด๋ก๋ํ๊ธฐ ๊ฐ์์ด๋ฒ์ ์งํํ ํ๋ก์ ํธํด์ 2๊ฐ์ง๋ฅผ ๊ฐ๋ฐํด์ผํ๋ค. 1. ์๊ฒฉ ์๋ฒ์ ์๋ ํ์ผ์ ๋ก์ปฌ์ ๋ค์ด๋ก๋ํด์ผํ๋ค. (ํ์ผ์ด ์ปค์ ์ค๋ ๊ฑธ๋ฆฌ๋, progress bar๋ก ์งํ ์ฌํญ์ ๋ณด์ฌ์ฃผ์)2. PySide6๋ก gui๋ฅผ ์ฌ๋ฆฐ๋ค. 1๏ธโฃ ํ์ผ ๋ค์ด๋ก๋import paramikoimport timedef download_file(hostname, port, username, password, remote_file_path, local_file_path, progress_callback): try: start = time.perf_counter() ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(par.. 2024. 12. 31. ์ธํฐ๋ท ์๋ 2๊ฐ์ PC ํต์ ํ๋ ๋ฐฉ๋ฒ ๊ฐ์๋คํธ์ํฌ๊ฐ ์๋๋ ํ๊ฒฝ์์ PC 2๊ฐ๊ฐ ํต์ ํด์ผ ํ๋ ์ํฉ์์ ์ด๋ ํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ง์ ๋ํ search1๋ฒ PC : stt, llm์ด ์งํ๋๋ฉฐ ๋ก๋ด์ ์ ๋ฌํ ๋ช ๋ น์ return2๋ฒ PC : ๋ก๋ด ์๋ฎฌ๋ ์ดํฐ. 1๋ฒ PC๋ก ๋ถํฐ ๋ช ๋ น์ด๋ฅผ ์ ๋ฌ๋ฐ์ ์๋ฎฌ๋ ์ดํฐ๋ก ๊ตฌํํ๋ค.Socket ํต์ (TCP/UDP)์์ผ ํ๋ก๊ทธ๋๋ฐ์ ์ด์ฉํ๋ฉด 1๋ฒ PC์์ ๋ฐํ๋ฐ์ ๊ฐ์ 2๋ฒ PC๋ก ์ง์ ๋ณด๋ผ ์ ์๋ค. ๋ก์ผ ๋คํธ์ํฌ์์ ip์ port๋ก ํต์ ์ด ๊ฐ๋ฅํ๋ค.๋น ๋ฅด๊ณ , ์ค์๊ฐ ๋ฐ์ดํฐ ์ ์ก์ ์ ํฉํ๋ค.๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋ค.2๋ฒ PC์์ ์์ผ ์๋ฒ๋ฅผ ์คํํ๊ณ ํน์ ํฌํธ๋ฅผ ์ด์ด๋๋ค.1๋ฒ PC์์ ํด๋ผ์ด์ธํธ ์์ผ์ ํตํด 2๋ฒ PC์ ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค.python์์ socket ๋ชจ๋ ์ฌ์ฉํ๋ฉด ๋จํ์ผ ๊ณต์ ๋ฐฉ์ (SMP/NFS).. 2024. 11. 28. ์ด์ 1 2 3 4 5 6 7 ๋ค์