<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://www.gaonwiki.com/w/index.php?action=history&amp;feed=atom&amp;title=Eval_%ED%95%A8%EC%88%98</id>
	<title>Eval 함수 - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://www.gaonwiki.com/w/index.php?action=history&amp;feed=atom&amp;title=Eval_%ED%95%A8%EC%88%98"/>
	<link rel="alternate" type="text/html" href="https://www.gaonwiki.com/w/index.php?title=Eval_%ED%95%A8%EC%88%98&amp;action=history"/>
	<updated>2026-07-20T19:18:29Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://www.gaonwiki.com/w/index.php?title=Eval_%ED%95%A8%EC%88%98&amp;diff=107739&amp;oldid=prev</id>
		<title>Gaon12: 시작</title>
		<link rel="alternate" type="text/html" href="https://www.gaonwiki.com/w/index.php?title=Eval_%ED%95%A8%EC%88%98&amp;diff=107739&amp;oldid=prev"/>
		<updated>2025-02-07T12:40:10Z</updated>

		<summary type="html">&lt;p&gt;시작&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 개요 ==&lt;br /&gt;
프로그래밍에서 문자열로 된 코드를 실행시키는 함수. 대부분의 스크립트 기반 프로그래밍 언어에서 지원하며, 실행 시점에 동적으로 코드를 평가하고 실행할 수 있게 해준다. 그러나 C/C++과 같이 정적 컴파일 언어에서는 기본적으로 제공되지 않으며, 별도의 라이브러리나 코드 생성 기법을 활용해야 유사 기능을 구현할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;eval()&amp;#039;&amp;#039;&amp;#039; 함수는 동적인 기능을 제공하여, 런타임에 사용자 입력이나 외부 데이터 등을 코드로 해석해 실행할 수 있다는 장점이 있다. 하지만 보안상의 위험과 디버깅, 유지보수의 어려움으로 인해 대부분의 상황에서는 사용이 권장되지 않는다. 실제로 &amp;#039;&amp;#039;&amp;#039;eval()&amp;#039;&amp;#039;&amp;#039;을 활용해야 할 정당한 이유가 있는 경우는 매우 드물며, 필요한 기능을 안전하고 명확하게 대체할 수 있는 다른 방법을 모색하는 편이 훨씬 낫다.&lt;br /&gt;
&lt;br /&gt;
특히 웹 환경(예: 자바스크립트)에서는 사용자의 입력 또는 URL 파라미터 등을 신뢰 없이 곧바로 &amp;#039;&amp;#039;&amp;#039;eval()&amp;#039;&amp;#039;&amp;#039;에 전달할 경우, 공격자가 임의의 코드를 실행시킬 수 있으므로 코드 인젝션 취약점이 발생한다. 이는 서버 및 사용자 환경 양쪽에서 모두 심각한 보안 문제로 이어질 수 있으므로, 사용 시 각별한 주의와 사전 검증이 필수적이다.&lt;br /&gt;
&lt;br /&gt;
== 주의사항 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Eval 함수 사용시 주의사항&lt;br /&gt;
|-&lt;br /&gt;
! 위험요소 !! 설명&lt;br /&gt;
|-&lt;br /&gt;
| 코드 인젝션 || 악의적인 코드가 실행될 수 있음. 사용자 입력을 직접 전달할 경우 특히 위험&lt;br /&gt;
|-&lt;br /&gt;
| 성능 저하 || 런타임에 코드를 파싱하고 실행하므로 일반 코드보다 느림. 대량 반복 사용 시 성능 문제 가중&lt;br /&gt;
|-&lt;br /&gt;
| 디버깅 어려움 || 동적으로 생성된 코드는 디버깅 도구에서 추적하기 어려움. 에러 위치 파악이 힘듦&lt;br /&gt;
|-&lt;br /&gt;
| 유지보수 복잡 || 코드가 명확하지 않아, 다른 개발자가 이해하고 수정하기가 까다로움&lt;br /&gt;
|-&lt;br /&gt;
| 예측 불가능성 || 실행 시점에 어떤 코드가 실행될지 명확하지 않아, 테스트 범위를 예측하기 어려움&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 언어별 사용법 ==&lt;br /&gt;
각 언어에서 &amp;#039;&amp;#039;&amp;#039;eval()&amp;#039;&amp;#039;&amp;#039; 또는 유사 기능이 제공되는 방식은 조금씩 다르다. 여기서는 대표적으로 자바스크립트, 파이썬, PHP, Ruby에서의 사용 예시를 살펴보고 주의해야 할 점을 정리한다.&lt;br /&gt;
&lt;br /&gt;
=== 자바스크립트 ===&lt;br /&gt;
[[자바스크립트]]에서는 &amp;#039;&amp;#039;&amp;#039;eval()&amp;#039;&amp;#039;&amp;#039; 함수를 통해 문자열로 된 자바스크립트 코드를 실행할 수 있다. 스크립트 엔진이 문자열을 자바스크립트 코드로 해석하여 실행하기 때문에, 사용자의 입력을 함부로 전달하면 보안 취약점이 될 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;기본 사용&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// 간단한 수식 계산&lt;br /&gt;
eval(&amp;#039;2 + 2&amp;#039;);  // 결과: 4&lt;br /&gt;
&lt;br /&gt;
// 변수 선언과 사용&lt;br /&gt;
let x = 10;&lt;br /&gt;
eval(&amp;#039;x + 5&amp;#039;);  // 결과: 15&lt;br /&gt;
&lt;br /&gt;
// 여러 줄의 코드 실행&lt;br /&gt;
eval(`&lt;br /&gt;
  let a = 5;&lt;br /&gt;
  let b = 3;&lt;br /&gt;
  a * b;&lt;br /&gt;
`);  // 결과: 15&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;응용 예제&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// 동적으로 함수 생성&lt;br /&gt;
let functionString = `&lt;br /&gt;
  function add(a, b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
  }&lt;br /&gt;
`;&lt;br /&gt;
eval(functionString);&lt;br /&gt;
add(5, 3);  // 결과: 8&lt;br /&gt;
&lt;br /&gt;
// JSON 파싱 (비추천 - JSON.parse() 사용 권장)&lt;br /&gt;
eval(&amp;#039;(&amp;#039; + &amp;#039;{&amp;quot;name&amp;quot;: &amp;quot;John&amp;quot;, &amp;quot;age&amp;quot;: 30}&amp;#039; + &amp;#039;)&amp;#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
자바스크립트에서는 &amp;#039;&amp;#039;&amp;#039;eval()&amp;#039;&amp;#039;&amp;#039;을 대체하기 위해 &amp;#039;&amp;#039;&amp;#039;Function()&amp;#039;&amp;#039;&amp;#039; 생성자를 사용하는 방법이 있으나, 이 역시 보안상 유사한 위험을 내포한다. JSON 데이터를 해석해야 하는 경우 &amp;#039;&amp;#039;&amp;#039;JSON.parse()&amp;#039;&amp;#039;&amp;#039;, 템플릿 문자열을 다루어야 할 때는 안전한 템플릿 엔진을 사용하는 것이 바람직하다.&lt;br /&gt;
&lt;br /&gt;
=== 파이썬 ===&lt;br /&gt;
[[파이썬]]에서는 &amp;#039;&amp;#039;&amp;#039;eval()&amp;#039;&amp;#039;&amp;#039;과 &amp;#039;&amp;#039;&amp;#039;exec()&amp;#039;&amp;#039;&amp;#039; 두 가지 함수를 제공한다. &amp;#039;&amp;#039;&amp;#039;eval()&amp;#039;&amp;#039;&amp;#039;은 단일 표현식을 평가하고 결과를 반환하며, &amp;#039;&amp;#039;&amp;#039;exec()&amp;#039;&amp;#039;&amp;#039;는 여러 줄에 걸친 파이썬 코드를 실행할 수 있다. 두 함수 모두 외부 입력을 처리할 때 보안 문제가 발생할 수 있으므로 주의가 필요하다.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;eval() 사용&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# 수식 계산&lt;br /&gt;
eval(&amp;#039;2 ** 3&amp;#039;)  # 결과: 8&lt;br /&gt;
&lt;br /&gt;
# 리스트 조작&lt;br /&gt;
x = [1, 2, 3]&lt;br /&gt;
eval(&amp;#039;x[0] + len(x)&amp;#039;)  # 결과: 4&lt;br /&gt;
&lt;br /&gt;
# 딕셔너리 생성&lt;br /&gt;
eval(&amp;quot;{&amp;#039;name&amp;#039;: &amp;#039;Python&amp;#039;, &amp;#039;year&amp;#039;: 1991}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;exec() 사용&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# 여러 줄의 코드 실행&lt;br /&gt;
program = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
def greet(name):&lt;br /&gt;
    return f&amp;#039;Hello, {name}!&amp;#039;&lt;br /&gt;
&lt;br /&gt;
result = greet(&amp;#039;Python&amp;#039;)&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
namespace = {}&lt;br /&gt;
exec(program, namespace)&lt;br /&gt;
print(namespace[&amp;#039;result&amp;#039;])  # 출력: Hello, Python!&lt;br /&gt;
&lt;br /&gt;
# 클래스 동적 생성&lt;br /&gt;
class_def = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
class DynamicClass:&lt;br /&gt;
    def __init__(self, value):&lt;br /&gt;
        self.value = value&lt;br /&gt;
    &lt;br /&gt;
    def get_value(self):&lt;br /&gt;
        return self.value * 2&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
exec(class_def)&lt;br /&gt;
obj = DynamicClass(5)&lt;br /&gt;
obj.get_value()  # 결과: 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
파이썬에서는 &amp;#039;&amp;#039;&amp;#039;eval()&amp;#039;&amp;#039;&amp;#039;이 단일 표현식만을 다룰 수 있고, &amp;#039;&amp;#039;&amp;#039;exec()&amp;#039;&amp;#039;&amp;#039;는 반환값 없이 전체 코드 블록을 실행한다. 따라서 코드 구조가 복잡해질수록 &amp;#039;&amp;#039;&amp;#039;exec()&amp;#039;&amp;#039;&amp;#039; 활용 시도 자체가 코드 설계의 문제일 가능성이 높다. 안전한 라이브러리나 모듈을 통해 필요한 기능을 구현하는 편이 대부분 더 권장된다.&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
[[PHP]]에서는 &amp;#039;&amp;#039;&amp;#039;eval()&amp;#039;&amp;#039;&amp;#039; 함수를 사용하여 PHP 코드 문자열을 실행할 수 있다. PHP 역시 사용자 입력이나 파일에서 가져온 문자열을 직접 &amp;#039;&amp;#039;&amp;#039;eval()&amp;#039;&amp;#039;&amp;#039;에 넘길 경우 심각한 보안 취약점이 발생할 수 있으므로, 서버사이드에서 이를 사용할 때는 각별한 검증 절차가 필요하다.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;기본 사용&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// 간단한 계산&lt;br /&gt;
eval(&amp;#039;echo 2 + 3;&amp;#039;);  // 출력: 5&lt;br /&gt;
&lt;br /&gt;
// 변수 사용&lt;br /&gt;
$x = 10;&lt;br /&gt;
eval(&amp;#039;$result = $x * 2;&amp;#039;);&lt;br /&gt;
echo $result;  // 출력: 20&lt;br /&gt;
&lt;br /&gt;
// 함수 정의&lt;br /&gt;
eval(&amp;#039;&lt;br /&gt;
function multiply($a, $b) {&lt;br /&gt;
    return $a * $b;&lt;br /&gt;
}&lt;br /&gt;
&amp;#039;);&lt;br /&gt;
echo multiply(4, 5);  // 출력: 20&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PHP의 &amp;#039;&amp;#039;&amp;#039;eval()&amp;#039;&amp;#039;&amp;#039;에서 주의할 점은, 구문 오류가 있을 경우 런타임 에러가 발생해 코드 실행이 중단될 수 있다는 것이다. 또한 오타나 악의적인 코드를 포함한 문자열이 그대로 실행되므로, 실 서버 환경에서 사용 시에는 필터링, 이스케이프, 혹은 다른 로직으로 대체하는 것을 강력히 권장한다.&lt;br /&gt;
&lt;br /&gt;
=== Ruby ===&lt;br /&gt;
[[Ruby(프로그래밍 언어)|Ruby]]에서는 &amp;#039;&amp;#039;&amp;#039;eval()&amp;#039;&amp;#039;&amp;#039; 메서드를 사용하여 Ruby 코드 문자열을 실행할 수 있다. 메서드 이름 그대로 문자열을 평가하여 결과를 반환하며, 동적 메서드 정의나 클래스 생성을 가능하게 한다.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;기본 예제&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
# 간단한 계산&lt;br /&gt;
eval(&amp;quot;2 + 2&amp;quot;)  # 결과: 4&lt;br /&gt;
&lt;br /&gt;
# 문자열 조작&lt;br /&gt;
str = &amp;quot;hello&amp;quot;&lt;br /&gt;
eval(&amp;quot;str.upcase&amp;quot;)  # 결과: &amp;quot;HELLO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 클래스 정의&lt;br /&gt;
eval(&amp;quot;&lt;br /&gt;
class MyClass&lt;br /&gt;
  def initialize(name)&lt;br /&gt;
    @name = name&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  def greet&lt;br /&gt;
    puts \&amp;quot;Hello, #{@name}!\&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
obj = MyClass.new(&amp;quot;Ruby&amp;quot;)&lt;br /&gt;
obj.greet  # 출력: Hello, Ruby!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
동적으로 코드를 생성하여 실행하는 것은 매우 유연하지만, 역시나 보안 취약점이 될 수 있으므로 외부 데이터를 그대로 &amp;#039;&amp;#039;&amp;#039;eval()&amp;#039;&amp;#039;&amp;#039;에 넘기는 일은 피해야 한다. 또한 유지보수성 측면에서 코드를 명시적으로 작성하는 방법이 훨씬 낫다는 점을 잊지 말아야 한다.&lt;br /&gt;
&lt;br /&gt;
=== 그 외 언어에서의 예시 ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Perl&amp;#039;&amp;#039;&amp;#039;: &amp;lt;code&amp;gt;eval&amp;lt;/code&amp;gt; 블록을 이용해 문자열 코드를 실행하거나 예외 처리를 위해 사용한다. 마찬가지로 외부 입력을 사용할 경우 세심한 검증이 필요하다.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;C#&amp;#039;&amp;#039;&amp;#039;: 기본적으로 &amp;#039;&amp;#039;&amp;#039;eval()&amp;#039;&amp;#039;&amp;#039;에 해당하는 내장 함수는 없지만, &amp;#039;&amp;#039;&amp;#039;Roslyn&amp;#039;&amp;#039;&amp;#039; 컴파일러 API나 &amp;lt;code&amp;gt;CSharpCodeProvider&amp;lt;/code&amp;gt; 등을 이용해 런타임에 코드를 컴파일하여 실행하는 유사 기능을 구현할 수 있다.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Java&amp;#039;&amp;#039;&amp;#039;: 자바 역시 &amp;#039;&amp;#039;&amp;#039;eval()&amp;#039;&amp;#039;&amp;#039;에 해당하는 직접적인 함수는 없으며, 동적 클래스 로더나 &amp;#039;&amp;#039;&amp;#039;JavaCompiler&amp;#039;&amp;#039;&amp;#039; API 등을 사용해 런타임에 코드를 컴파일, 로드, 실행하는 방식을 취할 수 있다.&lt;br /&gt;
&lt;br /&gt;
=== 독립 환경에서의 eval 유사 동작 ===&lt;br /&gt;
몇몇 언어들에서는 표준 &amp;#039;&amp;#039;&amp;#039;eval()&amp;#039;&amp;#039;&amp;#039; 함수를 직접 제공하지 않더라도, 외부 프로세스를 호출하는 방식으로 유사한 효과를 낼 수 있다. 예를 들어, 파이썬의 &amp;#039;&amp;#039;&amp;#039;subprocess&amp;#039;&amp;#039;&amp;#039; 모듈이나 Node.js의 &amp;#039;&amp;#039;&amp;#039;child_process&amp;#039;&amp;#039;&amp;#039; 모듈은 시스템 셸을 통해 명령어를 실행할 수 있으므로, 사실상 문자열을 코드로 해석하고 실행하는 것과 유사한 동작을 수행한다.&lt;br /&gt;
&lt;br /&gt;
* 파이썬의 &amp;#039;&amp;#039;&amp;#039;subprocess.run()&amp;#039;&amp;#039;&amp;#039; 또는 &amp;#039;&amp;#039;&amp;#039;subprocess.Popen()&amp;#039;&amp;#039;&amp;#039; 사용 시, &amp;lt;code&amp;gt;shell=True&amp;lt;/code&amp;gt; 옵션을 부주의하게 설정하면 외부 입력이 셸 명령어로 실행되어 보안 문제가 생길 수 있다.  &lt;br /&gt;
* Node.js의 &amp;#039;&amp;#039;&amp;#039;child_process.exec()&amp;#039;&amp;#039;&amp;#039; 또한 임의의 시스템 명령어를 실행할 수 있어, 공격자가 임의 코드를 실행하도록 악용할 소지가 있다.&lt;br /&gt;
&lt;br /&gt;
이러한 방법은 표준 eval 함수와는 달리 별도의 터미널/cmd 환경을 거치지만, 결국 런타임에 문자열로 된 명령어를 실행한다는 점에서 &amp;#039;&amp;#039;&amp;#039;eval()&amp;#039;&amp;#039;&amp;#039; 함수와 유사한 보안 위험이 존재한다. 따라서 &amp;#039;&amp;#039;&amp;#039;eval()&amp;#039;&amp;#039;&amp;#039;을 직접 사용하든, 혹은 프로세스 호출 방식을 사용하든 외부 입력 검증 및 샌드박싱이 중요한 보안 포인트가 된다.&lt;br /&gt;
&lt;br /&gt;
== 보안 고려사항 ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;eval()&amp;#039;&amp;#039;&amp;#039; 함수는 매우 강력한 기능을 제공하지만, 보안상 심각한 위험을 초래할 수 있다. 다음과 같은 보안 대책을 고려해야 한다:&lt;br /&gt;
&lt;br /&gt;
* 사용자 입력이나 외부 데이터를 직접 &amp;#039;&amp;#039;&amp;#039;eval()&amp;#039;&amp;#039;&amp;#039;에 전달하지 않는다.  &lt;br /&gt;
* 필요한 경우 샌드박스 환경(예: VM, Docker, 제한된 해석기)에서 실행한다.  &lt;br /&gt;
* 가능한 경우 &amp;#039;&amp;#039;&amp;#039;eval()&amp;#039;&amp;#039;&amp;#039; 대신 더 안전한 대체 방법을 사용한다.  &lt;br /&gt;
* 코드 실행 전 철저한 검증과 인코딩, 이스케이프 처리를 수행한다.  &lt;br /&gt;
* 운영 환경에서 실사용 전 보안 분석 및 침투 테스트를 진행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;eval()&amp;#039;&amp;#039;&amp;#039;을 통한 코드 인젝션은 [[OWASP]] 등 각종 보안 가이드라인에서 중요한 취약점으로 언급되고 있다. 특히 웹 애플리케이션에서 자바스크립트나 PHP를 사용할 때는, 입력 검증 없이 문자열을 실행하는 행위가 해커에게 사이트 제어 권한을 넘기는 것과 다름없을 수 있으므로 반드시 주의해야 한다.&lt;br /&gt;
&lt;br /&gt;
=== 안전한 대체 방법 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 용도 !! 안전한 대체 방법&lt;br /&gt;
|-&lt;br /&gt;
| JSON 파싱 || JSON.parse(), json.loads() 등 언어별 JSON 파서 사용&lt;br /&gt;
|-&lt;br /&gt;
| 수식 계산 || 수식 파서(예: math.js, 파이썬의 &amp;#039;&amp;#039;&amp;#039;ast.literal_eval&amp;#039;&amp;#039;&amp;#039; 등) 라이브러리 사용&lt;br /&gt;
|-&lt;br /&gt;
| 템플릿 처리 || 템플릿 엔진(Mustache, Handlebars, Jinja2 등) 사용&lt;br /&gt;
|-&lt;br /&gt;
| 설정 파일 || YAML, TOML 등의 설정 파일 형식 사용&lt;br /&gt;
|-&lt;br /&gt;
| 동적 코드 로딩 || 안전한 플러그인 시스템 혹은 사전 컴파일된 모듈 이용&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
문자열을 동적으로 해석하여 기능을 추가하는 과정을 반드시 거쳐야 한다면, 내부적으로 사용하는 DSL(Domain-Specific Language)을 정의하거나 별도의 파서(Parser)를 작성하는 방법도 고려할 수 있다. 이렇게 하면 외부 입력을 완전히 제어할 수 있고, 일반적인 프로그래밍 언어보다 더 제한된 명령어만 사용 가능하게 설정하여 안전성을 높일 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 관련 내용 ==&lt;br /&gt;
* [[AST (Abstract Syntax Tree)]]&lt;br /&gt;
* [[코드 인젝션]]&lt;br /&gt;
* [[샌드박싱]]&lt;br /&gt;
* [[자바스크립트 보안]]&lt;br /&gt;
* [[OWASP]]&lt;br /&gt;
* [[보안 취약점 점검]]&lt;br /&gt;
* [[동적 로딩 (Dynamic Loading)]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 분류 --&amp;gt;&lt;br /&gt;
[[분류:프로그래밍]]&lt;/div&gt;</summary>
		<author><name>Gaon12</name></author>
	</entry>
</feed>