반응형

조선왕릉인 선릉, 정릉에 다녀왔습니다. 전국 곳곳에 있는 조선왕릉들은 세계문화유산으로 등재가 되어서 세계적으로도 알아주는 문화재가 되었습니다. 그리고 오늘 본 조선왕릉 선릉은 도심속에서도 아름답게 보존되고 관리되어 그 빛을 발하는 명품 문화유산이었습니다. 서울 강남 도시 한복판에 이렇게 아름다운 문화유산이 있다는 것을 전 왜 진작에 몰랐을까요? 강남엔 정말 없는게 없습니다. 

 사실 어제까지는 선릉역에 선릉이 있다는 것을 몰랐습니다. 지하철 2호선을 그렇게 많이 타고 다니며 선릉역을 그렇게 많이 지나다녔지만 지금까지 그게 조선왕릉이었다는 것을 알지 못했습니다.  좀 부끄럽네요. 요즘 여행에 관심이 많아지면서 주변의 모든 것들에 관심을 가지다 보니  새로운 것들을 참 많이 알게 됩니다. 

서울에서는 이동을 할 때면 주로 지하철을 이용했습니다. 마치 두더지 처럼 땅속으로만 다니다가 목적지에 도착해야지만 땅 위로 올라가곤 했던 것이죠. 그러다 보니 동네 이름은 그냥 역 이름일 뿐이였습니다. 선릉도 마찬가지였죠. '릉'자가 들어간 것으로 보아 무슨 왕릉같은건가 하고 스쳐 지나가듯 생각은 했었 것 같습니다. 아마도 찾아보려는 생각을 전혀 하지 않은 것은 아니었을 겁니다. 집에 돌아가면 찾아봐야지 하고 생각했던 당시의 기억은 몇시간만 지나도 늘 잊어버렸던 것 같습니다. 


 이번에 선릉 답사를 가야겠다고 결심을 하게 된 계기는 좀 우연히 찾아왔습니다. 주말에 있었던 결혼식 때문에 예식장 위치를 알기 위해 선릉역 주변 지리를 알아보던 중, 선릉역 주변에 조선왕릉인 선릉이 있는 것을 알게 되었습니다.  강남 한 가운데 조선왕릉이 있다는 것은 미처 몰랐던 사실이었거든요. 기존에 알고 있던 융건릉과 같은 조선왕릉이 이 곳에도 있다는 사실을 새롭게 알게 된 것이죠. 제가 살고 있는 수원 근처에도 조선왕릉인 융건릉이 있어서 세 번 정도 다녀왔었습니다. 정말 아름다운 곳이었습니다. 융건릉에서의 좋은 기억을 갖고 있었기에 선릉도 분명 가볼만 할 것이라는 확신이 있었습니다. 그래서 결혼식도 갈 겸 선릉을 한번 다녀와야겠다는 생각을 하게 된 것입니다.

 선릉의 입장료는 어른은 1000원입니다. 일요일 3시정도로 사람이 많을 법도 한 시간임에도 사람이 그리 많지 않습니다. 적은 금액일지라도 입장료가 있기 때문에 그런 것 같습니다. 입구에 들어서면서부터 주변에 온통 푸른 잔디와 나무들에 둘러쌓여 시원한 청량감을 느낄 수 있습니다. 푸른 숲 사이에 나 있는 길을 따라 들어가니 선릉 정자각이 보입니다. 아름다운 목조건물로 선릉의 제사를 지내는 역할을 하고 있습니다. 간혹 문화재들 중에도 훼손이 심하거나 망가진 문화재들이 많지만 선릉은 조선시대의 왕릉이기 때문에 지어진 이후로 늘 관리가 되어서인지 한치의 흐트러짐 없이 정갈한 모습을 간직하고 있습니다.

