[질문] memory leak 의 종류와 찾는 법

익명 사용자의 이미지

고수님들 안녕하십니까..
VC++ 하다가 이제 ANSI C를 한지 1 년이 넘어서는군요..

현재 서버 클라이언트 모델에서 mysql 과 연동한 프로그램을 만들고 있습니다.
온라인상에서 서비스도 하구요..

잘 됩니다만..
좀 찜찜하면서 해결이 잘 안되는 부분이 있네요.
역시 아직도 갈길은 멀기만 하네요..

top 으로 메모리 사용을 보면 조금씩 leaking 되고 있는것이 보입니다.
이게 내 프로그램인지는 확실치는 않습니다만..
거의 그렇다고 봅니다만..

(linux엔 bounds checker 같은 프로그램이 없나..)

이 부분을 찾을 방법이 궁금합니다.

서버 기준으로 일단 몇가지 질문을 정리 하면요...

1. 웹상에서 구현되는 php 프로그래밍도 memory leak 발생할수 있나 ? -.-
설마 ?

2. 기본적인 mysql 관련 memory leak 발생할수 있나 ?
( top 실행시 mysql 프로세스만 뜨면 어김없이 메모리 사용이 늘던데 )
( 생성과 해제를 번갈아 되나 적체되는 놈덜은 ? )

3. fork문의 생성과 소멸 시점에 발생 할수 있는 memory leak 이 있나 ?
( fork 안에서는 memory 관련 alloc 함수가 없다고 보았을때 )

4. 배열로 정의한 변수는 믿을수 있는가 ?
( 보통 malloc 함수만 free로 챙기잖아요..)

5. char* 로만 잡은 함수도 믿을만 한가 ?

기타

6. 소켙에서(서버측임) 2K 바이트를 데이타를 일단 1K 만 읽고 아니다
싶어서 연결된 클라이언트를 close 및 exit 시키면 나머지 1K의 행방은
어떻게 되나..

7. ansi C 에서 gabage collecting 하는 방법은 어떤게 있는지 ?
아니면 님들은 어떻게 처리 또는 관리 하나요 ?
free 하나면 만사 해결인가요 ?

8. 마지막으로 top 으로 띄웠을때 나온 내용을 신용할수 있나 ..!!

일단 몇가지 말씀드리면
malloc 해준 변수는 다 free 를 해주었습니다.
포인터 주소나 배열은 프로세스 스택에 할당되므로 클라이언트 가
종료 됨과 동시에 소멸된다고 봐도 되는거 맞지요 ? ^^;

그럼 결국 heap 영역의 문제라고 봐야 할꺼구 그렇다면
malloc 인데.. 역시 소스상엔 다 해제 해 준듯...

고수님들의 많은 의견 바랍니다...

추신 혹시 snort나 그런류들의 프로그램 메모리 잡아 먹나요 ?

익명 사용자의 이미지

아래있는 내용들은 개인적인 주관이 많이 포함되어있습니다.
절대적인 상황이 아니므로 참고만 해주세요.

기본적으로 LINUX는 386 Protected Mode를 사용한다는 것을 알고계시겠죠.
Protected Mode란 각각의 Process가 독립적인 메모리에서 실행이 된다고
알고있습니다.
LINUX의 커널은 전체 메모리를 관리하고 각각의 Process는 전체 메모리안의
독립적인 메모리를 할당받아 실행이 되는거죠.
Windows에서는 이유를 알 수 없지만 가끔 메모리가 센다고들 합니다.
이건 메모리관리가 커널에 의존하는 것이 아니라 Process독립적으로 관리를
하기 때문이라고들 하죠. 즉, 하나의 Process가 실행이되고 그 Process가
메모리를 할당하고 해제를 하지 않으면 시스템의 리소스가 줄어드는 현상이
발생을 한다는 소리입니다. 물론 이렇게 할당된 메모리는 운좋게 해제가 되는
경우도 있습니다만 가끔 시스템에서 해제를 못하는 경우도 있죠.
하지만 LINUX에서는 그런 일이 없습니다.(386 DataBook어딘가에서 읽은 기억이
있는데 정확한 출처는 잘 모르겠네요. ^^;)
즉, 메모리를 커널에서 관리를 하고 Process는 단지 요청만 하기 때문에
Process가 종료되면 그에 할당된 메모리도 해제를 강제로 시키기 때문이죠.
(음... 이부분은 저도 한번 Kernel소스를 찾아봐아겠네요.)
간단하게 malloc으로 10M를 할당하고 그것을 해제하지 않고 프로그램을 종료
해보니 메모리의 변화가 없더군요. --; (그렇다고 절대적인 실험은 아니였습니다.)
문제가 발생되는 부분은 그 Process가 종료가 되지 않을 때 발생을 하죠.
즉, 할당을 요청하고 Kernel에서 메모리를 할당시켜 주었는데 Process엣 해제를
하지 않고 넘어가면 Process가 종료된것이 아니기때문에 Kernel은 이 메모리에
대한 권한이 아직도 Process에 있다고 판단(결국은 신경도 안쓰는 거지만... ^^;)
그대로 둘 수가 있기때문에 Process가 Daemon일경우에는 심각한 메모리 누수현상을
일으킬 수가 있습니다.(물론 Process가 종료되면 모든 메모리가 Clear되겠죠.)

