언제 다음편이 올라올지 모르는 ARM Architecture 이야기 #0

나빌레라의 이미지

ARM. [암]이라고 읽는다. 뛰어난 성능과 저전력을 무기로 모바일과 임베디드 시장에서 거의 절대적 시장 지배자 위치를 차지하고 있다.

내가 ARM을 처음 접한 것은 2003년 쯤에 우연찮게 구입한 "C, C++로 작성하는 임베디드 시스템 프로그래밍(한빛미디어, 2000)"이라는 책에서였다. 당시 책에서는 Acorn Risk Machine이라는 이름으로 초창기 ARM에 대해서 설명을 하고 있었다. 물론 아키텍처에 대한 설명같은 것은 없었다. 다만 초창기 ARM 기반 개발 보드였던 Acorn 보드에서 펌웨어 개발을 어떤식으로 하는지에 대한 설명만 있었다. 우습게도 당시에 나는 그 책을 읽으면서 그 책에서 기반으로 삼고 있는 Acorn Risk Machine이 지금의 ARM인지 한참이 지나서야 알게 되었고, 책을 읽으면서도 임베디드 컨트롤러의 아키텍처에 대해서는 별 관심이 없었다.

이후, 다시 ARM에 관심을 가지게 된건 AVR이라는 8비트 마이크로컨트롤러로 대학생 공모전 수준의 프로젝트를 혼자 진행하고 있었을 때였다. 나는 AVR 계열의 ATmega128이라는 마이크로컨트롤러를 주로 사용했었다. 상당히 다루기 쉽고 기반 툴들도 잘 되어 있어서 임베디드 입문용으로 딱 적당하다고 생각한다. ATmega128을 이용해서 PCB에 납땜도 해보고 펌웨어를 올려서 내가 납땜해서 붙인 여러 소자와 장치들이 동작하는 것을 직접 보면서 아주 즐겁게 작업을 했던 기억이 난다. 그러다가 AVR을 가지고 놀면서 이것저것 해보던 어느날, 8비트 컨트롤러에 대해 갑자기 한계를 느꼈다. 내가 작업하는 수준의 모든 것들은 8비트 컨트롤러로도 충분히 다 할 수 있는데 그냥 아무 이유없이 16비트나 32비트 컨트롤러를 사용해보고 싶었다. 이것도 일종의 장비병이었을까?

지금도 그렇지만 당시 나는 임베디드에 대한 지식이 거의 없었다. 그냥 논리적이고 기본적인 컴퓨터 사이언스의 관점에서 ATmega128로 회로도를 그리고 납땜을 하고 펌웨어를 설계하고 코딩을 하고 디버깅을 해 왔었다. 그래서 오히려 아무런 부담이나 두려움없이 자주 이용하던 인터넷 쇼핑몰에서 싸고 간단한 ARM7 개발보드를 주문했다. 언뜻 모양만 보기에는 AVR과 다를바 없어 보였기 때문이었다. 실제 개발 과정도 AVR과 별로 다를 것 없었다. 오히려 더 쉬웠다. 보드 제조사에서 미리 넣어 두었던 부트로더 덕분에 부가적인 많은 것을 신경쓰지 않고 기능 자체에만 충실한 펌웨어를 만들어서 로딩하면 되었기 때문이었다. 어떤 면에서는 오히려 AVR을 가지고 놀 때보다 더 할일이 없었다. 난 적잖이 실망했다. 뭔가 새로운걸 더 공부하고 삽질할 줄 알았는데 나아진것이 없었기 때문이었다.

"분명 AVR보다 ARM이 더 복잡하고 어렵다고 했는데, 왜 이건 더 쉬운거지?"

이후 몇 년간 계속되는 나의 삽질이 시작되는 혼잣말이었다. 마치 빅뱅에 우주가 탄생되듯 하늘이 열리고 천지가 개벽하듯 내 삶의 방향이 바뀌었다. 내가 그때에 저 의문을 가지지 않았더라면 어쩌면 지금과는 다른 길을 걸었을 텐데...

