문자열 형태의 파이썬 코드 실행하기
파이썬에서는 문자열로 저장된 코드를 동적으로 실행할 수 있습니다. 실행하려는 내용이 문장(statement)인지 표현식(expression)인지에 따라 사용하는 함수가 달라집니다.
1. exec() — 문장(코드 블록) 실행
여러 줄의 코드나 print 문 같은 파이썬 문장을 실행하려면 exec() 함수를 사용합니다.
>>> my_code = 'print("Hello World!")'
>>> exec(my_code)
Hello World!exec()는 문자열을 그대로 파이썬 코드로 해석하여 실행하기 때문에, 조건문·반복문·함수 정의 등 복잡한 코드도 실행할 수 있습니다.
2. eval() — 표현식 값 평가
단순히 수식이나 표현식의 결괏값만 필요하다면 eval()을 사용하는 것이 적합합니다. eval()은 표현식을 평가한 결과를 반환합니다.
>>> my_expression = "5 + 3" >>> eval(my_expression) 8
예를 들어 사용자 입력으로 받은 수식을 계산하거나, 설정 파일에 담긴 표현식을 처리할 때 유용하게 활용할 수 있습니다.
⚠️ 보안 주의사항
exec()와 eval()은 매우 강력한 함수이지만, 그만큼 위험도가 큽니다. 외부에서 들어온 신뢰할 수 없는 문자열을 그대로 실행하면 다음과 같은 문제가 발생할 수 있습니다.
- 악성 코드 실행으로 인한 시스템 침해
- 데이터 삭제, 파일 조작 등 심각한 보안 취약점
- 디버깅하기 어려운 미묘한 버그 발생
따라서 반드시 신뢰할 수 있는 소스의 문자열에만 사용하고, 가능하다면 ast.literal_eval()처럼 더 안전한 대안을 우선 고려하는 것이 좋습니다.