💡 RAG란?

RAG (Retrieval-Augmented Generation) =
👉 “검색 기반 생성형 AI” 또는 “정보 보강 생성”

✅ LLM이 기억 못하는 내용을 검색 시스템과 연동하여
실시간으로 찾아보고,
✅ 그걸 바탕으로 정확한 답변을 생성하는 방식입니다.

 

📊 전통적인 LLM의 한계

문제점설명
❌ 최신 정보 부족 학습 시점 이후의 정보는 모름
❌ 기업 데이터 없음 내부 문서, DB, FAQ 접근 불가
❌ 헛소리 위험 “모르는 건 그럴듯하게 지어냄” (Hallucination)

이걸 해결하는 게 RAG!

 

🔧 RAG 구조 한눈에 보기

[사용자 질문]
       ↓
[Retriever] 🔍 내 문서/DB/웹 등에서 관련 정보 검색
       ↓
[Generator (LLM)] 💬 검색된 문서를 바탕으로 정답 생성
       ↓
[답변 출력]
 
 

📦 사용법 요약 (LangChain 기준)

1. 📁 데이터 준비

PDF, txt, csv, 벡터DB 등.

 
from langchain.document_loaders import TextLoader
 
docs = TextLoader("my_file.txt").load()

2. 📐 문서 쪼개기

from langchain.text_splitter import CharacterTextSplitter
 
splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(docs)

3. 🧠 벡터 DB에 임베딩

from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
 
db = FAISS.from_documents(chunks, OpenAIEmbeddings())

4. 🎣 질문 → 관련 문서 검색 → LLM에 넣기

from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
 
qa = RetrievalQA.from_chain_type(
    llm=ChatOpenAI(),
    retriever=db.as_retriever(),
    return_source_documents=True
)
 
result = qa("우리 회사 반품 정책은 뭐야?")
 
print(result['result'])
 

🧠 핵심 요점 요약

구성 요소설명
Retriever 문서, DB 등에서 관련 내용 검색
LLM (Generator) 검색된 문서를 기반으로 답 생성
임베딩/벡터DB 검색을 위해 문서를 벡터화해 저장

🌍 RAG 응용 분야

분야활용 예
💼 기업 사내 문서 기반 지식봇, 고객 FAQ
🧑‍⚖️ 법률 판례/법령 기반 Q&A 시스템
🧪 의료 의학 논문 기반 진단 보조
🧾 세무/회계 최신 규정/회계 지침 기반 질의응답
📚 교육 교재 기반 학습 도우미
🧑‍💻 개발자 도구 내부 기술문서 + 코드 리딩 챗봇
📰 언론/뉴스 최신 기사 기반 Q&A

🔮 전망

RAG는 앞으로도 계속 중요해집니다. 이유는:

  • LLM은 사실을 모름 (단지 확률 기반 생성)
  • 현실 정보는 검색 + 구조화 + 연결이 필요함
  • RAG는 이를 동적으로 처리할 수 있는 구조

요약: LLM의 기억력을 현실의 DB로 보완하는 구조 = RAG

'생성형AI프로그래밍' 카테고리의 다른 글

AI 에이전트란 ?  (1) 2025.04.19
파인튜닝 개념  (0) 2025.04.19
VectorDB 와 청크(Chunk) 에 대하여  (0) 2025.04.19
OpenAI API 연동  (2) 2025.04.19
생성형AI 개발자는 무얼하는 사람인가요  (0) 2025.04.16

Streamlit의 pages/ 폴더를 활용해서 멀티 페이지 앱을 폴더 기반으로 구성

 

✅ 기본 구조 예시

 

 

🎨 사이드바에 폴더 이름 표시 예시

pages/분석/매출분석.py → 사이드바에 자동으로 분석/매출분석으로 뜹니다.
그렇기 때문에 폴더명을 기능별로 잘 나눠놓으면 깔끔하게 정리돼요.

 

1. 공통 코드 따로 관리하기 (utils/)

# utils/db.py
 
def get_data():
    return {"key": "value"}
# pages/분석/매출분석.py
 
import streamlit as st
from utils.db import get_data
data = get_data()
    st.write("데이터:", data)

