맨위로가기

MMX (명령어 집합)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

MMX는 인텔이 개발한 명령어 집합으로, 공식적으로는 의미 없는 두문자어이며, 멀티미디어 확장 또는 행렬 수학 확장을 의미하기도 한다. MMX는 64비트 레지스터를 사용하여 정수 연산을 수행하며, 여러 개의 작은 정수를 동시에 처리할 수 있도록 설계되었다. MMX는 x87 부동 소수점 레지스터를 사용했기 때문에, 부동 소수점 연산과의 혼용에 제약이 있었고, 정수 연산만 지원하는 한계가 있었다. 인텔은 MMX 이후 SSE를 개발하여 이러한 단점을 개선했다. MMX는 임베디드 응용 분야에서도 활용되었으며, ARM 아키텍처 코어에 대한 SIMD 명령어 집합 확장인 iwMMXt로 구현되었다.

더 읽어볼만한 페이지

  • 1997년 도입 - 자살 봉지
    자살 봉지는 질식사를 위해 밀폐된 비닐 봉투에 불활성 기체를 채워 넣는 자살 방법으로, 인터넷을 통해 사용법이 확산되면서 윤리적 논쟁과 사회적 문제를 야기하고 있다.
  • 1997년 도입 - 비자유 민주주의
    비자유 민주주의는 선거로 권력을 얻지만 자유주의적 가치가 제대로 보장되지 않는 정치 체제로, 자유 민주주의와 권위주의의 중간 형태이며, 헝가리, 터키, 필리핀 등이 그 사례로 거론된다.
  • SIMD 컴퓨팅 - SSE2
    SSE2는 인텔이 개발한 x86 아키텍처의 SIMD 명령어 집합 확장으로, MMX 명령어의 정수 벡터 연산을 확장하고 XMM 레지스터를 사용하여 부동 소수점 연산 성능을 향상시키며, AMD64 아키텍처에서도 지원된다.
  • SIMD 컴퓨팅 - SSE3
    SSE3는 인텔에서 개발한 스트리밍 SIMD 확장 3 명령어 세트로, 부동 소수점 연산, 디지털 신호 처리, 3차원 컴퓨터 그래픽 처리 성능 향상을 위해 기존 SSE2 명령어 세트에 몇 가지 새로운 명령어를 추가한 것이다.
  • X86 명령어 - 스트리밍 SIMD 확장
    스트리밍 SIMD 확장(SSE)은 x86 아키텍처의 SIMD 명령어 집합으로, 128비트 XMM 레지스터를 사용하여 데이터 병렬 처리를 통해 성능을 향상시키며, 인텔 펜티엄 III 프로세서에 처음 도입되어 여러 후속 버전으로 발전했다.
  • X86 명령어 - SSE2
    SSE2는 인텔이 개발한 x86 아키텍처의 SIMD 명령어 집합 확장으로, MMX 명령어의 정수 벡터 연산을 확장하고 XMM 레지스터를 사용하여 부동 소수점 연산 성능을 향상시키며, AMD64 아키텍처에서도 지원된다.
MMX (명령어 집합)
MMX 기술 개요
일반 정보
유형SIMD 명령어 집합 확장
설계자인텔
도입 시기1997년
대상 아키텍처IA-32
확장판SSE
3DNow!
원래 의미MultiMedia eXtension(멀티미디어 확장)
기술 사양
데이터 유형8개의 64비트 정수
레지스터x87 레지스터 (MM0-MM7)
특징정수 SIMD 연산
데이터 병렬 처리 향상
멀티미디어 성능 가속화
적용 분야
주요 활용비디오 및 오디오 처리
게임
그래픽 편집
호환성 및 문제점
호환성 문제부동소수점 연산과의 간섭으로 인한 성능 저하 가능성
개선SSE로 대체 및 문제 해결
추가 정보
참고 자료Intel Technology Journal 1997
뉴욕 타임스 기사
워싱턴 포스트 기사

2. 명칭

MMX는 공식적으로 의미 없는 두문자어[6]로, 인텔(Intel)이 상표권을 등록했다.[7] 비공식적으로는 다음과 같은 의미로 설명된다.


  • ''멀티미디어 확장(MultiMedia eXtension)''[1]
  • ''행렬 수학 확장(Matrix Math eXtension)''[8]


