RAG 란 무엇입니까? 실제 예제를 통해 설명되는 검색 증강 생성

  1. 홈
  2. 블로그
  3. 인공지능

인공지능

RAG 란 무엇입니까? 실제 예제를 통해 설명되는 검색 증강 생성

RAG를 사용하면 AI 모델이 메모리가 아닌 사용자 문서에서 답변할 수 있습니다. 파이프라인이 어떻게 작동하는지 알아보고, 일반 Python에서 작은 버전을 실행하고, 실제 시스템이 실패하는 이유와 테스트 방법을 알아보세요.

읽는 시간 9분
RAG란 무엇인가요? 실제 사례를 통해 설명된 검색 증강 생성

핵심 요약

  • RAG은 먼저 관련 정보를 찾아서 프롬프트에 추가한 다음 모델에게 이에 대한 답변을 요청합니다.
  • 이는 언어 모델을 비공개 데이터 또는 자주 변경되는 데이터에 연결하는 일반적인 방법입니다.
  • 대부분의 품질 문제는 모델이 아닌 검색 및 데이터 준비에서 시작됩니다.
  • RAG는 ​​꾸며낸 답변을 줄이지만 없애지는 않으므로 테스트해야 합니다.

일반 AI 비서에게 회사의 환불 정책에 대해 물어보면 추측만 할 뿐입니다. 귀하의 문서를 본 적이 없습니다. 검색 증강 생성(Retrieval-Augmented Generation)의 약자인 RAG는 올바른 정보를 찾아 질문과 함께 모델에 전달하여 이 문제를 해결합니다.

이 가이드에서는 각 단계를 일반 언어로 설명한 다음 Python의 표준 라이브러리만 사용하여 작은 버전을 빌드합니다. 우리는 Python 3.13에서 해당 코드를 실행했으며 표시된 점수는 해당 실행에서 나온 것입니다. 언어 모델을 사용하지 않으므로 검색 및 프롬프트 구축을 보여주며 최종 답변 단계를 테스트하지 않았습니다.

RAG란 무엇인가요?

검색 증강 생성은 검색 단계와 언어 모델을 결합하는 기술입니다. 질문이 도착하면 시스템은 지식 소스를 검색하고 프롬프트에 최상의 결과를 추가한 다음 해당 자료를 기반으로 모델에 답변하도록 요청합니다.

오픈북 시험을 생각해 보세요. 비공개 책을 읽는 학생은 기억에 의존하므로 자신있게 기억을 잘못할 수도 있습니다. 오픈북 학생은 먼저 올바른 페이지를 찾아볼 수 있습니다. RAG는 ​​모델에게 해당 책을 제공하고, 어떤 페이지를 사용했는지 알려줍니다.

RAG가 해결하는 문제

언어 모델 자체에는 비즈니스 용도로 세 가지 제한이 있습니다.

  • 귀하의 개인 데이터를 알지 못합니다. 귀하의 정책, 티켓 및 계약은 교육의 일부가 아닙니다.
  • 알림에는 컷오프가 있습니다. 오늘 아침에 변경한 가격에 대해서는 알 수 없습니다.
  • 답을 만들어낼 수 있습니다. 확실하지 않을 때 그럴듯하면서도 거짓된 결과를 만들어낼 수 있습니다.

RAG는 ​​이 세 가지를 모두 다루므로 어떤 것도 재교육할 필요가 없습니다. 문서를 업데이트하고 다시 색인화하면 바로 다음 답변에서 사용할 수 있습니다.

RAG 작동 방식(단계별)

RAG 시스템에는 두 개의 파이프라인이 있습니다. 하나는 미리 데이터를 준비하고 다른 하나는 모든 질문에 대해 실행됩니다.

인덱싱: 데이터 준비

  1. 로드: PDF, 위키, 데이터베이스 또는 티켓에서 콘텐츠를 수집합니다.
  2. 정리 및 청크: 정크를 제거한 다음 문서를 작은 부분으로 나눕니다.
  3. 임베드: 각 구절을 해당 의미를 포착하는 임베딩이라고 하는 숫자 목록으로 변환합니다.
  4. 저장: 임베딩을 검색 가능한 인덱스(종종 벡터 데이터베이스)에 저장합니다.

