1. Adminer (가볍고 간편한 PHP 기반)

  • 특징: 단일 adminer.php 파일로 구성된 초경량 SQL 관리 도구
  • 지원 DB: MySQL, PostgreSQL, SQLite, MS SQL 등
  • 설치: PHP + 웹서버(IIS 또는 Apache)만 있으면 바로 사용 가능
  • 장점: 매우 빠르고 간단, 보안 업데이트 잘됨

👉 공식 사이트: https://www.adminer.org/

 

Adminer - Database management in a single PHP file

phpMyAdmin , it consist of a single file ready to deploy to the target server. --> Adminer is available for: MySQL, MariaDB, PostgreSQL, CockroachDB, SQLite, MS SQL, Oracle. Others can be added via plugin: Elasticsearch, SimpleDB, MongoDB, Firebird, Clickh

www.adminer.org

설치 예시:

  1. PHP 설치 (윈도우용 XAMPP, WampServer 또는 IIS + PHP)
  2. 웹 루트에 adminer.php 파일 복사
  3. 브라우저에서 접속 → DB 로그인 → 쿼리 실행 가능

2. phpMyAdmin (전통적인 웹기반 MySQL 관리자)

  • 특징: 가장 널리 쓰이는 MySQL 웹 인터페이스
  • 지원 기능: 쿼리 실행, 테이블 관리, import/export, 권한 설정 등
  • 설치: PHP + MySQL 환경 필요 (XAMPP, WampServer 등으로 가능)
  • 장점: 풍부한 기능, 다국어 지원, 사용자 계정 관리

👉 공식 사이트: https://www.phpmyadmin.net/

 

phpMyAdmin

Your download should start soon, if not please click here. Please verify the downloaded file Please take additional steps to verify that the file you have downloaded is not corrupted, you can verify it using the following methods: phpMyAdmin needs your con

www.phpmyadmin.net

 


3. SQLPad (Node.js 기반의 쿼리 에디터)

  • 특징: 웹 기반 SQL 에디터, 쿼리 저장, 시각화도 가능
  • 설치: Node.js 필요
  • 지원 DB: MySQL, PostgreSQL, SQLite, MSSQL, Presto 등
  • 장점: 팀 단위 쿼리 저장, 쿼리 공유 등 협업에 유리

👉 GitHub: https://github.com/sqlpad/sqlpad

 

GitHub - sqlpad/sqlpad: Web-based SQL editor. Legacy project in maintenance mode.

Web-based SQL editor. Legacy project in maintenance mode. - sqlpad/sqlpad

github.com

 

 

🔄 비교 요약

이름 기술 스택 설치 난이도 주요 장점
Adminer PHP 매우 쉬움 가볍고 빠름, 단일 파일
phpMyAdmin PHP 쉬움 전통적 인터페이스, 기능 풍부
SQLPad Node.js 보통 쿼리 저장/공유, 시각화 가능
  • ⭐PyTorch / TensorFlow
    ◦ 용도: 모델 훈련, 미분 계산, 텐서 연산
    ◦ [PyTorch]
        • 직관적이고 디버깅이 쉬워 LLM 연구와 실험에 널리 사용됨
        •  Hugging Face와의 연동도 뛰어남
    ◦ [TensorFlow]
        •   구글 생태계(GCP, TFX 등)와 잘 통합되며, 대규모 배포에 적합
        •   최근에는 PyTorch보다 덜 사용됨

 

  • Hugging Face ⭐Transformers
    ◦  용도: 사전학습된 LLM 모델 불러오기, fine-tuning, inference
        •  사전학습된 모델 (GPT, BERT, T5, LLaMA 등)을 쉽게 사용할 수 있게 해주는 라이브러리
        •  학습/추론에 필요한 tokenizer, 모델 구조, config 등을 자동으로 관리
        •  텍스트 생성, 분류, QA, 요약 등 다양한 작업에 최적화된 pipeline 제공
from transformers import AutoModelForCausalLM, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("gpt2")
model = AutoModelForCausalLM.from_pretrained("gpt2")

inputs = tokenizer("Hello, my name is", return_tensors="pt")
outputs = model.generate(**inputs)
print(tokenizer.decode(outputs[0]))

 

  • Datasets (Hugging Face Datasets)
    용도: 대규모 데이터셋 로딩, 전처리, 분할
        •   데이터셋을 빠르고 효율적으로 불러오고 사용할 수 있도록 지원
        •   대용량 파일도 메모리에 무리 없이 스트리밍 처리 가능
      Hugging Face Hub에서 바로 불러올 수 있음
from datasets import load_dataset

