[질문]C언어로 병렬 프로그래밍을 어떻게 하는거죠?

OpenSnake의 이미지

이번에 마소 December 을 봤는데요...

그중에 page 98 에 있는 "병렬 프로그래밍과 얼랑"을 읽어봤습니다...
그 내용의 재미있더군요....

개발자 입장에서 멀티 코어 시스템의 출현은 매우 큰 의미를 지닌다.
기존 하드웨어 발전은 소프트웨어 개발과 무관한문제였다.
소프트웨어의 속도를 향상시키기 위해서는 그저 새로 나온 비싼 하드웨어를 구입하기만
하면 되었으니깐.
하지만 멀티 코어 시스템은 코어 수를 늘린다고 해서 소프트웨어의 수행속도가 이에
비례해서 향상되지 않는다.
ILP ( Instruction-level Parallelism : 명령 수준 병렬화 ) 와 달리 순차적으로 하나의
코어에서만 동작하니 말이다.
 
멀티 코어 시대의 개발자는 프로그래밍을 할 때 반드시 동시성을 고려해야한다.

그리고 추가적으로
멀티 코어 시스템은 이미 CPU 시장의 대세로 자리 잡았다.
인텔은 카이퍼(Keifer) 프로젝트를 통해 2010년경 32개코어가 달린 프로세서를 내놓겠다는....

그래서...
제가 이해하기로는 앞으로 멀티 코어가 대세로 자리 잡아갈테니 그에 맞게
프로그래밍 방법을 습득해라....라고 이해했습니다...

하지만 마소에 나와있는 프로그래밍언어는 얼랑(Erlang)이라는 저에게는 생소한 함수형 언어였습니다...
그래서 결론은 "그래서 C언어로는 어떻게 해야하는건데?" 였죠...

그리고 검색....
mpich 라는게 나오더군요...

http://www-unix.mcs.anl.gov/mpi/mpich1/

근데 이거에 관한 한글자료가 없더군요..대부분의 영문자료였습니다...(영어을 못하니 알아먹을수가...-_-)
그리고 이상한게 ssh , rsh 에 대해서 나오더군요...저는 그냥 한컴퓨터 cpu 에서 해결하는걸 생각했거든요..
아무래도 pc 와 pc 을 연결시켜서하는 방식을 설명하는게 아닌가라는 생각이 들더군요..

제가 맞게 선택한건지...의문의 들고요...-_-a

혹시 관련 자료가지고 계신분 있으시면 링크라도 해주시면 고맙겠습니다.

"아니 뭐 이런걸 벌써 준비하나?" 라고 하시면 할말없지만....호기심이 생겨서 한번 해볼생각입니다....-_-;
이제 또 검색하러 가야겠네요...

powerson의 이미지


mpich는 멀티 코어에 대한 내용이 아니라 멀티 노드를 위한 병렬 프로그래밍에 관련된 것입니다. 또한 mpich에서 ssh, rsh가 나오는 이유는 mpich같은 경우는 여러 노드에게 job 할당을 하기 위해서 RPC를 사용하기 때문에 나오는 것입니다. 그리고 mpich같은 경우는 국내에선 서적 뿐만 아니라 문서 등의 자료를 찾아보기 힘드실겁니다. mpich를 공부하시려면, 원서가 있는데, 이것 또한, 사실 mpich2에 대한 내용이며, 베이스가 있다는 가정하에 설명을 해서 사실 약간 난해한 점이 없지 않아 있습니다. 제가 지금 제목이 기억이 안 나서, 집에 가서 확인 후에 올려드리도록 하겠습니다. 가장 좋은 건 mpich 홈페이지에서 제공하는 매뉴얼을 보시면 상당히 자세하게 나와 있으니, 영어를 잘 하신다면, 매뉴얼 보시는 것을 추천해 드리고 싶네요. 앞서 말씀 드렸듯이 mpich는 멀티 노드 베이스이기 때문에, mpich를 사용하시려면, 우선 2대 이상의 pc가 있어야 합니다.