질의: 질문에 대답하기

  1. 검색: 질문을 삽입하고 의미가 가장 가까운 구절을 찾습니다.
  2. 추가: 해당 구절을 프롬프트에 삽입하세요.
  3. 생성: 모델은 해당 컨텍스트를 사용하여 답변을 작성합니다.

검색에는 벡터를 사용할 필요가 없습니다. 데이터에 대한 올바른 정보를 찾는 것은 키워드 검색일 수도 있고 심지어 SQL 쿼리일 수도 있습니다.

작은 작업 예

움직이는 부분을 명확하게 보기 위해 라이브러리가 없는 작은 리트리버를 보여드리겠습니다. 텍스트를 실제 임베딩에 대한 훨씬 간단한 대체 방법인 단어 수로 표현하고 코사인 측정값을 사용하여 유사성 점수를 매깁니다.

import math, re
from collections import Counter

DOCS = {
    "refunds": "Refunds are paid within 7 days to the original payment method.",
    "shipping": "Standard shipping takes 3 to 5 working days across India.",
    "warranty": "All keyboards include a 2 year warranty against defects.",
}

def vectorize(text):
    return Counter(re.findall(r"[a-z0-9]+", text.lower()))

def similarity(a, b):
    dot = sum(a[word] * b[word] for word in a)
    size = math.sqrt(sum(v * v for v in a.values()))
    size *= math.sqrt(sum(v * v for v in b.values()))
    return dot / size if size else 0

def retrieve(question, k=1):
    q = vectorize(question)
    scored = [(similarity(q, vectorize(t)), name) for name, t in DOCS.items()]
    return sorted(scored, reverse=True)[:k]

def build_prompt(question):
    (score, name), = retrieve(question)
    return (
        "Answer using only the context. If it is not there, say you do not know.\n"
        f"Context: {DOCS[name]}\n"
        f"Question: {question}"
    )

환불에 대해 질문하면 올바른 구절을 찾고 다음 프롬프트가 생성됩니다.

print(retrieve("How many days until refunds are paid?"))
# [(0.4558..., 'refunds')]

print(build_prompt("How many days until refunds are paid?"))
# Answer using only the context. If it is not there, say you do not know.
# Context: Refunds are paid within 7 days to the original payment method.
# Question: How many days until refunds are paid?

전체 시스템에서는 이제 해당 프롬프트를 언어 모델로 보냅니다. 중요한 세부 사항은 답변이 누락되었을 때 이를 인정하라는 지침입니다. 이에 대한 자세한 내용은 신속한 엔지니어링 가이드에서 확인할 수 있습니다.

우리의 예가 놓친 것

이제 동일한 의미이지만 다른 단어를 사용하는 질문을 시도해 보세요.

print(retrieve("When can I get my money back?", k=3))
# [(0.0, 'warranty'), (0.0, 'shipping'), (0.0, 'refunds')]

질문이 어떤 문서와도 단어를 공유하지 않기 때문에 모든 점수는 0입니다. “환불”은 인간에게 환불을 의미하지만 단어 수로는 알 수 없습니다. 이 단일 출력은 실제 시스템이 유사한 단어가 없더라도 유사한 의미를 가진 텍스트가 비슷한 숫자로 끝나도록 설계된 임베딩을 사용하는 이유를 설명합니다.

하지만 임베딩이 모든 것을 해결한다고 가정하지 마세요. 키워드 검색이 매우 잘 처리되는 제품 코드 및 오류 번호와 같은 정확한 용어로 인해 어려움을 겪을 수 있습니다. 이것이 바로 많은 생산 시스템이 두 가지 접근 방식을 결합하여 하이브리드 검색을 사용하는 이유입니다.

청킹: 사람들이 과소평가하는 단계

전체 파일이 너무 길고 검색하기가 부정확하기 때문에 문서가 여러 개의 청크로 분할됩니다. 선택한 크기에는 실제 절충안이 포함됩니다.

청크 크기 장점 위험
너무 작음 정확한 일치 규칙이 적용되는 제품과 같은 컨텍스트를 잃습니다.
너무 큼 컨텍스트 유지 의미를 희석하고 프롬프트를 더 많이 사용합니다.
구조별로 분할 제목과 섹션을 존중합니다. 더 깨끗한 소스 문서가 필요합니다.

