임베디드 기기를 제작하려면 하드디스크처럼 물리적인 구동모듈이 없는 OS구동이 필요하다.
특히나 윈도우즈같은 덩치큰 OS는 성격상 일반 ROM에서 구동하기에 적합하지 않기 때문에 플래시롬에서 돌려야 하겠지만, 플래시롬의 Read/Write 횟수제한은 잦은 액세스를 필요로 하는 윈도우즈를 돌릴 경우 긴 수명을 보장받기 힘드므로, 램(RAM)디스크 구동이 가능하다면 빠른 속도와 오랜 수명을 보장 받을 수 있게 된다.

필요한 준비물

- Microsoft® Windows® XP Embedded with Service Pack 1
- 충분한 메모리 공간(2기가 이상)

구동 원리는 Windows XP Embedded의 SDI Image를 이용하여 램디스크에 복사될 인스톨 드라이브의 내용을 만들고, 이를 초기 부팅시 램디스크를 마운트하고 해당 이미지를 로드하는 것이다.

SDI Image는 XP Embedded의 주 기능중 하나로 다음의 3가지 정보를 품게된다.

1. BOOT BLOB (부트 프로그램)
부트 프로그램 부분에는 STARTROM.COM이란 32비트 프로그램이 들어가게 된다. STARTROM.COM은 초기 부팅시 OEM-Authored Boot Program라는 프로그램을 로드 할 수 있는데, 이 프로그램은 이미지의 공급자가 부팅전 원하는 작업을 수행할 수 있는 기회를 준다.

2. LOAD BLOB (NTLDR)
램디스크가 마운트되면 작동할 NTLDR이 들어갈 공간이다. 부트 프로그램이 SDI 로딩을 끝내면 이 부분의 NTLDR을 작동시켜 램디스크 XP부팅이 시작된다.

3. PART BLOB
실질적인 OS가 들어갈 부분. 잊지말아야 할 부분은 인스톨본이 아니라 인스톨된 드라이브의 이미지라는 것이다. 여기에 반드시 들어가야할 3가지 내용이 있는데,
- 윈도우즈 램디스크 드라이버가 들어가 있을것
- ntdetect.com과 boot.ini가 들어 있을것
- boot.ini안에서 해당 볼륨의 실행부분을 다음과 같이 바꿀 것
[boot loader]
default=ramdisk(0)\WINDOWS
[operating systems]
ramdisk(0)\WINDOWS="Windows XPE From RAM" /fastdetect

SDI 이미지를 만든 대략적 과정은 다음과 같다. (SDI Manager 디렉터리 상에서 작업)

1. 공 SDI 이미지를 만든다.
C:\SDI>sdimgr /new ram_boot_img.sdi

2. 인스톨된 볼륨의 내용을 Import한다. (볼륨이 D드라이브일 경우)
C:\SDI>sdimgr ram_boot_img.sdi /readpart:d:

3. 부트 프로그램을 Import한다.
C:\SDI>sdimgr ram_boot_img.sdi /import:BOOT,0,startrom.com

4. NTLDR을 Import한다.
C:\SDI>sdimgr ram_boot_img.sdi /import:LOAD,0,ntldr

5. 마지막으로 패킹한다.
C:\SDI>sdimgr ram_boot_img.sdi /pack

6. 이미지에 이상이 없는지 확인해본다.
C:\SDI>sdimgr ram_boot_img.sdi

현재 계획은 초기 부팅 모듈과 SDI이미지는 플래시롬에 기록되고, 플래시롬을 통하여 SDI 이미지가 램디스크에 마운트 된 이후부터는 플래시롬은 사용되지 않는 방식을 고려중이다.
보다 자세한 내용은 MSDN의 해당 글과 SDI Manager 매뉴얼을 참고해본다.

MSDN 해당 글 바로가기
SDI Manager 바로가기
AND

Prolog