dataset = load_dataset("wikitext", "wikitext-2-raw-v1")
print(dataset["train"][0])

 

  • Accelerate / DeepSpeed / bitsandbytes
    ◦ 용도: 대규모 모델 훈련 시 하드웨어 최적화, 메모리 절약
        •    Accelerate: 다양한 하드웨어(CPU, GPU, TPU)에 맞게 모델 학습 코드 자동 조정
        •    DeepSpeed: 마이크로소프트에서 만든 초대형 모델 훈련 최적화 툴
        •    bitsandbytes: 8bit/4bit 양자화 학습 및 추론 지원 → 적은 메모리로 대형 모델 사용 가능

  • PEFT (Parameter-Efficient Fine-Tuning)
    ◦  용도: LLM을 빠르고 저렴하게 파인튜닝 (LoRA, Prefix Tuning 등)
        •    기존 LLM 전체가 아닌 일부 파라미터만 훈련해서 훨씬 적은 자원으로 fine-tuning 가능
        •    대표 기법: LoRA (Low-Rank Adaptation)
from peft import LoraConfig, get_peft_model

 

  • ⭐Tokenizers
    ◦  용도: LLM에 입력될 텍스트를 토큰 단위로 인코딩
        •    Hugging Face의 tokenizers는 빠르고 확장성 높은 토크나이저
        •    Byte-Pair Encoding (BPE), WordPiece, SentencePiece 등 다양한 방식 지원

  • ⭐LangChain / ⭐LlamaIndex
    ◦  용도: LLM 응용 프로그램 구축 (질의 응답, RAG, 에이전트 등)
        •    LangChain: 다양한 LLM, 데이터 소스, 도구를 연결해 에이전트처럼 동작하게 함
        •    LlamaIndex: 사용자 문서를 LLM에 연결해 QA 시스템 구축에 유용 (RAG)

  • WandB / TensorBoard
    ◦  용도: 모델 학습 과정 모니터링, 로그 기록, 하이퍼파라미터 튜닝
        •    실험 추적 및 시각화를 위한 필수 툴
        •    학습 정확도, 손실값, GPU 메모리 사용량 등 확인 가능

  • 부가적으로 알아두면 좋은 라이브러리
라이브러리 기능
scikit-learn 전통적인 ML 도구, 평가 지표 등
OpenLLM LLM 모델 배포에 특화된 프레임워크
fastapi API 서버를 빠르게 만들어 추론 시스템화
pandasnumpy 데이터 전처리 및 분석
torchtext 텍스트 데이터셋 처리 도구

 

  • 꼭 알아야 할 핵심 세트
범주 라이브러리
모델/훈련 PyTorchtransformers
데이터 datasetstokenizers
최적화 acceleratedeepspeedbitsandbytespeft
응용 LangChainLlamaIndex
실험 관리 wandbtensorboard

 

 

LlamaIndex는 **언어 모델(LLM)**과 **외부 데이터(문서, DB 등)**를 연결해주는 데이터 프레임워크입니다.

 

• LlamaIndex = LLM + 외부 데이터 연결을 쉽게 만들어주는 도구

 

LLM은 자체적으로 인터넷이나 PDF, 데이터베이스 같은 구조화되지 않은 데이터에 접근할 수 없습니다. LlamaIndex는 이런 데이터들을 정리하고 쪼개고 인덱싱해서, LLM이 쉽게 "질문-답변", "요약", "검색 기반 생성(RAG)" 등을 할 수 있게 도와주는 라이브러리입니다.

 

• LlamaIndex가 할 수 있는 작업

    ◦ 문서 로딩 : PDF, Word, HTML, Notion, Airtable 등 다양한 형식의 문서를 읽어옴

    ◦ Chunking : 문서를 적절한 크기로 나눔 (LLM이 다루기 쉽게)

    ◦ Embedding + Indexing : 문서를 벡터화하고 검색 가능한 인덱스를 만듦

    ◦ Query Engine : 사용자 질문을 받아서 적절한 문서 찾고 답변 생성

 

• 주요 예시

from llama_index import VectorStoreIndex, SimpleDirectoryReader

# 문서 로딩
documents = SimpleDirectoryReader("data/").load_data()

# 인덱스 생성 (벡터화 포함)
index = VectorStoreIndex.from_documents(documents)

# 질의 엔진 생성
query_engine = index.as_query_engine()

# 질의
response = query_engine.query("이 회사의 수익 모델은 무엇인가요?")
print(response)

 

• 핵심 구성 요소

    ◦ Document : 원본 텍스트 데이터
    ◦ Node : 문서에서 쪼갠 텍스트 블록 (보통 하나의 파라그래프 단위)
    ◦ Index : 벡터 기반 검색 인덱스 (FAISS, Chroma 등 지원)
    ◦ Query Engine : 질의 → 검색 → 응답 생성 파이프라인
    ◦ Retriever : 관련 문서를 찾는 부분
    ◦ Response Synthesizer : 관련 문서들을 종합해서 답변 생성

 