청크 사이에 약간 겹치는 수백 단어가 일반적인 시작점이지만 이를 테스트할 첫 번째 추측으로 간주합니다. 가능하면 제목과 같은 자연스러운 경계를 따라 분할하세요. 문서 제목, 날짜, 부서 등의 메타데이터를 첨부하면 결과를 필터링하고 출처를 인용할 수 있습니다.

검색 개선

답변이 좋지 않은 경우 시도해 볼 가치가 있는 업그레이드는 대략 다음과 같습니다.

  • 데이터를 정리합니다. 오래되고 중복된 문서를 먼저 제거하세요. 어떤 알고리즘도 모순되는 소스를 수정하지 않습니다.
  • 하이브리드 검색을 사용합니다. 의미 기반 검색결과와 키워드 검색결과를 결합합니다.
  • 재순위 지정자를 추가합니다. 더 많은 후보자를 가져온 다음 특수 모델을 사용하여 관련성에 따라 재정렬합니다.
  • 메타데이터로 필터링합니다. 검색하기 전에 제품, 지역 또는 날짜별로 결과를 제한합니다.
  • 쿼리를 다시 작성하세요. “두 번째는 어떻습니까?”와 같은 모호한 후속 조치를 취하세요. 완전한 질문으로.

팁: 모델을 비난하기 전에 실제로 어떤 검색 결과가 반환되었는지 살펴보세요. 문맥에 맞는 구절이 없다면 어떤 모델도 그 구절에서 정확하게 대답할 수 없었을 것입니다.

RAG 대 미세 조정

질문 걸레 미세 조정
그것은 무엇을 추가합니까? 질문 시간의 지식 훈련된 행동이나 스타일
정보 업데이트 중 문서 다시 색인화 다시 훈련
출처를 인용할 수 있나요? 예 안정적이지 않음
다음에 가장 적합 변화하는 사실 일관된 형식이나 톤

그것들은 상호 배타적이지 않습니다. RAG, 미세 조정 및 신속한 엔지니어링을 비교하여 더 깊이 있는 선택 방법을 다룹니다.

RAG 시스템을 테스트하는 방법

RAG는 소프트웨어이므로 다른 소프트웨어와 마찬가지로 테스트가 필요합니다. 예상되는 구절 및 답변과 함께 일련의 실제 질문을 만든 다음 두 단계를 개별적으로 측정하십시오.

무대 물어볼 질문 일반 이름
검색 올바른 구절을 가져왔나요? 상황 회상
검색 우리가 가져온 것 중 얼마나 유용했습니까? 상황 정밀도
세대 답변이 문맥에 의해 뒷받침됩니까? 충실함
세대 실제로 질문에 대답합니까? 답변 관련성

데이터에 답이 없는 질문, 다른 표현을 사용하는 질문, 소스가 충돌하는 질문 등 어색한 경우도 포함하세요. 회귀 세트처럼 청크, 모델 또는 프롬프트를 변경할 때마다 이 세트를 다시 실행하십시오. 우리의 pytest 튜토리얼은 단일 테스트를 통해 많은 입력을 실행하는 방법을 보여줍니다.

RAG 시스템이 실패하는 이유

  • 답은 데이터에 없습니다. 모델은 여전히 시도할 수 있으므로 거절하는 방법을 알려주세요.
  • 올바른 청크가 검색되지 않았습니다. 이는 청크 또는 검색 문제인 경우가 많습니다.
  • 맥락이 너무 많습니다. 관련 없는 구절은 모델의 주의를 산만하게 하고 비용을 증가시킬 수 있습니다.
  • 낡은 문서. 오래된 정책도 현재 정책만큼 확실하게 검색할 수 있습니다.
  • 테이블과 PDF가 잘못 구문 분석되었습니다. 추출로 인해 텍스트가 뒤섞이면 검색이 결코 복구되지 않습니다.
  • 데모 질문만으로 테스트합니다. 실제 사용자는 내용을 매우 다르게 표현합니다.

보안 및 권한

RAG는 놓치기 쉬운 두 가지 위험을 가져옵니다. 첫째, 액세스 제어: 인덱스에 HR 파일이 포함된 경우 하급 직원의 질문으로 해당 파일을 검색하면 안 됩니다. 모델에 비밀을 유지하도록 지시하는 것은 신뢰할 수 있는 보호 장치가 아니기 때문에 검색 중에 각 사용자의 권한을 적용하십시오.