그리고 "벌써 이런걸 준비하나?" 라는 말을 하는 사람은 해당 분야에 대해서 잘 모르시는 분일 가능성이 높습니다. 해당 연구 분야는 꽤 오랫동안 진척해온 분야입니다. 물론 지금도 활발히 움직이고 있고요. 병렬 처리에 대한 것은 mpich뿐만 아니라 globus, openpbs 등의 그리드 컴퓨팅에 사용되는 툴도 있는데, 이 부분도 상당히 매력적이니 한번 봐보시는 것도 좋을 거 같습니다. 그리고 국내에서 그나마 자료를 찾으시려면, kisti의 슈퍼 컴퓨팅 연구실에서 그리드 컴퓨팅에 관련된 연구를 하고 있는 것으로 알고 있습니다.

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

OpenSnake의 이미지

멀티 코어에 대한 내용이 아니였군요.....

그리고 mpich 한글문서을 찾다가 이 책을 찾아냈습니다..
http://kangcom.com/common/bookinfo/bookinfo.asp?sku=200603140024

한번 빌려봐야겠어요... :)

--------------------------------------------
혼자있고 싶습니다. 모두 지구밖으로 나가주세요.

--------------------------------------------
혼자있고 싶습니다. 모두 지구밖으로 나가주세요.

deudeul의 이미지

모드 긍정하는 내용입니다만
요즘 서버들이 CPU를 4개씩 장착하는 Quad Board가 점점 대세가 되어가는 입장이라했을때 멀티코어도 맞습니다.
예: Tyan의 S4980G2NR, S4985G3NR 계열이나 Supermicro의 H8QME, H8QM8계열들의 보드들은 CPU를 4개씩 장착합니다.
이런보드들은 기본적으로 최대 16혹은 32개의 프로세서가 운용됩니다.
이 경우 mpiexec (를 사용해되 되지만) 대신 mpiexec.gforker를 사용하면 소켓통신없이 fork()기능을 사용하기 때문에 상대적으로 빨라집니다.
예를 들면,

$mpiexec.gforker -n 64 MyMPIProgram.exe
하면 16/32개의 프로세서만 있다 하더라도 64프로세스로 할당하여 병렬작업을 합니다.

참고로 MPICH2 이외에 SMP machine에 사용하는 OpenMP라는 강력한 병렬프로그램이 있습니다.
openmp는 노드들끼리 병렬작업이라기 보다는 (이게 가능한지 모르겠네요) 각 노드안의 프로세서들끼리 통신하여 병렬작업을 합니다. 이것은 분명 멀티코어 병렬프로그래밍인 케이스인데...
그래서 각 노드가 SMP machine인 여러대가 Infiniband/GigaByte등으로 연결된 네트웍에선
내부적으로 openmp 외부적로는 mpich2를 혼합하여서 병렬프로그래밍을 많이 사용합니다.

그리고 KISTI에 가면 (공개된) 자료가 있긴 있던가요? (지금은 있는지도 모르겠네요)
있으면 아마 돈내고 보는것 아닌가 싶네요.
저는 보통 ohio 대학이나 cornel 대학에 들어가서 자료를 찾습니다만...
google 검색란에 "mpich2; ohio"해서 찾아보세요.

아 참 그리고 그책...mpich/openmp 에 대한 내용은 별로 없습니다.

geneven의 이미지

현재 멀티코어에 대비한 High level 언어에 erlang말고 또 어떤게 있나요?
파이썬이나 루비는 아직 멀티코어에 대한 준비가 안되어 있는걸로 아는데, 펄은 어떤가요?

gimmesilver의 이미지

