- promise는 나중에 사용할 수 있는 결과를 나타내는 객체입니다.
- 이행되거나 거부될 때까지 보류되며 일단 해결되면 변경되지 않습니다.
- 각
then은 체인 연결을 가능하게 하는 새로운 약속을 반환합니다. - 모든 결과가 필요하면
Promise.all을 사용하고, 모든 결과를 원하면Promise.allSettled를 사용하세요.
네트워크 요청, 파일 읽기 및 타이머는 모두 나중에 완료되지만 JavaScript는 단순히 중지하고 기다릴 수 없으며 그렇지 않으면 페이지가 정지됩니다. JavaScript 약속은 “이 작업이 끝나면 저 작업을 수행하고, 실패하면 대신 이 작업을 수행”이라고 말할 수 있는 깔끔한 방법을 제공합니다.
async과 await를 주로 작성하더라도 밑에는 Promise를 사용하고 있으므로 이를 이해하면 디버깅이 훨씬 쉬워집니다. Node.js 24에서 이러한 예제를 실행했으며 표시된 출력은 해당 실행에서 나온 것입니다. 최신 브라우저에서도 동일한 방식으로 작동합니다.
약속이란 무엇입니까?
약속은 미래 가치에 대한 자리 표시자입니다. 레스토랑에서 주문할 때 건네주는 부저를 생각해 보세요. 아직 음식은 없지만, 음식이 언제 준비되었는지, 문제가 있는지 알려주는 무언가를 들고 있는 동안 자유롭게 다른 일을 할 수 있습니다.
코드에서 비동기 함수는 즉시 Promise를 반환하고 다음에 일어날 일을 첨부합니다.
fetch("/api/user")
.then((response) => response.json())
.then((user) => console.log(user.name))
.catch((error) => console.log("Failed:", error.message));
세 가지 약속 상태
| 상태 | 의미 | 실행되는 것 |
|---|---|---|
| 보류 중 | 작업이 끝나지 않았습니다 | 아직 아무것도 없습니다 |
| 이행됨 | 가치있게 끝났어요 | then 핸들러 |
| 거부됨 | 이유가 있어서 실패했어요 | catch 핸들러 |
이행되거나 거부된 Promise를 settled라고 합니다. 약속은 단 한 번만 이루어질 수 있습니다. 그 이후에는 해당 상태와 값이 고정되고 이후의 resolve 또는 reject 호출은 무시됩니다.
약속 만들기
일반적으로 fetch과 같은 API에서 Promise를 사용하지만 Promise를 생성하면 작동 방식을 볼 수 있습니다. 생성자는 두 개의 함수 resolve와 reject을 받습니다.
function fetchUser(id) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (id > 0) {
resolve({ id, name: "Asha" });
} else {
reject(new Error("Invalid id"));
}
}, 100);
});
}
console.log(fetchUser(1));
// Promise { <pending> }
Promise를 즉시 기록하면 타이머가 실행되지 않았기 때문에 아직 보류 중임을 알 수 있습니다. 값은 핸들러 또는 await을 통해서만 도달할 수 있습니다. 항상 문자열보다는 Error 객체로 거부하세요. Error은 디버깅에 도움이 되는 스택 추적을 전달하기 때문입니다.
그럼 잡아서 마지막으로
이 세 가지 메서드는 Promise에 핸들러를 연결합니다.
fetchUser(1).then((user) => console.log(user.name));
// Asha
fetchUser(-1)
.then((user) => console.log("never runs", user))
.catch((error) => console.log("caught:", error.message))
.finally(() => console.log("finally"));
// caught: Invalid id
// finally
then은 성공 시 실행되고, catch는 실패 시 실행되며, finally은 어느 쪽이든 실행됩니다. 따라서 finally는 로딩 스피너를 숨기는 등의 정리 작업에 적합한 장소입니다. 결과에 신경쓰지 않아야 하므로 인수를 받지 않습니다.
약속을 연결하기
핵심 아이디어는 then이 항상 새로운 약속을 반환한다는 것입니다. 핸들러가 반환하는 모든 것이 새로운 Promise의 값이 됩니다.
Promise.resolve(2)
.then((n) => n * 10)
.then((n) => n + 1)
.then((n) => console.log("chain:", n));
// chain: 21
핸들러가 또 다른 Promise를 반환하면 체인은 계속 진행하기 전에 약속이 확정될 때까지 기다립니다. 이것이 중첩된 콜백을 단순한 단계 순서로 바꾸는 것입니다.
getUser(id)
.then((user) => getOrders(user.id))
.then((orders) => getInvoice(orders[0].id))
.then((invoice) => console.log(invoice.total))
.catch(handleError);
오류가 체인을 통해 이동하는 방법
거부된 Promise는 catch에 도달할 때까지 then마다 건너뜁니다. 핸들러 내부에 던지는 것도 거부로 간주됩니다. 그리고 일반적으로 반환되는 catch은 체인을 다시 정상으로 되돌립니다.
Promise.resolve("start")
.then(() => {
throw new Error("step 2 failed");
})
.then(() => console.log("skipped"))
.catch((error) => {
console.log("caught:", error.message);
return "recovered";
})
.then((value) => console.log("continues:", value));
// caught: step 2 failed
// continues: recovered
이것을 try과 catch의 비동기 버전으로 생각하십시오. 끝에 있는 하나 catch는 일반적으로 전체 체인을 덮습니다. 오류만 기록하고 싶지만 여전히 실패하는 경우 catch 내부에서 다시 발생시킵니다.
팁: fetch 네트워크 장애가 발생한 경우에만 거부됩니다. 404 또는 500 응답이 여전히 충족되므로 response.ok을 직접 확인하세요. HTTP 상태 코드 치트 시트에서는 각 코드의 의미를 설명합니다.
Promise.all, allSettled, race 및 any
이러한 정적 메서드는 여러 Promise를 동시에 조정합니다. 그들 모두는 배열을 취하고 하나의 약속을 반환합니다.
| 방법 | 다음과 같은 경우 이행 | 다음 경우에 거부합니다. | 다음 용도로 사용하세요. |
|---|---|---|---|
Promise.all |
모두 이행 | 누구든지 거부 | 모든 결과가 필요합니다 |
Promise.allSettled |
모두 해결 | 절대로 | 당신은 모든 결과를 원합니다 |
Promise.race |
먼저 정착한 사람이 성취한다 | 가장 먼저 거절을 해결한 사람 | 시간 초과 |
Promise.any |
첫 번째는 충족합니다. | 모두 거부 | 첫 번째 성공적인 소스 |
이를 테스트하기 위해 우리는 두 개의 작은 도우미를 사용했습니다. 하나는 지연 후 성공하고 다른 하나는 지연 후 실패합니다.
const wait = (ms, value) =>
new Promise((resolve) => setTimeout(() => resolve(value), ms));
const fail = (ms, message) =>
new Promise((_, reject) => setTimeout(() => reject(new Error(message)), ms));
Promise.all
await Promise.all([wait(300, "a"), wait(100, "b"), wait(200, "c")]);
// [ 'a', 'b', 'c' ] took about 300 ms
주목해야 할 두 가지 세부 사항. b이 먼저 완료되었더라도 결과는 입력 순서를 유지합니다. 그리고 총 시간은 약 300ms였습니다. 이는 가장 느린 작업의 시간이지 합계 600ms가 아닙니다. 세 가지 모두 이미 동시에 실행 중이었기 때문입니다. 그 중 하나라도 거부하면 전체가 즉시 거부됩니다.
await Promise.all([wait(100, "a"), fail(50, "b failed")]);
// rejected: b failed
Promise.allSettled
이는 모든 것을 기다리고 각 결과를 보고하므로 하나의 실패가 나머지를 잃지 않습니다. 이는 각 위젯이 독립적으로 로드되는 대시보드에 적합합니다.
const results = await Promise.allSettled([wait(50, "a"), fail(50, "b failed")]);
results.map((r) => r.status);
// [ 'fulfilled', 'rejected' ]
Promise.race 및 Promise.any
await Promise.race([wait(300, "slow"), wait(100, "fast")]); // fast
await Promise.any([fail(50, "x"), wait(100, "ok")]); // ok
차이점은 race은 실패하더라도 먼저 해결하는 반면, any는 성공하는 한 실패를 무시한다는 것입니다. race의 일반적인 용도는 느린 요청에 시간 초과를 추가하는 것입니다. 하지만 느린 작업은 취소하지 않는 한 백그라운드에서 계속 실행됩니다.
약속과 비동기/대기
async과 await는 동일한 Promise를 사용하는 더 읽기 쉬운 방법입니다. async 함수는 항상 Promise를 반환하고, await는 Promise가 확정될 때까지 해당 함수를 일시 중지합니다.
async function showInvoice(id) {
try {
const user = await getUser(id);
const orders = await getOrders(user.id);
console.log(orders.length);
} catch (error) {
console.log("Failed:", error.message);
}
}
거부하면 오류가 발생하므로 일반적인 try과 catch가 작동합니다. 병렬 작업을 위해서는 여전히 Promise.all이 필요합니다. 호출을 하나씩 기다리면 호출이 순서대로 실행되기 때문입니다. 우리의 JavaScript 비동기/대기 가이드는 이에 대해 더 자세히 설명합니다.
약속과 이벤트 루프
Promise 핸들러는 Promise가 이미 확정된 경우에도 즉시 호출되지 않습니다. 현재 코드가 완료된 후 타이머가 시작되기 전에 실행됩니다. 증거는 다음과 같습니다.
setTimeout(() => console.log("timeout"), 0);
Promise.resolve().then(() => console.log("microtask"));
console.log("sync");
// sync
// microtask
// timeout
동기 코드가 먼저 실행됩니다. 다음은마이크로태스크 대기열, 약속 핸들러를 보유합니다. 그래야만 이벤트 루프가 다음 항목을 선택합니다.작업, 타이머와 같은. 이것은 인기 있는 면접 질문이며, 왜setTimeout0은 실제로 즉각적이지 않습니다.
약속과 콜백
| 우려 | 콜백 | 약속 |
|---|---|---|
| 시퀀싱 | 각 단계에서 더 깊게 중첩됨 | 플랫 체인 |
| 오류 | 모든 수준에서 확인됨 | 하나 catch로 체인을 덮을 수 있음 |
| 병렬 작업 | 수동 카운터 | Promise.all |
| 실수로 두 번 전화했나요? | 가능 | 두 번은 안 돼 |
일반적인 실수
then내부로 돌아가는 것을 잊었습니다.return이 없으면 다음 단계는undefined를 받고 내부 약속을 기다리지 않습니다.- 아니요
catch전혀. 이로 인해 처리되지 않은 거부가 발생하고 Node.js에서는 기본적으로 프로세스가 중지됩니다. - 체인 대신 중첩.
then안에then를 넣으면 콜백 지옥이 재현됩니다. 약속을 반환하고 체인을 계속하십시오. new Promise에서 Promise 래핑. 함수가 이미 Promise를 반환하는 경우 그냥 사용하세요.- 비동기 콜백과 함께
forEach를 사용합니다. 기다리지 않습니다. JavaScript 배열 방법 가이드에 표시된 대로map와 함께for...of또는Promise.all를 사용하세요. - 약속이 취소될 수 있다고 생각합니다. 약속 자체는 취소될 수 없습니다. 요청의 경우
AbortController를 사용하세요.
마무리
Promise는 몇 가지 규칙으로 귀결됩니다. Promise는 한 번 확정되고, then 새로운 Promise를 반환하며, 오류는 무언가가 이를 포착할 때까지 체인을 따라 이동합니다. 이러한 규칙이 자연스러워지면 async와 await은 더 이상 마술이 아닙니다. 연습하려면 Promise를 사용하여 하나의 콜백 기반 함수를 다시 작성한 다음 Promise.all를 사용하여 두 개의 엔드포인트를 가져오고 실패를 적절하게 처리합니다.
자주 묻는 질문
JavaScript에서 약속이란 무엇입니까?
Promise는 비동기 작업의 최종 결과를 나타내는 객체입니다. 보류 중으로 시작한 다음 값으로 이행하거나 이유로 거부합니다.
이들then그리고 catch의 차이점은 무엇인가요?
그런 다음 약속이 이행되면 실행되고 거부되면 catch가 실행됩니다. catch는 거부 핸들러만 사용하여 효과적으로 수행할 수 있으며 이전 단계에서 발생한 오류도 잡을 수 있습니다.
Promise.all과 Promise.allSettled의 차이점은 무엇입니까?
Promise.all은 하나의 Promise가 거부되자마자 거부됩니다. Promise.allSettled는 항상 모든 것을 기다리고 각 항목의 상태와 값 또는 이유를 보고합니다.
Promise를 사용해야 할까요, 아니면 async/await를 사용해야 할까요?
Wait는 약속을 기반으로 하므로 함께 작동합니다. 대부분의 코드는 async/await에서 가장 잘 읽히는 반면 Promise.all 및 유사한 메서드는 병렬 작업에 여전히 유용합니다.
Promise는 동시에 실행되나요?
JavaScript는 스레드에서 한 번에 하나의 코드 조각을 실행하지만 네트워크 요청과 같은 작업은 백그라운드에서 발생합니다. 이 중 여러 개가 동시에 진행될 수 있습니다.
계속 학습하세요
테스트, 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 명령 치트 시트: 실제로 사용하는 명령과 예제
실제 데모 저장소의 출력과 함께 설정, 준비, 분기, 원격, 숨김, 기록 및 실행 취소 실수 등 작업별로 그룹화된 Git 명령 치트 시트입니다.
기사 읽기 →소프트웨어 개발JavaScript Promises 설명: then, catch, Promise.all 및 일반적인 실수
우리가 실행한 코드로 설명된 JavaScript Promise: 상태, then 및 catch 체인, 오류 처리, Promise.all, allSettled, race 및 기타, 이벤트 루프 및 일반적인 실수.
기사 읽기 →소프트웨어 개발Python 사전 튜토리얼: 방법, 예제 및 일반적인 패턴
우리가 실행한 코드가 포함된 Python 사전 튜토리얼: 사전 생성, 읽기 및 업데이트, 주요 방법, 병합, 이해, 패턴 계산 및 그룹화, 일반적인 실수.
기사 읽기 →인공지능RAG 란 무엇입니까? 실제 예제를 통해 설명되는 검색 증강 생성
RAG란 무엇인가요? 검색 증강 생성은 인덱싱, 청킹, 임베딩, 검색, 소규모로 작동하는 Python 예제, 평가 및 일반적인 실패 등 단계별로 설명됩니다.
기사 읽기 →DevOps초보자를 위한 Terraform 튜토리얼: 첫 번째 파일부터 모듈까지 코드로서의 인프라
초보자를 위한 Terraform 튜토리얼: 클라우드 계정 없이 시작하여 초기화, 계획 및 적용을 배우고 변수, 출력, 상태, 모듈 및 안전한 팀 워크플로를 학습합니다.
기사 읽기 →DevOpsDocker와 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와 흔한 실수, 성능 팁까지 정리했습니다.
기사 읽기 →