둘째, 즉시 주입. 검색된 웹페이지나 문서에는 “지침 무시”와 같은 텍스트가 포함될 수 있습니다. 검색된 콘텐츠를 신뢰할 수 없는 데이터로 취급하고, 모델이 수행할 수 있는 작업을 제한하고, 민감한 작업을 사람이 승인하도록 요구합니다.

마무리

RAG는 ​​실용적인 세부 사항이 많이 포함된 간단한 아이디어입니다. 올바른 정보를 찾은 다음 모델에 이를 사용하도록 요청합니다. 작고 깔끔한 문서 세트와 약 20개의 실제 질문으로 시작하세요. 복잡성을 추가하기 전에 검색이 제대로 작동하도록 하세요. 좋은 데이터가 포함된 적당한 파이프라인이 일반적으로 잘못된 데이터가 포함된 정교한 파이프라인보다 우수하기 때문입니다.

자주 묻는 질문

AI에서 RAG는 무엇을 의미하나요?

RAG는 ​​검색 증강 생성(Retrieval-Augmented Generation)을 의미합니다. 시스템은 관련 정보를 검색하여 프롬프트에 추가하고, 모델은 이로부터 답변을 생성합니다.

RAG는 ​​AI 환각을 멈추나요?

모델에 실제 소스를 제공하여 이를 줄이지만 제거하지는 않습니다. 모델은 여전히 ​​맥락을 잘못 읽을 수 있으므로 답변을 테스트하고 인용을 표시하세요.

RAG용 벡터 데이터베이스가 필요합니까?

항상 그런 것은 아닙니다. 소규모 프로젝트에서는 메모리 내 인덱스, 키워드 검색 또는 SQL을 사용할 수 있습니다. 벡터 데이터베이스는 대규모 컬렉션과 의미 기반 검색에 도움이 됩니다.

RAG와 미세 조정의 차이점은 무엇입니까?

RAG는 ​​질문 시간에 정보를 제공하므로 업데이트가 빠릅니다. 미세 조정은 모델을 훈련하여 동작이나 스타일을 변경하므로 사실을 변경하는 데는 적합하지 않습니다.

임베딩이란 무엇입니까?

임베딩은 텍스트의 의미를 나타내는 숫자 목록입니다. 의미가 유사한 구절은 비슷한 번호를 가지므로 의미 기반 검색이 가능합니다.

계속 학습하세요

Stack Quora와 작업

테스트, WordPress 또는 SEO에 도움이 필요하십니까?

우리는 팀이 더 나은 소프트웨어를 출시하고 사이트를 성장시킬 수 있도록 돕습니다. 현재 진행 중인 작업을 알려주시면 명확한 다음 단계를 제안해 드리겠습니다.

계속 읽으세요

추가 가이드 테스트, AI 및 최신 개발

이 기사가 마음에 드셨나요? 주제를 선택하고 최신 튜토리얼로 바로 이동하세요.

인공지능

AI 환각 설명: 언어 모델이 사물을 구성하는 이유와 이를 줄이는 방법

AI 환각은 그것이 무엇인지, 언어 모델이 환각을 생성하는 이유, 일반적인 유형, 접지 및 프롬프트를 통해 환각을 줄이는 방법, 그리고 우리가 실행한 간단한 점검에 대해 설명했습니다.

기사 읽기 →
DevOps

환경 변수 설명: .env 파일, 비밀 및 구성이 올바르게 완료되었습니다.

우리가 실행한 Python 예제를 통해 설명된 환경 변수: 읽기 및 설정, 모든 값이 문자열인 이유, .env 파일, 프로세스 상속, 비밀 및 유효성 검사.

기사 읽기 →
소프트웨어 개발

API 속도 제한 설명: 알고리즘, 헤더 및 429 오류 처리

우리가 실행한 시뮬레이션을 통해 설명된 API 속도 제한: 토큰 버킷, 고정 창, 슬라이딩 창, 429 응답, 속도 제한 헤더, 백오프를 사용한 재시도 및 테스트 제한.

기사 읽기 →
테스트 자동화