반복되는 DB 연결, 그래프 함수 등은 utils/ 폴더에 모아두면 유지보수 GOOD 👍

 

2. 사이드바 커스터마이징 (선택적으로)

# 각 페이지 맨 위에
 
import streamlit as st
 
st.set_page_config(
    page_title="매출 분석",
    page_icon="📈",
    layout="wide"
)
st.sidebar.title("분석 도구")
 
 

3. 기본 홈 파일은 루트에 Home.py로!

Streamlit은 Home.py를 자동으로 첫 번째 페이지로 보여줘요.
홈 화면 또는 대시보드 용도로 활용하면 자연스러워요.

 

🧠 정리

  • pages/ 폴더에 서브폴더를 만들면 트리구조가 사이드바에 자동 반영
  • 공통 함수, 데이터 등은 utils/, data/ 폴더로 분리하면 구조가 깔끔해짐
  • set_page_config()로 각 페이지별 설정 가능 (타이틀, 아이콘 등)

'streamlit' 카테고리의 다른 글

button 메소드 success 메소드  (0) 2025.04.20

🧠 변수란?

변수는 값을 저장하는 이름표입니다.
파이썬에서는 자료형을 따로 지정하지 않고, 값을 할당하면 자동으로 변수의 타입이 결정돼요.

📦 변수 선언 방법 (기본형)

name = "철수"              # 문자열(String)
age = 25                      # 정수(Integer)
height = 172.5             # 실수(Float)
is_happy = True          # 불리언(Boolean)

🔍 타입 확인

print(type(age))
print(type(name))

🧪 변수의 주요 종류 (자료형)

자료형예시 값설명
int 10, -5, 0 정수
float 3.14, -1.2 실수
str (string) "안녕", 'Hi' 문자열
bool True, False 논리값
list [1, 2, 3] 여러 값을 순서대로 저장하는 리스트
tuple (1, 2, 3) 리스트와 비슷하지만 수정 불가능
dict {"이름": "철수"} 키-값 쌍으로 이루어진 딕셔너리
set {1, 2, 3} 중복 없는 집합 자료형

🧱 1. 리스트 (List)

여러 개의 값을 순서대로 저장할 수 있는 변수
[] 대괄호를 사용하며, 인덱스를 통해 접근 가능

fruits = ["사과", "바나나", "딸기"]
 
print(fruits[0]) # 사과
print(fruits[1]) # 바나나
 
# 요소 추가
fruits.append("포도")
 
# 반복 출력
for fruit in fruits:
    print(fruit)

🔑 2. 딕셔너리 (Dictionary)

키-값(Key-Value) 형태로 데이터를 저장하는 변수
{} 중괄호 사용

person = { "이름": "철수", "나이": 30, "직업": "개발자" }
print(person["이름"]) # 철수
 
# 값 변경
person["나이"] = 31
 
# 새 항목 추가
person["취미"] = "축구"
 
# 반복
for key, value in person.items():
print(key, ":", value)

 

📌 특징:

  • 순서 없음 (Python 3.7 이후는 입력 순서 유지됨)
  • 키는 고유해야 함 (중복 ❌)

🧙‍♂️ 3. 클래스 기반 변수 선언

객체(오브젝트)를 정의해서 데이터를 구조적으로 다룰 수 있음

클래스 만들기

class Student:
    def __init__(self, name, age):
        self.name = name        # 인스턴스 변수
        self.age = age
 
    def introduce(self):
        print(f"안녕하세요, 제 이름은 {self.name}이고 나이는 {self.age}살입니다.")

객체 생성 및 사용

s1 = Student("영희", 20)
s2 = Student("민수", 22)
 
print(s1.name)      # 영희
print(s2.age)         # 22
 
s1.introduce()
s2.introduce()

 

📌 특징:

  • __init__은 생성자 함수 (객체 만들 때 자동 실행)
  • self는 인스턴스 자신을 참조하는 키워드
  • 클래스는 복잡한 구조나 동작을 정의할 때 유용함

🛠️ 정리

유형사용 상황예시
리스트 순서가 중요할 때 쇼핑 목록, 숫자 목록
딕셔너리 키워드로 데이터 찾고 싶을 때 사용자 정보, 설정 값
클래스 여러 속성과 동작을 묶고 싶을 때 학생, 자동차, 게임 캐릭터 등