• 사용 목적

    ◦ 내 회사 문서를 기반으로 GPT 질의 응답
    ◦ PDF 논문 요약
    ◦ SQLite, Notion, Airtable 등 다양한 데이터 연결
    ◦ RAG (Retrieval-Augmented Generation)

  • 기본적으로, Regression analysis (회귀 분석)은 몇 개의 독립변수 (예 : 배경음악)를 처리하는 과정이 반드시 필요하며, 그 이유는 독립변수가 종속변수 (예 : 가게에 머무는 시간)에 어떤 영향을 끼치는 지 알아보고자 하기 때문입니다.
    이는 독립변수가 변화함에 따라서, 종속변수 값이 어떻게 변화하는지를 묘사합니다.
  • 회귀분석은 몸무게, 속도, 또는 나이와 같은 연속 수치 값으로 분석했을 때 최상의 결과를 도출해낼 수 있습니다.
  • 일반 적인 회귀 분석의 활용
    • 고객 만족도와 고객 충성도와의 관계를 도출할 수 있음.
    • 이웃 주민과 그 규모가 주택 가격에 어떤 영향을 주는지를 확인할 수 있음
    • 점포와 역 사이의 거리가 멀면 멀수록 매출이 오르는지 내리는지 혹은 별다른 관계가 없는지
      오른다면 대충 얼마 정도가 오르는지를 알아내어 수익 향상법을 찾아낼 수 있음
  • FPS 게임에서의 회귀분석 활용 사례
    1. 플레이어 행동 예측
      • 회귀 분석을 사용하여 특정 플레이어 행동(예: 이동 패턴, 슈팅 정확도, 명중률 등)을 예측할 수 있습니다. 이를 통해 플레이어의 행동을 이해하고, 게임 디자인 또는 AI 개발에 활용할 수 있습니다.
    2. 게임 밸런스 조정
      • 회귀 분석을 사용하여 게임의 밸런스를 평가하고 조정할 수 있습니다. 예를 들어, 특정 무기나 아이템의 사용 빈도와 승률 간의 관계를 조사하여 게임의 균형을 개선하는 데 도움이 될 수 있습니다.
    3. 플레이어 리텐션 분석
      • 회귀 분석을 사용하여 특정 이벤트 또는 게임 요소와 플레이어 리텐션 간의 관계를 조사할 수 있습니다. 이를 통해 어떤 요소가 플레이어를 유지하거나 이탈시키는지 이해하고, 이를 개선하는 방안을 모색할 수 있습니다.
    4. 매치메이킹 및 승률 예측
      • 회귀 분석을 사용하여 특정 매치 조합이나 팀 구성과 승률 간의 관계를 분석할 수 있습니다. 이를 통해 매치메이킹 시스템을 개선하거나 플레이어에게 더 공평한 경기를 제공할 수 있습니다.
    5. 경제 시스템 분석
      • 게임 내 경제 시스템과 관련된 데이터를 회귀 분석하여 아이템 가격 조정이나 경제 균형을 조절하는 데 도움을 줄 수 있습니다.
  • 주식 시장에 회귀분석 활용 사례
    1. 블랙 스완 이벤트 탐지
      • 시장 폭락(crash)이나 급등(rally)과 같은 극단적인 가격 변동 감지
      • 경제 위기(예: 2008년 금융위기) 또는 특정 산업의 붕괴 예측
      • 특정 기업의 파산 가능성 조기 경고
    2. 이상거래 탐지
      • 비정상적인 거래량 급증 또는 대량 매수/매도 탐지
      • 특정 계좌에서 반복적으로 발생하는 이상 거래 패턴 분석
      • 내부자 거래 및 시장 조작 가능성 탐지
    3. 저평가 종목 발굴
      • 시장에서 과소평가된 희귀한 기회 탐색
      • 특정 조건에서만 나타나는 비정상적인 수익률 패턴 감지
      • 벤치마크 대비 이례적으로 낮은 변동성을 보이는 종목 식별
    4. 고수익 투자전략 개발
      • 고빈도 트레이딩(HFT)에서 특정 희귀 이벤트를 활용한 전략
      • 옵션 시장에서 극단적인 변동성을 이용한 투자 기법
      • 특정 마켓 메이커의 유동성 공급 패턴 분석
    5. 뉴스 및 소셜 미디어 분석
      • 특정 종목 또는 산업에 대한 희귀한 키워드 감지하여 가격 변동 예측
      • 감성 분석(Sentiment Analysis)을 통한 극단적인 시장 반응 탐지
      • 주요 CEO의 발언이나 기업 공시 중 비정상적인 정보 변화 탐지

