Node.js

Node.js - 동기와 비동기 그리고 콜백

수업소개

Node.js에서 매우 중요한 특징인 비동기  처리 방식을 살펴봅니다. Node.js 실행순서를 파악하는 것이 목적입니다. 

 

 

 

동기와 비동기 1

강의

 

 

 

 

소스코드

 syntax/sample.txt

B

syntax/sync.js

var fs = require('fs');

/*
//readFileSync
console.log('A');
var result = fs.readFileSync('syntax/sample.txt', 'utf8');
console.log(result);
console.log('C');
*/


console.log('A');
fs.readFile('syntax/sample.txt', 'utf8', function(err, result){
    console.log(result);
});
console.log('C');

 

 

 

 

동기와 비동기 2

강의

 

 

 

callback

강의

 

 

 

소스코드

/*
function a(){
  console.log('A');
}
*/
var a = function(){
  console.log('A');
}


function slowfunc(callback){
  callback();
}

slowfunc(a);

 

댓글

댓글 본문
작성자
비밀번호
  1. 쑤우
    수강완료.감사합니다~
  2. 굼벵이
    완료
  3. CronEB
    완료
  4. YesterdayKite
    완료. 감사합니다!
  5. 이이이이이뻐
    //만약 시간이 오래걸리는 slowfunc라는 함수가 있다고 치자
    //이 기능이 끝난 다음에
    //이 시간이 오래 걸리는 함수가 종료된 후에
    //그 다음일을 하세요 라고 하고 싶다면
    //이 함수가 인자로 callback을 받으면 된다.
    //그리고 나서 callback을 실행해 주면 됨
    function slowfunc(callback){
    callback();
    }
    //이렇게 되면 slowfunc가 실행이 되고 callback이라는 parameter는
    //어떤 값을 갖냐면 a 가 가르키는 저 함수를 갖게 됨.
    //이 안에서 callback 이라는 함수를 호출하면
    //a가 실행이 됨

    slowfunc(a);
  6. ㅇ0ㅇ
    완료
  7. youngjin.lee
    Completed
  8. 허공
    190510 감사합니다.
  9. 이루
    완료
  10. 위준우
    완료
  11. kdsprj
    async await, Promise 방법이 있습니다.
    짧은 견해로 답변 드려요. 자세한 사항은 아래 링크를 참고해주세요 :)
    - async function
    https://developer.mozilla.org......ion
    - Promise
    https://developer.mozilla.org......ise
    - [번역] async/await 를 사용하기 전에 promise를 이해하기
    https://medium.com......4a4
    - [Async, 비동기와 동기] Promise에서 Await까지
    https://velog.io......%80
    대화보기
    • 자유로움
      완료
    • 직접 비동기 방식으로 함수를 만들고 싶으면 어떤 식으로 해야 할까요? 혹시 아시는 분 있나요?
    • supernet
      완료
    • 이채
      보긴봤어요 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ두세번 돌려봐야 비로소 봤어요를 누를 수 있겠네요ㅠㅠ
      대화보기
      • 지미츄
        감사합니다~
      • 호두
        고맙습니다.
      • Ashed GoodDevil
        인터넷 사용환경에서 예를 들어드리자면,
        유튜브 영상이나 웹페이지가 로딩되는동안 로딩표시가 되는걸 보신적이 있으시죠?
        만약 이걸 동기방식으로 프로그래밍 했으면 어떻게 될까요?

        <예상했던 결과>
        버튼클릭 -> 로딩 시작 및 로딩 이미지 표시 -> 로딩이 완료되면 로딩 이미지가 사라지고 로딩된 결과 표시
        <동기방식으로 프로그래밍시 나타날 수 있는 잘못된 결과>
        1. 버튼클릭 -> '로딩중' 이미지 표시 -> '로딩중' 이미지가 사라지고 로딩 하는동안 아무런 변화가 없음 -> 로딩된 결과가 보여짐
        2. 버튼클릭 -> 로딩 하는동안 아무런 변화가 없음 -> 로딩된 결과가 보여짐 -> 로딩된 결과 위에 '로딩중' 이미지가 표시 되거나 이미 결과가 로딩되었기 때문에 '로딩중' 이미지 표시되지 않음

        위의 예시를 보시면 비동기 방식의 필요성이 이해가 되실까요? (초보인 제 실력에서 생각해본 극단적인 설명입니다.)

        P.S: Node.js는 단일 쓰레드 방식이므로 멀티쓰레드 개념과는 차이가 있음을 유의하셔야합니다.
        대화보기
        • popinbompin
          희열을 느끼는 이번 강의였습니다
        • 코베
          ㅋㅋㅋㅋㅋㅋㅋㅋ 잘 따라 가고 계시네욬ㅋ
          대화보기
          • karen
            카렌, 에델 웅 완료
          • 민트색마시멜로우
            제가 이고잉님은 아니지만 말씀드려봅니다. ㅎㅎ 아마 프로그램이 시간의 흐름에 따라 일이 진행된다고 하셨던 분의 의도는 아마도 프로그래밍이라는 개념을쉽게 설명하려 했던것일겁니다. 명령을 한 순서대로 되게한다는게 보통 사람들의 생각이잖아요?대부분의 사람이 생각하는 프로그램이란 순서대로 실행되는 프로그램이 많죠 수식을 넣으면 계산해주고, 화면을띄워주고 하지만 이런 프로그래밍 기법때문에 발생한 문제를 해결하기위한 것이 비동기적 프로그래밍 기법입니다. 요즈음은 그런 수식만을 푸는 것이아니라 영화정보도 불러오고 기다리고 영화 정보 출력하고 채팅도 하고 ...... 이런 다양한 일들을 하잖아요? 그래서 새로생긴 다양한 문제를 해결하기 위해 도입된것입니다. 물론 예상했던대로 흘러가지 않을 수도 있지만 이것또한 이고잉님의 말씀처럼 익숙해질것입니다. 또한 익숙해지면 더욱 편리하고 향상된 프로그램을 얻을 수있을 것입니다.


            참고해주세요 ㅎㅎㅎ
            대화보기
            • dlaruddnrsla@naver.com
              아아 꼭 A기능 다음 B C가 실행되어야 하는 경우에는 저런 비동기를 쓰면 문제가 생기겠지만
              순서에 상관없이 실행되도 되는 경우에는 비동기를 쓰면 프로그램 성능이 좋아지기때문에 쓰면 좋은거군요
            • dlaruddnrsla@naver.com
              항상 훌륭한 강의 감사합니다 ㅎㅎ
              동기와 비동기 강의를 듣고 궁금한게 생겨서 여쭙니다.
              프로그램이란 시간의 순서에 따라서 일이 진행되는 것이라고 배웠습니다.
              그런데 비동기를 써버리면 위 강의의 예제처럼 ABC가 되지않고 ACB가 되어 자신이 예상하던 흐름대로 프로그램이 흘러가지 않을수도 있다고 생각이 드는데 비동기를 써도 문제가 없는건가요?
            • 삼고잉
              이전 강의의 질문이 여기서 해결된거같습니다 ㅠ
            • 비전공계발자
              보긴 봤어요 버튼 정말 있었으면 좋겠어요ㅋㅋ
              대화보기
              • cadenzah
                아주 단순하고 명쾌한 설명입니다. 잘 듣고 가요.
              • metallsk
                논리적 사고의 유연성을 길러야 되는건가요ㅋㅋㅋ 조금 어렵지만 재미있네요.
              • Gimme_Gsuit
                감사합니다.
              • 내일
                이거 '보긴 봤어요' 버튼이 하나 더 있어야 하는 강의를 본 것 같네요..

                보긴 헀는데 봤다기엔 머리에 남은게..... 시간 나면 여기로 다시 돌아와서 봐야곘네요...

                늘 좋은 강의 잘 듣고 갑니다.
              • moon
                감사합니다.
              • 헬리사우드
                지금까지 콜백에 노출당해와서그런지 한번에 이해가 되기는 하네요.
                인자로 함수를 정의해서 함수 안에 정의하여 실행하는 효과를 내는게 콜백함수였군요!
              • Seo Yun Seok Tudoistube
                showfunc 라고 따라 하는건 수업을 잘 따라가고 있는걸까요? 저는 생각을 안하고 따라하는걸까요?
                감사합니다^^
              버전 관리
              egoing
              현재 버전
              선택 버전
              graphittie 자세히 보기