AMD는 인텔과의 법적 공방에서 MMX가 "행렬 수학 확장(Matrix Math Extensions)"을 의미한다고 명시된 인텔의 마케팅 자료를 제시했다. 두문자어는 상표로 등록될 수 없으므로, 이는 인텔의 상표권을 무효화하려는 시도였다. 1995년, 인텔은 MMX 상표를 부당하게 사용한 혐의로 AMD 및 Cyrix Corp.를 상대로 소송을 제기했다. AMD와 인텔은 합의했으며, AMD는 MMX가 인텔 소유의 상표임을 인정했고, 인텔은 AMD에게 MMX 상표를 기술 명칭으로 사용할 권리는 부여했지만, 프로세서 명칭으로는 사용할 수 없도록 했다.[9]

3. 기술적 특징

MMX는 8개의 프로세서 레지스터(MM0 ~ MM7)를 사용하며, 각 레지스터는 64비트 크기로 64비트 정수 또는 여러 개의 작은 정수(32비트 2개, 16비트 4개, 8비트 8개)를 한 번에 처리할 수 있다. MMX는 정수 연산만 지원하며, 초기에는 2D/3D 계산에 유용했지만, 그래픽 카드의 발전으로 그래픽 분야에서는 활용도가 낮아졌다. 그러나 MMX의 포화 산술 연산은 일부 디지털 신호 처리 응용 프로그램의 성능을 향상시켰다.[10]

MMX 레지스터는 기존 x87 부동 소수점 장치(FPU) 레지스터를 공유(별칭)하여 운영 체제의 컨텍스트 스위치에 대한 호환성 문제를 해결했다. x87 레지스터가 스택 (추상 자료형)처럼 동작하는 것과 달리, MMX 레지스터는 임의 접근이 가능하다. 그러나 이러한 공유 구조 때문에 부동 소수점 연산과 SIMD 연산을 동시에 사용하기 어렵다는 단점이 있었다.[11] 성능을 극대화하려면 한 가지 모드만 사용하고 모드 전환을 최소화해야 했다.

64비트 MMX 레지스터는 80비트 x87 레지스터의 가수 부분에 해당하며, x87 레지스터의 상위 16비트는 사용되지 않아 모두 1로 설정되어 NaN 또는 무한대로 표시된다. 이를 통해 소프트웨어는 레지스터의 데이터가 부동 소수점인지 SIMD 데이터인지 구분할 수 있다.

MMX는 x87 FPU 레지스터를 이용하여 하나의 명령어로 여러 정수 연산을 처리하는 SIMD형 명령어 확장이다. FPU 레지스터를 공유하므로 부동 소수점 명령어와 동시에 사용할 수 없다. 운영체제(OS)가 프로세스(스레드)의 컨텍스트를 저장할 때, MMX 명령어 사용 프로세스는 FPU 명령어 사용과 동일하게 처리되므로 레지스터 저장에 문제가 없다.

인텔은 처음에 펜티엄의 새 버전(P55C)에 MMX를 탑재하여 '''MMX 기술이 탑재된 펜티엄 프로세서''' (일명 '''MMX 펜티엄''')로 출시했다. 이후 출시된 대부분의 IA-32 아키텍처 프로세서에 MMX가 탑재되었으며, AMDK6 등 타사 IA-32 호환 프로세서에도 탑재되었다. 인텔은 타사의 MMX 명칭 사용에 대해 소송을 제기했지만, 결국 화해했다.

MMX는 부동 소수점 연산 레지스터를 활용하려는 의도에서 개발되었다. x87 명령어와 MMX 명령어를 혼합하여 사용할 때, 초기화는 자동으로 수행되지만, 다시 x87 명령어를 실행하려면 EMMS 명령어를 실행하여 상태를 초기화해야 했다. EMMS 명령어는 펜티엄에서 수십 사이클을 소모했다. 각 실행에서 레지스터 상태는 유지되거나 저장되지 않았다. 그러나 x87 레지스터를 공유했기 때문에 컨텍스트 스위치마다 OS의 지원을 기다릴 필요가 없었다.

