SlideShare a Scribd company logo
1 of 19
Download to read offline
CallBack
콜백
What is the CallBack?
• 자바스크립트에서 비동기성을 표현하는 기본 단위다.

• ‘나중’에 실행 될 함수(Function)이다.

• 프로그램의 연속성을 감싼 / 캡슐화한 장치다.
콜백 함수의 예
• 콜백함수의 실행 순서는 A, B, C
순이다. 

• A와 B는 프로그램의 ‘지금’에 속하
고 C는 프로그램의 ‘나중’에 속한다.
• ‘지금’의 코드가 실행 된 후 비결정
적 시간 동안 중지되고 그 후 ‘C’의
코드가 실행된다.
비동기 코드가 왜 어렵나?
• 인간의 두뇌는 멀티태스커가 아니라 싱글태스커다.

• 이벤트 루프 큐가 동작하는 것 처럼 굉장히 빠른 컨택스트 교환
기로 기능하고 있어서 동시에 하는 것처럼 보인다.

• 인간은 단계별(Step-by-Step) 로 끊어 생각하는 경향이 있어서

동기 —> 비동기로 전환된 이후론 단계별로 나타내기가 쉽지 않다.

• 사람의 두뇌가 비동기처럼 회전하지 않으니 콜백으로 비동기 

JS코드를 작성하고 추론하기가 어렵다.
콜백의 단점
콜백 지옥
클릭 이벤트 대기 —> 타이머 작동까지 대기 —> AJAX 응답 받을때 까지 대기
.
콜백지옥을 벗어나려면?
• 코드 단계의 해결책은 일단 중첩을
제거하는 것이다.

• 하지만 저자는 이 코드를 추론하려
면 함수에서 다른 함수로, 또 그다
음 함수로 흐름을 따라가기 위해선
소스 코드를 널뛰기 해야한다고 말
한다.

• 이것이 저자가 주장하는 콜백의 

첫 번째 단점이다.
제어의 역전
• 콜백 중심적 설계 방식에서 가장 큰 문제점은 제어권 교환이다.

• 콜백을 넘겨주는 ajax()는 개발자가 작성하거나 직접 제어할 수 있
는 함수가 아니라 서드파티가 제공하는 유틸리티인 경우가 많다.

• 문제는 다른 파트에 제어권을 줬을 때 다른 파트를 믿을 수 있는가?
이다.
• (추적이 끝나기도 전에) 콜백을 너무 일찍 부른다.

• (아예 호출하지도 않거나) 콜백을 너무 늦게 부른다.

• 콜백을 너무 적게 또는 너무 많이 부른다.

• 필요한 환경/인자를 정상적으로 콜백에 전달하지 못한다.

• 일어날지 모를 에러/예외를 무시한다.

• …
모든 경우별로 방어로직을 구현하는건 어렵다.
방어로직
• 개발자는 대부분 예기치 못한 상황을 방지하고 줄이고자 내부 함수
작성시 방어로직을 작성한다.

















• 콜백의 가장 골치 아픈 부분은 이렇게 방어코드를 삽입했음에도 완
전히 잘못 틀어질 수 있는 제어의 역전 문제다. 

• 제어의 역전으로 빚어진 믿지 못할 코드를 완화할 장치가 없는 상황
에서 콜백으로 코딩하면 버그를 심어놓는 것과 다름이 없다.
콜백을 구하자!!
디자인 패턴을 적용한 콜백
분할 콜백
이런 API 설계에서 failure 함수는 필수가 아니며,

작성하지 않으면 에러는 조용히 무시된다.
에러 우선 스타일
에러 객체를 첫 번째 인자로 받는다.

성공 시 이 인자는 빈/ falsy 객체지만, 실패 시 truthy 또는 에러 객체로 셋팅된다.
• 위의 두 예제로 믿음성 문제가 해결된 것 처럼 보이지만 전혀 그렇
지 않다.

• 원하지 않는 반복적인 호출을 방지하거나, 걸러내는 콜백 기능이 전
혀 없으며, 성공/에러 신호를 동시에 받거나 전혀 못받을 수 있으므
로 상황별로 코딩해야 하는 부담이 생겼다. 

• 표준적인 패턴을 띠고 있지만, 재사용이 불가능한 장황한 관용 코드
다.

• 만약 콜백이 한번도 호출되지 않는다면?
결론
• 콜백은 자바스크립트에서 비동기성을 표현하는 기본 단위 였지만,

점점 진화하는 비동기 프로그래밍 환경에서 충분하지 않게 됐다.