Python에서 조롱: unittest.mock, 패치 및 테스트를 거짓말로 만드는 실수

Unittest.mock을 사용하여 Python에서 모의, 테스트됨: 모의 및 return_value, 부작용, 이름이 사용되는 패치, 사양 및 자동 사양, 모의 날짜 및 일반적인 실수.

기사 읽기 →
소프트웨어 테스트

코드 커버리지 설명: 회선 커버리지와 분기 커버리지 및 100%의 실제 의미

실제 Coverage.py 실행을 통해 설명되는 코드 적용 범위: 라인, 분기 및 조건 적용 범위, 보고서 읽기, 100% 적용 범위가 여전히 버그를 놓칠 수 있는 이유 및 합리적인 대상.

기사 읽기 →
데이터베이스 및 SQL

SQL의 DELETE vs TRUNCATE vs DROP: 차이점, 롤백 및 사용 시기

테스트된 SQL을 통해 DELETE 대 TRUNCATE 대 DROP에 대해 설명합니다. 각각의 제거, 롤백, 트리거, ID 재설정, 속도 및 PostgreSQL, MySQL, SQL Server 및 SQLite의 차이점.

기사 읽기 →
데이터베이스 및 SQL

SQL 뷰 설명: 예제를 통해 함정 생성, 사용 및 방지

우리가 실행한 쿼리로 설명된 SQL 뷰: 뷰 생성, 실시간 결과, 열 숨기기, 성능, 업데이트 가능하고 구체화된 뷰, 손상된 종속성 및 모범 사례.

기사 읽기 →
소프트웨어 개발

TypeScript 인터페이스와 유형: 실제 차이점, 컴파일러로 테스트

TypeScript 인터페이스 대 유형, 실제 컴파일러로 확인: 둘 다 할 수 있는 것, 하나만 할 수 있는 것, 선언 병합, 확장 대 교차점 및 따라야 할 간단한 규칙.

기사 읽기 →
소프트웨어 개발

Python *args 및 **kwargs 설명: 명확한 예가 포함된 유연한 함수

Python *args 및 **kwargs는 우리가 실행한 코드(패킹 및 언패킹, 매개변수 순서, 키워드 전용 및 위치 전용 인수, 데코레이터 및 일반적인 오류)를 설명했습니다.

기사 읽기 →
소프트웨어 개발

Python Lambda 함수: 구문, 실제 사용 및 사용하지 말아야 할 경우

Python 람다 함수는 구문, 키를 사용한 정렬, 맵 및 필터, 클로저, 후기 바인딩 트랩, 일반 def가 더 나은 선택인 경우 등 우리가 실행한 코드로 설명되었습니다.

기사 읽기 →
인공지능

AI 에이전트란 ​​무엇입니까? 작동 방식, 간단한 에이전트 루프를 사용하여 실행할 수 있음

AI 에이전트란 무엇입니까? 우리가 실행한 작은 Python 루프, 실제 위험 및 간단한 챗봇이 더 나은 선택일 때 에이전트 루프, 도구, 메모리 및 가드레일에 대한 일반 가이드입니다.

기사 읽기 →
DevOps

모니터링과 관찰 가능성: 로그, 지표, 추적을 통한 실제 차이점

모니터링과 관찰 가능성 설명: 알려진 오류와 알려지지 않은 오류, 로그, 지표 및 추적, 결제 사건 안내, 골든 신호, OpenTelemetry 및 유용한 경고.

기사 읽기 →
DevOps

Docker 볼륨과 바인딩 마운트: 컨테이너 데이터를 올바른 방식으로 유지

Docker 볼륨과 바인드 마운트 설명: 컨테이너 데이터가 사라지는 이유, 명명된 볼륨, 바인드 마운트, tmpfs, Compose 예제, 백업, 권한 및 각 사용 시기.

기사 읽기 →
테스트 자동화

TDD와 BDD: 주요 차이점, 두 가지 방식으로 구축된 하나의 기능 및 각 사용 시기

TDD와 BDD는 두 가지 방식으로 구축된 하나의 할인 기능, 즉 우리가 실행한 코드를 사용한 적록 리팩토링, 주어진 시점 시나리오, 도구, 장단점 및 각 사용 시기를 설명합니다.

기사 읽기 →
소프트웨어 테스트