MMX는 정수 연산 처리만 가능하여 부동 소수점 연산을 많이 사용하는 3D 그래픽스 처리 성능 향상은 기대할 수 없었다. AMD는 부동 소수점 연산도 처리 가능한 SIMD 확장 명령어 3DNow!를 K6-2 프로세서에 탑재했다. 인텔은 펜티엄 III에 SSE를 탑재하여 부동 소수점 SIMD 연산을 지원하기 시작했다.

3. 1. 소프트웨어 지원

인텔의 C 컴파일러와 관련 개발 도구는 MMX 명령어를 호출하기 위한 내장 함수를 제공했으며, 인텔은 MMX를 사용한 일반적인 벡터화 알고리즘의 라이브러리를 출시했다.[5] 인텔과 메트로웍스는 컴파일러에서 자동 벡터화를 시도했지만, C 프로그래밍 언어의 연산은 MMX 명령어 집합에 적합하지 않았고, 2000년 기준으로 사용자 지정 알고리즘은 여전히 어셈블리 언어로 작성해야 하는 경우가 많았다.

MMX는 x87 FPU의 레지스터를 공유하므로, 운영체제가 프로세스(스레드)의 컨텍스트를 저장할 때 추가 작업이 필요하지 않았다.

디지털 신호 처리 장치(DSP)의 특기 분야인 음성, 이미지, 동영상 등의 멀티미디어 관련 처리를 CPU로 처리할 때의 성능 향상이 기대되었지만, 응용 소프트웨어 측에서 MMX를 사용하도록 프로그래밍되지 않으면 MMX에 의한 성능 향상의 혜택을 받을 수 없었다.

이후, 전용 레지스터를 사용하는 SSE 명령 세트가 확장되면서 MMX는 실질적으로 불필요해졌고, 인텔에서는 응용 프로그램 개발 최적화 시 MMX 사용을 피하는 것을 권장하고 있다.

4. 한계점

MMX는 정수 연산만 제공한다. 원래 인텔 i860에서 개발되었을 때, 2D 및 3D 계산 모두 정수 연산을 필요로 했기 때문에 정수 연산의 사용은 타당했다. 그러나 이러한 작업을 대부분 수행하는 그래픽 카드가 보편화되면서, CPU 내의 정수 SIMD는 그래픽 애플리케이션에서 다소 불필요해졌다. 다만, MMX의 포화 산술 연산은 일부 디지털 신호 처리 애플리케이션의 속도를 상당히 향상시킬 수 있었다.

MMX 레지스터는 기존 x87 부동 소수점 장치(FPU) 레지스터의 별칭을 사용하는데, 이는 기존 운영 체제의 컨텍스트 스위치 메커니즘과의 호환성 문제를 피하기 위해서였다. 컨텍스트 스위치는 이미 x87 레지스터를 저장하고 복원하는 기능을 가지고 있었기 때문이다. 스택 (추상 자료형)처럼 동작하는 x87 레지스터와 달리, MMX 레지스터는 각각 직접 주소 지정이 가능하다 (임의 접근).[11]

부동 소수점 스택과 관련된 모든 연산은 MMX 레지스터에도 영향을 미칠 수 있으며, 그 반대의 경우도 마찬가지다. 이러한 별칭 때문에 동일한 프로그램에서 부동 소수점 및 SIMD 연산을 함께 사용하기가 어렵다.[11] 성능을 극대화하기 위해, 소프트웨어는 종종 프로세서를 한 가지 모드(부동 소수점 또는 SIMD)에서 독점적으로 사용하며, 비교적 느린 모드 간 전환을 가능한 한 오래 미루었다.

각 64비트 MMX 레지스터는 80비트 x87 레지스터의 가수 부분에 해당한다. 따라서 x87 레지스터의 상위 16비트는 MMX에서 사용되지 않으며, 이 비트는 모두 1로 설정되어 NaN (Not a Number) 데이터 유형 또는 부동 소수점 표현의 무한대가 된다. 이는 소프트웨어가 주어진 레지스터의 내용이 부동 소수점 데이터인지 SIMD 데이터인지 결정하는 데 사용될 수 있다.