즉, 현재 maximus님의 서버에 돌고 있는 프로그램이 Daemon형태로 되어있다면
질문하신 대부분의 프로그램들이 메모리 누수현상에 기여할 수도 있다는 가정을
해볼 수가 있습니다.
PHP, MySQL등이 여러사람에 의해 검증되었다고는 하지만 아직도 버그는 존재하고
있고 그렇기 때문에 많은 사람들이 그 버그를 잡기위해 밤새워 고생하는 것 아니
겠습니까? ^^;

maximus wrote..
고수님들 안녕하십니까..
VC++ 하다가 이제 ANSI C를 한지 1 년이 넘어서는군요..

현재 서버 클라이언트 모델에서 mysql 과 연동한 프로그램을 만들고 있습니다.
온라인상에서 서비스도 하구요..

잘 됩니다만..
좀 찜찜하면서 해결이 잘 안되는 부분이 있네요.
역시 아직도 갈길은 멀기만 하네요..

top 으로 메모리 사용을 보면 조금씩 leaking 되고 있는것이 보입니다.
이게 내 프로그램인지는 확실치는 않습니다만..
거의 그렇다고 봅니다만..

(linux엔 bounds checker 같은 프로그램이 없나..)

이 부분을 찾을 방법이 궁금합니다.

서버 기준으로 일단 몇가지 질문을 정리 하면요...

1. 웹상에서 구현되는 php 프로그래밍도 memory leak 발생할수 있나 ? -.-
설마 ?
발생할 수 있다고 볼 수있습니다. 물론 전체적인 시스템에서 영향을 미치지 않는
미세한 부분이라도 있겠죠. 그러니 계속적인 patch와 디버깅이 일어나죠.
하지만 기본적으로는 없다고 보셔도(안정버젼일 경우) 무관합니다.


2. 기본적인 mysql 관련 memory leak 발생할수 있나 ?
( top 실행시 mysql 프로세스만 뜨면 어김없이 메모리 사용이 늘던데 )
( 생성과 해제를 번갈아 되나 적체되는 놈덜은 ? )
MySQL은 메모리 사용을 많이 하는 것으로 알고있습니다. 메모리에 남아있는 프로세서는
아마 계속적인 분석작업때문이 아니면 MySQL 자체의 버그겠죠. ^^;


3. fork문의 생성과 소멸 시점에 발생 할수 있는 memory leak 이 있나 ?
( fork 안에서는 memory 관련 alloc 함수가 없다고 보았을때 )
이건 조금 애매한 문제인데 제가 판단하기로는 없다고 생각합니다. 이유는 앞부분에서도
간단하게 소개했지만... fork ()시에는 자기와 똑같은 환경의 Process를 하나만들어
실행을 시키는 것이므로 소멸시에 사용된 모든 메모리가 해제 되기 때문입니다.
물론 생성시에 leak이 발생한다면 그건 Kernel차원에서 수정을 해주어야 하는 문제겠죠.


4. 배열로 정의한 변수는 믿을수 있는가 ?
( 보통 malloc 함수만 free로 챙기잖아요..)
일정한 크기의 배열은 믿을 수가 있습니다. 하지만 LINUX의 실행파일 형식에 위배되는
(즉, Data영역을 벗어나는) 커다란 배열이라면 문제가 있겠죠. 물론 이정도되면 컴파일러
에서도 경고나 에러를 발생시키겠지만요.


