공지사항

공지사항
NAYANA의 소식과 안내 사항을 확인하세요.
공지사항 테이블
알림

[알림] 오래전부터 하고 싶었던 무한루프 이야기...

2002-01-09 02:09:01
안녕하세요. 나야나 프로그래머 박건협입니다.
nazzang.cc 서버의 다운문제로 데이터 센터에 다녀 왔습니다.
자라보고 놀란가슴 솥두껑보고 놀란다지요.
불과 이틀전의 nazzang.net 문제의 여운이 가시기도 전에 또다시 서버가 다운되니
정말 가슴이 철렁했습니다.

조사결과 기계적인 이상이 있다거나, 서버상의 오류는 아니었습니다.
이용자님중 한분의 파일하나가 문제였습니다.
루핑을 돌게 만들어진 페이지 하나가 평상시에는 100을 오가던 프로세서수치를
1000으로 만들고 급기야 다운을 시켰습니다.

이런 일들은 잊혀질만하면 한번씩 일어나는 것 같습니다.
지난 토요일 nayana.org 무료서버의 사용자들은 하루 종일 서버를 사용할 수 없었습니다.

저희 나야나 운영자 모두는 nayana.org 서버 전체의 의심가는 페이지를
들어가 보며 문제의 페이지를 찾아 헤맸습니다.
거의 10분꼴로 서버는 다운되었고 어떨때는 10초에 한번씩 다운되기도 했습니다.
결국 그날 업무는 거의 마비상태였습니다.

밤11시경에 문제의 페이지를 찾았고 해당 이용자님에게 전화한 결과 완전한
프로그래밍 지식을 가지지 않은채 php나 cgi 파일을 고친것이 화근이었습니다.
방문자가 그페이지에 들어가기 위해 한명이라도 클릭하게 되면 서버는 다운되었습니다.
무한 루프에 빠지도록 되어있기 때문이지요.

오늘 nazzang.cc의 다운역시 마찬가지 이유입니다.
지금도 한 운영자가 그 페이지가 실행되지 않을까 서버를 주시하고 있으며
페이지의 위치를 찾고 있습니다.

프로그래밍에 대해 약간의 지식이 있으신 분들이라면 무한 루프가 무엇인지는 알것입니다.
그러나 프로그래밍에 대해 잘 알지 못하는 분들을 위해 무한 루프에 대해서 간략히 설명을 드리겠습니다. c++, cgi, php,asp, basic. 그 어떠한 프로그래밍 언어이건 프로그래밍 문법에 빠지지 않는 것들에는
if ~then, for ~, while 문등이 있습니다.
이중 for ~나 while 문은 어떠한 조건이 맞으면 어떠한 영역을 반복하여 실행하는 기능을 가지고 있습니다.

php 를 예를 들어 설명을 하겠습니다. 이런 내용들을 흔히 보셨을 겁니다.

for ( 조건 내용)
{
실행내용...
실행내용....
}

이문장은 조건내용이 true(참인값) 일동안 { } 사이의 실행내용을 반복해서 실행하라는 뜻입니다.
아래의 내용또한 마찬가지 입니다.

while (조건내용)
{
실행내용...
실행내용....
}

만약 프로그래밍을 하실때에 조건내용을 끝없이 true(참인값) 으로 준다면
서버는 끝없이 { } 사이의 문장들을 실행하다가 결국은 다운되어 버릴겁니다.
무한루프가 있는 페이지를 실행시킬경우 웹브라우져는 정지된 듯한 상태에서 아래쪽에
있는 상태바에서는 아주 조금씩 실행되는듯이 실행표시가 늘어납니다.
이것은 한참후에 웹브라우져가 '페이지를 찾지 못했습니다.' 라고 표시
하는 것과는 다른것입니다.
이러한 경우 대처방법은 최대한 빨리 웹브라우져의 창을 닫는 것입니다.
그리고 나야나로 전화주시거나 게시판에 글을 남겨 주십시오. 저희들이
무한루프가 걸린 페이지인지 봐드리겠습니다.

어떠한 이유에서건 위의 문장을 서버에서 테스트 해볼 생각은 추호도 하지 마십시오.
만약 고의적으로 위와 같은 프로그래밍의 파일을 서버에서 실행시킨 것이
밝혀 질경우 그책임을 면하기 어려울 것입니다. 물론 여기에서 책임은
업무방해를 포함한 법적인 책임을 말합니다.

현재까지 이러한 몇번의 사례가 발견되었으나, 고의가 아니라고 판단되어
그냥 넘어 갔습니다. 그러나 아무리 고의가 아니라도 그 피해가 너무나 엄청납니다.
100여명이상이 쓰시는 서버를 한순간에 다운시킵니다.
그리고 그 페이지를 찾아내기란 그리 쉬운일만은 아닙니다.
최근에는 많은 무료 보드들이 만들어져 나오고 있습니다.
스킨만 수정하면 여러형태의 게시판이나 방명록이 만들어지지요.
일반인들도 스킨을 만들기도 합니다.
그러나 문제는 이러한 것들이 비전문가에 의해 이루어지다보니
간혹 무한루핑과 같은 치명적인 결과를 낳곤 합니다.

자신이 어느정도 확실한 지식을 갖지 않은채 다른 사람이 만든 프로그램을 수정해서
서버상에서 바로 실행한다는 것은 있어서는 안되는 일입니다.
위에서 예로든 for 나 while 문 내부의 문장을 고칠때는 특별히 주의하셔야 합니다.
서버는 테스트용이 아닙니다. 많은 분들의 계정이 함께 있음을 기억해 주세요.

그럼 이글을 마치기 전에 서버의 자신의 계정에서와 같은 환경을 만들어 자신의 PC에서
테스트를 해볼 수 있는 방법을 알려 드리겠습니다.
원도우용 apm, 혹은 윈도우용amp 라고도 합니다.
이것을 자신의 PC에 설치하셔서 사용하시면 마치 자신의 PC를 서버인것처럼
프로그램을 실행해 볼수 있습니다.
설치도 간단합니다.
다운받으실 곳은 phpschool.com 이나 기타 관련 사이트를 가보시면 됩니다.

현재 linux, mysql, php등에 대해서 공부를 하실수 있는 가장 좋은 사이트로 phpschool.com을
추천하고 싶습니다.
저역시 과거 많은 도움을 받았고, 지금도 받고 있는 사이트이며 무료입니다.
많은 분들의 주옥같은 질문과 그에 못지 않은 답변이 있습니다.
그곳에 가셔서 프로그래밍에 대한 기초에 대해서도 알아보시고, 윈도우용 apm도 다운받아 설치해 보세요.
그리고 먼저 자신의 pc에서 실행해 보신다음 이상이 없으면 서버로 올려 주세요.

전문적인 프로그래머가 되려는 것이 아닌 이용자님께 이러한 요구가 과한 것일수 있음은 인정합니다.
그렇다면 적어도 for나 while 문장 내부의수정만이라도 삼가해 주세요.
오래전부터 올리고 싶었지만 이제서야 올리는 글입니다.
더욱더 쓸만한 나야나를 만들겠다는 다짐을 해보며 이만 줄입니다.
긴글 읽어 주셔서 감사합니다.