비스타가 출시되기 이전부터 비스타에서 구동되지 않은 프로그램이나 게임의 목록이 블로그들을 타고 돌기 시작했다. 정부기관의 ActiveX 문제 역시 기존 ActiveX가 비스타에서 호환되지 않은 이유로 정부가 MS에 도움을 요청했다는 굴욕사실때문에 뜨거운 이슈로 급부상했다. 아직까지 비스타를 써본 적이 없었는 필자는 무슨 문제 때문에 호환되지 않는지가 매우 궁금했으나, 구체적인 이유가 기술된 글들을 찾지 못해 두리뭉실한 느낌으로 ACL문제와 웹브라우저의 보안문제 등이 문제일 꺼라고 생각하고 있던 차에 오늘 우연히 Windows ME 시스템을 Windows Vista Home Edition에 migration해달라는 부탁을 받고 처음으로 비스타의 문제에 직면했다. (본 문제는 하위호환이 안되는 많은 문제중에 하나이기 때문에 넘버링을 했다. 문제를 찾을 때마다 포스팅할 예정이다.)

비스타의 하위호환문제 #1

이번에 발견한 문제는 ACL에 관련된 문제인데, 비스타(최소한 홈에디션)에서는 프로그램이 OS 루트 홀더의 파일 생성 및 저장의 권한을 가지지 못한다. XP의 최신 OEM버전에서도 이런 세팅이 있었지만, 안전모드에 administrator로 들어가서 루트+하위홀더의 권한을 유저나 원하는 계정에 부여해주면 해결되었다. 하지만, 비스타에서는 루트의 모든 권한을 해당 유저나 USERS 그룹등에 부여한다해도 파일을 생성할 수 없었다.(짧은 시간 리뷰였기 때문에 방법이 존재할 수도 있습니다. 아시는 분이 계신다면 리플 부탁드립니다.) 필자가 마이그레이션하던 프로그램은 BDE(Borland Database Engine)을 사용한 어플리케이션이었는데, BDE의 기본 DB인 Paradox에서는 DB파일의 네트워크 엑세스를 위하여 C:\에 PDOXUSRS.NET이라는 파일을 생성하는데 이 파일이 생성되지 않기 때문에 프로그램이 작동하지 않았다.

두개의 해결방안

이 문제는 해결하는 방법은 2가지가 있는데, 첫째는 BDE Administrator를 통하여 NET Directory를 변경하는 방법이 첫번째인데, 간단한 방법이기는 하나 어플리케이션에 따라 BDE Confiuration을 자체적으로 가지고 있는 넘들에게는 해결이 안되는 단점이 있다. 두번째는 단축아이콘 옵션에서 프로그램에 Administrator의 권한을 부여해주는 것이다. 확실한 방법이지만 역시 단점이 있는데, 시작할때 매번 이 프로그램의 권한은 Administrator로 실행하겠냐는 질문에 답을 해줘야한다. (끌 수 있는 옵션이 없다)


비스타의 새로운 정책을 꼬집은 Apple의 ad. 비스타를 써 봤다면 300% 공감이 가능하다.

애플광고에서 썬글라스 아저씨의 Cancel or Allow. 겨우 2시간 봤는데 짜증이 무럭무럭 났다;;


누구를 탓할 것인가

그럭저럭 문제를 해결하고나서 XP가 설치된 내 작업 노트북의 C루트를 보니 보안 ActiveX, 게임 런쳐 ActiveX,  웹하드 ActiveX 등등이 남긴 로그파일들이 쌓여있었다;; 비스타에서 이 모든 프로그램들은 구동중 OS 루트 홀더의 권한을 얻지 못하여 죽을 것이 뻔하다.. 자 그럼 누구를 탓할 것인가? 개발자가 무책임하게 가장 만만한 루트에 로그를 남긴 것을? 아님 ActiveX를 남용한 국내 사이트 제작자들? 아님 정부의 정책?

문제의 핵심은 무엇일까

아직까지 모든 비스타의 호환문제를 겪어본 것이 아니라 속단하기는 이르지만, 이 문제는 언젠가는 짚고 넘어가야할 Windows라는 OS의 문제였지 ActiveX의 문제라던가 정부정책의 문제를 수면으로 끌고 올라올 문제는 아니라는 생각이 든다. (주. ActiveX에서 호환문제가 더 커지는 것은 Stand-alone Application이 아니기 때문에 권한 설정이 불가능하고 Exception발생시 프로그램이 죽을 확률이 더 높기 때문이다.)한 회사의 솔루션을 정부 사이트에 적용해버린 부분의 문제는 이 문제와는 별개란거다. 시간을 거슬러 처음 NT기술이 일반 사용자에게 접목된 2000, 혹은 XP가 나올때 MS는 일반 사용자에게는 걸맞지 않은 NT 기술의 ACL을 도대체 어떻게 사용하기 쉽게 펼쳐놓을지를 고민했을 것이 분명하다. 하나의 홀더안에서도 파일의 성격에 따라 다른 권한을 주는 복잡다단한 OS가 될 것인가, 아니면 모든 파일이 관리자소유이고 모든 사용자가 관리자인 단순한 OS가 될 것인가의 갈림길에서 MS는 과감히 후자를 택했고, 그 이후로 대부분의 우리는 파일의 권한관리와는 담을 쌓고 살아왔다.