🔍 주의사항 

파이썬은 띄어쓰기가 중요해요 

함수나 객체선언 

문법사용시

탭으로 한칸 혹은 띄어쓰기 네칸 

요 규칙 안지키면 에러납니다 

 

우선 아래사이트로 가서 결재하고 API 키 라는걸 받아와야 해요

https://platform.openai.com/

 

1️⃣ OpenAI API 키 받기 (무료 가능)

GPT-4o-mini는 OpenAI의 API로 제공되므로, OpenAI 계정만 있으면 무료로 사용 가능해요.

🔹 API 키 발급 방법

  1. 👉 https://platform.openai.com/ 접속
  2. 로그인 또는 회원가입
  3. 오른쪽 상단 프로필 사진 클릭 → "View API Keys"
  4. "Create new secret key" 버튼 클릭
  5. 키 생성되면 복사! (sk-... 로 시작)

⚠️ 이 키는 한 번만 보여지니 꼭 안전한 곳에 복사해두세요!
무료 티어로도 일정량의 사용이 가능해요. (보통 매월 $5~$10 상당의 크레딧 제공)

 

 

그리고 파이썬으로 LLM과 연동하는 부분은 다음과 같아요

import os
import openai
from dotenv import load_dotenv

# .env 파일 로드
load_dotenv()

# 환경변수 가져오기
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')
OPENAI_DEFAULT_MODEL = os.getenv('OPENAI_DEFAULT_MODEL')
openai.api_key = OPENAI_API_KEY

print(OPENAI_API_KEY)
print(OPENAI_DEFAULT_MODEL)
 
# 표준적인 Chat completion mode
import openai
res = openai.chat.completions.create(
 model="gpt-4o-mini",
 messages=[{"role": "user", "content": "다음을 일본어로 번역하세요: 안녕하세요? 오늘 날씨가 참 좋네요!"}],
 temperature=0.5,
 max_tokens=256,
 top_p=1,
 frequency_penalty=0,
 presence_penalty=0
)

 

1 os 모듈하고 openai 모듈을 import 해야해요 이건 파이썬 기초

 

2. os.getenv() 로 시스템 환경변수에서 오픈AI키와 모델을 가져왔어요

- 환경변수에 적용하는 부분은 따로 설명 할 께요 

 

3. print 한 부분은 다 아시죠 변수 잘 가져왔는 지 테스트하려고 출력해본 거에요

 