UAT(사용자 승인 테스트): 프로세스, 체크리스트 및 실제 사례

사용자 승인 테스트는 누가 실행하는지, QA와 어떻게 다른지, 7단계 프로세스, UAT 테스트 사례 템플릿, 체크리스트, 승인 기준 및 일반적인 실수에 대해 설명했습니다.

기사 읽기 →
데이터베이스 및 SQL

SQL NULL 값 설명: IS NULL, COALESCE, NULLIF 및 피해야 할 함정

우리가 실행한 쿼리를 통해 설명된 SQL NULL 값: 3개 값 논리, IS NULL, COALESCE, NULLIF, 집계, 조인 및 정렬이 NULL을 처리하는 방법 및 조용히 발생하는 버그.

기사 읽기 →
데이터베이스 및 SQL

SQL CASE WHEN 문: 구문, 실제 예 및 일반적인 실수

우리가 실행한 쿼리로 설명된 SQL CASE: 단순 및 검색 양식, 조건 순서, SUM이 있는 피벗, COUNT 트릭, 사용자 정의 정렬, 업데이트 및 피해야 할 NULL 트랩.

기사 읽기 →
소프트웨어 개발

JWT란 무엇입니까? 실제 예제로 설명되는 JSON 웹 토큰

JWT란 무엇입니까? JSON 웹 토큰은 세 부분, 즉 우리가 실행한 코드에서 구축 및 변조된 토큰, JWT 대 세션, 저장소, 새로 고침 토큰 및 보안 실수를 설명했습니다.

기사 읽기 →
소프트웨어 개발

JavaScript 이벤트 루프 설명: 예제가 포함된 호출 스택, 마이크로태스크 및 타이머

호출 스택, 작업 및 마이크로태스크 대기열, setTimeout 0이 즉시 실행되지 않는 이유, 차단, 기아 및 인터뷰 퀴즈 등 우리가 실행한 코드로 JavaScript 이벤트 루프를 설명했습니다.

기사 읽기 →
소프트웨어 개발

Python 생성기 및 수율 설명: 실제 예제로 메모리 절약

Python 생성기와 항복은 우리가 실행한 코드로 설명됩니다. 일시 중지 및 재개 방법, 측정된 메모리 절약, 파이프라인, 무한 시퀀스, 항복, 전송 및 공통 트랩.

기사 읽기 →
인공지능

임베딩이란 무엇입니까? 벡터와 코사인 유사성을 간단하게 설명

임베딩이란 무엇입니까? 벡터, 코사인 유사성 및 의미론적 검색에 대한 일반 언어 가이드로, 우리가 실행한 작은 예, 일반적인 용도, 모델 선택 및 알려진 한계를 제공합니다.

기사 읽기 →
DevOps

블루-그린 배포와 카나리아 배포: 차이점, 장단점 및 선택 방법

블루-그린 배포와 카나리아 배포에 대한 설명: 각각의 작동 방식, 비용, 위험 및 롤백, 테스트한 안정적인 사용자 버킷팅, 데이터베이스 마이그레이션, 롤링 업데이트 및 선택 방법.

기사 읽기 →
테스트 자동화

불안정한 테스트: 원인과 해결 방법

우리가 실행한 데모를 통해 불안정한 테스트에 대해 설명했습니다. 주요 원인, 확인 및 진단 방법, 시기, 공유 상태 및 날짜, 격리 프로세스에 대한 적절한 수정 사항.

기사 읽기 →
소프트웨어 테스트

부하 테스트와 스트레스 테스트 비교: 차이점, 측정항목 및 k6 예

부하 테스트와 스트레스 테스트 비교 설명: 각각의 증명, 스파이크 및 흡수 테스트, 중요한 측정항목, 평균이 잘못된 이유, k6 예 및 테스트 계획 방법.

기사 읽기 →
소프트웨어 테스트

테스트 케이스와 테스트 시나리오: 주요 차이점, 예 및 각각의 사용 시기

테스트 케이스와 테스트 시나리오 설명: 명확한 정의, 병렬 테이블, 시나리오에서 케이스로 가져온 하나의 비밀번호 재설정 기능, 템플릿 및 각 사용 시기.

기사 읽기 →
데이터베이스 및 SQL

SQL 쿼리 최적화: 타이밍에 따라 실행 계획을 읽고 느린 쿼리를 수정합니다.