비스타의 하위 호환문제의 핵심은 새로운 "기능(function)"이 아니라 새로운 "정책(policy)"이다.

이미 가지고 있는 기능이지만 사용자의 편의를 위해서 죽여놨던 기능들을 허술한 보안체계의 OS라는 불명예를 씻어버리기 위해 부활시킨 것 뿐이다. 다만 그 과정에서 예고없이 강화한 많은 "정책"들이 기존 프로그램들의 호환성을 떨어뜨린 것뿐이다. 물론 개발자가 루트 홀더에 마구잡이로 파일을 생성한 것은 잘못된 것이지만, 그것이 이후 하위호환성을 떨어뜨릴 수 있다고 경고하지 않은 것은 M$다.
AND

2005년부터 시작되어 3회째는 맞은 Living Game Worlds 심포지움이 3/29부터 아틀란타 조지아텍에서 열린다. 2006년 키노트 발표자였던 Will Wright같은 슈퍼 스타는 없지만, Rules of Play 의 저자인 Katie Salen 이하 학계와 업계 담당자들이 대거 참여한다. (하지만 Katie Salen을 포함 대부분이 2006년 발표자였다는 사실) 그런데 심포지움의 무게에 비해 주제에 대한 서술이 너무 부족하다. "Playing With Reality"라면 요즘 들어 Game Theorist 들이 유행시키려는 현실접목형 게임(혹은 대체현실게임(alternate-reality games)? 아직 용어정립이 안되놔서..)을 주제로 한다는 거 같은데, 울 어머니가 좋아라하시는 Jane McGonigal 정도는 초대할 만 한테 발표자에는 포함되어 있지 않다. 어찌됐건 게임 기획자라면 참석할 가치가 있는 세미나 중 하나임이 분명하다. 3/10일까지 등록하면 100불에 사전등록이 가능하다. (현장 등록은 200불)

사이트 바로가기

Jane McGonigal의 CNET 인터뷰 바로가기

한국형(?) 현실접목형 게임 Fun Out 카페 바로가기
AND

Wharton에서 수강중인 Product Design Course에선 실제로 Product Prototype을 만들어야 한다. 기획이나 디자인은 한다쳐도 절삭이나 몰딩 같은 단어는 IT 샌님들에게는 너무나 멀게 느껴진다.

eMachineShop은 이러한 문제를 한번에 날려보낼 수 있는 파워풀한 e-business 사이트이다. 내가 원하는 부품을 디자인하면 단가가 바로 출력되고 주문하면 몇일 후에 UPS를 통하여 배송된다!! 이건 온라인 인화사이트 정도와는 차원이 다르다! 내가 평소에 못하는 것을 할 수 있게 해준다.
먼저 제공하는 툴의 사용법을 익혀야 한다.

제공되는 제작 디자인 툴. 깔끔하고 직관적으로 초보자도 사용하기 쉽게 되어있다.

여타 벡터툴이나 3D 디자인툴과 다를바가 없지만 크게 다른 점 몇가지가 있는데, 첫번째는 재료를 선택한다는 점이다. 재밋는 점은 재료의 강도나 재질에 따라 가공가능한 공정이나 정밀도가 달라진다는 점이다. 예를 들면 철은 싸지만 세밀한 공정이 불가능한 데 비해 알루미늄은 보다 세밀한 공정으로 제조가 가능하지만 가격이 비싸다. 금속성 재질은 물론 플라스틱도 가능하다.

재료선택화면