선릉에는 들어온 이후로 사방이 온통 초록입니다. 눈록이라고 해야 좀 더 정확하게 표현할 수 있을 것 같습니다. 눈록이란 나온지 얼마 되지 않은 여린 잎들의 색처럼 연한 녹색이라는 뜻입니다. 제가 아주 좋아하는 색깔입니다. 눈으로 본 그 빛깔을 사진으로 찍어도 그 싱그러운 모습은 어디로 가지는 않습니다. 겨울동안 숨어있던 잎들이 막 난지 얼마 되지 않아서인지 온 천지에 여린 잎들이 눈록빛으로 가득합니다. 소나무 처럼 겨울 내내 잎이 있던 나무들의 짙은 녹색과 대비되어 막 돋아난 잎들의 나무와 어울려 초록색만으로도 알록달록한 숲의 모습을 만들어 냅니다. 마치 단풍같습니다. 초록의 농도만으로 이루어진 단풍이 되겠지요. 초록빛으로 가득한 선릉에서 걷는 산책길은 여기가 서울임을 잊게 만듭니다. 서울에서 몇시간은 떨어진 어느 한적한 숲길에 와 있는 것처럼 느껴집니다. 타임머신이 시간을 초월해주는 기계라면 선릉은 공간을 초월하게 해주는 기능이 있는 것이 확실합니다. 믿지 못하시겠는 분은 직접 한번 와보세요. 제가 느낀 그것을 알아차릴 수 겁니다. 


 5월1일 봄날씨는 제법 따뜻합니다. 살짝 덥다고 느껴지다가도 나무 그늘로 들어가면 시원합니다. 걸어서 성종대왕릉쪽으로 향합니다. 멀지 않은 거리이지만 시선을 돌리는 곳마다 카메라의 셔터를 누르지 않을 수가 없습니다. 모든 것을 다 담아가고 싶은 욕심 때문일 것입니다. 멋진 곳에 오게 되면 멋진 풍경을 모두 카메라에 담아가고 싶은 욕심이 듭니다. 자연을 감상하면서 그런 욕심을 가진 제가 갑자기 부끄러워져 살짝 욕심을 내려놓고 카메라에 담아지는 만큼만 담아가기로 합니다. 멀리 보이는 빌딩 숲과 묘하게 대조되는 모습입니다.


