자바스크립트는 싱글 스레드 언어로 한 번에 하나의 작업만을 수행할 수 있습니다. 코드는 보토 위에서 아래로 순차적으로 실행하는데 그것을 동기적 실행이라고 합니다. 그럼 반대로 비동기처리가 무엇인지 알아보겠습니다.

자바스크립트비동기처리
자바스크립트비동기처리

자바스크립트 비동기처리는 무엇일까?

자바스크립트 비동기(asynchronous)처리란 요청을 보낸 후 응답의 수락 여부와는 상관없이 다음 태스크가 동작하는 방식을 말합니다. 이는 병렬적으로 태스크를 수행할 수 있게 해주어 자원을 효율적으로 사용할 수 있습니다. 비동기 요청을 보낼 때는 요청이 완료된 후 처리할 콜백함수를 함께 알려주어 해당 태스크가 완료될때 콜백함수가 호출됩니다.

자바스크립트비동기처리

하지만 비동기 처리를 위해서 콜백 패턴을 사용하면 처리순서를 보장하기위해서 여러개의 콜백함수가 중첩되어 복잡도가 높아지는 콜백 헬(callback hell)이 발생할 수 있습니다. 콜백헬은 코드의 가독성을 나빠지게하며 실수를 유발할 수 있는 원인이됩니다. 아래는 콜백 헬이 발생하는 전형적인 사례입니다.

자바스크립트 동기처리란 무엇인가?

자바스크립트는 기본적으로 싱글 스레드 언어입니다. 이것은 한 번에 하나의 작업만 수행할 수 있다는 의미로, 이전 작업이 완료되어야 다음 작업을 수행할 수 있습니다. 이런 코드실행방식을 동기처리라고합니다.

자바스크립트동기처리

동기 방식은 단순하고 직관적이지만 작업이 오래 걸리거나 응답이 지연되면 전체적인 성능과 사용자 경험에 영향을 미칠 수 있습니다. 예를 들어서 서버에 데이터를 요청하고 응답을 받아야하는 경우 응답이 올때까지 다른 작업을 하지 못하고 대기해야합니다.

동기 방식의 한계

동기 방식은 간단하고 직관적이지만, 작업이 오래걸리거나 응답이 지연되는경우 전체적인 성능과 사용자 경험에 영향을 줄 수 있습니다. 예를 들어서 서버에 데이터를 요청하고 응답을 기다리는 동안다른 작업을 할 수 없어서 프로그램의 흐름이 멈추거나 지연될 수 있습니다.

동기와 비동기 처리의 개념

자바스크립트비동기, 동기처리

자바스크립트는 싱글 스레드 언어이므로 한 번에 하나의 작업만을 수행할 수 있습니다. 동기(Synchronous) 방식은 이전 작업이 완료 되어야 다음 작업을 수행할 수 있는 방식입니다. 코드는 순차적으로 실행되며, 작업이 오래 걸리거나 응답이 지연되면 전체적인 성능과 사용자경험에 영향을 줄 수 있습니다.

자바스크립트 비동기처리 문제

자바스크립트비동기처리문제

비동기처리를 위해 콜백 패턴을 사용하면 처리 순서를 보장하기 위해 여러개의 콜백 함수가 중첩되는 콜백 헬(callback Hell)이 발생할 수 있습니다.이는 코드의 가독성을 떨어뜨리고 실수를 유발하느 원인이됩니다.

step1(function(value1) {
  step2(value1, function(value2) {
    step3(value2, function(value3) {
      step4(value3, function(value4) {
        step5(value4, function(value5) {
            // value5를 사용하는 처리
        });
      });
    });
  });
});

콜백 함수

자바스크립트콜백함수

콜백 함수는 다른 함수의 인자로 전달되어서 특정 작업이 완료된 후 호출되는 함수입니다. 비동기 처리에서 콜백함수는 작업의 완료를 기다리지 않고 다음 코드를 실행할 수 있게 해줍니다.

콜백 헬의 문제점

비동기 처리를 위해 콜백 함수를 중첩하여 사용하면 콜백 헬이 발생할 수 있습니다. 콜백 헬은 코드의 가독성을 떨어뜨리고 유지보수를 어렵게 만듭니다.

call1(function (err, data) {
    if (err) {
        return;
    }
    call2(function (err, data) {
        if (err) {
            return;
        }
        call3(function (err, data) {
            if (err) {
                return;
            }
            call4(function (err, data) {
                if (err) {
                    return;
                }
                call5(function (err, data) {
                    //...
                });
            });
        });
    });
});

콜백 헬 해결 방법

콜백 헬을 피하기 위해 콜백 함수를 분리하여 사용하는 방법이 있습니다. 그러나 더 나은 해결책은 Promise나 async/await를 사용하는 것입니다.

Promise를 사용한 해결

Promise를 사용하면 콜백 함수를 체인 형태로 연결할 수 있어 가독성이 높아집니다.

function call1() {
  return new Promise((resolve, reject) => {
    // 작업 수행 후 resolve 호출
  });
}

call1()
  .then(data => call2(data))
  .then(data => call3(data))
  .then(data => call4(data))
  .then(data => call5(data))
  .catch(err => {
    // 에러 처리
  });

async/await를 사용한 해결

async/await를 사용하면 비동기 코드를 동기 코드처럼 작성할 수 있어 가독성과 유지보수성이 향상됩니다.

async function process() {
  try {
    const data1 = await call1();
    const data2 = await call2(data1);
    const data3 = await call3(data2);
    const data4 = await call4(data3);
    const data5 = await call5(data4);
    // data5를 사용하는 처리
  } catch (err) {
    // 에러 처리
  }
}

결론

자바스크립트에서 비동기 처리를 적절히 화룡한다면 프로그램의 성능을 향상시키며 사용저의 경험을 개선할 수 있습니다. 비동기 처리를 위한 다양한 패턴과 도구를 이해하고 활용하여 더 효율적인 웹 애플리케이션을 개발할 수 있습니다.

Similar Posts