재료 선택이 끝나면 각 디자인 별로 어떤 제조 공정을 거칠 것인지를 결정한다. eMachineShop에서는 다양한 기기들을 보유하고 있고, 유저는 어떤 머신을 거칠 것인지를 직접 결정하게 된다. 예를 들면 가장 무난한것이 Mill 3-axis인데 3축으로 내가 원하는 어떤 모양이든 제조가 가능하지만, 단가가 비싸지는 단점이 있다.
공정 선택이 끝났다면 3D로 어떤 모양이 되는지를 시뮬레이션 해본다.

랜더링 화면. 등긁게가 아니라 병따개다.

마지막으로 견적서를 받아본다. 참고로 테스트해본 이 병따개의 경우 초기 단가는 11,000불이 넘었었다. 너무 많은 공정을 거쳤기 때문이다. 그래서 보다 싼 재질을 선택하고 공정수를 줄여본 결과 1,000개 생산할 경우 단가가 3,782불 들었다. 개당 3.7불하는 병따개를 만든 셈이다.
기계과 친구 말은 이정도는 나가서 가계 돌아다니면 할 수 있는 것들이라고 하지만, 그쪽 배경지식이 전혀 없는 사람이 이토록 쉽게 접근하여 결과물을 받을 수 있다는건 확실한 e-business의 장점이지 싶다. 또한 일반인이 접근할 수 있게된 결과, 1회성 기념품이나 아내에게 주는 이벤트 선물, 집 수리용 소량부품 등 기존에는 없었던 Market Segmentation이 생길 수 있다. 가능성은 무궁무진하다. 나는 Embedded System의 케이스를 Injection Molding 플라스틱으로 제조해볼까 고려중이다.

eMachineShop 사이트 바로가기
AND

JoonJoon군과 노닥거리다 우연히 얘기하게된 소형 Embeded System. 예전부터 Embeded System DIY제작에 관심이 많아온터라 의견을 주고받았다.

mini-ITX

mini-ITX는 2001년 VIA에서 합병한 Cyrix의 저전력 프로세서 C3를 위하여 만든 규격이다. 그 당시의 분위기를 되살리자면, 춘추전국시대와 같았던 x86 호환 CPU시장이 인텔, AMD를 빼고 퍼포먼스 측면에서 사장되고 있던 시기였다. Cyrix 역시 그 당시 천하를 호령하던 Athelon XP이나 Pentium4의 상대가 되지 못했기 때문에 저전력, 소형화를 통해 Embedded 시장을 노크하기 시작했다. mini-ITX는 micro ATX 등과 비슷한 개념이지만 보다 소형(170 mm x 170 mm)에 방열판 구조의 저소음/저전력 아키텍쳐를 지향이였다.

nano-ITX

이후 VIA는 2005년말 보다 소형(120 mm x 120 mm)의 nano-ITX 폼펙터를 발표한다.

pico-ITX. D-SUB 단자가 이렇게 크게 느껴질 줄이야.

장사가 잘 되는지 얼마전 CES 2007에서는 pico-ITX 폼펙터를 발표했는데 크기는 불과 100 mm x 70 mm에 불과하다.

CES 2007 인터뷰 영상

앞으로 ITX 카테고리를 통하여 ITX H/W 관련 정보나 Embedded S/W 관련 정보를 포스팅할 예정이다.
AND

AND

많은 관심/무관심 속에 Windows Vista가 정식 런칭되었다. 이번만큼 OS의 향상된 변화의 폭을 가늠하기 애매한 때가 없었던 거 같다. Win16, Win32에 이은 새로운 API 체계인 WinFX를 갖추었지만, WinFX는 결국 .NET 3.0 Framework이기 때문에 획기적이라 부르기에 논란의 여지가 있다. Epic 개발자 발언으로 논란이 되고 있는 DX10 역시 비스타전용으로 분류되기엔 무리가 있다. (이미 발표된 DirectX 2006 Dec. 버전에서 DX10의 기능을 XP에서 개발/활용할 수 있다.)

몇주전에 .NET 3.0 Framework을 깔고나서 Visual Studio.NET 2005(이하 VS.NET)의 Form Designer에 비약적인 성능하락이 있었기 때문에(이벤트와 커맨드를 UI에서 연결해주는 기능이 사라졌다;;), Expression Blend를 오늘 수업사이 남는 시간에 깔아보았다. (* Expression Blend는 별도의 프로그램으로 어플리케이션 개발에서 프리센테이션 레이어인 XAML만을 디자인하는 도구이다.)