성종대왕릉 앞에 도달하니 몇 명이 모여있습니다. 가까이 다가가 보니 이 곳 관리소에서 나오신 안내자 할아버지께서 선릉에 대해 친절히 설명을 해주시고 계십니다. 설명을 듣고 있으니 정말 고개가 절로 끄덕여집니다. 설명을 듣다 보니까 왕릉의 구조물 하나하나에 의미가 있고 선릉이 가지는 의미와 조선왕조의 역사적 사건들이 잘 겹쳐지면서 선릉에 대한 관심도가 쭈욱 올라갑니다. 처음에는 이 곳의 아름다움만을 보며 감탄하고 있었는데 설명을 듣다 보니 왕릉 선릉에 대한 호기심이 더 강해지면서 점점 재미있어집니다.

 안내 자료에는 잘 나오지 않는 내용들을 위주로 기억나는 대로 정리를 해 보겠습니다. 선릉은 성종의 무덤입니다. 성종은 경국대전 등으로 조선의 법제체제를  완비한 왕으로 잘 알려져 있습니다. 선릉은 성릉의 아들 중 다음 왕위에 오른 연산군의 작품입니다. 연산군은 우에 폐위가 되어서 연산군으로 강등되긴 하지만 왕위에 있던 시절 아주 똑똑한 대단한 왕이었다고 합니다. 그래서 연산군은 신하들에 의해 좌지우지 되지 않기 위해 왕권의 강화를 위해 노력을 했습니다. 선릉을 만든 것도 그 중의 하나입니다. 선릉을 보면 아주 화려하게 만들어졌다는 것을 알 수 있습니다. 아마도 조선왕릉중 가장 신경써서 만들었을 겁니다. 신하들이 이렇게 저렇게 토를 달지 못하였고 연산군의 입맛에 맞게 최대한 화려하게 지은 것이 선릉입니다. 그리고 후에 이때의 왕릉을 기틀이 되어서 왕릉의 형태가 틀을 갖추었다고 합니다. 

 봉분의 아랫부분을 보면 돌로 테두리를 두른 것이 있는 데 이것이 병풍석입니다. 이 병풍석에는 십이지상이 새겨져 있는데 구름들 가운데에 보살이 있고 보살이 쓰고 있는 모자에 십이지신이 새겨져 있습니다. 설명을 듣고 나서야 겨우 찾았습니다. 지금은 대부분 잘 안보이긴 한데 아래 사진을 보시면 잘 보이는 면이하나 있습니다. 화려해 보이죠?  그리고 그 위에 각각의 방위마다 놓여진 삐죽 나온 돌은 인석이라고 합ㅂ니다. 인석의 역할은 쌓아올린 흙이 병풍석을 밀어낼 때 바깥으로 힘이 발생하기 때문에 밀려나지 않도록 안으로 끌어당겨주는 역할을 합니다. 병풍석의 연결부에 돌로 쐐기같은게 박혀있고 위에서 인석으로 눌러주어 병풍석이 힘을 받을 수 있는 구조로 되어있습니다. 인석은 바깥으로 30cm정도 나와있고 봉분 내부로 150cm정도가 들어있다고 합니다. 병풍석 아래에는 비가 왔을 때 물을 바깥으로 흐르게 해주는 치마석이 있습니다. 병풍석안에 쌓은 흙이 빗물에 씻겨 내려가는 것을 방지해 주었다고 합니다. 정현왕후릉에는 병풍석이없기 때문에 바닥부터 흙으로 쌓아올린 형태이기 때문에 이 치마석 또한 필요가 없다고 합니다. 이런 것만 보아도 선릉에 신경을 무척이나 많이 썻다는 걸 엿볼 수 있습니다. 그 바깥으로 무덤을 두르고 있는 난간같은 것이 난간석입니다. 이 난간석은 무인석과 함께 왕릉을 구분짓는 중요한 표식이라고 합니다. 왕릉을 구분짓는 기준으로 삼는 두가지가 바로 이 난간석과 문인석 앞에 있는 무인석이라고 합니다. 특히 연산군 이후에는 왕릉에만 무인석을 만들 수 있도록 했다고 합니다. 연산군때 이전에는 왕릉이 아니어도 무인석이 있을 수 있지만 선릉이 만들어진 이후부터는 왕릉이 아니 무덤에 무관석을 세워 두는 것을 금지했다고 합니다. 군인이 지키는 개인은 인정하지 않겠다는 왕권 강화의 의지가 엿보입니다. 

 이 밖에도 많은 이야기들을 들을 수 있었습니다. 왕릉을 지키는 문관석, 무관석, 말, 석호, 석양등에 대한 이야기도 있었고 석등에 왜 물이 들어있게 되었는지, 그리고 망주석에 있는 귀 모양의 문양의 이야기도 있었습니다. 특히 망주석에는 귀처럼 튀어나온 문양이 있는 데, 기록에 나온 것은 아니지만 학자들의 여러 추측중 그럴싸한 내용이 있었습니다. 바로 왕이 해야할 가장 중요한 일 중 백성의 소리를 귀기울여 듣는 일이라 하여 귀모양을 만들어 넣었다는 학설이 그럴싸해 보였습니다. 옆에 있던 분이 도굴에 관해 질문을 합니다. 안내자 할아버지께서는 그 이야기를 하면 또 이야기가 길어지죠 하고 말하면서 또 설명을 해주십니다. 왕릉은 관청을 두고 관리를 해왔기 때문에 도굴을 당한 적이 없다고 합니다. 그런데 유일하게 임진왜란 때 왕릉의 관리를 하지 못했을 때 선릉이 도굴을 당했다고 합니다. 유교국가였던 조선시대의 왕릉에는 금은보화같은 유물은 없었다고 하니 도굴꾼은 소용 없는 짓을 한 것이죠. 이 때 파헤쳐진 성종이 유골이 불태워졌지만 이후 이를 수습해서 다시 넣었다고 하니 선릉에는 성종의 유골이 모셔져 있다고 보는 학설이 가장 유력하다고 합니다. 기타 등등 조선왕릉에 대해 많은 이야기를 들을 수 있었습니다. 

 분명한 기록에 의한 부분도 있었고, 후대의 학자들이 연구한 여러 학설에 입각해 설명해 준 부분도 있어 다양한 관점에서의 이야기까지도 들을 수 있었습니다. 처음에는 이 곳에서 이렇게 자세히 설명을 들을 수 있을 거라고 기대하지 못했었습니다. 그런데 이렇게 설명을 자세히 해주니 없던 관심도 샘솟습니다. 질문도 하고 답변도 해주고 정말 좋은 시간이었습니다. 안내자 할아버지께 정말 큰 감사를 드립니다. 정말 조선시대와 역사, 왕릉에 대해 박학다식할 뿐만 아니라 설명을 해주는 말솜씨 또한 감동이었습니다. 조리있고 이해하기 쉬울 뿐만 아니라 듣는 사람으로 하여금 재미를 느끼고 흥미를 가질 수 있게 해주는 능력까지 가지신 분이었습니다. 저도 이런 좋은 일을 하고 싶어질 정도입니다. 선릉에 가시게 되면 꼭 안내를 받아서 설명을 들어보세요. 질문도 많이 하시고요. 정말 많은 것을 얻어갈 수 있을 겁니다.


아래에 보이시나요? 구름무늬 사이에 있는 십이지신 문양의 모자를 쓴 보살의 모습이... 