4. res = openai.chat.completions.create(  

요 부분이 중요하죠 

으픈AI객체를 불러와서 사용하는 방법이에요 

그런데 버전이 올라가면서 객체 사용하는 방법이 변해서 챗지피티한테 물어보는데 자꾸 에러나더라고요

 

5.

🧩 파라미터 설명

파라미터의미사용 예시 및 팁
model 사용할 GPT 모델 이름 예: "gpt-4o-mini", "gpt-3.5-turbo", "gpt-4" 등
messages 대화 이력 (채팅 기록) 리스트 형식으로 구성: 각 메시지는 role(user, assistant, system)과 content 포함
temperature 창의성 조절 (0~2 사이) 낮을수록 예측 가능한 결과, 높을수록 창의적이고 다양한 결과
→ 0.5면 균형 잡힌 출력
max_tokens 응답의 최대 길이 출력되는 단어 조각(token) 수 제한 (256이면 대략 한글 기준 180~200자 정도)
top_p 확률 기반 필터링 (nucleus sampling) 1이면 전체 후보를 고려, 0.9면 상위 90% 확률에 해당하는 후보만 고려
frequency_penalty 반복 억제 정도 (-2.0 ~ 2.0) 높일수록 같은 문장이 반복되지 않게 조절
presence_penalty 새로운 주제 유도 (-2.0 ~ 2.0) 높일수록 새로운 단어나 주제를 사용하려고 함

 

🧪 예시로 보는 차이

temperature=0.2 # 매우 보수적이고 정답에 가까운 답변 temperature=1.0 # 더 자유롭고 창의적인 표현 가능
frequency_penalty=1.5 # 같은 말을 자꾸 반복하는 걸 방지 presence_penalty=1.2 # 좀 더 다양한 주제를 시도하도록 유도

📝 팁

  • temperature랑 top_p는 보통 하나만 조절하면 충분합니다.
  • 너무 짧은 응답을 피하려면 max_tokens를 좀 넉넉히 (예: 512 이상) 주는 것도 좋아요.
  • 자주 반복되는 말이 있다면 frequency_penalty를 1 이상으로 조정해 보세요.

6.  print(res.choices[0].message.content)   

그리고 요렇게 출력해봅니다

그럼 실행창에서 LLM에서 가져온 결과를 출력해줘요

[0] 은 파이썬에서 배열가져올 때 0 부터 가져오는 거라 첫번째 값인데요 

여러개면 0,1,2 이렇게 가져오면 되요 

 

print 는  실행화면에서 출력하는거고요

파이썬에서는 스트림릿이나 그라지오를 사용해서 UI(사용자 대화화면) 으로 출력해 볼 수 있어요 

 

'생성형AI프로그래밍' 카테고리의 다른 글

AI 에이전트란 ?  (1) 2025.04.19
파인튜닝 개념  (0) 2025.04.19
VectorDB 와 청크(Chunk) 에 대하여  (0) 2025.04.19
RAG 에 대해서  (0) 2025.04.19
생성형AI 개발자는 무얼하는 사람인가요  (0) 2025.04.16

🧠 sudo란?

**"superuser do"**의 줄임말
즉, 일반 사용자가 슈퍼유저(root) 권한을 잠깐 얻어서 명령을 실행하는 도구야.

리눅스는 기본적으로 일반 사용자가 시스템을 망치지 않도록 제약을 걸어두거든.
그래서 sudo를 써야만 아래 같은 작업이 가능해:

  • 시스템 소프트웨어 설치/삭제
  • 시스템 설정 파일 편집
  • 사용자 추가/삭제
  • 서비스 시작/정지 등

🔧 사용법

sudo [명령어]

예시:

sudo apt update
sudo rm -rf /var/log/somefile.log
sudo nano /etc/hosts

처음 실행할 때 비밀번호를 물어보는데,
👉 현재 로그인한 사용자의 비밀번호를 입력하는 거야. (root 비번 아님!)

 

🧍 사용자 확인 방법

🔍 현재 사용자 확인

whoami

🔍 현재 로그인한 모든 사용자

who

🔍 로그인 세션 정보 (시간/위치 포함)

w
 

👑 sudo 권한 있는 사용자 확인

1. sudo 그룹에 속해 있는 사용자 확인

getent group sudo
 

결과 예시:

getent group sudo

sudo:x:27: username
 

→ 여기 나오는 username이 sudo 권한 있는 사용자야.

 

🔁 다른 사용자로 전환 (예: root)

sudo su

이렇게 하면 root 쉘로 전환됨 → 프롬프트가 #로 바뀜

 

sudo su - ubuntu  하면 ubuntu 사용자로 전환

 

탈출하려면:

exit

 

✏️ 사용자에게 sudo 권한 주기

  1. 특정 사용자가 sudo 못 쓰고 있을 경우,
  2. root로 전환하거나 sudo 가능한 사용자가 아래처럼 추가:
sudo usermod -aG sudo username
  • -aG: 기존 그룹 유지하면서 sudo 그룹에 추가
  • username: 권한을 줄 대상 사용자명

📌 추가 후에는 로그아웃 → 로그인 다시 해야 적용돼!

 

📜 고급: /etc/sudoers 파일

  • 이 파일은 sudo 권한을 상세히 설정하는 파일이야.
  • 실수로 잘못 수정하면 시스템 먹통 위험! ⚠️
  • 수정할 땐 꼭 아래 명령어로!
     
     
    sudo visudo

🧰 apt는 Ubuntu에서 소프트웨어를 설치/업데이트/삭제하는 패키지 관리자야.

 

🧠 기본 개념

apt는 Advanced Package Tool의 줄임말이고, 소프트웨어 패키지를 쉽게 관리할 수 있게 도와주는 도구야.
Ubuntu나 Debian 계열에서만 사용하는 명령어고, 백그라운드에선 .deb 파일들을 깔아줘.

 

🛠️ 자주 쓰는 apt 명령어 요약표

명령어설명
sudo apt update 패키지 목록(버전, 위치 등) 최신 정보로 갱신
sudo apt upgrade 설치된 모든 패키지를 최신 버전으로 업그레이드
sudo apt install [패키지명] 원하는 소프트웨어 설치
sudo apt remove [패키지명] 소프트웨어 삭제 (설정 파일은 남음)
sudo apt purge [패키지명] 소프트웨어 완전히 삭제 (설정 파일 포함)
sudo apt autoremove 필요 없는 의존성 패키지들 자동 삭제
apt list --installed 설치된 패키지 목록 확인
apt search [이름] 설치 가능한 패키지 검색
apt show [패키지명] 해당 패키지 정보 보기 (설명, 의존성 등)

 

예시

 

    • 패키지 설치하기
       
      sudo apt install curl
    •  
    • 모든 패키지 최신화
      sudo apt update sudo apt upgrade
    •  
    • 특정 패키지 삭제
      sudo apt remove apache2
    •  
    • 자동 설치된 잔여물 제거
      sudo apt autoremove

🧽 팁: apt vs apt-get

둘 다 같은 역할을 하지만:

    • apt는 사용자 친화적, 요즘 추세
    • apt-get은 좀 더 세부 제어 가능하고, 스크립트에서 많이 씀

🧽 주의사항

sudo 는 수퍼유저로 해라 하는 명령어야 

그래서 해당 사용자 등록할 때 입력한 비밀번호를 물어볼 수 있어 

기억해 내야해 ^^

정 안되면 root 유저로 로그인해서 사용자삭제후 다시 만들거나 비밀번호를 변경하세요

root 유저나 다른 유저로 변경하는 명령어는 

sudo su - root

sudo su - 유저이름 

이에요 

 

'서버 셋팅' 카테고리의 다른 글

GITHUB 이해하기  (0) 2025.04.20
리눅스명령어 sudo 는 뭘까?  (0) 2025.04.19
VS code 비주얼스튜디오 + 파이썬 + 주피터노트북 개발환경 구축  (0) 2025.04.17
WSL2 설치  (0) 2025.04.17
GITHUB 설정  (0) 2025.04.17

서버환경은 wsl ubuntu 22.04 입니다

wsl + python + mysql 셋팅 해보려구해요 

 

요렇게 mysql서버 설치

sudo apt update
sudo apt install mysql-server -y

 

그리고 이렇게 서버 기동시킵니다 START 하는거에요

sudo service mysql start

 

그리고 요걸로 비밀번호랑 기타 설정하는거에요

sudo mysql_secure_installation

비밀번호 입력하고 나머지 설정 저는 영어 약해서 그냥 yes로 다 설정 ㅎㅎㅎ

 

그 다음 요렇게 MYSQL 접속 

sudo mysql -u root -p

그리고 비번 입력 비번 없으면 엔터 

 

그리고 나서 테이블 만들고 데이터베이스 운용하는 거죠 

 

 

 

 

 

git fetch origin
git reset --hard origin/main

 

요렇게 해보세요 

github 하고 내 꺼 하고 달라서 동기화 못하는 건데 내가 수정 부분을 날 릴수도 있다고 하네요

 

git fetch --all
git reset --hard origin/브랜치이름

 

git fetch --all
git reset --hard origin/main

 

1. 충돌(conflict)

    • 메시지: rejected because the remote contains work that you do not have
    • 해결:혹은 충돌 해결 후 커밋 → push
    • bash
      복사편집
      git pull --rebase

2. 인증 문제

      • 메시지: authentication failed
      • 해결:
        • GitHub이면 토큰 기반 로그인 필요
        • git remote -v로 remote URL 확인하고 토큰으로 인증

3. 브랜치 불일치

      • 메시지: fatal: The upstream branch does not exist
      • 해결:
      • bash
        복사편집
        git branch --set-upstream-to=origin/브랜치이름

4. permission 문제

    • 메시지: Permission denied (publickey)
    • 해결:
      • SSH 키 설정 문제일 수 있음
      • ssh -T git@github.com으로 테스트
      • 없으면 SSH 키 생성 후 GitHub에 등록

https://code.visualstudio.com/

 

Visual Studio Code - Code Editing. Redefined

Visual Studio Code redefines AI-powered coding with GitHub Copilot for building and debugging modern web and cloud applications. Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.

code.visualstudio.com

요 사이트에서 비주얼 스튜디오를 설치하세요

 

🧩 2단계: VS Code 설치 및 WSL 연동

✅ VS Code에 확장 기능 설치 (필수!)

  1. VS Code 실행
  2. 왼쪽 사이드바에서 🧩 Extensions (확장 기능) 클릭
  3. 아래 2개 검색해서 설치:
    • 🔌 Remote - WSL
    • 🐍 Python

이 두 개는 WSL 안에서 Python 개발하기 위한 핵심 확장이야.

 

 

🐍 4단계: Python 설치 (Ubuntu 안에)

Ubuntu 터미널에서 아래 입력:

 

두번 하세요

sudo apt update
 
sudo apt install python3 python3-pip -y

 

버전 확인:

python3 --version pip3 --version

 

 

📓 5단계: Jupyter Notebook 설치

  1. pip로 Jupyter 설치:
pip3 install notebook
  1. 실행 테스트:
jupyter notebook

http://localhost:8888 같은 주소가 나와!
브라우저에 복붙하면 주피터 노트북이 열려!

 

비주얼 스튜디오에서 바로 사용하면 편해요 

 

✨ 보너스: VS Code에서 .ipynb 직접 실행

  1. .ipynb 파일을 VS Code에서 열어
  2. 위쪽에 실행 버튼이 있어 (셀 단위 실행 가능!)
  3. Python 커널이 자동으로 연결될 거야

이 기능이 진짜 편해! 주피터랑 똑같이 쓸 수 있어.

'서버 셋팅' 카테고리의 다른 글

리눅스명령어 sudo 는 뭘까?  (0) 2025.04.19
apt 명령어 배우기  (0) 2025.04.19
WSL2 설치  (0) 2025.04.17
GITHUB 설정  (0) 2025.04.17
프로세스 확인하고 죽이기  (0) 2025.04.16

WSL이란?
"Windows 안에 Linux를 설치해서, 리눅스 명령어/환경을 그대로 쓸 수 있게 해주는 기술!"

윈도우에서 bash, apt, python, git, vim 같은 리눅스 도구를 그대로 사용할 수 있어요.

 

Windows 11 또는 10 최신 버전이라면:

  1. 명령 프롬프트(관리자 권한) 또는 PowerShell (관리자) 실행
    👉 시작 버튼 우클릭 > “Windows 터미널(관리자)” 클릭
  2. 아래 명령어 한 줄 입력:
wsl --install
 
혹은
 
제어판 > 프로그램 > 프로그램 및 기능 > Windows 기능 켜기 또는 끄기
Linux용 윈도우 하위시스템 켜기, 가상머신 플랫폼 켜기
재부팅후 MIcrosoft Store 에서 Ubuntu 로 검색 필요한 버전 (나는 22.04 설치) 설치
cmd.exe 실행 - 이건 윈도우 명령 프롬프트 창을 실행하라는 얘기입니다
 
wsl --install Ubuntu-22.04  (Ubuntu-22..04 버전으로 설치)
 
wsl -l -v 로 설치확인
 
wsl  명령으로 리눅스 콘솔 실행
 
종료는 exit 혹은 창 닫기
 
설치 후, 사용자 계정/비밀번호 설정하면 끝!
 
wsl --list --verbose  요거도 리눅스 설치 확인
 

개발자들이 WSL을 쓰는 이유

✅ 윈도우에서도 리눅스 기반 개발 가능
✅ VS Code랑 연동 (Remote WSL)
✅ Python, Node.js, Docker 다 편하게 씀
✅ GPU 연동까지 가능 (WSL2 + CUDA)

 

VS Code 설치하고 시작은 

 

code .

으로 시작 합니다.

 

요즘은 무조건 WSL2 쓰는 게 좋아요!

+ Recent posts