M$ Expression Blend의 첫 소감을 말하자면 VS.NET Form Designer + Adobe Flash + Maya 정도랄까, 매우 상이한 여러개의 카테고리가 엉성한 틀안에 공존하는 느낌이다. XAML를 기본으로 하여 폼을 디자인하고 리소스들을 배열하고, Flash와 같이 Timeline을 생성하여 각 구성요소의 애니메이션을 정의하고 트리거를 연결할 수 있다. 또한, 3D 객체와 Material을 불러와 버튼이나 구성요소등으로 활용할 수 있으며, 3D 객체 역시 Timeline을 이용하여 모든 속성(Material, Camera, Translation, ...) 등을 애니메이션할 수 있다.

분명 디자이너를 위한 툴인데, 이 모든걸 소화할 디자이너가 과연 몇이나 있을까...

짬을 내서 만들어본 Hello World. 비정형 윈도우에 3D 객체를 불러온다음, Canvas를 만들고 그 위에 3D 객체의 랜더링 결과를 Visual Brush로 만들어 연결하고 Flip시켜서 Reflection 비스무리한 효과를 만들었다. 그런다음 각 개체의 Animation을 Timeline을 생성하여 만들고, 트리거를 이용하여 마우스 Interaction에 적당히 연결해 놓았다.

결과는 나쁘지 않은데, 비정형 윈도우에서 3D 객체와 이미지들이 알파(투명도)가 먹은채로 잘도 돌아간다. 3D 객체라도 윈도우 기본 이벤트를 모두 내포하고 있기 때문에 버튼이나 기타 컨트롤로 100% 활용이 가능하다. (오른쪽의 병은 마우스 포커스시 Diffuse Color가 Blue로 변하며 클릭시 X Scale이 커지게 되어 있다.) 구경하던 친구말대로 "Application"에 대한 정의를 바꿔놓을 수 있는 잠재성이 있어 보인다.

툴의 단점을 나열하자면, 너무나 많은 부분을 담고 있기 때문에 세세한 부분에서 부족한 점들이 있다. 애니메이션 객체를 지우면 코드에 적용이 안되서 실행시 에러가 난다던지, Timeline 애니메이션에서 Curve Interpolation이 지원안된다던지, 3D 객체를 불러와도 3D 애니메이션은 불러오지 못한다던지, 텍스쳐 적용이 안되고, 쉐이더 역시 사용불가이고, Timeline 애니메이션이 Reverse Play Control이 안되고, Repeat 설정은 XAML에서 직접 해줘야 한다던지, 말하자면 끝이 없다. 차라리 Flash나 Maya에서 디자인된 결과를 XAML 테그로 Export하는 기능이 있는게 나을듯 하다.

Vista의 에어로UI의 룩앤필을 가지고 OS X보다 못하다던지, 그냥 구리다던지 비평하시는 분들이 많은데, 압도적인 기술을 가지고도 멋진 UI를 만들어내지 못하는 M$는 역시나 개발자의 회사임이 틀림없다. 3D 모델이나 효과, 그리고 벡터가 접목된 Vista의 UI는 아직까지 UI 디자이너들의 관심이 절실히 필요한 부분임에 틀림없다.

Hello World 다운 받기(XP이하에선 .NET 3.0 필요)

.NET 3.0 Runtime 다운 받기
AND

좀 지난 얘긴데, 막간을 이용해 올려본다. Tsukuba 대학 CS의 한 학생이 SIXAXIS(Playstation3의 컨트롤러)를 PC에서 구동가능하게 하는 프로그램을 만들었다. 원래 SIXAXIS는 USB HID기기로 등록이 되지만(블루투스에선 아직 등록이 안된다), 실제 작동은 하지 않고 있었다.(RAW Data조차 뿌려주지 않았었다.) 이 학생은 SCE에서 "it requires special USB request to enable sending HID data"(HID로 작동을 위해선 특별한 USB신호를 보내야한다)라는 발표를 보고 그 신호를 찾아서 SIXAXIS의 PS버튼을 누를 경우를 캐치해 응답신호를 보내주는 프로그램을 만들었다. 이로서 컨트롤러의 십자패드, ○X□△버튼, L1-3, R1-3, 2개의 아날로그 스틱을 읽을 수 있다. 다만, 현재까지 모션센싱데이터(6축 모두)를 읽을 수 없다.

