- 블루-그린은 두 개의 전체 환경을 유지하고 모든 트래픽을 한 번에 전환합니다.
- 카나리아는 먼저 소수의 사용자에게 새 버전을 보낸 다음 점차적으로 확장합니다.
- 청록색은 매우 빠른 롤백을 제공합니다. Canary는 잘못된 릴리스가 영향을 미칠 수 있는 사용자 수를 제한합니다.
- 둘 다 이전 버전과 호환되는 데이터베이스 변경 및 우수한 모니터링에 의존합니다.
유지 관리 기간 및 교차 손가락을 의미하는 데 사용되는 소프트웨어 출시. 현대 팀은 릴리스를 일상적으로 만드는 전략을 사용하며, 블루-그린 배포와 카나리아 배포 선택은 가장 먼저 직면하게 되는 선택 중 하나입니다. 둘 다 위험을 줄이지만 반대 방식으로 수행합니다. 하나는 전체 교체를 준비하고 다른 하나는 실제 사용자를 대상으로 한 번에 조금씩 테스트합니다.
이 가이드에서는 각각의 작동 방식과 실제 비용을 설명합니다. Python 3.13에서 소규모 사용자 라우팅 및 롤백 예제를 실행했으며 해당 실행에서 출력이 나왔습니다. Kubernetes 샘플은 설명을 위한 것이며 우리는 이를 실행하지 않았습니다. 백분율과 임계값을 적응할 시작 사례로 간주합니다.
짧은 대답
블루-그린 배포를 사용하면 두 개의 동일한 프로덕션 환경을 실행합니다. 하나는 사용자에게 서비스를 제공하고 다른 하나는 새 버전을 배포하고 테스트한 다음 한 번에 모든 트래픽을 전환합니다.
카나리아 배포를 사용하면 새 버전이 이전 버전 옆에서 실행됩니다. 실제 트래픽의 작은 비율을 전송하고, 결과를 비교하고, 모든 사람에게 서비스가 제공될 때까지 공유를 단계적으로 늘립니다. 이 이름은 한때 위험에 대한 조기 경고로 사용되었던 카나리아 광부에서 유래되었습니다.
청록색과 카나리아가 나란히 있는 모습
| 측면 | 청록색 | 카나리아 |
|---|---|---|
| 교통교대 | 한꺼번에 | 점진적 |
| 잘못된 릴리스에 노출된 사용자 | 다시 전환할 때까지 전체 | 카나리아만 공유 |
| 롤백 | 트래픽을 다시 전환 | 카나리아 공유를 0으로 설정 |
| 릴리스 속도 | 빠른 전환 | 단계적으로 천천히 |
| 인프라 비용 | 출시 기간 동안 최대 2배 | 작은 추가 공유 |
| 트래픽 라우팅이 필요함 | 간단한 스위치 | 백분율 기반 라우팅 |
| 모니터링 필요 | 좋음 | 훌륭함, 버전별 측정항목 포함 |
| 여러 버전이 함께 사용됨 | 간략하게 말하자면 | 전체 출시에 대해 |
| 정식 출시 전 실제 사용자 피드백 | 아니요 | 예 |
블루-그린 배포 작동 방식
- 블루는 실시간이며 모든 트래픽을 제공합니다.
- 사용자 트래픽을 수신하지 않는 green에 새 버전을 배포합니다.
- 연기 테스트와 내부 사용자를 사용하여 실제 생산 환경에서 친환경성을 철저하게 테스트합니다.
- 라우터, 로드 밸런서 또는 DNS를 전환하여 트래픽을 녹색으로 보냅니다.
- 파란색이 계속 실행되고 준비되어 있는지 자세히 살펴보세요.
- 문제가 있으면 다시 전환하세요. 모든 것이 괜찮다면 파란색이 다음 유휴 환경이 됩니다.
Kubernetes에서는 서비스 선택기를 변경하여 전환을 수행할 수 있으므로 트래픽은 다르게 라벨이 지정된 Pod로 이동됩니다.
apiVersion: v1
kind: Service
metadata:
name: shop
spec:
selector:
app: shop
version: green # was: blue
ports:
- port: 80
targetPort: 8000
강점: 개념적으로 간단합니다. 사용자가 보기 전에 정확한 프로덕션 설정을 테스트할 수 있으며 롤백이 거의 즉각적입니다. 약점: 중복된 인프라는 비용이 많이 들 수 있고, 테스트를 통과하지 못한 버그는 모든 사람에게 동시에 영향을 미치며, 전환 중에 공개 세션과 진행 중인 작업에 주의가 필요합니다. 스위치에 DNS를 사용하는 경우 캐시된 레코드로 인해 스위치가 지연될 수 있습니다. 개념이 처음이신가요? 초보자를 위한 Kubernetes 튜토리얼을 참조하세요.
카나리아 배포 작동 방식
- 안정적인 버전과 함께 새 버전을 배포합니다.
- 트래픽의 작은 부분(예: 5%)을 카나리아로 라우팅합니다.
- 안정적인 버전과 오류율, 대기 시간 및 비즈니스 지표를 비교하세요.
- 정상이면 25%, 50%, 100%로 증가합니다.
- 성능이 저하되면 모든 트래픽을 안정적인 버전으로 다시 보내세요.
많은 팀이 내부 직원, 위험도가 낮은 지역, 그리고 더 넓은 대중과 함께 카나리아를 시작합니다.
장점: 잘못된 릴리스는 소규모 그룹에만 영향을 미치며 실제 트래픽을 통해 어떤 테스트 환경도 완전히 재현할 수 없다는 사실을 배웁니다. 약점: 백분율 기반 라우팅 및 버전별 측정항목이 필요하고 출시에 더 오랜 시간이 걸리며 한동안 두 버전이 함께 실행됩니다. 작은 카나리아는 특히 교통량이 적은 시간에 의미 있는 신호를 보내기에는 너무 조용할 수도 있습니다.
안정적인 사용자 라우팅
요청이 있을 때마다 무작위로 버전을 선택하면 사용자가 이전 버전과 새 버전 사이를 오갈 수 있어 혼란스러운 경험을 하게 됩니다. 일반적인 솔루션은 안정적인 사용자 ID를 버킷에 해시하여 각 사용자가 항상 동일한 답변을 얻는 것입니다.
import hashlib
def bucket(user_id):
digest = hashlib.sha256(user_id.encode()).hexdigest()
return int(digest, 16) % 100
def version_for(user_id, canary_percent):
return "v2" if bucket(user_id) < canary_percent else "v1"
users = [f"user-{i}" for i in range(10000)]
for percent in (5, 25, 50, 100):
share = sum(version_for(u, percent) == "v2" for u in users) / len(users)
print(percent, round(share * 100, 1))
# 5 5.0
# 25 24.5
# 50 49.9
# 100 100.0
실제 점유율은 목표치를 바짝 추종했습니다. 이 방법에는 두 가지 유용한 속성이 더 있으며, 우리의 실행에서는 두 가지를 모두 확인했습니다. 동일한 사용자는 항상 동일한 버전을 받았습니다. 그리고 5% 그룹의 모든 사람은 여전히 25%에 포함되어 있으므로 이미 새 버전을 갖고 있는 사람은 롤아웃이 커짐에 따라 다시 돌아오지 않았습니다.
실제 시스템에서는 일반적으로 서비스 메시, 로드 밸런서 또는 Argo Rollouts나 Flagger와 같은 도구가 이 라우팅을 처리하므로 직접 작성할 필요가 없습니다. 그들이 무엇을 하고 있는지 이해하는 것은 여전히 도움이 됩니다.
결정 자동화
카나리아는 누군가가 실제로 버전을 비교하는 경우에만 작동합니다. 사람이 그래프를 보는 것보다 자동 점검이 더 신뢰성이 높습니다. 다음은 카나리아의 오류율을 안정 버전의 오류율과 비교하는 핵심 아이디어입니다.
def should_rollback(canary_errors, canary_total, base_errors, base_total,
tolerance=1.5, min_requests=500):
if canary_total < min_requests:
return False # not enough data to decide
return (canary_errors / canary_total) > (base_errors / base_total) * tolerance
should_rollback(3, 100, 10, 5000) # False: too few requests
should_rollback(30, 1000, 100, 10000) # True: 3% against 1%
should_rollback(12, 1000, 100, 10000) # False: 1.2% is within tolerance
첫 번째 경우에 주목하세요. 오류율이 높아 보이지만 요청이 100개에 불과해 아직 증거가 충분하지 않습니다. 실제 도구는 보다 신중한 통계를 적용하고 여러 신호를 함께 살펴봅니다.
| 신호 | 예 |
|---|---|
| 오류 | 5xx 응답률 |
| 대기 시간 | p95 및 p99(부하 테스트와 스트레스 테스트 참조) |
| 채도 | CPU, 메모리, 연결 풀 |
| 비즈니스 | 가입, 결제, 결제 성공 |
팁: 지난주 수치가 아닌 동일한 기간 동안 카나리아를 안정 버전과 비교하세요. 트래픽과 행동은 시간별로 바뀌므로 나란히 비교하면 훨씬 더 공정한 신호를 얻을 수 있습니다.
데이터베이스 문제
애플리케이션 코드는 몇 초 안에 교체될 수 있지만 데이터는 그렇지 않습니다. 두 전략 모두 일반적으로 하나의 데이터베이스를 공유하므로 롤아웃 중과 롤백 후에 이전 버전과 새 버전이 모두 동일한 스키마에서 작동해야 합니다.
표준적인 대답은 확장 및 축소 패턴입니다. name의 이름을 full_name으로 바꾸고 싶다고 가정해 보겠습니다.
- 확장: 새 열을 추가합니다. 이전 코드는 영향을 받지 않습니다.
- 이전: 두 열 모두에 쓰고 이전 행을 채우는 릴리스 코드입니다.
- 스위치: 새 열에서 읽는 릴리스 코드입니다.
- 계약: 기존 열을 사용하는 항목이 없으면 이후 릴리스에서 이를 제거하세요.
여러 번의 릴리스가 필요하지만 모든 단계를 안전하게 롤백할 수 있습니다. RENAME COLUMN을 한 번에 실행하면 다른 이름이 필요한 버전이 손상됩니다. 장기 실행 스키마 변경에도 잠금이 걸릴 수 있으므로 주의하세요. 이에 대한 자세한 내용은 SQL 트랜잭션을 참조하세요.
롤링 및 기타 전략
| 전략 | 작동 원리 | 다음에 좋습니다 |
|---|---|---|
| 재창조 | 다운타임 없이 오래된 작업을 중단하고 새로 시작하세요. | 내부 도구, 배치 시스템 |
| 롤링 | 한 번에 몇 개의 인스턴스 교체 | Kubernetes를 포함한 공통 기본값 |
| 청록색 | 두 환경 간 전환 | 빠른 전환 및 롤백 |
| 카나리아 | 점차적으로 작은 비중을 확대하라 | 높은 트래픽, 높은 위험 |
| 그림자 | 트래픽을 새 버전으로 복사하고 해당 응답을 삭제합니다. | 사용자에게 영향을 주지 않고 실제 로드로 테스트 |
Kubernetes 배포는 기본적으로 많은 서비스에 적합한 롤링 업데이트를 수행합니다. 롤링 업데이트도 점진적으로 이동하지만 해당 공유는 인스턴스 수와 연결되어 있으며 자체적으로 결과를 분석하거나 잘못된 측정 항목에서 일시 중지되지 않습니다.
기능 플래그는 어떻습니까?
배포는 서버에 코드를 추가하고 릴리스는 사용자가 기능을 사용할 수 있도록 합니다. 기능 플래그는 아무것도 배포하지 않고도 선택한 사용자에 대해 기능을 켤 수 있도록 하여 이를 별도로 유지합니다. 두 전략 모두 매우 잘 작동합니다. 플래그를 끈 상태로 배포한 다음 점차적으로 활성화합니다. 플래그는 시작 시 충돌이 발생하는 릴리스로부터 사용자를 보호할 수 없기 때문에 이러한 전략을 대체하지 않습니다. 오래된 플래그는 기술적 부채로 쌓이므로 제거하는 것을 잊지 마세요.
선택 방법
| 당신의 상황 | 합리적인 선택 |
|---|---|
| 간단한 앱, 소수의 사용자 | 롤링 업데이트 |
| 매우 빠른 컷오버 및 롤백이 필요함 | 청록색 |
| 전환하기 전에 프로덕션 환경에서 테스트하고 싶음 | 청록색 |
| 높은 트래픽과 높은 실패 비용 | 카나리아 |
| 강력한 모니터링 및 버전별 측정항목 | 카나리아 |
| 낮은 트래픽 | 청록색(카나리아 신호가 너무 약함) |
| 빠듯한 인프라 예산 | 카나리아 또는 롤링 |
또한 결합할 수도 있습니다. 일부 팀은 친환경 환경을 배포한 다음 점진적으로 트래픽을 해당 환경으로 이동하여 깨끗한 환경과 제한된 폭발 반경을 얻습니다. 무엇을 선택하든 GitHub 작업 가이드에서 설명하는 대로 CI/CD 파이프라인을 통해 자동화하세요.
일반적인 실수
- 브레이킹 스키마 변경. 이전 코드가 데이터를 읽을 수 없으면 롤백이 도움이 되지 않습니다.
- 롤백 기준이 없습니다. 사고 발생 중이 아니라 릴리스가 시작되기 전에 “나쁜”이 무엇을 의미하는지 결정하십시오.
- 환경을 표류하게 합니다. 녹색이 파란색과 다르면 테스트 결과가 덜한 것입니다. 인프라를 코드로 사용하여 두 가지를 모두 정의합니다.
- 기술적 측정항목만 측정합니다. 릴리스에는 오류가 없고 결제가 중단될 수 있습니다.
- 롤백을 절대 연습하지 마세요. 압박감을 느낄 때 작동하도록 연습하세요.
- 백그라운드 작업을 잊어버립니다. 작업자와 예약된 작업에도 전환 중에 계획이 필요합니다.
마무리
청록색은 깨끗하고 빠른 전환을 제공합니다. Canary는 작고 측정된 노출을 제공합니다. 모니터링이 여전히 기본이라면 롤링 업데이트 또는 청록색으로 시작하고 카나리아를 시도하기 전에 버전별 측정항목에 투자하세요. 그런 다음 데이터베이스를 포함하여 다음 릴리스에 대한 롤백을 연습해 보세요. 그 단 하나의 연습은 실제로 수정이 필요한 것이 무엇인지 드러내는 경향이 있습니다.
자주 묻는 질문
청록색 배포와 카나리아 배포의 차이점은 무엇입니까?
청록색은 한 전체 환경에서 다른 전체 환경으로 모든 트래픽을 한 번에 전환합니다. Canary는 트래픽의 작은 부분을 새 버전으로 보내고 점진적으로 확장합니다.
청록색과 카나리아 중 어느 것이 더 안전한가요?
Canary는 잘못된 릴리스가 영향을 미치는 사용자 수를 제한하고 청록색은 매우 빠른 롤백을 제공합니다. 더 안전한 선택은 트래픽, 도구 및 모니터링에 따라 달라집니다.
블루-그린 배포는 비용이 많이 듭니까?
릴리스 중에 두 개의 전체 환경을 실행할 수 있으므로 그럴 수 있습니다. 클라우드 자동 확장 및 유휴 환경 종료를 통해 비용을 절감할 수 있습니다.
카나리아는 몇 퍼센트부터 시작해야 합니까?
팀은 의미 있는 신호를 위한 충분한 트래픽을 제공하는 한 일반적으로 약 1~5%로 시작합니다. 트래픽이 적은 시스템에는 더 큰 공유가 필요할 수 있습니다.
Canary와 Blue-Green은 데이터베이스 변경 사항을 어떻게 처리합니까?
일반적으로 확장 및 축소와 같은 이전 버전과 호환되는 변경 사항이 적용됩니다. 두 버전 모두 하나의 데이터베이스를 공유할 수 있고 롤아웃 중에 둘 다 작동해야 하기 때문입니다.
계속 학습하세요
테스트, 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% 적용 범위가 여전히 버그를 놓칠 수 있는 이유 및 합리적인 대상.
기사 읽기 →데이터베이스 및 SQLSQL의 DELETE vs TRUNCATE vs DROP: 차이점, 롤백 및 사용 시기
테스트된 SQL을 통해 DELETE 대 TRUNCATE 대 DROP에 대해 설명합니다. 각각의 제거, 롤백, 트리거, ID 재설정, 속도 및 PostgreSQL, MySQL, SQL Server 및 SQLite의 차이점.
기사 읽기 →데이터베이스 및 SQLSQL 뷰 설명: 예제를 통해 함정 생성, 사용 및 방지
우리가 실행한 쿼리로 설명된 SQL 뷰: 뷰 생성, 실시간 결과, 열 숨기기, 성능, 업데이트 가능하고 구체화된 뷰, 손상된 종속성 및 모범 사례.
기사 읽기 →소프트웨어 개발TypeScript 인터페이스와 유형: 실제 차이점, 컴파일러로 테스트
TypeScript 인터페이스 대 유형, 실제 컴파일러로 확인: 둘 다 할 수 있는 것, 하나만 할 수 있는 것, 선언 병합, 확장 대 교차점 및 따라야 할 간단한 규칙.
기사 읽기 →소프트웨어 개발Python *args 및 **kwargs 설명: 명확한 예가 포함된 유연한 함수
Python *args 및 **kwargs는 우리가 실행한 코드(패킹 및 언패킹, 매개변수 순서, 키워드 전용 및 위치 전용 인수, 데코레이터 및 일반적인 오류)를 설명했습니다.
기사 읽기 →소프트웨어 개발Python Lambda 함수: 구문, 실제 사용 및 사용하지 말아야 할 경우
Python 람다 함수는 구문, 키를 사용한 정렬, 맵 및 필터, 클로저, 후기 바인딩 트랩, 일반 def가 더 나은 선택인 경우 등 우리가 실행한 코드로 설명되었습니다.
기사 읽기 →인공지능AI 에이전트란 무엇입니까? 작동 방식, 간단한 에이전트 루프를 사용하여 실행할 수 있음
AI 에이전트란 무엇입니까? 우리가 실행한 작은 Python 루프, 실제 위험 및 간단한 챗봇이 더 나은 선택일 때 에이전트 루프, 도구, 메모리 및 가드레일에 대한 일반 가이드입니다.
기사 읽기 →DevOps모니터링과 관찰 가능성: 로그, 지표, 추적을 통한 실제 차이점
모니터링과 관찰 가능성 설명: 알려진 오류와 알려지지 않은 오류, 로그, 지표 및 추적, 결제 사건 안내, 골든 신호, OpenTelemetry 및 유용한 경고.
기사 읽기 →DevOpsDocker 볼륨과 바인딩 마운트: 컨테이너 데이터를 올바른 방식으로 유지
Docker 볼륨과 바인드 마운트 설명: 컨테이너 데이터가 사라지는 이유, 명명된 볼륨, 바인드 마운트, tmpfs, Compose 예제, 백업, 권한 및 각 사용 시기.
기사 읽기 →테스트 자동화TDD와 BDD: 주요 차이점, 두 가지 방식으로 구축된 하나의 기능 및 각 사용 시기
TDD와 BDD는 두 가지 방식으로 구축된 하나의 할인 기능, 즉 우리가 실행한 코드를 사용한 적록 리팩토링, 주어진 시점 시나리오, 도구, 장단점 및 각 사용 시기를 설명합니다.
기사 읽기 →소프트웨어 테스트UAT(사용자 승인 테스트): 프로세스, 체크리스트 및 실제 사례
사용자 승인 테스트는 누가 실행하는지, QA와 어떻게 다른지, 7단계 프로세스, UAT 테스트 사례 템플릿, 체크리스트, 승인 기준 및 일반적인 실수에 대해 설명했습니다.
기사 읽기 →데이터베이스 및 SQLSQL NULL 값 설명: IS NULL, COALESCE, NULLIF 및 피해야 할 함정
우리가 실행한 쿼리를 통해 설명된 SQL NULL 값: 3개 값 논리, IS NULL, COALESCE, NULLIF, 집계, 조인 및 정렬이 NULL을 처리하는 방법 및 조용히 발생하는 버그.
기사 읽기 →데이터베이스 및 SQLSQL CASE WHEN 문: 구문, 실제 예 및 일반적인 실수
우리가 실행한 쿼리로 설명된 SQL CASE: 단순 및 검색 양식, 조건 순서, SUM이 있는 피벗, COUNT 트릭, 사용자 정의 정렬, 업데이트 및 피해야 할 NULL 트랩.
기사 읽기 →소프트웨어 개발JWT란 무엇입니까? 실제 예제로 설명되는 JSON 웹 토큰
JWT란 무엇입니까? JSON 웹 토큰은 세 부분, 즉 우리가 실행한 코드에서 구축 및 변조된 토큰, JWT 대 세션, 저장소, 새로 고침 토큰 및 보안 실수를 설명했습니다.
기사 읽기 →소프트웨어 개발JavaScript 이벤트 루프 설명: 예제가 포함된 호출 스택, 마이크로태스크 및 타이머
호출 스택, 작업 및 마이크로태스크 대기열, setTimeout 0이 즉시 실행되지 않는 이유, 차단, 기아 및 인터뷰 퀴즈 등 우리가 실행한 코드로 JavaScript 이벤트 루프를 설명했습니다.
기사 읽기 →소프트웨어 개발Python 생성기 및 수율 설명: 실제 예제로 메모리 절약
Python 생성기와 항복은 우리가 실행한 코드로 설명됩니다. 일시 중지 및 재개 방법, 측정된 메모리 절약, 파이프라인, 무한 시퀀스, 항복, 전송 및 공통 트랩.
기사 읽기 →인공지능임베딩이란 무엇입니까? 벡터와 코사인 유사성을 간단하게 설명
임베딩이란 무엇입니까? 벡터, 코사인 유사성 및 의미론적 검색에 대한 일반 언어 가이드로, 우리가 실행한 작은 예, 일반적인 용도, 모델 선택 및 알려진 한계를 제공합니다.
기사 읽기 →DevOps블루-그린 배포와 카나리아 배포: 차이점, 장단점 및 선택 방법
블루-그린 배포와 카나리아 배포에 대한 설명: 각각의 작동 방식, 비용, 위험 및 롤백, 테스트한 안정적인 사용자 버킷팅, 데이터베이스 마이그레이션, 롤링 업데이트 및 선택 방법.
기사 읽기 →테스트 자동화불안정한 테스트: 원인과 해결 방법
우리가 실행한 데모를 통해 불안정한 테스트에 대해 설명했습니다. 주요 원인, 확인 및 진단 방법, 시기, 공유 상태 및 날짜, 격리 프로세스에 대한 적절한 수정 사항.
기사 읽기 →소프트웨어 테스트부하 테스트와 스트레스 테스트 비교: 차이점, 측정항목 및 k6 예
부하 테스트와 스트레스 테스트 비교 설명: 각각의 증명, 스파이크 및 흡수 테스트, 중요한 측정항목, 평균이 잘못된 이유, k6 예 및 테스트 계획 방법.
기사 읽기 →소프트웨어 테스트테스트 케이스와 테스트 시나리오: 주요 차이점, 예 및 각각의 사용 시기
테스트 케이스와 테스트 시나리오 설명: 명확한 정의, 병렬 테이블, 시나리오에서 케이스로 가져온 하나의 비밀번호 재설정 기능, 템플릿 및 각 사용 시기.
기사 읽기 →데이터베이스 및 SQLSQL 쿼리 최적화: 타이밍에 따라 실행 계획을 읽고 느린 쿼리를 수정합니다.
백만 개의 행에서 테스트된 SQL 쿼리 최적화: 실행 계획 읽기, 올바른 인덱스 추가, 분할할 수 없는 필터 수정, 복합 인덱스 및 키 세트 페이지 매김 사용.
기사 읽기 →데이터베이스 및 SQLSQL 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방향 매트릭스, 수준 척도, 각 항목을 설정하는 사람 및 버그 분류 실행 방법.
기사 읽기 →데이터베이스 및 SQLSQL 하위 쿼리 자습서: 유형, 상관 하위 쿼리 및 EXISTS(예제 포함)
스칼라, IN, FROM 및 SELECT 하위 쿼리, 상관 하위 쿼리, EXISTS, NOT IN NULL 트랩 및 하위 쿼리 대 JOIN 대 CTE 등 우리가 실행한 쿼리가 포함된 SQL 하위 쿼리 자습서입니다.
기사 읽기 →데이터베이스 및 SQLSQL 트랜잭션 및 ACID 설명: COMMIT, ROLLBACK 및 격리 수준
COMMIT, ROLLBACK, 저장점, 잠금, 격리 수준, 더티 읽기, 교착 상태 및 모범 사례 등 우리가 실행한 은행 이체를 통해 SQL 트랜잭션 및 ACID를 설명했습니다.
기사 읽기 →소프트웨어 개발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와 흔한 실수, 성능 팁까지 정리했습니다.
기사 읽기 →