• 티스토리 홈
  • 프로필사진
    루루개발자
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
루루개발자
  • 프로필사진
    루루개발자
    • 분류 전체보기 (212)
      • react & next.js (12)
      • Node.js & Javascript & Type.. (24)
        • d3.js (10)
      • 차트 만들기 (1)
      • 티스토리 스킨 개발 (7)
      • 내가 만든 패키지 (3)
      • 내가 만든 CSS (1)
      • CSS (7)
      • 도커 & 쿠버네티스 (3)
      • 개인 프로젝트 (7)
      • 리뷰 & 추천 (2)
      • 알고리즘 (1)
      • IT 기타 (18)
      • 잡동사니 (1)
      • Spring Boot (5)
      • 취미로 그리는 그림들 (120)
      • 개인적인 생각들 (0)
  • 반응형
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • javascript 난독화 이슈 (생성자 인자의 파라미터명)
        2022년 05월 11일
        • 루루개발자
        • 작성자
        • 2022.05.11.오전02:13
        반응형

         

        안녕하세요. 루루개발자 입니다.

        이번 글에서는 javascript 난독화를 적용하면서 생긴 이슈에 대해 공유드리고자 합니다.

         

        다음과 같은 상황이라고 가정해봅시다.

         

        -- test-class.class.js

        class TestClass {
          apiUrl;
          apiCallback;
        
          constructor(options) {
            console.log('TestClass.options', options);
            this.apiUrl = options.apiUrl;
            this.apiCallback = options.apiCallback;
        
            console.log('this.apiUrl', this.apiUrl);
            console.log('tthis.apiCallback', this.apiCallback);
          }
        }

         

        -- test-class.class.min.js (난독화 적용)

        class TestClass{l;t;constructor(s){console.log("TestClass.options",s),this.l=s.l,this.t=s.t,console.log("this.apiUrl",this.l),console.log("tthis.apiCallback",this.t)}}

         

        -- test-class.js (test-class.min.js 파일을 import)

        window.addEventListener('load', function() {
          console.log('...');
        
          const aa = new TestClass({
            apiUrl: 'https://www.sample.url/',
            apiCallback: function() {
              console.log('apiCallback');
            },
          });
        });

         

         

        위 예제대로 진행을 하면 TestClass 의 apiUrl 과 apiCallback 에는 undefined 가 할당됩니다.

        그 이유는, 난독화된 코드를 보면 알 수 있습니다. 

         

        난독화 후 constructor 의 options 인자는 s 로 변경되었지만

        해당 객체 안에는 파라미터명이 apiUrl, apiCallback 으로 유지되어 있습니다.

         

        난독화가 적용되면서 s.l, s.t 등으로 파라미터명이 변경되었는데,

        s 객체 안에는 l 이나 t 라는 파라미터가 존재하지 않으며

        apiUrl 과 apiCallback 이라는 파라미터가 존재하는 상황입니다. 

         

        그렇기 때문에 존재하지 않은 파라미터명을 참조하게 되어 undefined 가 할당되게 된 것입니다.

         

         

        그럼 이러한 상황을 어떻게 해결할 것인가에 대해 고민하던 찰나, 

        변수에 할당된 문자열 값은 난독화에 영향을 받지 않는다는 점을 고려하여

        다음과 같이 class 파일을 수정하였습니다.

         

        -- test-class.class.js (수정 후)

        class TestClass {
          apiUrl;
          apiCallback;
        
          constructor(options) {
            console.log('TestClass.options', options);
            this.apiUrl = options[this.getConstVariables().apiUrl];
            this.apiCallback = options[this.getConstVariables().apiCallback];
        
            console.log('this.apiUrl', this.apiUrl);
            console.log('tthis.apiCallback', this.apiCallback);
          }
        
          getConstVariables() {
            return {
              apiUrl: 'apiUrl',
              apiCallback: 'apiCallback'
            };
          }
        }

         

        -- test-class.class.min.js (수정 후 난독화 적용)

        class TestClass{l;i;constructor(s){console.log("TestClass.options",s),this.l=s[this.t().l],this.i=s[this.t().i],console.log("this.apiUrl",this.l),console.log("tthis.apiCallback",this.i)}t(){return{l:"apiUrl",i:"apiCallback"}}}

         

        -- test-class.js (test-class.min.js 파일을 import)

        window.addEventListener('load', function() {
          console.log('...');
        
          const aa = new TestClass({
            apiUrl: 'https://www.sample.url/',
            apiCallback: function() {
              console.log('apiCallback');
            },
          });
        });

         

         

        위와 같이 수정 후 테스트를 진행해보면

        TestClass 생성자에 넘긴 파라미터의 값들이 

        TestClass 클래스 안에서 정상적으로 참조되어 this 에 할당된 것을 확인해볼 수 있습니다.

         

         

        이렇듯 문자열을 이용해 난독화된 클래스 파일에도

        생성자에 원하는 파라미터명으로 데이터 초기화가 가능한 것을 알 수 있었습니다.

         

        읽어주셔서 감사합니다. :)

        반응형

        'Node.js & Javascript & Typescript' 카테고리의 다른 글

        클로저(Closure)에 대해 알아봅시다.  (0) 2022.06.11
        웹에서 url scheme 로 앱 호출시 앱 설치 여부 감지 방법  (0) 2022.06.09
        javascript 파일 난독화  (0) 2022.05.10
        TDZ(Temporal Dead Zone)  (0) 2021.11.16
        호이스팅 (hoisting) (1)  (0) 2021.11.15
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바

        단축키

        내 블로그

        내 블로그 - 관리자 홈 전환
        Q
        Q
        새 글 쓰기
        W
        W

        블로그 게시글

        글 수정 (권한 있는 경우)
        E
        E
        댓글 영역으로 이동
        C
        C

        모든 영역

        이 페이지의 URL 복사
        S
        S
        맨 위로 이동
        T
        T
        티스토리 홈 이동
        H
        H
        단축키 안내
        Shift + /
        ⇧ + /

        * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.