🔹 ACME(Automated Certificate Management Environment)란?

ACME(Automated Certificate Management Environment)는 SSL/TLS 인증서를 자동으로 발급, 갱신, 폐기할 수 있도록 설계된 프로토콜입니다.

Let's Encrypt에서 처음 개발했지만, 이제는 다른 CA(Certificate Authority, 인증 기관)에서도 지원하고 있어. 대표적으로 Let's Encrypt, ZeroSSL, Buypass 등이 ACME를 사용해서 SSL 인증서를 자동화할 수 있도록 제공합니다.

 

 

🔹 ACME의 주요 기능

인증서 자동 발급
도메인 소유권 검증(DNS, HTTP 등)
자동 갱신 (SSL 인증서가 만료되기 전에 자동으로 갱신 가능)
인증서 폐기 및 취소 지원

 

 

🔹 ACME 작동 방식 (간단한 과정)

  1. 클라이언트가 인증서 요청
    • ACME 클라이언트(예: Certbot)가 CA(인증 기관) 서버에 SSL 인증서를 요청함.
  2. 도메인 소유권 검증
    • CA는 요청한 도메인이 실제로 사용자의 것인지 확인하기 위해 검증을 수행함.
    • 검증 방식: HTTP 파일 인증, DNS TXT 레코드 인증 등이 있음.
  3. SSL 인증서 발급
    • 도메인 소유권이 확인되면 CA가 SSL 인증서를 발급해줌.
  4. 자동 갱신
    • 일정 기간(예: 90일)이 지나면 ACME 클라이언트가 자동으로 인증서를 갱신함.

 

🔹 ACME를 지원하는 주요 클라이언트(도구)

클라이언트특징

클라이언트 특징
Certbot 가장 널리 사용됨, Let's Encrypt 공식 추천
acme.sh 가볍고 빠른 셸 스크립트 기반 ACME 클라이언트
LEGO Go 언어 기반, 다양한 환경에서 사용 가능
Caddy 자동 SSL 관리 기능 내장 (ACME 지원)

 

 

🔹 ACME를 활용한 SSL 발급 예제 (Certbot 사용)

🔧 Let's Encrypt에서 무료 SSL 인증서 발급 (Nginx 기준)

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

이 명령어를 실행하면 ACME 프로토콜을 사용하여 자동으로 도메인 소유권을 확인하고 SSL 인증서를 설치해 주어야 함.

 

🔹 결론

    • ACME는 SSL 인증서를 자동으로 발급 및 갱신하는 프로토콜.
    • Let's Encrypt, ZeroSSL, Buypass 같은 무료 SSL 제공 업체에서 사용됨.
    • Certbot, acme.sh(acme.sh-github) 같은 클라이언트를 사용하면 쉽게 설정 가능.

 

자동 SSL 인증서를 설정하려고 한다면, 사용 중인 웹 서버(Apache, Nginx)나 환경을 알려주면 더 자세히 도와줄 수 있습니다.

 

 

🔹 1. Let's Encrypt (가장 많이 사용됨)

✅ 특징:

  • 무료로 90일 동안 유효한 SSL 인증서 제공
  • 자동 갱신 가능 (Certbot 사용)
  • 대부분의 웹 서버(Apache, Nginx 등)와 호환됨

🔧 발급 방법 (Certbot 사용):

1. Certbot 설치

sudo apt update && sudo apt install certbot python3-certbot-nginx

 

2. SSL 인증서 발급 (Nginx 기준)

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

 

3. 자동 갱신 설정

sudo certbot renew --dry-run

 

4. 웹 서버 재시작

sudo systemctl restart nginx

 

 

 

🔹 2. ZeroSSL

✅ 특징:

  • 90일 무료 SSL 인증서 제공 (3개월마다 갱신 필요)
  • 발급 과정이 GUI 기반이라 초보자도 쉽게 사용 가능
  • ACME 프로토콜 지원 (Certbot과 유사하게 자동 갱신 가능)

🔧 발급 방법:

  1. ZeroSSL 공식 사이트에 접속하여 회원가입
  2. "New Certificate" 클릭 후 도메인 입력
  3. 인증 방법 선택 (DNS, HTTP 파일 업로드 등)
  4. SSL 인증서 다운로드 및 서버에 적용
  5. 갱신이 필요할 때 같은 과정 반복 (자동 갱신을 원하면 ACME 사용)

 

🔹 3. Cloudflare SSL

✅ 특징:

  • 무료 플랜에서도 SSL 지원 (유효기간 무제한)
  • Cloudflare CDN과 함께 사용 가능
  • 서버에 직접 인증서를 설치하지 않아도 됨 (클라우드 기반)

