TLS와 SSH 프로토콜 기능

TLS와 SSH 프로토콜의 서버-클라이언트 협상 항목과 기능 비교 TLS와 SSH 프로토콜 정의 1. TLS(Transport Layer Security) TLS 프로토콜은 인터넷 상에서 안전한 통신을 위해 사용되는 암호화 프로토콜입니다. TLS는 SSL(Secure Sockets Layer) 프로토콜의 후속 버전으로, 웹 브라우저와 웹 서버 사이의 통신을 암호화하여 데이터 보안을 강화하는데 사용됩니다. TLS 프로토콜의 주요 기능 암호화: 클라이언트와 서버 간의 통신 내용을 암호화하여 보호 인증: 서버의 신원을 인증하고, 클라이언트 인증도 지원 무결성: 전송 데이터의 변조를 방지 TLS는 HTTP, SMTP, IMAP 등 다양한 프로토콜의 보안 계층으로 사용됩니다. TLS 1.0/1.1은 더 이상 권장되지 않으며, 현재는 TLS 1.2와 가장 최신 표준인 TLS 1.3이 널리 사용되고 있습니다. 특히 TLS 1.3은 이전 버전 대비 보안성과 성능이 크게 향상되었습니다. ...

April 6, 2024 · Byung Kyu KIM

유니코드 NFD to NFC 변환

유니코드 NFD 문자열을 NFC 문자열로 변환하는 방법을 Python 스크립트와 nfd2c 툴을 활용하여 설명합니다. 이 글은 macOS 및 다양한 운영 체제에서 유니코드 호환성을 유지하기 위해 NFD와 NFC 간 변환이 필요한 상황에 유용합니다. NFD와 NFC 유니코드는 다양한 언어와 문자를 일관되게 표현하기 위한 국제 표준입니다. 하지만 동일한 문자라도 운영 체제나 시스템에 따라 다른 유니코드 정규화 방식(NFD, NFC)으로 저장되거나 처리될 수 있습니다. 이는 파일 시스템, 데이터베이스, 문자열 비교 등에서 예상치 못한 문제를 일으킬 수 있습니다. ...

February 6, 2024 · Byung Kyu KIM

Ollama를 이용한 Mistral 로컬 실행 가이드

ollama, ollama-webui, mistral 설치 및 테스트 Ollama OLLAMA는 Open Large Language Model for AI Applications의 약자로, Google AI에서 개발한 대규모 언어 모델 (LLM)입니다. OLLAMA는 텍스트 생성, 번역, 질문 응답 등 다양한 AI 애플리케이션 개발을 위해 사용할 수 있는 강력한 도구 다양한 기능: OLLAMA는 텍스트 생성, 번역, 질문 응답, 요약, 코드 생성 등 다양한 기능을 제공합니다. 강력한 성능: OLLAMA는 Google AI의 최첨단 기술을 기반으로 개발되어 강력한 성능을 제공합니다. 쉬운 사용: OLLAMA는 Python API를 제공하여 쉽게 사용할 수 있습니다. 다양한 모델: OLLAMA는 다양한 크기와 기능을 가진 모델을 제공하여 사용자의 필요에 맞게 선택할 수 있습니다. Ollama 설치 다운로드 : https://ollama.ai/download{:target="_blank"} 설치 및 활용 가능한 모델 : https://ollama.ai/library{:target="_blank"} $ ollama Usage: ollama [flags] ollama [command] Available Commands: serve Start ollama create Create a model from a Modelfile show Show information for a model run Run a model pull Pull a model from a registry push Push a model to a registry list List models cp Copy a model rm Remove a model help Help about any command Flags: -h, --help help for ollama -v, --version Show version information Use "ollama [command] --help" for more information about a command. mistral 모델 설치 https://ollama.ai/library/mistral{:target="_blank"} Mistral은 최근에 개발된 대형 언어 모델 중 하나입니다. 이 모델은 7.3 billion 개의 파라미터를 가지고 있으며, 자연어 처리 분야에서 매우 높은 성능을 보입니다. Mistral은 다양한 자연어 처리 작업에서 사용될 수 있습니다. 예를 들어, 이 모델은 텍스트 생성, 기계 번역, 질문 응답, 감성 분석 등의 작업에 사용될 수 있습니다. ...

January 27, 2024 · Byung Kyu KIM

DuckDB, CSV에서 MySQL로의 ETL