내가 본격적으로 ARM에 대해, 좀 더 정확히 ARM 아키텍처에 대해 관심을 가지기 시작한 건 저 물음에 대한 답을 찾기 위해서 였다. 가장 먼저 기본적으로 ARM에 대해서 검색을 시작했다. ARM의 역사, 제품군, 기본 구조 등등 자료가 엄청나게 많았다. 그리고 ARM을 생산하는 Arm사(ARM을 만드는 회사 이름 역시 ARM이다.)의 웹 사이트에는 엄청나게 정보가 많았다. 역시! ARM은 AVR과는 비교할 수 없을 만큼 복잡했다. 지원하는 소프트웨어 툴이나 디버깅 툴들도 엄청 복잡하고 많았다.

난 다시 한 번 돈을 쓰기로 결정했다. 이전에 구입한 ARM7 기반 개발보드보다 거의 열 배 정도 비싼 ARM9 기반의 개발보드를 구입했다. 그리고 리눅스를 올려보고 동작시켜 보는 등 개발보드에 익숙해지기 위한 몇 가지 작업을 해보고 나는 ARM을 포기했다.

...

정말이다. 너무 어렵고 이해가 되지 않았다. 익숙하지도 않았고 복잡했다. 그냥 임베디드 자체가 별로 하기 싫고 흥미가 떨어져서 소프트웨어 엔지니어링, 디자인 패턴, 비지니스 모델 분석 등 납땜할 필요 없이 컴퓨터만 있으면 할 수 있는 분야의 공부를 주로 했다. 그러다가 또 한 번 나의 관심을 ARM으로 돌리는 계기가 생겼다. 학교에서 컴퓨터 구조론 수업을 수강하고 있었는데, 1학기 때는 MIPS 기반으로 설명하시던 교수님이 2학기가 되니까 ARM 기반으로 설명을 하시겠다고 한 것이다. ARM... 암... 내가 어려워서 포기했던 그 녀석을 왠지 체계적으로 배울 수 있는 기회가 생긴 것이다.

이미 한 학기 컴퓨터 구조론 수업을 들었기 때문에 나는 마이크로컨트롤러가 어떤식으로 구성되고 RISC 머신의 파이프라인 구조가 어떤식으로 동작하는지 알고 있었다. ARM의 구조도 큰 틀에서는 기본적인 RISC 머신의 그것과 다르지 않았다. 다만 명령어 구조나 예외 처리 정책 등이 꽤 괜찮았다. "정말 머리 좋은 사람들이 만들었구나"하는 생각이 들 정도였다.

난 책장 어느 곳에 먼지를 맞으며 외로이 울고 있던 ARM9 기반 개발보드를 다시 꺼냈다. 그리고 학교에서 배운 지식을 바탕으로 부트로더부터 다시 분석하고 공부했다. 사실 하드웨어적 정보보다 소프트웨어적으로 알아야할 것들이 더 많았다. 컴파일러, 링커, 로더에 대한 기본적인 부분부터 거의 다시 공부해야 했다.

나는 AVR을 가지고 놀 때처럼 작고 간단한 프로젝트들이 아닌 뭔가 좀 "있어보이는" 프로젝트를 하고 싶었다. 그래서 겁도 없이 운영체제 만들기에 도전했고, 썩 마음에 들지는 않지만 어느 정도 결과물을 얻었다. 그리고 그것이 인연이 되어서 지금도 ARM에 펌웨어 만드는 일을 하면서 월급받고 살아가고 있다.

