Node.js 를 배워보자

Node.js로 JavaScript 파일의 함수 호출 정보 파싱하기

_Blue_Sky_ 2025. 3. 2. 17:21
728x90
Node.js, JavaScript, 함수 호출, 파싱, 아규먼트, AST, 코드 분석, 개발 도구
프로그래밍을 하다 보면 코드 내에서 어떤 함수가 어떻게 호출되고 있는지, 그 함수에 어떤 아규먼트가 전달되는지를 분석해야 할 때가 있습니다. 이번 글에서는 Node.js 환경에서 JavaScript 파일을 읽고, 모든 함수 호출과 관련된 정보를 파싱하는 방법을 알아보겠습니다. 이를 위해 AST(Abstract Syntax Tree)를 활용하며, 구체적인 예제 코드를 제공합니다.
1. 필요한 도구 준비하기
AST,
@babel
/parser,
@babel
/traverse, Node.js 모듈, 파일 읽기, 설치
먼저, JavaScript 코드를 파싱하려면 AST를 생성하고 탐색할 도구가 필요합니다. 여기서는 @babel/parser로 코드를 파싱하고, @babel/traverse로 AST를 탐색합니다. 다음 명령어로 필요한 패키지를 설치하세요:
 
npm install @babel/parser @babel/traverse
2. 기본 코드 구조 작성하기
파일 읽기, fs 모듈, 파싱 로직, 함수 호출 추출
먼저 파일을 읽고 파싱하는 기본 구조를 작성합니다. 예제 파일(example.js)이 있다고 가정하고, 아래와 같이 코드를 작성합니다:
 
 
const fs = require('fs');
const parser = require('@babel/parser');
const traverse = require('@babel/traverse').default;

// 파일 읽기
const code = fs.readFileSync('example.js', 'utf8');

// AST 생성
const ast = parser.parse(code, {
  sourceType: 'module', // ES 모듈 지원
});

// 함수 호출 탐색
traverse(ast, {
  CallExpression(path) {
    const node = path.node;
    const functionName = node.callee.name || 'anonymous';
    const args = node.arguments.map(arg => arg.value || arg.name || 'unknown');
    console.log(`Function: ${functionName}, Arguments: [${args.join(', ')}]`);
  },
});

console.log('파싱 완료!');
3. 예제 파일과 실행 결과
example.js, 테스트 코드, 콘솔 출력, 결과 확인
example.js에 아래와 같은 테스트 코드를 작성합니다:
javascript
 
function sayHello(name) {
  console.log(name);
}

sayHello('Alice');
sayHello(42);
add(1, 2, 3);
위 코드를 실행하면 다음과 같은 출력이 나타납니다:
 
Function: sayHello, Arguments: [Alice]
Function: sayHello, Arguments: [42]
Function: add, Arguments: [1, 2, 3]
파싱 완료!
4. 코드 동작 원리
CallExpression, AST 노드, 함수 이름, 아규먼트 추출
  • fs.readFileSync: 파일을 동기적으로 읽어 코드 문자열을 가져옵니다.
  • @babel/parser.parse: 코드 문자열을 AST로 변환합니다.
  • @babel/traverse: AST를 순회하며 CallExpression 노드를 찾아 함수 호출을 탐지합니다.
  • node.callee.name: 함수 이름을 추출하며, 익명 함수는 'anonymous'로 표시됩니다.
  • node.arguments: 아규먼트를 배열로 가져와 값을 추출합니다.
5. 확장 가능성과 한계
익명 함수, 화살표 함수, 객체 메서드, 에러 처리, 개선
이 코드는 기본적인 함수 호출을 파싱하지만, 화살표 함수나 객체 메서드 호출(obj.method())은 추가 처리가 필요합니다. 예외 처리를 추가하거나, 특정 함수만 필터링하는 로직을 넣어 확장할 수도 있습니다.

이 방법을 사용하면 코드 분석 도구나 디버깅 유틸리티를 쉽게 만들 수 있습니다. 질문이 있다면 댓글로 남겨주세요!
 
728x90

XML 파일 안에 <javascript> 태그로 감싸진 JavaScript 코드를 파싱하려면, 먼저 XML을 파싱해서 <javascript> 태그 내부의 내용을 추출한 뒤, 그 내용을 AST로 분석해야 합니다. 이를 위해 xml2js 같은 XML 파싱 라이브러리를 추가로 사용하면 됩니다. 아래는 수정된 블로그 글 형태의 예제입니다. 키워드는 한 줄에 콤마로 구분됩니다.