DuckDB를 ETL 도구로 활용 : CSV 데이터 → MySQL DuckDB를 통한 CSV 데이터를 MySQL로 ETL 하는 방법 ETL이란? ETL이란 Extract, Transform, Load의 약자로, 데이터를 다양한 소스에서 추출하고 변환하고 적재하는 과정 ETL을 수행하기 위해서는 여러가지 툴을 사용할 수 있는데 그 중 하나 DuckDB 활용하는 안 DuckDB DuckDB는 분석 쿼리에 최적화된 임베디드 데이터베이스 DuckDB는 PostgreSQL과 호환되는 SQL 문법을 사용하고, 여러 DB와 연결하여 데이터를 효율적으로 가져와 로컬 DuckDB에서 데이터 처리 가능 Extensions : https://duckdb.org/docs/extensions/overview ETL 예제 DuckDB에서 CSV 파일을 읽어와 테이블 생성 MySQL Extension{:target="_blank"} CREATE TABLE csv_table AS SELECT * FROM read_csv_auto('your_csv_file'); DuckDB에서 MySQL에 연결합니다. 다음과 같은 명령어를 사용할 수 있습니다. INSTALL MySQL; LOAD MySQL; ATTACH 'host=localhost user=root port=0 database=etldb' AS mysqldb (TYPE mysql) USE mysqldb; DuckDB에서 MySQL로 데이터를 적재합니다. 다음과 같은 명령어를 사용할 수 있습니다. CREATE TABLE mysqldb.etldb.csvtbl AS SELECT * FROM csv_table; 참고 MySQL LOAD DATA{:target="_blank"} CSV to SQLite3{:target="_blank"}

January 25, 2024 · Byung Kyu KIM

Act - Run your GitHub Actions locally

로컬 머신에서 Gitub Actions를 실행할 수 있는 도구 Act https://github.com/nektos/act/{:target="_blank"} .github/workflows/ 에서 GitHub Actions를 읽고 로컬 환경 실행 Docker 기반 컨테이너로 운영 macOS 에서는 Docker Desktop 필요 Linux, MacOS, Windows 지원 설치 및 실행 $ brew install act actions-test/.github/workflows/simple.yml # This is a basic workflow to help you get started with Actions name: CI on: workflow_dispatch: jobs: build: runs-on: ubuntu-latest steps: # - uses: actions/checkout@v3 - name: echo test run: | cat /etc/*-release $ git clone https://github.com/cdecl/actions-test $ cd actions-test $ act [CI/build] 🚀 Start image=catthehacker/ubuntu:act-latest [CI/build] 🐳 docker pull image=catthehacker/ubuntu:act-latest platform= username= forcePull=true [CI/build] 🐳 docker create image=catthehacker/ubuntu:act-latest platform= entrypoint=["tail" "-f" "/dev/null"] cmd=[] [CI/build] 🐳 docker run image=catthehacker/ubuntu:act-latest platform= entrypoint=["tail" "-f" "/dev/null"] cmd=[] [CI/build] ⭐ Run Main echo test [CI/build] 🐳 docker exec cmd=[bash --noprofile --norc -e -o pipefail /var/run/act/workflow/0] user= workdir= | DISTRIB_ID=Ubuntu | DISTRIB_RELEASE=22.04 | DISTRIB_CODENAME=jammy | DISTRIB_DESCRIPTION="Ubuntu 22.04.2 LTS" | PRETTY_NAME="Ubuntu 22.04.2 LTS" | NAME="Ubuntu" | VERSION_ID="22.04" | VERSION="22.04.2 LTS (Jammy Jellyfish)" | VERSION_CODENAME=jammy | ID=ubuntu | ID_LIKE=debian | HOME_URL="https://www.ubuntu.com/" | SUPPORT_URL="https://help.ubuntu.com/" | BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" | PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" | UBUNTU_CODENAME=jammy [CI/build] ✅ Success - Main echo test [CI/build] 🏁 Job succeeded Secret 및 Env 적용 VAR1=1111 VAR2=2222 $ act --env-file my.env --secret-file my.secrets Github Actions 와 모든것이 호환되지는 않음 (e.g. 스케쥴) 테스트 및 개발 용도로 사용 적합 ...

April 26, 2023 · Byung Kyu KIM

OrbStack