내가 처음 ARM 아키텍처를 공부하던 때에 봤던 책이 ARM System Developer's Guide(사이텍미디어, 2005)라는 책이다. 이 책은 지금도 ARM 시스템을 공부하는 사람들 사이에서 바이블처럼 읽히고 있다. 그 이후로 내가 기술 도서 동향에 관심이 줄어서 그런지는 몰라도 이 책을 대체할 만큼 많이 읽히거나 내용이 충실한 책이 나오지 않은 것 같다. 그래서 이 책 만큼의 수준이 될 수 있을지 없을지는 몰라도 뭔가 다른 관점에서 좀 더 읽기 편하고 괜찮은 글을 쓰고 싶어졌다.

물론 나는 지금 이 글을 쓰고 있는 시점에서 감히 ARM 아키텍처를 설명할 수 있을 만큼 ARM 아키텍처에 대해 이해하고 있지 못한다. 그리고 사실 내가 아니라 다른 누군가가 내가 원하는 수준의 설명과 내용을 담은 ARM 아키텍처 책을 써 주길 절실히 원하고 바라고 있다. 하지만 3년을 기다려도 나오지 않고 있는 것으로 봐서 아마 국내에서는 도전하고 있는 사람이 없거나 아직 그 사람의 결실이 세상으로 나오지 않은 것 같다.

이 글을 쓰면서 나는 고민에 빠져 있다. 일단 서문처럼 이렇게 글을 써 놓았는데, 이걸 하드디스크에 넣어두고 천천히 공부해 가면서 어느정도 글이 완성된 다음에 이 글을 공개할까? 아니면 일단 공개부터 해 놓은 다음에 스스로 약속의 압박을 받으며 반 강제로 공부를 하면서 이후 글을 써 나갈까? 나는 후자를 택했다.

지금까지 나는 KLDP에 많은 글을 썼다. 그리고 그 글들은 사실 모두 완성된 상태에서 하드디스크에 모아 뒀다가 한 편씩 한 편씩 KLDP에 업로드만 했었던 글들이다. 지금처럼 이렇게 아무런 대책없이 시작하겠다고 공언해 놓고 글을 쓰기로 결심한 것은 처음이다. 그래서 사실 이 글 다음 편이 언제 또 게시될지 나도 모른다. 어쩌면 이 글이 처음이자 마지막 글이 될지도 모른다.

그래도 일단 시작해 보려 한다. 글 쓰는 걸 핑계로 나도 공부좀 해야 겠다.

댓글

나빌레라의 이미지

흠...

과연 끝낼 수 있을까...

뭔가를 하다가 끝내지 못하고 흐지부지하는 것을 꽤 싫어하는 편인데,
이렇게 일을 저질러 버렸네요...

아.. 근데 왠지 흐지부지될 것 같은 스멜이...-_-

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

SoulreaveR의 이미지

나빌레라님 글 항상 잘 보고 있습니다.

힘 내십시요 ㅎㅎ

(글 쓰시라는 압박입니다.)

나빌레라의 이미지

감사합니다..^^

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

snowall의 이미지

느긋하게 기다리면 되는 건가요?

좋은 글 기대하겠습니다~

피할 수 있을때 즐겨라! http://melotopia.net/b

나빌레라의 이미지

왠지 잊혀질 무렵 한 편씩 올릴 것 같아요...^^

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

권순선의 이미지

잘 읽고 있습니다~~

나빌레라의 이미지

감사합니다~~

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

jachin의 이미지

얼마나 더 글을 쓰셔야 쉴 때가 있으실런지!!!

저 없는 동안 너무 많이 올리시는거 아니에요!? (버럭!)

나빌레라의 이미지

이제 뭐 더 쓸것도 없어요.
(아는게 없어서리..)

근데 언제 전역하시나요? ^^

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

gurugio의 이미지

이제 스타블로거라해도 될것같습니다.
잘 읽겠습니다.

나빌레라의 이미지

스타블로거 해봤자 생기는 것도 없는 걸요 뭐~
그냥 자기 만족이죠~^^

읽어주셔서 감사합니다.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

익명 사용자의 이미지