MMX는 원래 (당시) 일반적인 애플리케이션에서 사용 빈도가 적었던 부동 소수점 연산 레지스터를 유효하게 활용하려는 관점에서 착안되었다. x87 명령어와 MMX 명령어를 혼합해서 사용하는 경우, 최초 MMX 명령어 실행 시 필요한 초기화가 자동으로 수행되지만, 그 후에 다시 x87 명령어를 실행하려면 그 전에 EMMS 명령어를 실행하여 상태를 클리어해야 했다. EMMS 명령어는 펜티엄에서 수십 사이클을 필요로 했다. 각각의 실행에서 레지스터의 상태는 유지되거나 저장되지 않았다. 한편, 새로운 전용 레지스터를 추가하지 않고 기존의 x87 레지스터를 활용했기 때문에, 컨텍스트 스위치마다 신설 레지스터를 저장하는 등 운영 체제(OS)의 지원을 기다릴 필요는 없었다.

MMX로 속도를 향상시킬 수 있는 것은 정수 연산 처리에 한정되어, 부동 소수점 연산 처리를 많이 사용하는 3D 그래픽스 관련 처리 능력 향상은 기대할 수 없었다. 인텔과 경쟁하던 AMD는 먼저 부동 소수점 연산도 처리할 수 있는 SIMD 확장 명령 세트 3DNow!를 발표하고, 자사의 K6-2 프로세서에 탑재했다. 인텔은 AMD보다 부동 소수점용 SIMD 명령 세트 제공이 늦었다. 인텔의 부동 소수점 SIMD 연산에 의한 고속화는 펜티엄 III 이후에 탑재되는 SSE를 기다려야 했다.

5. 후속 기술

AMD는 자체 3DNow! 명령 집합으로 인텔의 MMX를 개선했다. 3DNow!는 정수 및 기타 개선 사항 외에도 SIMD 명령어 집합에 단정밀도(32비트) 부동 소수점 지원을 추가했다.[12]

MMX 이후 인텔의 다음 주요 x86 확장 기능은 1999년 펜티엄 III 제품군과 함께 도입된 스트리밍 SIMD 확장(SSE)이었다.[13] SSE는 MMX의 핵심적인 단점(정수 SIMD 연산을 부동 소수점 연산과 혼합할 수 없음)을 해결하기 위해 새로운 128비트 와이드 레지스터 파일(XMM0–XMM7)과 이를 위한 새로운 SIMD 명령어를 생성했다. SSE는 단정밀도 부동 소수점 연산(32비트)에만 집중했다. 정수 SIMD 연산은 여전히 MMX 레지스터 및 명령어 집합을 사용하여 수행되었다. 그러나 새로운 XMM 레지스터 파일을 통해 SSE SIMD 연산을 MMX 또는 x87 FPU 연산과 자유롭게 혼합할 수 있었다.

스트리밍 SIMD 확장 2(SSE2)는 펜티엄 4와 함께 도입되었으며, XMM 레지스터 파일에 정수(8/16/32비트) 및 배정밀도 부동 소수점 데이터 지원을 통해 x86 SIMD 명령어 집합을 더욱 확장했다. SSE2는 또한 MMX의 연산 코드(opcode)가 XMM 레지스터 피연산자를 사용하도록 허용했으며, 이후 SSE 개정판에서 더 넓은 YMM 및 ZMM 레지스터로 확장되었다.

전용 레지스터를 사용하는 SSE 명령 세트가 확장되어, 더 복잡한 데이터 처리나 부동 소수점 연산에도 대응했다. 더욱이 SSE2에서는 128비트 정수 연산 명령어 또한 추가되었다. 실질적으로 MMX는 불필요해졌기 때문에, 인텔에서는 응용 프로그램 개발 최적화 시 MMX 사용을 피하는 것을 권장하고 있다. SSE 명령 탑재 이후, 명령어 종류나 처리 능력에서 뒤떨어지는 MMX 명령은 주로 과거 자산과의 호환성만을 목적으로 구현 및 제공되고 있다.