아무래도 함수형 언어가 그 특성상 명령형 언어에 비해 데이터나 실행 시점에 대한 의존성이 적다보니 병렬 프로그래밍 기법에 대한 연구가 좀더 활발한 편입니다.
함수형 언어중 하나인 하스켈 역시 병렬 프로그래밍에 대한 연구가 진행되고 있는데 관련 자료는 http://haskell.org/haskellwiki/Research_papers/Parallelism_and_concurrency 에서 확인하실 수 있습니다.
이론적인 측면에서는 굉장히 세련되고 강력한 것들이 많이 제시되고 있는데 다만 실현화가 너무 더디다 보니 쓸만한 플랫폼이 아직 나오지 못하는 점이 아쉽죠...^^;

------------------------
http://agbird.egloos.com

------------------------
http://agbird.egloos.com

aero의 이미지

http://stackoverflow.com/questions/464981/what-programming-language-are-you-using-today-for-multicore-platform

As far as the popular dynamic languages go, Perl has extensive support for concurrency via interpreter threads or forks and IPC. Unlike many of the other thread implementations in dynamic languages (including most flavors of Python and Ruby which suffer from global interpreter locks), Perl's threads are real OS level threads that will automatically be farmed out to multiple cores by the OS. This of course means you are left with all of the data sharing issues surrounding real threads, but there are many modules on CPAN to help with that.
 
And anecdotally, I recently converted a small cpu bound number crunching perl script (around 50 lines, with the inner loop written in C) to use threads, and in all, the threading code only added about 10 lines, and now the script runs at least 4 times faster on my i7 system.

이것도 같이 볼만합니다.
http://use.perl.org/~tsee/journal/39225
http://www.perlmonks.org/?node_id=611713
http://justin.harmonize.fm/index.php/2008/09/threading-model-overview/
http://t-a-w.blogspot.com/2006/10/why-perl-is-great-language-for.html

체스맨의 이미지

C 언어로는 다중 스레드, 다중 프로세스, 프로세스 통신 등으로 대별되겠죠...

Orion Project : http://orionids.org

익명 사용자의 이미지

구글에서
"multi core" "parallel programming"
로 검색하니 주루륵 뜨는데
아무래도 신기술이다 보니 죄다 영어로군요.
http://en.wikipedia.org/wiki/Multi-core_(computing)
http://en.wikipedia.org/wiki/Parallel_programming
http://en.wikipedia.org/wiki/OpenMP

멀티 코어가 시스템 feature이다 보니
C에서는 다루지 않을 것 같군요.

라이브러리 형식으로 접근하겠지요.

mach의 이미지

MPI를 보세요.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

mhlee03의 이미지

MPICH2로 intel quad 프로세스에서 열심히 작업을 하는 중입니다. CPU4개를 완전히 다 쓰던데요. 즉 MPI도 쓸 수 있습니다.

mpirun -n num_of_process excution_file

하면 됩니다.

김일영의 이미지

오...
이렇게 임의의 프로세스를 CPU별로 할당시키는 법이 있나 보네요~
여지껏 그냥 막연히 특별한 프로그래밍을 해야지만 가능할거라 생각했는데
날 잡아서 공부 좀 해야겠네요~ 역시 공부는 끝이 없네요

mach의 이미지

taskset, cpuset 을 참고해보세요.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

powerson의 이미지

음.. mpirun에서 -n의 옵션은 node의 갯수를 의미하는 걸로 기억하고 있습니다. 추측이지만, CPU를 다 쓰는 이유는 OS의 scheduler에 다 사용하고 있는게 아닌지 조심스럽게 의심해봅니다. 현재 노드가 하나이시기 때문에, 노드 설정도 하나로 하셨을 거 같은데, mpich에서 cpu의 갯수를 확인해서 다 사용하도록 했을 수도 있을거 같다는 생각도 들긴 합니다. 오랜만에 해당 사항에 대해서 확인해봐야 겠네요~ ^^

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

powerson의 이미지


죄송합니다. 제가 잘못 알고 있었네요.. 좀전에 mpich1, mpich2 모두 살펴본 결과 mpich의 -n 옵션은 node가 아니라 processor들의 갯수라고 설명이 적혀 있네요.. ^^ 제가 작업했을 때(4년전인거 같네요..)에는 애슬론xp에서 작업을 해서 노드의 개념으로만 생각했던거 같습니다. 좋은 정보 감사합니다.