강좌를 올려도 아무 반응도 못 얻는 사람(gu**머시기) 도 있는데
보람있는 블로깅을 하시는것 같아서 보기 좋습니다.
계속 부탁드리겠습니다.

sixt06의 이미지

회사에서 ARM 코어 관련업무를 하고 있는 저에게는 관심이 가는 주제네요..

좋은 글 부탁드립니다~

나빌레라의 이미지

감사합니다.

다만 연재 간격이 매우 길고,
불규칙할 것으로 예상됩니다...^^

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

lovian의 이미지

언제나 흥미 진진한 글 잘~ 보고 있습니다.
꽤 궁금한 부분이 있는 분야라 기대하고 있어요 ㅋㅋ

-----------------
한글을 사랑합니다.

나빌레라의 이미지

감사합니다.

궁금한 부분을 제가 잡아내서 글로 쓸 수 있을지 모르겠네요..^^

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

ipes4579의 이미지

와우!이번 연재도 기대가 되네요.

감사히 읽겠습니다 ^-^

나빌레라의 이미지

감사합니다..^^

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

neogeo의 이미지

냐아빌 냐아빌 =ㅅ=/

Neogeo - Future is Now.

나빌레라의 이미지

저 영어 공부는 안하고 이런거나 만날 저지르고 다녀요...ㅠㅠ

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

neogeo의 이미지

걍 영어 버리시고 한국에 뼈를 묻으심이..

Neogeo - Future is Now.

나빌레라의 이미지

그런 말씀 하지 마세요...

엉엉...ㅠㅠ

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

madman93의 이미지

좋은 글 감사합니다. ^.^

---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------

나빌레라의 이미지

감사합니다..^^

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

klenui의 이미지

학생때는 AVR이나 8051같은 장난감만 만지다가, 10여년전 Qualcomm 칩 다루면서 처음 Arm7을 접했더랬죠.. 그래도 Arm은 8086이나 68K보다는 쉬웠던것 같네요.. 옛날 기억이 새로운 글입니다. 그 당시엔 Jtag이나 ADS, Armulator등에 관한한 회사에서 가장 잘했기 때문에 문제 해결사를 자처하곤 했지요.. 잘나갔던 시절입니다.;;;

그래도 집에서 뭔가를 만들때는 AVR 여러개를 엮어서 만드는게 훨씬 편하다는 게 제 생각입니다. ARM따위 이제 몰라요!!(임베디드 떠난지 한 5년쯤 됩니다.)

좋은 글 올려주셔서 감사합니다. 모쪼록 계속 써주시길 부탁드립니다.

나빌레라의 이미지

저도 장난감 만들 때는 AVR이 편합니다.

거짓말 조금 보태서 "생각하는 대로" 코딩하면 동작하거든요.

ARM은 뭔가 복잡함 속에 오묘함과 심오함..... 이런건 다 x소리고..

실제로 먹고 살기 위해 실전 임베디드를 하려면 ARM을 알아야 하지요..
아닌 분야도 있지만.. 그냥 일반적으로는 ARM이 대세니까요..

그래서 글을 쓰려고 하는 겁니다.

댓글 달아주셔서 감사합니다.^^

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

sixt06의 이미지

ARM7은 심플하고 좋았죠.
요새 ARMv7기반의 Cortex-A9을 보면 NEON Thumb32이니 뭐니 해서 x86 만큼이나 누더기가 되어버린 느낌입니다.
ARMv8의 64비트 모드는 정리가 좀 되었지만, 32비트 모드와 호환성이 없으니 꽝이고,
ARMv9쯤 되야 심플하게 정리가 될 것 같습니다.

나빌레라의 이미지

ARMv7을 기반으로 써 볼까하는데,
저도 NEON 정도까지는 다루지 않을 생각입니다.

그냥 복잡하고 일관성도 없어보이거든요.

Cortex-R4 기반으로 적당한 수준에서 아키텍처 설명해 보려고 구상중이에요..

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