Docker Desktop 대체제, Docker containers and Linux machines on macOS OrbStack https://orbstack.dev/{:target="_blank"} MacOS 환경에서 Docker Desktop 대체제로 Docker containers를 실행 가능하고 추가적으로 리눅스 VM도 운영가능함 OrbStack vs. Docker Desktop{:target="_blank"} Docker Desktop 에 비해 적은 리소스 및 빠른 속도 Linux machines 지원 및 Rosetta x86 emulation 가능 Kubernetes는 계획중 OrbStack vs. Colima{:target="_blank"} Docker Desktop 대체체로 많이 언급되는 Colima 와의 비교 사용하고있는 Docker Desktop 과 Multipass 2개를 대체 가능할 것으로 보임 Quick start https://docs.orbstack.dev/quick-start{:target="_blank"} brew install orbstack

April 25, 2023 · Byung Kyu KIM

Jq 활용, Json to CSV 변환

jq 명령어를 통한 Json to CSV 변환 Jq 명령어 활용 https://stedolan.github.io/jq/{:target="_blank"} jq is a lightweight and flexible command-line JSON processor. jq를 사용하여 JSON 배열과 NDJSON 형식의 데이터를 CSV 형식으로 변환하는 예제 JSON 배열은 여러 개의 JSON 객체를 대괄호로 묶은 형식이고, NDJSON은 Newline Delimited JSON의 약자로, 한 줄에 하나의 JSON 객체를 나열한 형식 NDJSON은 MongoDB나 Elasticsearch 등에서 사용되는 데이터 형식 Json 배열에서 CSV 데이터 변환 [ { "fs": "/dev/mapper/vgubuntu-root", "type": "ext4", "size": "915G", "used": "135G", "avail": "734G", "usedpercentage": "16%", "mounted": "/" }, { "fs": "/dev/nvme0n1p2", "type": "ext4", "size": "1.4G", "used": "378M", "avail": "939M", "usedpercentage": "29%", "mounted": "/boot" }, { "fs": "/dev/nvme0n1p1", "type": "vfat", "size": "511M", "used": "30M", "avail": "482M", "usedpercentage": "6%", "mounted": "/boot/efi" } ] Header 추출 CSV 파일의 헤더(keys)를 추출하기 위해 다음과 같은 명령어를 사용 ...

September 1, 2022 · Byung Kyu KIM

K3s traefik ingress

K3s traefik ingress 사용 서비스 테스트 traefik ingress traefik : https://cdecl.github.io/devops/traefik-proxy/{:target="_blank"} traefik 을 활용한 ingress 구현체 : K3s 에서 번들로 제공 서비스 테스트 traefik/whoami 서비스 테스트 type: NodePort # whoami-deploy.yaml apiVersion: apps/v1 kind: Deployment metadata: name: whoami spec: selector: matchLabels: app: whoami replicas: 2 template: metadata: labels: app: whoami spec: containers: - name: whoami image: traefik/whoami imagePullPolicy: Always ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: whoami spec: type: NodePort selector: app: whoami ports: - port: 80 targetPort: 80 nodePort: 30080 $ kubectl apply -f whoami-deploy.yaml $ kubectl get pod -A NAMESPACE NAME READY STATUS RESTARTS AGE kube-system local-path-provisioner-7b7dc8d6f5-jnmt5 1/1 Running 0 11m kube-system coredns-b96499967-brb9f 1/1 Running 0 11m kube-system helm-install-traefik-crd-hrfr5 0/1 Completed 0 11m kube-system metrics-server-668d979685-xj5jj 1/1 Running 0 11m kube-system helm-install-traefik-nr5jq 0/1 Completed 1 11m kube-system svclb-traefik-632fd507-mdwnl 2/2 Running 0 11m kube-system traefik-7cd4fcff68-47ms4 1/1 Running 0 11m default whoami-6bbfdbb69c-phxts 1/1 Running 0 102s default whoami-6bbfdbb69c-9rpxv 1/1 Running 0 102s $ kubectl get svc -A NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 26m kube-system kube-dns ClusterIP 10.43.0.10 <none> 53/UDP,53/TCP,9153/TCP 26m kube-system metrics-server ClusterIP 10.43.90.12 <none> 443/TCP 26m kube-system traefik LoadBalancer 10.43.147.171 192.168.136.5 80:32391/TCP,443:31718/TCP 25m default whoami NodePort 10.43.116.252 <none> 80:30080/TCP 16m $ curl localhost:30080 Hostname: whoami-6bbfdbb69c-9rpxv IP: 127.0.0.1 IP: ::1 IP: 10.42.0.10 IP: fe80::7c46:beff:fe57:f495 RemoteAddr: 10.42.0.1:43930 GET / HTTP/1.1 Host: localhost:30080 User-Agent: curl/7.81.0 Accept: */* Ingress 적용 # ingress-rule.yml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: main-ingress spec: rules: # - host: domain - http: paths: - path: / pathType: ImplementationSpecific backend: service: name: whoami port: number: 80 Ingress 가 Proxy 역할로 X-Forwarded-For 등이 추가됨 ...