해당 정보에 대한 문서는
http://www.mcs.anl.gov/research/projects/mpich2/documentation/files/mpich2-doc-user.pdf <== mpich2
http://www-unix.mcs.anl.gov/mpi/mpich1/docs/mpichman-chp4.pdf <== mpich1

이 두개의 매뉴얼을 참고하시면 될 거 같습니다.

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

OpenSnake의 이미지

듀얼코어라고 치면
cpu1 cpu2 각각 따로 프로그램의 돌아갈텐데..

굳이 프로그램하나가 두개의 cpu을 활용해서 한다고 해서 속도가 빨라질까..생각이들더군요...

 cpu1     cpu2
|       | |       |
|       | |       |
|pro1 | |pro2 |

 cpu1            cpu2
|       |        |       |
|       |        |       |
|pro1(1/2) | |pro1 (2/2)|
|pro2(1/2) | |pro2 (2/2)|

음...제가 잘못생각하고 있는건가요??

--------------------------------------------
혼자있고 싶습니다. 모두 지구밖으로 나가주세요.

--------------------------------------------
혼자있고 싶습니다. 모두 지구밖으로 나가주세요.

mhlee03의 이미지

pro1 이 100 % cpu1을 사용하고 pro2 가 또한 cpu2를 100% 다 쓰는 경우에는
속도가 빨라지지 않습니다. 그렁지 않으면 속도가 빨라집니다.

mach의 이미지

병렬성(parallelism)이 높은 프로그램의 경우에는 성능이 증가합니다.

두개의 태스크가 의존성없이 동시에 수행가능한 경우, 수행시간을 줄일 수 있습니다.

관건은 해당 프로그램이 병렬성을 지원하는 모델이고, 이렇게 하도록 프로그래밍 되었느냐가 중요합니다.

아주 단순한 예를 들면, 1부터 10까지 합을 구하는 프로그램을 생각해 보면,
수학공식등에 의존하지 않는다고 가정해봅니다. ---> n*(n+1)/2, 즉, 루프로 연산(1+2+...+10)한다고 가정!
이런 경우, 1~5까지는 cpu1에서 합을 구하고, 6~10까지는 cpu2에서 연산한다면, 약 2배정도 성능을 개선할 수 있을 것입니다. 예제가 너무 ... 해서, 그렇긴 하지만, 이해에는 보탬이 되리라고 봅니다.
많은 예제에서, pi를 구하는 방식으로 몬테카를로 방법을 사용하여 예시하고 있는데, 이곳의 사례를 보아도 될 듯합니다. 전형적으로는 역시 수학의 매트릭스 연산이겠지요.
보다 실세계로 접근한다면, 하나의 데이터에 대해 다양한 규칙/패턴매칭을 적용해야 하는 응용이 제법 많은데, 이러한 경우에도 유용하게 사용될 수 있습니다. 예를 들어, IPS라는 침입차단시스템에서 병렬성을 찾아내서, 침입차단 룰에 이를 적용할 수 있을 것입니다.
이러한 병렬 프로그래밍 라이브러리(MPI, PVM등)가 나온지 벌써 10년이 더 지난듯한데, 그리고, 이를 패키징을 잘~해서(마치 리눅스의 배포판들처럼)나온 병렬 플랫폼들(또는 클러스터플랫폼들)이 다수개 존재하고 있습니다.
10여년전에는 듀얼코어는 없었어도, 같은 맥락이랄 수 있는, 128개등 다중 프로세서를 가지는 MPP는 이미 훨씬 전부터 존재했고, 이러한 시스템들을 위한 표준 프로그래밍 인터페이스를 제정하기 위한 포럼이 등장하고, 특히, IBM, CRAY등 MPP벤더 및 학계가 주축이 되어 만들어진 MPI가 스탠다드로 제정(대략 90년대 중반)되었습니다. 이후, 몇가지 스펙을 추가하고 MPI2가 제정되었지요. MPI2스펙을 완벽히 구현한 것은 아직 없는것으로 알고 있으며, MPICH는 이러한 구현중 포터블에 가장 중점을 둔 구현이랄 수 있겠습니다.
음, 듀얼코어...., 쿼드 코어,...가 다중 프로세서의 시작은 아니라는 얘기입니다.
병렬프로그래밍 언어들도 일반인들이 잘 사용하지 않아서 그렇지, 아주 많은 개수의 언어(도구)들이 오래전 부터 존재하고 있습니다.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