사이트바로가기

일한사이트 번역 구글 툴바버튼
AND


처음 Wiimote를 PC에서 구동시키고나서 인터넷에는 내 블로그의 구동 사진들이 허가없이 도배되었었다. (허락 받으신 분도 계셨지만, 외국사이트에서는 전혀 동의없이 게시되었었다. 심지어는 자기 사이트의 워터마크까지 달아 놓은 곳도;;) 어쨌거나 학기말 프로젝트에 정신이 팔린 사이 Carl Kenner가 선수를 쳐서-만들 생각도 없었지만- 완성된 버전의 PC구동 유틸을 만들었다.

그런데, Wiimote의 내부를 들여다보니 내가 잘못 알고 있던 사실들이 있었는데,

- Wiimote는 6 axis(3-axis positional + 3-axis rotational)가 아니라, 단지 3-axis linear force sensor(XYZ)만을 가지고 있다.
- Linear force sensor는 Gravity의 영향을 직접적으로 받고있으며, 필터링되지 않은채 정보가 넘어온다.
- 따라서 3-axis positional 데이터 만으로는 컨트롤러의 local coordinate을 알 수 있는 방법이 없다.
- IR Sensor는 IR emitter의 갯수와 각각의 신호의 강도, 그리고 Wiimote 시점에서의 2D 좌표를 알 수가 있다.

결론은, Wiimote는 3D space상의 위치와 움직임을 완벽하게 알 수 없다는 사실. 재밋는 사실은 와리오웨어 영상을 보면 각각의 게임들이 어떻게 Wiimote를 잡고 게임을 해야하는지 친절하게 설명을 해주는데 그것이 바로 local coordination을 정의하기 위함이었다.


01:21 부분을 살펴보면 친절하게 어떻게 잡아야하는지를 알려준다. 사용자가 어떤 방식으로 잡고있는 지를 모르면 Wiimote는 정확한 입력 정보를 알아낼 수 없다.

PS3의 SIXAXIS보다 절대적 우위에 있다고 확신했던 필자이기에 반성이 필요할 듯하고, 앞으로 두개의 디바이스가 가지는 장단점을 지속적으로 살펴봐야겠다.
AND


Game Theorist라 칭하는 Jesper Juul가 우리 학교에 왔었다. 그는 게임 이론으로 IT University of Copenhagen에서 PhD를 받았으며 동 대학의 Center for Computer Games Research에서 Assistant Professor로 재직중이다.

아직 읽어보지는 않았지만 MIT Press에서 출간한 그의 책 "Half-Real"의 평이 나쁘지 않아 꽤나 기대가 되는 세미나였다.

0123456789101112131415161718

핵심 주제는,
- 게임의 발전은 그래픽의 향상으로만 이루어져서는 안된다.
  (1년마다 배가되는 개발비가 뛰어난 재미를 의미하는 것이 아니다)
- 다양한 유저 발굴을 위해 새로운 게임모델 개발이 필요하다. (Goal-less Game)
- Goal-less 게임에서 유저는 목표 달성보다는 다양한 가능성을 탐험해보는 즐거움을 느낀다.

그의 설명을 들으면서 예전에 문방구 앞에 있던 로보트 레슬링이 떠올랐다. 게임할 돈이 없던 나는 동무들이 하다가 끝난 게임을 붙잡고 High Score를 새기는 커서 2개로 친구와 술래잡기 놀이를 했었다. 목표가 있는 게임을 가지고도 다양한 플레이를 하는데, 가능성을 넓혀주면 목표외 재미는 배가 될 수 있겠지.
하지만, 뭔가 2% 부족하다.. 세상에 어떤 게이머가 넓은 세상과 가능성을 가진 게임이 싫겠나, 그저 그만큼의 개발리소스를 쏟아부어야 하기 때문이 아니겠나. 게다가 그의 게임에 대한 넓은 의미의 접근은 많은 관계자들로부터 '목표가 없다면 게임(Game)과 장난감(Toy)의 구별이 무엇이냐?'라는 질문 공세를 받게 하였다. 하지만, 한가지 분명한 것은 Goal-less는 미래 게임 유형의 한 부분을 차지할 것이라는 점이다.

Jesper Juul 사이트 바로가기

Half-real 사이트 바로가기

The Ludologist (His Blog) 바로가기
AND