Node.js로 XML 파일 내 <javascript> 태그의 함수 호출 정보 파싱하기

 
Node.js, XML, <javascript> 태그, 함수 호출, 파싱, 아규먼트, AST, 코드 분석, xml2js
XML 파일 안에 <javascript> 태그로 JavaScript 코드가 포함되어 있다면, 단순히 .js 파일을 읽는 것과는 다른 접근이 필요합니다. 이번 글에서는 XML 파일을 파싱하여 <javascript> 태그 안의 JavaScript 코드를 추출하고, 함수 호출 및 아규먼트를 분석하는 방법을 설명합니다.
1. 필요한 도구 준비하기
xml2js,
@babel
/parser,
@babel
/traverse, Node.js 모듈, 설치, XML 파싱
XML 파싱을 위해 xml2js를 사용하고, JavaScript 코드를 분석하려면 @babel/parser@babel/traverse가 필요합니다. 아래 명령어로 패키지를 설치하세요:
bash
 
npm install xml2js @babel/parser @babel/traverse
2. 수정된 코드 구조 작성하기
XML 읽기, fs 모듈, xml2js 파싱, <javascript> 추출, AST 분석
XML 파일(example.xml)에서 <javascript> 태그 안의 코드를 추출한 뒤 AST로 파싱하는 코드는 다음과 같습니다:
javascript
 
const fs = require('fs');
const xml2js = require('xml2js');
const parser = require('@babel/parser');
const traverse = require('@babel/traverse').default;

// XML 파일 읽기
const xml = fs.readFileSync('example.xml', 'utf8');

// XML 파싱
xml2js.parseString(xml, (err, result) => {
  if (err) {
    console.error('XML 파싱 에러:', err);
    return;
  }

  // <javascript> 태그 내용 추출
  const jsCode = result.root?.javascript?.[0];
  if (!jsCode) {
    console.log('JavaScript 코드가 없습니다.');
    return;
  }

  // AST 생성
  const ast = parser.parse(jsCode, {
    sourceType: 'script', // 일반 스크립트 모드로 파싱
  });

  // 함수 호출 탐색
  traverse(ast, {
    CallExpression(path) {
      const node = path.node;
      const functionName = node.callee.name || 'anonymous';
      const args = node.arguments.map(arg => arg.value || arg.name || 'unknown');
      console.log(`Function: ${functionName}, Arguments: [${args.join(', ')}]`);
    },
  });

  console.log('파싱 완료!');
});
3. 예제 XML 파일과 실행 결과
example.xml, 테스트 코드, 콘솔 출력, 결과 확인
example.xml 파일을 다음과 같이 작성합니다:
xml
 
<root>
  <javascript>
    function sayHello(name) {
      console.log(name);
    }
    sayHello("Alice");
    sayHello(42);
    add(1, 2, 3);
  </javascript>
</root>
위 코드를 실행하면 출력은 다음과 같습니다:
 
Function: sayHello, Arguments: [Alice]
Function: sayHello, Arguments: [42]
Function: add, Arguments: [1, 2, 3]
파싱 완료!
4. 코드 동작 원리
xml2js.parseString, XML 구조, 태그 접근, AST 노드, 함수 이름, 아규먼트 추출
  • fs.readFileSync: XML 파일을 읽습니다.
  • xml2js.parseString: XML을 JavaScript 객체로 변환합니다.
  • result.root.javascript[0]: <javascript> 태그의 내용을 추출합니다 (태그가 배열로 반환됨).
  • @babel/parser.parse: 추출된 JavaScript 코드를 AST로 변환합니다.
  • @babel/traverse: AST를 순회하며 CallExpression을 찾아 함수 호출 정보를 추출합니다.
 
           
728x90
 
 
5. 주의점과 확장
에러 처리, 태그 중첩, 여러 <javascript> 태그, sourceType, 개선
  • XML 구조에 따라 result.root?.javascript?.[0] 경로가 달라질 수 있으니, 실제 XML 구조를 확인하세요.
  • 여러 <javascript> 태그가 있다면 반복문을 추가해 모두 파싱할 수 있습니다.
  • sourceType: 'script'는 모듈이 아닌 일반 스크립트로 설정했지만, 필요 시 'module'로 변경하세요.
  • 에러 처리를 강화하면 더 안정적인 코드를 만들 수 있습니다.

XML 안의 JavaScript 코드를 분석하는 이 방법은 특정 설정 파일이나 템플릿에서 코드를 추출할 때 유용합니다. 추가 질문이 있다면 언제든 물어보세요!

이렇게 수정하면 XML 파일 내 <javascript> 태그를 처리할 수 있습니다.
728x90