5. char* 로만 잡은 함수도 믿을만 한가 ?
양쪽(호출한 함수나 호출당한 함수)에서 제대로 처리만 해주면 믿을만 합니다.
간단한 예로 표준 함수인 strcpy()는 많은 프로그래머들이 혼란을 야기시키는
함수죠. 저도 몇번 당했지만요. --;
strcpy()함수는 (내부는 보지 않았지만...) src쪽이 불안한 것을 감지하기 어렵습니다.

char* dest;

strcpy (dest, src);

가끔 저련 형식의 프로그램을 자주사용하는데, 문제는 src가 NULL일경우에 Segment fault가
일어난다는 사실입니다. 즉, 표준함수에서 체크하지 않는다는 것인데 이 경우에는 짧게는
몇시간에서 길게는 몇일에 걸쳐 디버깅을 해야하고(같은 상황은 잘 발생하지 않죠. --;)
결국은 if (src) 를 추가하게 만들기도 합니다.
직접 만든 함수를 호출하거나 호출당했을때 기본적으로 검사해야하는 부분을 명확히만 처리해
주면 문제는 없을겁니다.


기타

6. 소켙에서(서버측임) 2K 바이트를 데이타를 일단 1K 만 읽고 아니다
싶어서 연결된 클라이언트를 close 및 exit 시키면 나머지 1K의 행방은
어떻게 되나..
소켓에서는 Life time(?)이라는것이 있습니다.(줏어들은 이야기이지만 packet에 명시
되어있다고 합니다.) 즉, 일정시간을 네트워크에서 헤메다가 사라지게 됩니다.


7. ansi C 에서 gabage collecting 하는 방법은 어떤게 있는지 ?
아니면 님들은 어떻게 처리 또는 관리 하나요 ?
free 하나면 만사 해결인가요 ?
gabage collecting을 해본적이 없어서... --; (항상 불안한 프로그램만 만들어 놓죠. ^^;)


8. 마지막으로 top 으로 띄웠을때 나온 내용을 신용할수 있나 ..!!
평상시에는 90%정도 프로그램시에는 60 ~ 70%는 신용할 수 있다고 생각합니다.
한번 화면에 띄워주고 다음번에 화면에 띄워주는 사이에 많은 Process가 생겼다가
사라지니까요. ^^;



일단 몇가지 말씀드리면
malloc 해준 변수는 다 free 를 해주었습니다.
포인터 주소나 배열은 프로세스 스택에 할당되므로 클라이언트 가
종료 됨과 동시에 소멸된다고 봐도 되는거 맞지요 ? ^^;

그럼 결국 heap 영역의 문제라고 봐야 할꺼구 그렇다면
malloc 인데.. 역시 소스상엔 다 해제 해 준듯...

고수님들의 많은 의견 바랍니다...

추신 혹시 snort나 그런류들의 프로그램 메모리 잡아 먹나요 ?
작성한 곳에서 '이프로그램은 완벽하다.'라고 하지 않았다면 약간의 의심은
가져도 될것 같은데요? 하지만 대부분 의심없이 사용해도 상관없다고 생각합니다.

익명 사용자의 이미지

안녕하세요 쿨럭
초보라서 제가 아는대로만..

1. 웹상에서 구현되는 php 프로그래밍도 memory leak 발생할수 있나 ? -.-
설마 ?

=> database 를 open 하고 close 하지 않았을 경우 발생한 적이 있습니다.

8. 마지막으로 top 으로 띄웠을때 나온 내용을 신용할수 있나 ..!!

=> Mem 의 used 이런 부분이라면 신용하지 안아도(-.-a) 됩니다..
어차피 free 와 같은 패키지라서..
free 에서의 used 가 늘어나는 문제는 여러 질답란에.
한번씩은 있음직한 문제라서 하여간. 그건 원래 늘어나는 거라는
쿨럭 ㅡ.ㅡ

익명 사용자의 이미지


그럼 리눅스 커널이 실행 종료와 더불어 프로세스가 정의했던
메모리 영역을 정리 해준다는 말씀이신것 같은데요.

리눅스 커널이 스마트 포인터 개념으로 만들어 졋다는 애기가 되구요.
테스트 해봐야 겠지만 힙 영역까지 찾아서 없애 줄꺼 같진 않은데.. ^^;
여튼 답장 고맙습니다.

이 문제와 관련된 Memory Leaking 부분을 경험을 토대로 정리해서
한번 올려 볼가 생각 중입니다..

답변 감사합니다.

조성호 wrote..
아래있는 내용들은 개인적인 주관이 많이 포함되어있습니다.
절대적인 상황이 아니므로 참고만 해주세요.