August 23, 2022 · Byung Kyu KIM

trino(presto) nested json 예제

trino(presto) nested json 를 처리하기 위한 table schema 예제 trino(presto) - create table row : json object (nested json) 타입을 위한 sub column 정의 array : 배열 Example {"id":1,"name":"Alice"} {"id":2,"name":"Bob"} {"id":3,"name":"Carol"} {"id":4,"name":"David", "etc1": [{"key": "key-data11"}, {"key": "key-data22"}] } {"id":5,"name":"Elise", "etc2": ["data1", "data2", "data3"]} create table hive.default.sample ( id varchar, name varchar, etc1 array(row(key varchar)), etc2 array(varchar) ) with ( format = 'json', external_location = 's3a://data/sample/' ) trino cli trino> use hive.default; USE trino:default> select * from sample; id | name | etc1 | etc2 ----+-------+--------------------------------------+----------------------- 1 | Alice | NULL | NULL 2 | Bob | NULL | NULL 3 | Carol | NULL | NULL 4 | David | [{key=key-data11}, {key=key-data22}] | NULL 5 | Elise | NULL | [data1, data2, data3] (5 rows) Query 20220824_000627_00008_qpvtj, FINISHED, 1 node Splits: 1 total, 1 done (100.00%) 0.27 [5 rows, 212B] [18 rows/s, 777B/s]

August 23, 2022 · Byung Kyu KIM

trino(presto), minio docker 테스트 환경

trino(presto), minio docker 활용 테스트 환경 trino (hive connector) to minio trino 의 hive connector 를 활용해서 minio 데이터 분석 환경 Hive connector : https://trino.io/docs/current/connector/hive.html{:target="_blank"} 참고 : https://github.com/cdecl/trino-minio-docker{:target="_blank"} docker-compose (trino, minio) version: '3' services: trino: image: trinodb/trino container_name: trino restart: always ports: - "8080:8080" volumes: - ./etc:/etc/trino minio: image: minio/minio restart: always command: server /data --console-address ":9001" container_name: minio environment: MINIO_ROOT_USER: minio MINIO_ROOT_PASSWORD: minio1234 restart: always ports: - "9000:9000" - "9001:9001" volumes: - ./minio-data:/data minio (hive) properties etc/catalog/hive.properties metastore 는 minio catalog 버킷에 저장 s3a://catalog/trino/ minio 세팅 정보 : access-key, secret-key, endpoint connector.name=hive-hadoop2 hive.metastore=file hive.metastore.catalog.dir=s3a://catalog/trino/ hive.recursive-directories=true hive.non-managed-table-writes-enabled=true hive.allow-drop-table=true hive.s3.path-style-access=true hive.s3.ssl.enabled=false hive.s3select-pushdown.enabled=true hive.s3.aws-access-key=minio hive.s3.aws-secret-key=minio1234 hive.s3.endpoint=http://minio:9000 docker-compose 실행 및 초기값 세팅 ## 실행 $ docker-compose up -d reating network "trino_default" with the default driver Creating minio ... done Creating trino ... done rclone 으로 minio 버킷 생성 # rclone 설정 $ cat local.conf [local] type = s3 provider = Minio env_auth = false access_key_id = minio secret_access_key = minio1234 endpoint = http://localhost:9000 # create catalog, data directory $ rclone --config local.conf mkdir local:catalog $ rclone --config local.conf mkdir local:data # sample json (ndjson) data) $ cat 1.json {"id":1,"name":"Alice"} {"id":2,"name":"Bob"} {"id":3,"name":"Carol"} # test data copy $ rclone --config local.conf copy 1.json local:data/sample/ schema, table 생성 default schema (db) 생성 및 external_location table 생성 -- hive 의 schema(db) 생성 create schema hive.default; -- table 생성 create table hive.default.sample ( id varchar, name varchar ) with ( format = 'json', external_location = 's3a://data/sample/' ); -- select select * from sample; 쿼리 테스트 (dbeaver)

August 19, 2022 · Byung Kyu KIM