누구냐넌?의 이미지

MPI 라는게 90년대 초중반에 나온 스펙인 것으로 알고 있습니다.
보는 관점에 따라 신기술일수도 있겠지만,
IT기술들의 발달 속도를 보면 아주 신기술이라고 말하기에는 무리가 있죠.
슈퍼컴이나 대형클러스터등을 가지고 연구하시는 과학자분들에게는 더더욱 그렇구요.

MPI뿐만 아니라 병렬 프로그래밍을 행하는 환경과 규모에 따라 OpenMP, PBS, loadleveler, condor, globus 등등
여려가지 도구들이 존재하는 것으로 알고 있습니다.

C언어로 구현하는 병렬프로그래밍을 공부하시겠다면, MPI나 OpenMP 쪽을 공부해보시는게 좋지 않을까 생각이 드네요.

OpenMP는 보통 여러 개의 CPU(또는 코어)를 갖고 있는 하나의 시스템에서 병렬 작업을 하는데 초점을 맞춘 라이브러리구요,
MPI는 여러개의 노드로 구성된 분산 컴퓨팅 환경을 타겟으로 둔 라이브러리라고 생각하시면 편할 것 같네요.

위에서 다른 분께서 언급하셨다싶이, MPI를 이용하여 단일 멀티코어 시스템에서도 병렬 프로그래밍이 가능 합니다.
그런데 아무래도 성능이 OpenMP로 구현한 코드에 비해 약간 떨어진다고 합니다.
그래서 추구하는 코드가 성능이 중요한지 또는 확장성이 중요한지에 따라
구현 방법을 선택한다고 얼핏 어디서 줏어 들었습니다.

그리고 보통 MPI라고 지칭하는 것은 일종의 스펙이라고 보시면 되고,
이러한 MPI 스팩을 구현한 라이브러리가 바로 MPICH, LAM/MPI, OpenMPI등등 입니다..

자세한 사용 방법이나 예제는 검색 조금만 해보시면 인터넷에 의외로 많이 있을 것 같네요.

마지막으로,
MPI에 대해서 궁굼하시다면 KISTI의 슈퍼컴센터에서 1년에 정기적으로 몇 차례 무료 강좌를 하는 것으로 알고 있습니다.
그리고 OpenMP는 인텔 코리아에서 1~2달에 한번씩 무료 세미나를 여는 것으로 기억 하네요.

관심 있으시면 한번 검색 해보세요~ ^^

only2sea의 이미지

MPI에 비하여,

OpenMP는 비교적 기존 프로그램에서 수정하기 간편한 편한 것으로 알고
있습니다. 결국 여러 머신+각 머신이 여러 코어를 갖고 있는 상황이라면
MPI와 OpenMP를 섞어서 써야 한다고 합니다.

MIT에서 하고 있는 Cilk라는 것도 있습니다. 아직 성능이 안 나오지만, 관심은 가더군요.

블로그: http://turtleforward.blogspot.com

chunmok의 이미지

pthread (posix thread)를 이용한 멀티쓰레드 프로그래밍을 공부해보시는건 어떠실지...
관련자료는 인터넷에서 쉽게 찾으실수 있을껍니다.

tiffang의 이미지

C면 OpenMP 로 먼저 해보는게 좋겠네요..

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.