인텔과 경쟁하는 AMD는, 먼저 부동 소수점 연산도 처리할 수 있는 SIMD 확장 명령 세트 3DNow!를 발표하고, 동사의 K6-2 프로세서에 탑재했다. 인텔은 AMD보다 부동 소수점용 SIMD 명령 세트 제공이 늦어졌다. 인텔의 부동 소수점 SIMD 연산에 의한 고속화는 펜티엄 III 이후에 탑재되는 SSE를 기다려야 했다.

6. 임베디드 응용

인텔마벨 테크놀로지 그룹XScale 마이크로프로세서 코어(PXA270부터 시작)에는 IA-32 MMX 확장 기능과 유사한 기능을 하는 ARM 아키텍처 코어에 대한 SIMD 명령어 집합 아키텍처 확장인 ''인텔 무선 MMX 기술''(iwMMXt)이 포함되어 있다.[14][15][16] 이 기술은 64비트 정수에 대한 산술 및 논리 연산을 제공하며, 소프트웨어는 한 번의 명령으로 두 개의 32비트, 네 개의 16비트 또는 여덟 개의 8비트 연산을 수행하도록 선택할 수 있다. 이 확장은 64비트 데이터 레지스터 16개와 32비트 제어 레지스터 8개를 포함한다. 모든 레지스터는 표준 ARM 아키텍처 코프로세서 매핑 메커니즘을 통해 액세스된다. iwMMXt는 코프로세서 0 및 1 공간을 차지하며, 일부 연산 코드는 이전 부동 소수점 확장인 FPA의 연산 코드와 충돌한다.

이후 버전의 마벨의 ARM 프로세서는 ''무선 MMX''(WMMX)와 ''무선 MMX2''(WMMX2) 연산 코드를 모두 지원한다.

7. 역사

MMX는 공식적으로 의미 없는 두문자어로, 인텔이 상표권을 등록했다.[6][7] 비공식적으로는 멀티미디어 확장(MultiMedia eXtension) 또는 행렬 수학 확장(Matrix Math eXtension)과 같은 의미로 설명된다.[1][8]

AMD는 인텔과의 법적 공방에서 MMX가 "행렬 수학 확장(Matrix Math Extensions)"을 의미한다는 인텔의 마케팅 자료를 제시했다. 두문자어는 상표로 등록될 수 없으므로, 이는 인텔의 상표권을 무효화하려는 시도였다. 1995년, 인텔은 MMX 상표를 부당하게 사용한 혐의로 AMD 및 Cyrix Corp.를 상대로 소송을 제기했다. AMD와 인텔은 합의했으며, AMD는 MMX가 인텔 소유의 상표임을 인정했고, 인텔은 AMD에게 MMX 상표를 기술 명칭으로 사용할 권리를 부여했지만, 프로세서 명칭으로는 사용할 수 없도록 했다.[9]

MMX는 x87 FPU의 레지스터를 전용하여, 하나의 명령어로 동시에 여러 정수 연산을 처리하는 SIMD형 명령 확장이다. MMX 레지스터는 FPU 레지스터를 공유하므로, 부동 소수점 연산 명령어와는 상호 배타적으로 사용해야 한다. 운영체제가 프로세스(스레드)의 컨텍스트를 저장할 때, MMX 명령을 사용하는 프로세스는 FPU 명령을 사용하는 것과 동일하게 보이며, 마찬가지로 레지스터를 저장하면 된다.

이후, 전용 레지스터를 사용하는 SSE 명령 세트가 확장되어, 더 복잡한 데이터 처리나 부동 소수점 연산에도 대응했다. 더욱이 SSE2에서는 128비트 정수 연산 명령어 또한 추가되었다. 실질적으로 MMX는 불필요해졌기 때문에, 인텔에서는 응용 프로그램 개발 최적화 시 MMX 사용을 피하는 것을 권장하고 있다.

인텔은 이미 출시했던 펜티엄의 신 버전(개발 코드네임 P55C)에 MMX를 탑재하여, '''MMX 기술이 탑재된 펜티엄 프로세서'''라고 명명하여 출시했다. 일반적으로는 '''MMX 펜티엄'''이라는 명칭으로 널리 알려졌다. 인텔은 이 이후에 출시한 IA-32 아키텍처 프로세서의 대부분에 MMX를 탑재했다.