• 콜백으로 인한 비선형적, 비순차적으로 나타나는 코드들은 추론하기 어렵
고 악성 버그를 품은 코드로 이어진다.

• 콜백은 프로그램을 진행하기 위해 제어권을 다른파트로 넘겨줘야하는데 제
어권이 넘어가면서 믿음성 문제가 발생한다.

• 이런 믿음성 문제를 해결하고자 임시로직을 짜 넣을 수 있지만 유지보수가
어려운 스파게티 코드가 발생한다.

• 이런 문제들을 해결하기위해 프라미스라는 최신 기술이 등장하게 되었다.

More Related Content

Similar to Call back 발표자료

이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013devCAT Studio, NEXON
 
[Osxdev]4.swift
[Osxdev]4.swift[Osxdev]4.swift
[Osxdev]4.swiftNAVER D2
 
Celery의 빛과 그림자
Celery의 빛과 그림자Celery의 빛과 그림자
Celery의 빛과 그림자Minyoung Jeong
 
Effective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummaryEffective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummarySeungYeonChoi10
 
More Effective C++ 4주차
More Effective C++ 4주차More Effective C++ 4주차
More Effective C++ 4주차Injae Lee
 
More effective c++ 2
More effective c++ 2More effective c++ 2
More effective c++ 2현찬 양
 
Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅
Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅
Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅Kiyoung Moon
 
Effective c++chapter1 and2
Effective c++chapter1 and2Effective c++chapter1 and2
Effective c++chapter1 and2성연 김
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Dong Chan Shin
 
클린 코드 part2
클린 코드 part2클린 코드 part2
클린 코드 part2Minseok Jang
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2세빈 정
 
Tcpl 12장 파생클래스
Tcpl 12장 파생클래스Tcpl 12장 파생클래스
Tcpl 12장 파생클래스재정 이
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)Dong Chan Shin
 
More effective c++ chapter3 4
More effective c++ chapter3 4More effective c++ chapter3 4
More effective c++ chapter3 4Dong Chan Shin
 
Mec++ chapter3,4
Mec++ chapter3,4Mec++ chapter3,4
Mec++ chapter3,4문익 장
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinDong Chan Shin
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)DK Lee
 
10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기Minyoung Jeong
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법성훈 김
 

Similar to Call back 발표자료 (20)

이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
 
[Osxdev]4.swift
[Osxdev]4.swift[Osxdev]4.swift
[Osxdev]4.swift
 
Celery의 빛과 그림자
Celery의 빛과 그림자Celery의 빛과 그림자
Celery의 빛과 그림자
 
Effective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummaryEffective C++ Chapter 1 Summary
Effective C++ Chapter 1 Summary
 
More Effective C++ 4주차
More Effective C++ 4주차More Effective C++ 4주차
More Effective C++ 4주차
 
리팩토링
리팩토링리팩토링
리팩토링
 
More effective c++ 2
More effective c++ 2More effective c++ 2
More effective c++ 2
 
Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅
Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅
Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅
 
Effective c++chapter1 and2
Effective c++chapter1 and2Effective c++chapter1 and2
Effective c++chapter1 and2
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬
 
클린 코드 part2
클린 코드 part2클린 코드 part2
클린 코드 part2
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2
 
Tcpl 12장 파생클래스
Tcpl 12장 파생클래스Tcpl 12장 파생클래스
Tcpl 12장 파생클래스
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
More effective c++ chapter3 4
More effective c++ chapter3 4More effective c++ chapter3 4
More effective c++ chapter3 4
 
Mec++ chapter3,4
Mec++ chapter3,4Mec++ chapter3,4
Mec++ chapter3,4
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshin
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
 
10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기10만 라인, 26280시간의 이야기
10만 라인, 26280시간의 이야기
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법
 