백만 개의 행에서 테스트된 SQL 쿼리 최적화: 실행 계획 읽기, 올바른 인덱스 추가, 분할할 수 없는 필터 수정, 복합 인덱스 및 키 세트 페이지 매김 사용.

기사 읽기 →
데이터베이스 및 SQL

SQL UNION 대 UNION ALL: 테스트된 차이점, 예 및 성능

SQL UNION과 UNION ALL은 우리가 실행한 쿼리(중복, 둘 다 따르는 규칙, 실제 데이터 버그, 측정된 성능, INTERSECT 및 EXCEPT, 각각의 사용 시기)를 설명합니다.

기사 읽기 →
소프트웨어 개발

JavaScript Fetch API 튜토리얼: GET, POST, 오류 처리 및 시간 초과

로컬 서버에 대해 테스트된 JavaScript Fetch API 튜토리얼: GET 및 POST, 404가 발생하지 않는 이유, 재사용 가능한 도우미, 쿼리 문자열, 시간 초과, CORS 및 일반적인 실수.

기사 읽기 →
소프트웨어 개발

Python 파일 처리: 읽기, 쓰기, CSV, JSON 및 pathlib 예제 포함

우리가 실행한 코드로 설명된 Python 파일 처리: 개방형 모드, 대용량 파일 읽기, CSV, JSON, pathlib, 바이너리 파일, 안전한 쓰기, 오류 처리 및 일반적인 실수.

기사 읽기 →
소프트웨어 개발

Python 클래스 및 객체: 실제 예제가 포함된 OOP 튜토리얼

우리가 실행한 코드로 설명된 Python 클래스와 객체: __init__, 메소드, 클래스 대 인스턴스 속성, 상속, 속성, 던더 메소드, 데이터 클래스 및 일반적인 실수.

기사 읽기 →
인공지능

대규모 언어 모델이란 무엇입니까? LLM의 작동 방식, 과대광고 없이 설명

대규모 언어 모델이란 무엇입니까? LLM은 토큰, 임베딩, 주의, 훈련, 온도 및 컨텍스트 창, 작은 다음 단어 데모 및 실제 한계 등 일반 언어로 설명됩니다.

기사 읽기 →
DevOps

초보자를 위한 Linux 명령: 예제가 포함된 필수 터미널 가이드

탐색, 파일, 로그 보기, grep, 파이프, 권한, 프로세스 및 아카이브 등 작업별로 그룹화된 초보자를 위한 Linux 명령과 실용적인 로그 분석 예제가 포함되어 있습니다.

기사 읽기 →
테스트 자동화

셀레늄 대 극작가: 주요 차이점, 코드 비교 및 선택할 항목

Selenium과 Playwright 비교: 아키텍처, 대기, 브라우저 및 언어 지원, 디버깅, 두 도구 모두에서 동일한 테스트, 마이그레이션 조언 및 선택 방법.

기사 읽기 →
소프트웨어 테스트

등가 분할: 실제 예제를 통해 설명되는 테스트 설계 기법

등가 분할 설명: 유효한 파티션과 유효하지 않은 파티션을 찾는 방법, 연령, 비밀번호 및 쿠폰에 대한 작업 예제, 실행한 테스트, 경계와 쌍을 이루는 이유.

기사 읽기 →
소프트웨어 테스트

소프트웨어 테스팅의 심각도와 우선순위: 차이점, 매트릭스 및 실제 사례

소프트웨어 테스팅의 심각도와 우선순위에 대한 설명: 명확한 정의, 예제가 포함된 4방향 매트릭스, 수준 척도, 각 항목을 설정하는 사람 및 버그 분류 실행 방법.

기사 읽기 →
데이터베이스 및 SQL

SQL 하위 쿼리 자습서: 유형, 상관 하위 쿼리 및 EXISTS(예제 포함)

스칼라, IN, FROM 및 SELECT 하위 쿼리, 상관 하위 쿼리, EXISTS, NOT IN NULL 트랩 및 하위 쿼리 대 JOIN 대 CTE 등 우리가 실행한 쿼리가 포함된 SQL 하위 쿼리 자습서입니다.

기사 읽기 →
데이터베이스 및 SQL