기본적으로 LINUX는 386 Protected Mode를 사용한다는 것을 알고계시겠죠.
Protected Mode란 각각의 Process가 독립적인 메모리에서 실행이 된다고
알고있습니다.
LINUX의 커널은 전체 메모리를 관리하고 각각의 Process는 전체 메모리안의
독립적인 메모리를 할당받아 실행이 되는거죠.
Windows에서는 이유를 알 수 없지만 가끔 메모리가 센다고들 합니다.
이건 메모리관리가 커널에 의존하는 것이 아니라 Process독립적으로 관리를
하기 때문이라고들 하죠. 즉, 하나의 Process가 실행이되고 그 Process가
메모리를 할당하고 해제를 하지 않으면 시스템의 리소스가 줄어드는 현상이
발생을 한다는 소리입니다. 물론 이렇게 할당된 메모리는 운좋게 해제가 되

경우도 있습니다만 가끔 시스템에서 해제를 못하는 경우도 있죠.
하지만 LINUX에서는 그런 일이 없습니다.(386 DataBook어딘가에서 읽은 기억

있는데 정확한 출처는 잘 모르겠네요. ^^;)
즉, 메모리를 커널에서 관리를 하고 Process는 단지 요청만 하기 때문에
Process가 종료되면 그에 할당된 메모리도 해제를 강제로 시키기 때문이죠.
(음... 이부분은 저도 한번 Kernel소스를 찾아봐아겠네요.)
간단하게 malloc으로 10M를 할당하고 그것을 해제하지 않고 프로그램을 종료
해보니 메모리의 변화가 없더군요. --; (그렇다고 절대적인 실험은 아니였습
니다.)
문제가 발생되는 부분은 그 Process가 종료가 되지 않을 때 발생을 하죠.
즉, 할당을 요청하고 Kernel에서 메모리를 할당시켜 주었는데 Process엣 해
제를
하지 않고 넘어가면 Process가 종료된것이 아니기때문에 Kernel은 이 메모리

대한 권한이 아직도 Process에 있다고 판단(결국은 신경도 안쓰는 거지
만... ^^;)
그대로 둘 수가 있기때문에 Process가 Daemon일경우에는 심각한 메모리 누수
현상을
일으킬 수가 있습니다.(물론 Process가 종료되면 모든 메모리가 Clear되겠
죠.)

즉, 현재 maximus님의 서버에 돌고 있는 프로그램이 Daemon형태로 되어있다

질문하신 대부분의 프로그램들이 메모리 누수현상에 기여할 수도 있다는 가
정을
해볼 수가 있습니다.
PHP, MySQL등이 여러사람에 의해 검증되었다고는 하지만 아직도 버그는 존재
하고
있고 그렇기 때문에 많은 사람들이 그 버그를 잡기위해 밤새워 고생하는 것
아니
겠습니까? ^^;

maximus wrote..
고수님들 안녕하십니까..
VC++ 하다가 이제 ANSI C를 한지 1 년이 넘어서는군요..

현재 서버 클라이언트 모델에서 mysql 과 연동한 프로그램을 만들고 있습
니다.
온라인상에서 서비스도 하구요..

잘 됩니다만..
좀 찜찜하면서 해결이 잘 안되는 부분이 있네요.
역시 아직도 갈길은 멀기만 하네요..

top 으로 메모리 사용을 보면 조금씩 leaking 되고 있는것이 보입니다.
이게 내 프로그램인지는 확실치는 않습니다만..
거의 그렇다고 봅니다만..

(linux엔 bounds checker 같은 프로그램이 없나..)

이 부분을 찾을 방법이 궁금합니다.

서버 기준으로 일단 몇가지 질문을 정리 하면요...

1. 웹상에서 구현되는 php 프로그래밍도 memory leak 발생할수 있나 ? -.-
설마 ?
발생할 수 있다고 볼 수있습니다. 물론 전체적인 시스템에서 영향을 미치지
않는
미세한 부분이라도 있겠죠. 그러니 계속적인 patch와 디버깅이 일어나죠.
하지만 기본적으로는 없다고 보셔도(안정버젼일 경우) 무관합니다.


2. 기본적인 mysql 관련 memory leak 발생할수 있나 ?
( top 실행시 mysql 프로세스만 뜨면 어김없이 메모리 사용이 늘던데 )
( 생성과 해제를 번갈아 되나 적체되는 놈덜은 ? )
MySQL은 메모리 사용을 많이 하는 것으로 알고있습니다. 메모리에 남아있는
프로세서는
아마 계속적인 분석작업때문이 아니면 MySQL 자체의 버그겠죠. ^^;