Call back 발표자료

  • 2. What is the CallBack? • 자바스크립트에서 비동기성을 표현하는 기본 단위다. • ‘나중’에 실행 될 함수(Function)이다. • 프로그램의 연속성을 감싼 / 캡슐화한 장치다.
  • 3. 콜백 함수의 예 • 콜백함수의 실행 순서는 A, B, C 순이다. • A와 B는 프로그램의 ‘지금’에 속하 고 C는 프로그램의 ‘나중’에 속한다. • ‘지금’의 코드가 실행 된 후 비결정 적 시간 동안 중지되고 그 후 ‘C’의 코드가 실행된다.
  • 4.
  • 5. 비동기 코드가 왜 어렵나? • 인간의 두뇌는 멀티태스커가 아니라 싱글태스커다. • 이벤트 루프 큐가 동작하는 것 처럼 굉장히 빠른 컨택스트 교환 기로 기능하고 있어서 동시에 하는 것처럼 보인다. • 인간은 단계별(Step-by-Step) 로 끊어 생각하는 경향이 있어서
 동기 —> 비동기로 전환된 이후론 단계별로 나타내기가 쉽지 않다. • 사람의 두뇌가 비동기처럼 회전하지 않으니 콜백으로 비동기 
 JS코드를 작성하고 추론하기가 어렵다.
  • 7. 콜백 지옥 클릭 이벤트 대기 —> 타이머 작동까지 대기 —> AJAX 응답 받을때 까지 대기 .
  • 8. 콜백지옥을 벗어나려면? • 코드 단계의 해결책은 일단 중첩을 제거하는 것이다. • 하지만 저자는 이 코드를 추론하려 면 함수에서 다른 함수로, 또 그다 음 함수로 흐름을 따라가기 위해선 소스 코드를 널뛰기 해야한다고 말 한다. • 이것이 저자가 주장하는 콜백의 
 첫 번째 단점이다.
  • 9. 제어의 역전 • 콜백 중심적 설계 방식에서 가장 큰 문제점은 제어권 교환이다. • 콜백을 넘겨주는 ajax()는 개발자가 작성하거나 직접 제어할 수 있 는 함수가 아니라 서드파티가 제공하는 유틸리티인 경우가 많다. • 문제는 다른 파트에 제어권을 줬을 때 다른 파트를 믿을 수 있는가? 이다.
  • 10.
  • 11. • (추적이 끝나기도 전에) 콜백을 너무 일찍 부른다. • (아예 호출하지도 않거나) 콜백을 너무 늦게 부른다. • 콜백을 너무 적게 또는 너무 많이 부른다. • 필요한 환경/인자를 정상적으로 콜백에 전달하지 못한다. • 일어날지 모를 에러/예외를 무시한다. • … 모든 경우별로 방어로직을 구현하는건 어렵다.
  • 12. 방어로직 • 개발자는 대부분 예기치 못한 상황을 방지하고 줄이고자 내부 함수 작성시 방어로직을 작성한다.
 
 
 
 
 
 
 
 

  • 13. • 콜백의 가장 골치 아픈 부분은 이렇게 방어코드를 삽입했음에도 완 전히 잘못 틀어질 수 있는 제어의 역전 문제다. • 제어의 역전으로 빚어진 믿지 못할 코드를 완화할 장치가 없는 상황 에서 콜백으로 코딩하면 버그를 심어놓는 것과 다름이 없다.
  • 15. 디자인 패턴을 적용한 콜백 분할 콜백 이런 API 설계에서 failure 함수는 필수가 아니며,
 작성하지 않으면 에러는 조용히 무시된다.
  • 16. 에러 우선 스타일 에러 객체를 첫 번째 인자로 받는다.
 성공 시 이 인자는 빈/ falsy 객체지만, 실패 시 truthy 또는 에러 객체로 셋팅된다.
  • 17. • 위의 두 예제로 믿음성 문제가 해결된 것 처럼 보이지만 전혀 그렇 지 않다. • 원하지 않는 반복적인 호출을 방지하거나, 걸러내는 콜백 기능이 전 혀 없으며, 성공/에러 신호를 동시에 받거나 전혀 못받을 수 있으므 로 상황별로 코딩해야 하는 부담이 생겼다. • 표준적인 패턴을 띠고 있지만, 재사용이 불가능한 장황한 관용 코드 다. • 만약 콜백이 한번도 호출되지 않는다면?
  • 18.
  • 19. 결론 • 콜백은 자바스크립트에서 비동기성을 표현하는 기본 단위 였지만,
 점점 진화하는 비동기 프로그래밍 환경에서 충분하지 않게 됐다. • 콜백으로 인한 비선형적, 비순차적으로 나타나는 코드들은 추론하기 어렵 고 악성 버그를 품은 코드로 이어진다. • 콜백은 프로그램을 진행하기 위해 제어권을 다른파트로 넘겨줘야하는데 제 어권이 넘어가면서 믿음성 문제가 발생한다. • 이런 믿음성 문제를 해결하고자 임시로직을 짜 넣을 수 있지만 유지보수가 어려운 스파게티 코드가 발생한다. • 이런 문제들을 해결하기위해 프라미스라는 최신 기술이 등장하게 되었다.