SQL 트랜잭션 및 ACID 설명: COMMIT, ROLLBACK 및 격리 수준

COMMIT, ROLLBACK, 저장점, 잠금, 격리 수준, 더티 읽기, 교착 상태 및 모범 사례 등 우리가 실행한 은행 이체를 통해 SQL 트랜잭션 및 ACID를 설명했습니다.

기사 읽기 →
소프트웨어 개발

Git 명령 치트 시트: 실제로 사용하는 명령과 예제

실제 데모 저장소의 출력과 함께 설정, 준비, 분기, 원격, 숨김, 기록 및 실행 취소 실수 등 작업별로 그룹화된 Git 명령 치트 시트입니다.

기사 읽기 →
소프트웨어 개발

JavaScript Promises 설명: then, catch, Promise.all 및 일반적인 실수

우리가 실행한 코드로 설명된 JavaScript Promise: 상태, then 및 catch 체인, 오류 처리, Promise.all, allSettled, race 및 기타, 이벤트 루프 및 일반적인 실수.

기사 읽기 →
소프트웨어 개발

Python 사전 튜토리얼: 방법, 예제 및 일반적인 패턴

우리가 실행한 코드가 포함된 Python 사전 튜토리얼: 사전 생성, 읽기 및 업데이트, 주요 방법, 병합, 이해, 패턴 계산 및 그룹화, 일반적인 실수.

기사 읽기 →
인공지능

RAG 란 무엇입니까? 실제 예제를 통해 설명되는 검색 증강 생성

RAG란 무엇인가요? 검색 증강 생성은 인덱싱, 청킹, 임베딩, 검색, 소규모로 작동하는 Python 예제, 평가 및 일반적인 실패 등 단계별로 설명됩니다.

기사 읽기 →
DevOps

초보자를 위한 Terraform 튜토리얼: 첫 번째 파일부터 모듈까지 코드로서의 인프라

초보자를 위한 Terraform 튜토리얼: 클라우드 계정 없이 시작하여 초기화, 계획 및 적용을 배우고 변수, 출력, 상태, 모듈 및 안전한 팀 워크플로를 학습합니다.

기사 읽기 →
DevOps

Docker와 Kubernetes: 주요 차이점, 함께 작동하는 방식 및 필요한 사항

Docker와 Kubernetes에 대한 설명: 각각의 기능, 동일한 앱이 두 가지 모두에서 실행됨, Docker Compose와 Swarm 비교, dockershim 변경 사항 및 필요한 사항을 결정하는 방법.

기사 읽기 →
테스트 자동화

초보자를 위한 Pytest 튜토리얼: 고정 장치, 매개변수화 및 실제 예제

pytest 9.2에서 실행한 테스트(어설션, 픽스쳐, 매개변수화, conftest, 마커, tmp_path, Monkeypatch, 유용한 플래그 및 CI)가 포함된 초보자를 위한 pytest 튜토리얼입니다.

기사 읽기 →
소프트웨어 테스트

소프트웨어 테스팅 라이프사이클(STLC): 6단계, 시작 및 종료 기준, 예

소프트웨어 테스팅 수명주기는 시작 및 종료 기준, 결과물, 작업된 로그인 기능 예, STLC 대 SDLC 및 Agile의 STLC를 포함하는 6개의 STLC 단계를 설명합니다.

기사 읽기 →
소프트웨어 개발

Git merge vs rebase: 차이점, 예제, 언제 무엇을 쓸까

Git merge vs rebase를 실제 로그 출력, 비교표, rebase의 황금률, 안전한 팀 워크플로로 설명합니다.

기사 읽기 →
소프트웨어 개발

파이썬 리스트 컴프리헨션: 문법, 예제, 피해야 할 때

파이썬 리스트 컴프리헨션 설명: 문법, 필터링, if-else, 중첩 반복문, 실제 측정 시간, 그리고 일반 for 반복문이 더 나은 경우.

기사 읽기 →
데이터베이스 및 SQL

예제로 쉽게 배우는 SQL JOIN (Inner, Left, Right, Full)

샘플 테이블과 쿼리로 SQL JOIN을 단계별로 이해하세요. INNER, LEFT, RIGHT, FULL, CROSS, SELF와 흔한 실수, 성능 팁까지 정리했습니다.

기사 읽기 →