🔧 발급 방법:

  1. Cloudflare 가입 후 사이트 추가
  2. 네임서버를 Cloudflare로 변경 (도메인 업체에서 설정)
  3. "SSL/TLS" 설정에서 "Flexible" 또는 "Full" 선택
  4. Cloudflare를 통해 HTTPS 적용 완료

 

🔹 4. Buypass Go SSL

✅ 특징:

  • 180일(6개월)짜리 무료 SSL 인증서 제공
  • ACME 클라이언트를 사용하여 자동 발급 가능
  • Let's Encrypt와 유사한 방식

🔧 발급 방법:

  1. ACME 클라이언트(Certbot 등)를 사용하여 SSL 신청
  2. 다음 명령어 실행 (Nginx 기준)
sudo certbot --server "https://api.buypass.com/acme/directory" -d yourdomain.com

   3.  발급된 인증서를 서버에 적용

 

 

🔹 비교 요약

서비스유효기간자동 갱신주요 특징

서비스 유효기간 자동 갱신 주요 특징
Let's Encrypt 90일 가장 널리 사용됨, Certbot으로 자동 갱신 가능
ZeroSSL 90일 ✅ (ACME 사용) GUI 기반으로 발급 가능
Cloudflare SSL 무제한 네임서버 변경 필요, 서버에 직접 설치 필요 없음
Buypass Go SSL 180일 6개월짜리 인증서, Certbot 사용 가능

아래 코드는 Hugging Face의 transformers, peft를 사용하여 GPT-2 모델을 LoRA로 미세 조정하는 예제입니다.

✅ 필요한 패키지 설치

먼저 필요한 라이브러리를 설치합니다.

pip install torch transformers datasets peft accelerate

 

📌 Python 코드: LoRA를 이용한 GPT-2 미세 조정

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer
from peft import LoraConfig, get_peft_model
from datasets import load_dataset

# 1️⃣ 모델 및 토크나이저 불러오기
model_name = "gpt2"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

# 2️⃣ LoRA 설정
lora_config = LoraConfig(
    r=8,  # LoRA 랭크 (낮을수록 연산량 감소)
    lora_alpha=16,  # LoRA 스케일링 계수
    target_modules=["c_attn", "c_proj"],  # 적용할 모델의 특정 레이어
    lora_dropout=0.1,  # 드롭아웃 비율
    bias="none",
)

# 3️⃣ LoRA 적용
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()  # 학습 가능한 파라미터 확인

# 4️⃣ 데이터셋 로드 및 전처리 (예제: Hugging Face "wikitext" 데이터)
dataset = load_dataset("wikitext", "wikitext-2-raw-v1", split="train")

def tokenize_function(examples):
    return tokenizer(examples["text"], padding="max_length", truncation=True)

tokenized_datasets = dataset.map(tokenize_function, batched=True)
tokenized_datasets = tokenized_datasets.shuffle().select(range(1000))  # 데이터 샘플링

# 5️⃣ 학습 설정
training_args = TrainingArguments(
    output_dir="./lora-gpt2-model",
    evaluation_strategy="epoch",
    save_strategy="epoch",
    learning_rate=5e-4,
    per_device_train_batch_size=8,
    per_device_eval_batch_size=8,
    num_train_epochs=3,
    weight_decay=0.01,
    logging_dir="./logs",
)

# 6️⃣ Trainer 객체 생성 및 학습 시작
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_datasets,
)

trainer.train()

# 7️⃣ LoRA 모델 저장
model.save_pretrained("./lora-gpt2-model")
tokenizer.save_pretrained("./lora-gpt2-model")

print("🎉 LoRA 학습 완료 및 저장 완료!")

 

🔹 코드 설명

1️⃣ GPT-2 모델과 토크나이저 로드
2️⃣ LoRA 설정

  • r=8: LoRA 랭크(낮을수록 메모리 사용량 감소)
  • lora_alpha=16: 학습할 가중치 크기 조정
  • target_modules=["c_attn", "c_proj"]: LoRA 적용할 Transformer 레이어 선택
    3️⃣ LoRA 적용 및 학습 가능한 파라미터 확인
    4️⃣ Hugging Face 데이터셋 로드 및 전처리
    5️⃣ 훈련 하이퍼파라미터 설정 (Trainer 사용)
    6️⃣ 모델 학습 진행 (trainer.train())
    7️⃣ 학습된 모델 저장

 

🔹 결과 및 활용

원본 GPT-2 모델을 수정하지 않고 LoRA를 활용해 미세 조정
메모리를 절약하면서 특정 도메인(예: 위키텍스트)에 맞춘 GPT-2 생성 모델 학습 가능
학습된 LoRA 모델을 저장하고 다시 불러와 사용 가능

🎯 이렇게 하면 LoRA를 사용하여 특정 데이터셋에 최적화된 GPT-2 모델을 만들 수 있습니다! 🚀