이제 정현왕후의 릉으로 향합니다. 정현왕후의 릉은 바로 앞에까지 가볼 수 는 없습니다. 테두리 쪽에서부터 출입을 통제하고 있어 옆에서만 바라볼 수 있도록 되어있습니다. 정현왕후릉은 아래 사진에서 볼 수 있듯이 병풍석과 치마석이 없습니다. 병풍석이 없으니 자연히 흙 밑으로 물이 빠지게 되니 치마석도 필요 없게 되는 것입니다. 그리고 왕릉이기에 난간석과 무인석도 있습니다. 성종의 첫번째 왕비는 소실이 없었고, 두번째 왕비의 아들이 연산군이었고, 연산군이 폐위된 후 세번째 왕비인 정현왕후의 아들인 중종이 왕위에 오릅니다. 정현왕후는 중종의 어머니 이고 정현왕후릉은 중종이 만든 것이죠. 연산군을 몰아낸 당시의 세도가가 말을 잘 듣는 중종을 앉혀놓고 정치를 했으니 중종의 왕권은 약했을 수밖에 없었을 것입니다. 그런 역사가 정현왕후릉에 고스란이 반영이 되어 있습니다. 선릉과 비교해 많이 간소화 되어 있음을 볼 수 있습니다. 왕릉을 통해 당시의 이야기까지도 엿볼 수 있습니다. 안내자분의 설명을 들은 덕분이지요.


선릉과 정현왕후릉을 보고 난 후 출입문 오른편으로 산책로를 따라 정릉으로 향합니다. 정릉은 중종의 릉입니다. 여기서는 설명을 듣지 못해 자세히는 알 수 없었지만 멀리서 보이는 정릉에는 병풍석이 보입니다. 신경을 좀 썼군요 난간석과 무인석도 보입니다. 고석, 혼유석 등등의 어려운 용어들을 구사하고 있는 나 자신을 보며 깜짝 놀라기도 합니다. 아까 30분 정도 왕릉에 대해 설명을 들은 게 확실히 효과가 있습니다. 정릉은 홍실문과 정자각 능침이 일직선상에 위치가호 있습니다. 참 잘 만들고 잘 보존해 왔다는 생각이 듭니다. 조선왕릉이 40기가 있다고 하니 다른 나머지 수십여기의 왕릉엘 가게 되더라도 이제는 많이 이해할 수 있을 것 같습니다.

왕릉을 보면서 가장 좋았던 부분은 역시 왕릉에 대해 좋은 안내자분을 만난 것이었지만, 이에 절대 뒤지지 않게 좋았던 것이 바로 산책길입니다. 선릉 자체만을 보기 위해 찾는 분들도 있겠지만 잘 관리된 선릉의 산책로에서 산책을 하는 게 정말 좋습니다. 바쁜 도시의 일상을 사는 우리 스스로에게 잠시 쉼표하나 찍을 수 있도록 허락해 주는 것도 꼭 필요한 일입니다. 선릉에서의 산책을 하며 머리를 식혀 보실 것을 강추해봅니다. 저는 동네 주변 수원 만석 공원으로 산책을 자주 다닙니다. 만약 제가 강남권에 살아야 한다면 선릉 근처에 살고 싶네요. 선릉에 한달 정기권 같은거 사놓고 수시로 산책하러 올 것 같습니다. 저야 강남권에 사는 건 꿈같은 이야기이지만 이동네 사시는 분 계시다면 이 좋은 것을 누리지 않을 이유가 없습니다. 무조건 와보세요. 런닝머신에서 걷지 마시고 선릉에서 좋은 공기 마시면서 걸어보세요.  

혹시 선릉이 멀어서 오시기 힘든 분이라면 아래 사진으로라도 눈으로라도 산책길을 한번 걸어보시기 바랍니다.강남 한복판에 이렇게 좋은 명소가 있다는 것에 한 번 놀라고 이런 숲이 있다는 데 또 한번 놀라고 깔끔하게 정돈된 모습의 숲에 한 번 더 놀라시기 바랍니다.

 저는 조선왕릉이 이렇게 좋다는 걸 알았으니 앞으로도 자주 여러 왕릉을 가 보렵니다. 함께하실 분 있으신가요? 


여행일 : 2011/05/01 (일)

교통편 : 지하철 이용 . 2호선 선릉역


반응형
반응형


누구나 조금만 방법을 익히면 간단한 안드로이드 Application을 만들 수 있습니다.

Android Studio를 설치가 다 되어있으시다는 전제로 시작하겠습니다.

