하나의 웹 페이지에서 여러 jQuery 버전을 사용해야 하는 일은 매우 드뭅니다. 그러나 레거시 코드와 신규 작성된 코드가 혼재된 경우, 서로 다른 버전의 jQuery를 기반으로 하는 컴포넌트를 활용하는 경우에는 이러한 일이 발생하기도 합니다. 이 까다로운 요구사항을 만족하기 위해서는 2가지 문제를 해결해야 합니다.
문제와 해결책
첫 번째 문제는 변수 덮어쓰기입니다. jQuery는 임베드하는 순간, 전역변수 $에 함수를 할당합니다. 따라서 두 번째 jQuery 버전을 임베드하면, 첫 번째로 임베드했던 jQuery의 $ 변수를 덮어쓰게 될 것입니다.
이 문제는 손쉬운 해결책이 있습니다. 바로 jQuery가 제공하는 noConflict()라는 함수입니다. 이 함수는 jQuery가 전역변수 $에 대한 제어권을 포기하고 할당을 해제하게 합니다. 따라서 한 버전의 jQuery를 이용하여 소스코드를 실행한 후, 다음 버전의 jQuery를 임베드하기 전에 noConflict() 함수를 실행하면, 또다른 버전의 jQuery로 전역변수 $가 할당되어 다음 소스코드를 실행할 수 있습니다.
두 번째 문제는 비동기 임베드입니다. jQuery를 임베드하면 이는 비동기적으로 실행되기 때문에, 해당 파일의 로딩이 끝나는 시점을 제어할 수 없습니다. 한 버전의 jQuery가 임베드 되어서 소스코드를 실행하고 있는데, 두 번째 버전의 jQuery의 임베드가 완료되면, noConflict() 함수가 사용되기도 전에 jQuery의 버전이 바뀔 수 있습니다. 따라서 비동기적으로 임베드 되는 jQuery를 순차적으로 임베드할 수 있는 방안이 필요합니다.
이를 위해서는 async와 await를 이용할 수 있습니다. aync 속성의 함수에서 await 지시자를 사용하면, 비동기 처리가 끝날 때까지 다음 행의 소스코드를 실행하지 않고 기다리게 합니다.
(more…)
Continue reading