3. fork문의 생성과 소멸 시점에 발생 할수 있는 memory leak 이 있나 ?
( fork 안에서는 memory 관련 alloc 함수가 없다고 보았을때 )
이건 조금 애매한 문제인데 제가 판단하기로는 없다고 생각합니다. 이유는
앞부분에서도
간단하게 소개했지만... fork ()시에는 자기와 똑같은 환경의 Process를 하
나만들어
실행을 시키는 것이므로 소멸시에 사용된 모든 메모리가 해제 되기 때문입니
다.
물론 생성시에 leak이 발생한다면 그건 Kernel차원에서 수정을 해주어야 하
는 문제겠죠.


4. 배열로 정의한 변수는 믿을수 있는가 ?
( 보통 malloc 함수만 free로 챙기잖아요..)
일정한 크기의 배열은 믿을 수가 있습니다. 하지만 LINUX의 실행파일 형식
에 위배되는
(즉, Data영역을 벗어나는) 커다란 배열이라면 문제가 있겠죠. 물론 이정도
되면 컴파일러
에서도 경고나 에러를 발생시키겠지만요.


5. char* 로만 잡은 함수도 믿을만 한가 ?
양쪽(호출한 함수나 호출당한 함수)에서 제대로 처리만 해주면 믿을만 합니
다.
간단한 예로 표준 함수인 strcpy()는 많은 프로그래머들이 혼란을 야기시키

함수죠. 저도 몇번 당했지만요. --;
strcpy()함수는 (내부는 보지 않았지만...) src쪽이 불안한 것을 감지하기
어렵습니다.

char* dest;

strcpy (dest, src);

가끔 저련 형식의 프로그램을 자주사용하는데, 문제는 src가 NULL일경우에
Segment fault가
일어난다는 사실입니다. 즉, 표준함수에서 체크하지 않는다는 것인데 이 경
우에는 짧게는
몇시간에서 길게는 몇일에 걸쳐 디버깅을 해야하고(같은 상황은 잘 발생하
지 않죠. --;)
결국은 if (src) 를 추가하게 만들기도 합니다.
직접 만든 함수를 호출하거나 호출당했을때 기본적으로 검사해야하는 부분
을 명확히만 처리해
주면 문제는 없을겁니다.


기타

6. 소켙에서(서버측임) 2K 바이트를 데이타를 일단 1K 만
읽고 아니다
싶어서 연결된 클라이언트를 close 및 exit 시키면 나머지 1K의 행방

어떻게 되나..
소켓에서는 Life time(?)이라는것이 있습니다.(줏어들은 이야기이지만
packet에 명시
되어있다고 합니다.) 즉, 일정시간을 네트워크에서 헤메다가 사라지게 됩니
다.


7. ansi C 에서 gabage collecting 하는 방법은 어떤게 있는지 ?
아니면 님들은 어떻게 처리 또는 관리 하나요 ?
free 하나면 만사 해결인가요 ?
gabage collecting을 해본적이 없어서... --; (항상 불안한 프로그램만 만들
어 놓죠. ^^;)


8. 마지막으로 top 으로 띄웠을때 나온 내용을 신용할수 있나 ..!!
평상시에는 90%정도 프로그램시에는 60 ~ 70%는 신용할 수 있다고 생각합니
다.
한번 화면에 띄워주고 다음번에 화면에 띄워주는 사이에 많은 Process가 생
겼다가
사라지니까요. ^^;



일단 몇가지 말씀드리면
malloc 해준 변수는 다 free 를 해주었습니다.
포인터 주소나 배열은 프로세스 스택에 할당되므로 클라이언트 가
종료 됨과 동시에 소멸된다고 봐도 되는거 맞지요 ? ^^;

그럼 결국 heap 영역의 문제라고 봐야 할꺼구 그렇다면
malloc 인데.. 역시 소스상엔 다 해제 해 준듯...

고수님들의 많은 의견 바랍니다...

추신 혹시 snort나 그런류들의 프로그램 메모리 잡아 먹나요 ?
작성한 곳에서 '이프로그램은 완벽하다.'라고 하지 않았다면 약간의 의심은
가져도 될것 같은데요? 하지만 대부분 의심없이 사용해도 상관없다고 생각합
니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.