아직 Android Studio가 설치가 안되어있으시다면 아래 링크를 클릭해서 Android Studio를 설치하시기 바랍니다.


 1. 누구나 할수있는 간단한 안드로이드 App 개발, 1편 Android Studio 설치

      http://happycode.tistory.com/347


Android Studio를 실행하고 Start a new Project를 선택합니다.

(기존에 프로젝트를 수행했던 파일을 가지고 있다면 아래의 적절한 메뉴를 찾아서 실해하면 됩니다.)

프로젝트의 이름을 정합니다. SimpleApp으로 정하겠습니다.

플랫폼을 설정합니다. minimum SDK를 Android 4.0.3으로 정하면 그 이전 버전에서는 동작이 보장되지 않습니다.

프로젝트의 기본틀을 내가 만들 App의 모양과 가장 유사한 걸 골라줍니다. 

기본코드들이 자동으로 생성이 되어 여기에 확장을 해나가는 방식으로 개발을 합니다.

일단 Empty Activity로 정합니다.

Activity Name은 기본설정으로 MainActivity로 그냥 두고 Finish버튼을 클릭


여기까지 하고 나면 이제 IDE 통합개발환경이 나타납니다.

여기에서 소스도 확인할 수 있고, 수정및 Activity등을 추가하고 할 수 있는 화면입니다.

일단 처음 프로젝트를 만들 때 가장 먼저 확인해야 할 중요한 파일은 세가지,

간단한 예제로 몇가지 앱을 만들어보다보면 아래 세가지의 설정등에 익숙해질 필요가 있습니다.


1. manifests : 앱이 필요한 권한등 애 설정을 관리

2. java MainActivity파일 : 여기에서 앱실행 후 동작을 정의 

3. Layout : 화면구성을 디자인, MS의 MFC디자인과 비슷함



이제 프로그램을 실행시켜 보겠습니다.

새로 만든 건 따로 없이 기본소스에 Hello World TextBox를 화면에 표시하도록 소스가 코딩되어 있습니다.

Run메뉴에서 Run 'app'을 클릭, 위 툴바의 녹색삼각형을 눌러도 됩니다.

실행을 위해 컴파일을 하고 프로그램 실행파일 apk를 생성한 후에 타겟에 올려서 확인을 해야 합니다.


여기서는 실제 안드로이드 폰에 올려서 실행하지 않고 가상의 Virtual Device인 Android Emulator를 설치해서 PC에서 확인을 하도록 하겠습니다.

Create New Virtual Device를 선택한 후 설치를 해야 합니다.


적당한 Device를 선택합니다.

계속 동의할 것 동의하고 Next를 하면 Virtual Device가 설치가 됩니다. 

그러면 Android Emulator가 PC에서 실행이 되고 폰을 대신해 결과물 확인이 가능해집니다.


Virtual Device를 설치하기 위해서는 아래의 HAXM을 설치해야 한다고 합니다. 쿨하게 설치를 같이 해줍니다.


세팅을 마치면 아래와같이 화면에 폰이 나오면서 부팅이 됩니다.

이렇게 부팅이 완료되고 나면


지금 만든 프로그램이 실행이 되고 SimpleApp이란 프로그램이 뜨며 화면에 Hello World라는 Text가 나타납니다.


다음 번에는 간단한 프로그램에 웹브라우저 기능을 넣어보겠습니다.



반응형
반응형


오목 알고리즘을 만들면서 학과 수업시간에 공부한 내용 일부 발췌 및 정리

https://ko.wikipedia.org/wiki/%EC%95%8C%ED%8C%8C-%EB%B2%A0%ED%83%80_%EA%B0%80%EC%A7%80%EC%B9%98%EA%B8%B0

https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning

한글 위키 페이지보다 영문위키페이지가 더 자세하게 잘 설명되어있는 듯하다. 궁금하거나 필요한 분은 영문위키페이지를 보길 바랍니다.

알파베타 가지치기 알고리즘은 분기한정법(branch and bound)의 한 종류이며 두 사람이 두는 게임, 예로 틱택토, 오목, 바둑 등에 많이 적용하는 알고리즘이다. 미니막스 알고리즘을 기반으로 하여 응용된 것이 알고리즘으로 이름붙여진 것이다. 미니막스 알고리즘은 깊이우선 검색(Depth First Search)로서 모든 노드를 다 계산해야 하는 무식한 Brute Force 방법이라고 할 수 있다. 이런 단점을 보완하기 위해서 더이상 검색해봐야 의미없는 노드의 가지들을 잘라내어서 검색속도를 획기적으로 빠르게 만들 수 있는 알고리즘이다. 