🔹 LoRA(Low-Rank Adaptation)란?

LoRA(Low-Rank Adaptation)는 대형 딥러닝 모델을 효율적으로 미세 조정(fine-tuning)하는 방법입니다.
기존 모델의 전체 가중치를 업데이트하는 대신, 저차원 행렬(rank가 낮은 행렬)을 추가하여 학습량을 줄이고 성능을 유지하는 방식입니다.

 

1️⃣ LoRA가 필요한 이유

✅ 1. 대형 모델의 학습 비용이 너무 큼

  • GPT, Stable Diffusion 같은 대형 모델은 **수십억 개의 가중치(파라미터)**를 가짐.
  • 전체 모델을 미세 조정하려면 엄청난 계산량과 GPU 메모리가 필요함.

✅ 2. 기존 모델을 유지하면서 새로운 기능 추가

  • 원래 모델의 성능을 유지하면서, 특정 작업이나 스타일에 맞게 조정할 필요가 있음.
  • LoRA는 원본 모델을 수정하지 않고 추가적인 가중치만 적용하여 이런 요구를 충족함.

2️⃣ LoRA의 원리

LoRA는 기존 모델의 특정 가중치 행렬(예: Transformer의 W_q, W_v)을 직접 업데이트하지 않고,
대신 저차원 행렬(A, B)을 추가하여 모델을 조정하는 방식입니다.

🔸 기존 방법: 일반적인 Fine-Tuning

모든 가중치 θ\theta를 업데이트해야 함.

θ=θ−α⋅∇L(θ)\theta = \theta - \alpha \cdot \nabla L(\theta)

💡 문제점: 전체 가중치를 업데이트하므로 연산량과 메모리 사용량이 큼.

 

🔹 LoRA 방식: 저차원 행렬 추가

기존 가중치 WW 대신, 작은 행렬 A,BA, B를 추가하여 학습.

W′=W+ABW' = W + AB

  • A: 작은 차원의 행렬 (예: 4096×4)
  • B: 더 작은 차원의 행렬 (예: 4×4096)

💡 장점:
메모리 절약 – 전체 모델을 수정하지 않으므로 GPU 메모리 사용량이 적음.
빠른 학습 – 필요한 가중치만 업데이트하므로 계산량이 줄어듦.
원본 모델 유지 – 모델 전체를 바꾸지 않고 필요한 기능만 추가 가능.

 

3️⃣ LoRA의 활용 분야

LoRA는 다양한 분야에서 대형 모델을 특정 목적에 맞게 조정하는 데 사용됩니다.

🔹 1. 이미지 생성 (Stable Diffusion)

  • 특정 캐릭터, 화풍, 스타일을 반영한 모델을 학습하는 데 사용됨.
  • 예: 애니메이션 스타일 LoRA, 실사풍 LoRA 등.
  • 원본 Stable Diffusion 모델을 유지하면서 추가 학습 가능.

🔹 2. 텍스트 생성 (GPT, LLaMA 등)

  • 특정 도메인(예: 법률, 의학)에 맞는 답변을 더 잘하도록 조정 가능.
  • ChatGPT의 성능을 유지하면서, 특정 기업용 챗봇으로 최적화 가능.

🔹 3. 음성 합성 (TTS)

  • 특정 인물의 목소리를 학습하여 더 자연스럽게 음성을 생성할 수 있음.
  • 예: 성우의 목소리를 반영한 AI 보이스 생성.

4️⃣ LoRA vs 기존 Fine-Tuning 방법

비교 항목기존 Fine-TuningLoRA

메모리 사용량 적음
연산량 높음 낮음
훈련 속도 느림 빠름
원본 모델 유지 ❌ 불가능 (덮어씌움) ✅ 가능 (가중치 추가)
저장 용량 모델 전체 저장 필요 추가 가중치만 저장

💡 LoRA는 기존 Fine-Tuning보다 훨씬 가볍고 빠르며, 원본 모델을 보존할 수 있는 강점이 있음.

 

5️⃣ LoRA 적용 방법 (Stable Diffusion 예시)

만약 Stable Diffusion에서 LoRA 모델을 적용하고 싶다면 다음과 같은 과정을 거칩니다.

1️⃣ 기본 모델 다운로드

  • stable-diffusion-v1-5 같은 원본 모델을 가져옴.

2️⃣ LoRA 모델 학습

  • 원하는 데이터(예: 특정 캐릭터 이미지)를 준비.
  • 기존 모델을 수정하지 않고 LoRA 방식으로 학습 진행.

3️⃣ LoRA 모델 적용

  • LoRA 파일(예: .safetensors)을 불러와 원본 모델에 적용.
  • diffusers 라이브러리에서 load_lora_weights 같은 기능으로 불러오기 가능.