MMX 출시 및 관련 주요 발표는 다음과 같다.

날짜내용
1997년 1월인텔이 MMX 펜티엄을 발표[21]
1997년 4월AMD가 MMX를 지원하는 K6 프로세서를 발표
1997년 5월인텔이 펜티엄 프로에 MMX를 추가하여 속도를 향상시킨 펜티엄 II 프로세서를 발표
1997년 5월IDT가 MMX를 지원하는 WinChip C6를 발표
1997년 5월Cyrix가 6x86에 MMX를 추가한 6x86MX (M II)를 발표



경쟁 및 후속 기능도 등장했다.

날짜내용
1998년 5월AMD가 부동 소수점 연산 처리를 고속화하는 3DNow!를 탑재한 K6-2 프로세서를 발표
1999년 2월인텔이 부동 소수점 연산 처리를 고속화하는 스트리밍 SIMD 확장 명령어(SSE)를 탑재한 펜티엄 III 프로세서를 발표


참조

[1] 뉴스 Makers Unveil PCs With Intel's MMX Chip https://archive.nyti[...] 2019-01-13
[2] 뉴스 Intel to unveil faster Pentium chip https://www.washingt[...] 2019-01-13
[3] 웹사이트 Embedded Pentium Processors with MMX Technology http://www.intel.com[...] 2007-07-28
[4] 간행물 MMX Technology Architecture Overview http://www.intel.com[...] 2015-10-29
[5] 뉴스 Intel's MMX: The Technology Behind the Hoopla https://archive.nyti[...] 2019-01-13
[6] 간행물 A new chip off the block https://www.newsweek[...] 2019-08-31
[7] 웹사이트 "Intel | Data Center Solutions, IoT, and PC Innovation" http://www.intel.com[...] 2013-12-17
[8] 서적 Advanced Industrial Control Technology William Andrew Publishing 2024-06-02
[9] 뉴스 Intel and Advance Micro agree on chip trademark https://www.nytimes.[...] 2019-01-13
[10] 간행물 MMX Microarchitecture of Pentium Processors With MMX Technology and Pentium II Microprocessors https://web.archive.[...] 2017-09-01
[11] conference The long and winding road to high-performance image processing with MMX/SSE https://web.archive.[...]
[12] 뉴스 Pentium III: Buy the Numbers? https://www.washingt[...] 2019-01-13
[13] 웹사이트 Microprocessor Hall of Fame https://web.archive.[...]
[14] 웹사이트 " \tIntel Brings MMX™ Technology To Intel® Personal Internet Client Architecture-Based Wireless Devices " https://www.intel.co[...] 2022-07-28
[15] 웹사이트 Intel Delivers Next-Generation Processors Specifically Designed For Cell Phones And Wireless PDAs https://www.intel.co[...] 2022-07-28
[16] 웹사이트 World's smallest PXA270 embedded CPU card? https://www.eetimes.[...] 2022-07-28
[17] 문서 PCエンサイクロペディア:第8回 PCのエンジン「プロセッサ」の歴史(2)~性能向上に勤しんだ486/Pentium世代 2. RISCのアーキテクチャに近づくPentium - @IT https://atmarkit.itm[...]
[18] 문서 FMV-DESKPOWER - AzbyClub サポート : 富士通 https://www.fmworld.[...]
[19] 문서 Intel's MMX Instruction Set | Microsoft Learn https://learn.micros[...]
[20] 문서 From ARM NEON* to Intel® SSE - The Automatic Porting Solution, Tips and Tricks https://www.intel.co[...]
[21] 웹사이트 米Intel社、「MMXテクノロジPentiumプロセッサ」を正式発表 https://pc.watch.imp[...] PC Watch 2012-08-21
[22] 웹인용 BDTI - Intel MMX Pentium https://web.archive.[...] 2007-11-25
[23] 문서 Intel® Pentium® Processors with MMX™ Technology for Embedded Computing - Overview http://www.intel.com[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com