sixt06의 이미지

R4 보다는 A5 정도가 좋지 않을까요? 아키텍쳐도 간단하고 SMP도 지원하니까요.

park1book의 이미지

저자님께서 쓰신 도전 임베디드 os만들기 책을보고 여기까지오게된 대학교 학부생입니다.

지난번에도 메일을 3회 가량 보냈었는데,,, 답변이 없으시더라구요,,,

좀 아쉬움반, 실망반이었습니다. 그러나 메일의 질문을 여차저차해서 해결을 했는데,,,,

이렇게 책을 쓰신다니 기대가 되는군요,,,^^ 그리고 제가 갈망하던 일을 하시던데, 펌웨어 개발,,,^^

실례지만 더 궁금한사항이 있는데 메일보내도 될까요??^^;;;;

익명 사용자의 이미지

메일 보내는 사람이 한둘이 아닐 것 같은데,
저같은 경우는 메일이 오면 왠만하면 그냥 답장 안하게 되더군요.
이런 답글을 올리는 것도 저자에게 실례되는 것처럼 보이네요.

나빌레라의 이미지

님의 메일 받아봤습니다.

답변을 드리지 않은 이유는 질문 자체가 너무 초보적인데다,
본인이 최소한의 노력도 다 하지 않고,

그냥 "모르니까" "일단 질문" 한 것 처럼 느껴져서 입니다.

최소한,

[blockquote]
AA의 문제가 발생했는데,
나는 BB와 CC와 DD의 시도를 해서,
XX와 YY의 현상이 발생했다.
내가 판단하기에는 TT의 증상으로 보여서,
KK의 조치를 했는데도 동작하지 않았다.
어떻게 하면 좋을까요?
[/blockquote]

이정도의 질문은 하셔야 저도 답변하고 싶어지는 충동이 생깁니다.

덜렁 데이터 시트 첨부로 날리고,
"해결해주세요" 하는건 저보고 님의 코딩을 대신 해 달라는 말 밖에 안됩니다.

제 책을 산 독자라는 이유만으로 저자인 제가 독자의 프로젝트까지 대신 해 줄 의무는 없습니다.

저에게 실망을 왜 느끼시는지 모르겠네요.

게다가 이렇게 공개적인 게시판에

"메일을 세번 보냈는데 답장을 안해서 아쉽고 실망했다"라는 글을 어떤 의도로 쓰신것인지 모르겠습니다.

저는 기본적으로 친절한 사람이 아닙니다.
그리고 저는 님의 글을 보는 순간 그리 썩 좋은 기분은 아니게 되어 버렸습니다.
그래서 이게 잘 못하는 짓인지 알면서도,
이렇게 공개적인 게시판에 이렇게 약간은 싸가지 없는 훈계하는 듯한 댓글을 달고 있습니다.

궁금한 사항은 제게 메일을 보내서 해결하는 것이 아니라,
본인이 공부해서 해결하는 것이

학생의 바람직한 자세라고 생각됩니다.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

park1book의 이미지

우선 기분나쁘게 해서 죄송합니다...

저의 글재주가 없어서 위의 내용들을 빼놓고 적은듯싶습니다.

제가 해본 사항및 이렇게 해서 저렇게 되었습니다. 라는 내용을 작성해서 보내드렸어야 기분이라도 덜나쁘셨을텐데,,, 무작정 막히는 부분에서만 지속적인 고민만하다가 답답한마음에 급하게 작성해서 그렇게 된거 같습니다. 제 실수 입니다.

코딩 뿐만아니라 다른것 부분도 많은 것을 배우고 갑니다.

감사합니다.

^^;;;;

thepath의 이미지

아이디를 읽을 때면 꼭 시를 읽는 것같은 느낌이 들어서 좋습니다.
후속으로 계속 써주시기를 기대하면서 응원하겠습니다.
아자자!

댓글 달기

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