6️⃣ 결론: LoRA가 왜 중요한가?

저렴한 비용으로 대형 모델을 커스터마이징 가능
원본 모델을 수정하지 않고 새로운 기능 추가 가능
적은 데이터와 자원으로도 빠르게 미세 조정 가능
이미지 생성, 텍스트 생성, 음성 합성 등 다양한 분야에서 활용 가능

LoRA는 대형 AI 모델을 더 효율적이고 실용적으로 활용할 수 있게 해주는 강력한 기술입니다! 🚀

1. 기본적인 Enum 사용법

Enum을 사용하면 관련된 상수들을 그룹화할 수 있습니다.

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

print(Color.RED)       # Color.RED
print(Color.RED.value) # 1
print(Color.RED.name)  # 'RED'

2. 자동 값 할당 (auto)

값을 직접 지정하지 않고 자동으로 할당할 수 있습니다.

from enum import Enum, auto

class Status(Enum):
    # auto()는 자동으로 1부터 시작하는 정수 값을 할당합니다.
    PENDING = auto()
    IN_PROGRESS = auto()
    COMPLETED = auto()

print(Status.PENDING.value)  # 1
print(Status.IN_PROGRESS.value)  # 2
print(Status.COMPLETED.value)  # 3

3. 열거형 순회

Enum은 이터러블(iterable)이라서 루프를 돌면서 접근할 수 있습니다.

for color in Color:
    print(color.name, color.value)

# 출력
RED 1
GREEN 2
BLUE 3

4. 문자열 매핑 (Enum을 딕셔너리처럼 활용)

열거형을 사용하면 문자열을 특정 값으로 쉽게 변환할 수 있습니다.

class Role(Enum):
    ADMIN = "admin"
    USER = "user"
    GUEST = "guest"

role = Role["ADMIN"]  # 문자열 키로 접근
print(role.value)  # "admin"

5. 열거형 비교

Enum 값은 동일성(is)과 동등성(==) 비교가 가능합니다.

if role == Role.ADMIN:
    print("관리자입니다.")  # 출력됨

6. 딕셔너리 키로 사용

Enum 값은 해시 가능하므로 딕셔너리의 키로 사용할 수 있습니다.

permissions = {
    Role.ADMIN: "모든 권한",
    Role.USER: "일반 권한",
    Role.GUEST: "읽기 전용"
}

print(permissions[Role.ADMIN])  # "모든 권한"

7. Mixin을 활용한 커스텀 기능 추가

메서드를 포함하여 더 복잡한 Enum을 만들 수도 있습니다.

class ExtendedEnum(Enum):
    @classmethod
    def list(cls):
        return [item.name for item in cls]

class Animal(ExtendedEnum):
    DOG = 1
    CAT = 2
    BIRD = 3

print(Animal.list())  # ['DOG', 'CAT', 'BIRD']

8. IntEnum을 활용한 숫자 Enum

IntEnum을 사용하면 숫자 기반 Enum을 다른 정수와 함께 사용할 수 있습니다.

from enum import IntEnum

class Priority(IntEnum):
    LOW = 1
    MEDIUM = 2
    HIGH = 3

print(Priority.LOW < Priority.HIGH)  # True
print(Priority.LOW + 1)  # 2

9. 플래그(Flag) Enum을 활용한 비트 연산

비트 플래그를 활용할 때 Flag 또는 IntFlag를 사용할 수 있습니다.

비트 연산을 활용하면 권한 시스템을 만들 때 유용합니다.

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

perm = Permission.READ | Permission.WRITE
print(perm)  # Permission.READ|WRITE

# 특정 권한 포함 여부 확인
print(Permission.READ in perm)  # True
print(Permission.EXECUTE in perm)  # False

 

Grafana의 대시보드에 2개의 변수를 생성하였습니다.

 

[종목명/코드]에 입력된 값을 [검색 구분]의 선택값에 따라 서로 다른 컬럼을 검색하는 쿼리 입니다.

where 절에 case when으로 조건을 지정할 수 있습니다.

select stock_code, stock_name, stock_type, last_collect_event_date
from tbl_coporation_info_kor
where (case when '$search_type' = '종목코드' then stock_code = '$search_code'
        else stock_name like '%$search_code%' end)
limit 100;

위 쿼리는 동작은 되지만 실행계획을 보면 stock_code, stock_name에 해당하는 index가 존재하지만 table scan이 발생합니다.

 

 

🔹 인덱스를 사용하도록 개선된 코드

select stock_code, stock_name, stock_type, last_collect_event_date
from tbl_coporation_info_kor
where ('$search_type' = '종목코드' and stock_code = '$search_code')
    or ('$search_type' = '종목명' and stock_name like '%$search_code%')