오목알고리즘에서는 알파베타 가지치기 (Alpha- Beta Pruning)알고리즘이 오목의 결과를 평가해주는 것은 아니며, 평가함수가 수행할 노드들을 전체 경우의 수를 다 평가하는 것이 아닌 가지치기 한 나머지의 노드들만을 평가할 수 있도록 도와주는 알고리즘 기술이다. 결국 오목 알고리즘의 성능 자체가 알파베타 가지치기(Alpha-Beta Pruning)알고리즘에 의해 오목의 지능이 높아지는 것은 아니며 결국은 평가함수를 어떻게 만드느냐에 따라 오목의 지능이 달라지게 되는 것이다. 다만 노드 검색을 위해서 불필요한 검색을 방지해주어 검색 성능을 끌어올려주는 데에 기여를 하는 알고리즘이라 할 수 있다.  

아래 수도 코드를 참고하자 

1. MiniMax Search Algorithm

Mini-Max(node, depth) 
{ 
     if (depth == 0) 
          return value(node); 
     else { /* depth is greather than 0 */ 
          if (node is black's move) { 
               max = -infinity; 
               for (each child c-node of node) 
                    max = max{max, Mini-Max(c-node, depth-1)}; 
               return max; 
          } 
          else { /* node is white's move) 
               min = +infinity; 
               for (each child c-node of node) 
                    min = min{min, Mini-Max(c-node, depth-1)}; 
               return min; 
          } 
     } 
} 

2. Alpha-Beta Pruning Algorithm  

/*Initially Alpha-Beta is called with alpha = -infinity, beta = +infinity */
Alpha-Beta(node, depth, alpha, beta) 
{ 
     if (depth == 0) 
          return value(node); 
     else { /* depth is greater than 0 */ 
          if (node is black's move) { 
               for (each child c-node of node) { 
                    v = Alpha-Beta(c-node, depth-1, alpha, beta); 
                    alpha = max{alpha, v}; 
                    if (alpha >= beta) 
                         return alpha; 
               } 
               return alpha; 
          } 
          else { /* node is white's move */ 
               for (each child c-node of node) { 
                    v = Alpha-Beta(c-node, depth-1, alpha, beta); 
                    beta = min{beta, v}; 
                    if (alpha >= beta) 
                         return beta; 
               } 
               return beta; 
          } 
     } 
} 


반응형
반응형

알파고 와 커제9단의 대국이 3:0으로 알파고의 승리로 끝난 가운데, 알파고는 바둑 대전에서 은퇴를 선언했다. 지금까지 바둑을 통해 컴퓨터 인공지능 AI의 가능성에 대해 시험해 보았고, 성과를 어느 정도 이루었다고 판단하였고, 센세이션을 일으킨만큼 지금까지 수행한 챕터는 마무리하고 다음 단계로 나아가기 위한 준비를 하겠다고 한다. 바둑에서 벗어나 보다 넓은 의미에서 컴퓨터 인공지능 AI가 인간의 삶의 실용적인 영역에가지 확대를 할 수 있도록 챕터2를 향해 나아가겠다고 하는 것이다. 이런 알파고의 행보가 무척이나 관심이 가고 궁금하기도 하다.

알파고 이야기를 조금 더 하자면 작년 이세돌 9단 , 올해 커제 9단과의 대국에 대해 혹자는 이렇게 재밌게 비유한다. 바둑의 신 알파고가 신선놀음에 지루해 미천한 인간들과 접바둑을 두기 위해 세상에 내려왔고, 혹시나 재미있는 경험을 할 수 있을까 싶어 인간세상에서 인간고수들과 바둑을 두며 유희를 즐기려 왔는데 역시 인간이군 하는 실망으로 인간과의 접바둑을 두지 않겠노라며 다시 돌아갔다고 한다. 인간과 앞으로는 바둑을 둘 의미가 없다며 돌아갔다고... 바둑은 이제 안한다고 했지만 혹시 인간들이 너무 졸라대면 가끔 이벤트로 접바둑 한두판씩은 둬줄지 모르니 열심히 바둑실력을 갈고닦아야겠다고.

이런 이야기들이 돌 정도로 최근 일주일 정도 알파고에 대해 이러쿵 저러쿵 이야기들이 많았다. 아무래도 중국기사 커제와의 대국인 만큼 작년 이세돌9단과의 대국처럼 핫이슈는 아니었지만 관심있는 바둑 동호인이나 인공지능 관심있는 사람들에게는 그래도 좋은 떡밥이 되었던 것이다.

오래 묵혀두었던 블로깅을 다시 하게 되면서 이 시점에 알파고 뉴스들을 보며 떠오르게 되는 것들이 내 관심사와 덧붙여져서 포스팅 하고싶은 주제가 생기는 게 자연스러운 현상이다. 바둑 알고리즘으로 이름을 날린 알파고를 보며 학창시절 오목 알고리즘을 만들어 게임을 만들었던 경험이 떠오르는 것은 자연스러운 현상이다. 

서론이 길었다.

2002년 제대후 복학하자마자 학과 수업 과제로 수행했던 오목 알고리즘 개발에 대한 이야기를 시작한다. 서론은 길었지만 본론은 매우 짧은 글이 될 것 같다. 과제를 수행하면서 그 과제에 푹 빠져 학교생활이 전체적으로 활력있고 재밌게 만들었던 기억이다. 하지만 15년이 지난 지금은 정말 개략적인 몇몇 내용만이 기억날 뿐이기 때문이다. 디테일하게 이야기를 적고 싶은 마음은 잠시 내려놓고 몇가지 history와 결과물을 첨부하는 것으로 마무리 하겠다.

 

 


첨부파일
Omok.7z

 

 

첨부파일을 받아서 실행해 보면 아래와 같이 오목판이 나온다.

오목 알고리즘은 평가함수를 만드는 게 사실상 전부이다. 각 좌표값에서 돌을 놨을 때의 점수를 계산해서 가장 높은 점수인 좌표값에 돌을 놓으면되는 것이다. 말은 굉장히 간단하다. 하지만 이런 평가함수를 만들기 위해서는 몇 가지 게임알고리즘 기술이 필요한데 가장 기본적으로 사용하는 알고리즘은 minimax 알고리즘이다. 

miniman 알고리즘은 이름대로 수많은 경우의 수에 대한 각 노드마다 유리한 정도를 최소, 최대값을 가지고 평가해서 그 값을 가지고 검색을 하는 알고리즘이다. 하지만 게임에서 경우의 수는 정말 어마어마하게 많을 수도 있다. 심지어 무한대일 수도 있다. 이 알고리즘은 모든 노드를 방문해서 다 계산을 하기 때문에 최적의 경우를 찾는 데 가지 시간이 많이 걸리고 불필요한 노드까지 계산을 하는 일이 많다. 이런 점을 휴리스틱으로 보완한 알고리즘이 Alpha-Beta Pruning 알고리즘이다.

Alpha-Beta Pruning 알고리즘은 가지치기 알고리즘이라고 한다. 특정 노드에서 가능한 경우중의 최대값과 최소값을 각각 이용해서 그 노드 아래로는 나올 수 없는 최대값이 옆 노드의 최소값 보다 작다면 구지 그 아래의 노드를 검색할 필요가 없고, 이런 경우는 노드를 가지치기를 해서 검색할 경우의 수를 줄여주는 알고리즘이다. 이 정도의 가지치기만 하더라도 경우의 수는 획기적으로 줄어들게 되고 결국 평가함수의 속도가 빨라지게 되는 것이다. 대략의 알고리즘에 대한 설명은 이 정도만 설명하기로 한다.

 

 

시작하자마자 바둑판을 클릭하면 검은돌이 놓이면서 자동으로 컴퓨터와 대국이 시작이 된다.

 

참고로 학과 수업이었고, 오목 알고리즘을 라이브러리 형태로 인터페이스를 맞춰서 개발을 하여서 과제를 수행한 다른 동료들의 알고리즘과도 대국을 수행할 수 있었다. 알고리즘 끼리 누가누가 잘하나 경쟁도 할 수 있도록 해서 더 재밌었었던 과제였던 것이다.

알고리즘의 성능 평가를 위해 기준점을 교수님이 제공한 오목 알고리즘으로 삼았고. 프로그램에서 비교테스트하기 위해 우리 오목알고리즘과 교수님 알고리즘을 대결하는 메뉴를 넣어놨다.

교수님(선) vs 우리꺼는 교수님 오목 알고리즘이 흑돌로 시작하는 것을 의미한다.

그리고 두번째 메뉴의 (스페이스바)라고 붙인 것은 컴퓨터끼리 워낙 빨리 휘리릭 하고 오목을 끝내버리지 말고 과정을 하나하나 보고싶을 때 스페이스바를 클릭해야 다음 수를 놓는 메뉴이다.

우리꺼(선) vs 교수님은 우리 알고리리즘이 흑돌로 시작하는 것을 의미한다.

메뉴에 난이도 조절이 있는데 초급, 중급, 고급으로 의도하고 만들었지만 사실상 중급, 고급에서 어이없는 실책을 자주 하는 것이 보인다. 난이도 구현을 위해 초급은 3수 앞까지 파악한다면 중급은 4수앞, 고급은 5수앞까지 파악하는 알고리즘을 만들려고 했는데 생각했던 것처럼 동작하지 않아서 결국은 원인은 파악 못한채 마무리 되었다. 난이도 조정가지 완성하고 싶었지만 결국은 못하고 그 이후 손을 대지 않은 상태이다.

그냥 초급으로만 두는 것을 추천한다. 

포스팅을 위해 대국을 몇 번 수행했는데, 간만에 오목을 두니까 번번이 컴퓨터에게 패배해서 그냥 컴퓨터가 이긴 화면을 캡쳐했다. 

포스팅을 하며 과거 학창시절에 재밌었던 기억이 새록새록 기억이 나서 기분좋은 경험이었다. 이 알고리즘은 추후에 2008년인가 2009년에 윈도우모바일폰 App만드는 연습을 하면서 윈모바일용 게임으로도 재탄생시켰던 적이 있었는데 아쉽게 그 소스는 지금 잃어버려서 찾을 수가 없다.

자료를 잘 정리해놓는 습관이 참 필요한 것을 다시금 깨닿는다.

하지만 학교때의 자료들은 다 남아있어서 간만에 레포트도 몇 개 열어봤는데..... 한가지 또 놀라운 걸 발견했다.

학교 수업 과제 제출 때 만든 보고서가 생각보다 엄청 정성을 들여서 제출했던 걸 보고 아 예전에 열심히 했었나보구나 하는 걸 다시금 발견하게 되었다.

사실 열심히 했다는 생각은 나면서도 얼마나 열심히 했는지까지는 잘 기억이 안났는데, 레포트를 보니 아 내 기억보다 조금 더 열심히 했었구나 하는걸 발견하게 되었다. 과거를 훑으면서 나도 기억 못했던 것들을 다시 되살려주고 있다.

기념이니 그 때의 레포트를 캡쳐해서 첨부해본다. 아래와같은 목차로 11장을 빽빽하게 채워넣었었구나.. 그 때 참 뭘 할 짬도 안나고 당구도 끊고, 게임도 끊고 그랬었는데 20학점 꽉꽉 채워들으면서 이렇게 하느라 그랬구나 ㅎㅎㅎㅎㅎ  

참 옛날생각에 잠시 감성적이 되어본다. 

 

반응형
반응형

누구나 조금만 방법을 익히면 간단한 안드로이드 Application 정도는 만들 수 있습니다.

예제를 따라서 하다보면 자연스럽게 안드로이드 앱이 탄생하는 것을 볼 수 있습니다.


안드로이드 개발을 위해 구글에서는 통합개발환경 IDE툴인 Android Studio 안드로이드 스튜디오를 내놨습니다.

그러면 쿨하게 Android Studio를 설치하도록 합니다. 

아래의 링크를 따라가서 안드로이드 스튜디오를 다운로드 받습니다. 

(아주 예쩐에는 SDK, NDK를 Eclipse에 addon했던 기억이 나는데 바뀌었구나)


Android Studio및 SDK도구 다운로드 | Android Studio

https://developer.android.com/studio/index.html

링크를 따라 들어가서 DOWNLOAD ANDROID STDIO를 받습니다. 

1.8GB정도 크기라서 시간이 꽤 걸립니다.

동의하고 받아서 설치한다.

설치화면이다. NEXT만 쭉 누르면 된다. 설치되는 데에도 시간이 꽤 걸린다. 나름 빠른 PC인데 20분 정도는 걸리는 듯하다.



설치가 끝났으면 이제 Android Studio 를 실행합니다.

지금부터는 익숙한 IDE통합개발툴의 모습을 보여줍니다. Eclipse하고 비슷하게 만들어놨겠지 하는 생각이 드는데요 과연 그렇습니다.

사실 MS의 Visual Studio를 많이 써보신 분이시라도 금방 익숙해질 수 있는 툴이며

초보자 분이시라거나 처음 프로그래밍으 배우시는 분이라면 백지상태이니 그냥 눈으로 익혀두시면 좋습니다.

사실 다른 프로그래밍도 다 이런 비슷한 환경에서 개발을 하고 있으니까 한가지만 익숙해지면 다른 것에서도 쉽게 익숙해질 수 있습니다.

설치가 끝났으면 이제 App을 만들어 볼 예정입니다. 다음 포스팅에 올리겠습니다.


반응형

+ Recent posts