eval 함수란?
eval()
함수는 전달된 문자열을 JavaScript 코드로 해석하여 해석된 코드를 실행합니다.
자세한 사용 방법은 아래 링크를 클릭하여 게시된 포스팅을 확인해주세요.
eval()
함수는 전달된 문자열을 코드로 실행하는 강력한 기능이 존재하지만, 강력한 기능에는 위험성이라는 대가가 존재합니다. eval()
함수는 성능, 보안, 디버깅의 문제라는 위험성이 존재합니다.
대부분의 개발자들은 eval()
함수 사용하는 것을 반대하며, eval()
함수를 사용해야 하는 경우 다른 대안 방법이 존재하는지 생각하고 고민합니다.
이번 포스팅에서는 eval 함수의 문제점에 대해 소개합니다.
성능
eval()
함수에 전달된 문자열은 동적입니다. 여기서 동적이라는 의미는 '어떠한 문자열이 eval()
함수에 전달될지 예측할 수 없다'라는 의미입니다. 따라서 JavaScript 코드가 전달된 문자열에 대해 알 수 있는 방법은 없습니다.
JavaScript는 eval()
함수에 전달된 문자열을 실행하려면 런타임에 문자열을 해석하고 컴파일해야 합니다. 문자열이 복잡한 코드로 되어있는 경우 문자열을 해석하고 실행하는 과정에서 많은 비용이 발생하여 성능면에서 좋지 않습니다.
보안
eval()
함수를 사용하면 악성적인 코드를 실행할 수 있습니다. JavaScript와 Web 보안에 대해 이해도가 높은 사용자가 eval()
함수를 실행하는 텍스트 필드를 발견하여 텍스트 필드에 악성적으로 작성된 문자열을 입력하면 악성 코드를 실행할 수 있습니다.
eval()
함수를 악용하여 사용하면 서버에 영향을 미치게 할 수 있는데, 예를 들어 무한 루프로 서버에 요청하는 코드를 작성하거나 또는 JavaScript가 서버에서 동작하는 경우입니다.
디버깅의 어려움
JavaScript뿐만 아니라 다른 프로그래밍 언어에서 '
, "
누락으로 인해 간단한 문제에 대해 시간을 보내는 경우가 있을 겁니다. eval()
함수에 전달되는 값은 문자열이므로 '
, "
를 제대로 명시하지 않으면 오류가 발생하거나 및 undefined를 반환할 가능성이 매우 높습니다.
그리고 코드가 동적으로 동작하므로 능숙한 개발자가 아닌 이상 디버깅의 어려움을 겪게 될 것입니다.
'JavaScript > 함수' 카테고리의 다른 글
[JavaScript]생성자 함수(Constructor Function) (0) | 2021.12.13 |
---|---|
[JavaScript]call, apply, bind 함수 사용 방법 (1) | 2021.12.08 |
[JavaScript]제너레이터 함수 응용(반복, 비동기, 옵저버) (0) | 2021.12.05 |
[JavaScript]제너레이터 함수(Generator Function) 사용 방법 (0) | 2021.12.05 |
[JavaScript]eval 함수 사용법 (0) | 2021.12.03 |
댓글