limit 100;

실행계획을 확인해 보면 인덱스를 이용하고 있습니다.

🔹 COLLATION() 함수 사용

set @stock_code := '996161';
SELECT COLLATION(@stock_code);

결과 예시:

 

🔹 CHARSET() 함수 사용

set @stock_code := '996161';
SELECT CHARSET(@stock_code);

 결과 예시:

 

 

🔹 변수의 Collaton 과 컬럼의 Collation이 다를 경우의 처리 방법

  • 일반적인 변수 선언
set @stock_code := '1177851';
SELECT COLLATION(@stock_code);

     

  • Collation을 지정하여 선언
set @stock_code := '1177851' collate utf8mb4_0900_ai_ci;
SELECT COLLATION(@stock_code);

 

  • Convert를 사용하여 변환
set @stock_code := convert('1177851' using utf8mb4);
SELECT COLLATION(@stock_code);

 

1️⃣ SHOW VARIABLES 사용

SHOW VARIABLES LIKE 'character\_set\_%';

결과 예시:

 

2️⃣ 특정 데이터베이스의 문자셋 조회

SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME = 'database_name';

 결과 예시:

 

 

 

3️⃣ 특정 테이블의 문자셋 조회 - 1

show create table tbl_stock_list_us;

 결과 예시:

CREATE TABLE `tbl_stock_list_us` (
  `event_date` date NOT NULL COMMENT '기준일',
  `symbol_code` varchar(10) NOT NULL COMMENT '종목 코드',
  `last_open_raw` double NOT NULL COMMENT '시가 Raw',
  `last_max_raw` double NOT NULL COMMENT '고가 Raw',
  `last_min_raw` double NOT NULL COMMENT '저가 Raw',
  `last_close_raw` double NOT NULL COMMENT '종가 Raw',
  `change_precent_raw` double NOT NULL COMMENT '변동률(퍼센트) Raw',
  `volume_raw` double NOT NULL COMMENT '거래량',
  `upd_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`event_date`,`symbol_code`),
  UNIQUE KEY `idx_01` (`symbol_code`,`event_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

 

3️⃣ 특정 테이블의 문자셋 조회 - 2

SELECT TABLE_NAME, TABLE_COLLATION
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'db_stock' AND TABLE_NAME = 'tbl_stock_list_us';

 결과 예시:

 

4️⃣ 특정 열(Column)의 문자셋 조회

SELECT COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'db_stock' AND TABLE_NAME = 'tbl_stock_list_us';

 

 결과 예시:

MySQL에서 utf8mb4_0900_ai_ci와 utf8mb4_unicode_ci는 둘 다 utf8mb4 문자셋을 사용하는 대소문자 무시(_ci: case-insensitive) 비교(collation) 방식이지만, 주요한 차이점이 있습니다.

🔹 utf8mb4_unicode_ci

  • MySQL 5.5+ 버전에서 사용되는 표준 유니코드 정렬 방식
  • Unicode 4.0 기준으로 정렬 및 비교 수행
  • 일부 문자(예: 이모지, 특수 문자)에 대한 정렬이 최신 유니코드 표준과 다를 수 있음

특징:

  • MySQL 5.5부터 제공되며 널리 사용됨
  • 성능은 utf8mb4_general_ci보다는 느리지만 정확함
  • 최신 유니코드 규칙을 반영하지 못할 수 있음

🔹 utf8mb4_0900_ai_ci

  • **MySQL 8.0+**에서 제공하는 새로운 유니코드 정렬 방식
  • Unicode 9.0 기준으로 정렬 및 비교 수행
  • AI (Accent-Insensitive): 악센트 무시 (é == e)
  • CI (Case-Insensitive): 대소문자 무시 (A == a)
  • 성능이 개선되었으며 더 정확한 유니코드 정렬을 지원

특징:

  • MySQL 8.0 이상에서 권장됨
  • 최신 유니코드 표준을 반영하여 더 정확한 정렬 방식 제공
  • 성능 최적화됨

 

🔹 정리 (비교)

비교 항목utf8mb4_unicode_ciutf8mb4_0900_ai_ci

MySQL 버전 5.5 이상 8.0 이상
유니코드 버전 4.0 9.0
대소문자 구분 안 함 안 함
악센트 구분 옵션 가능 (utf8mb4_unicode_cs 사용) 안 함 (ai는 Accent-Insensitive)
이모지 지원 일부 제한 있음 더 정확한 비교 가능
정렬 정확도 상대적으로 낮음 최신 표준 적용

📌 MySQL 8.0 이상을 사용한다면 utf8mb4_0900_ai_ci를 권장
📌 MySQL 5.7 이하에서는 utf8mb4_unicode_ci를 사용

 

+ Recent posts