1. 공식 마케팅 활동이 아닌 무허가 바이럴 마케팅 활동 적발 시 즉각 회원 권한 박탈 및 닉네임 공개
  2. 저작권법에 따라 대한민국 언론/매체/커뮤니티 기사 일부/전문 게재 금지하며 오직 URL 링크만 허용
  3. 개인 유튜브 채널, 방송 등 홍보성/수익성 유튜브 영상 업로드 금지
  4. 신고 사유에 포함되지 않음에도 감정적/무분별한 신고 기능 사용 시 제재
  5. 국내 특정 업체를 대상으로 무분별한 칭찬/비난글 금지, QM 판단하에 사실관계 수준에 따라 제한적 허용

DRAM - Intro

괴물이네 12 452 6
DRAM - Intro(소개)


2001obj___1225313470.jpg
2001obj___1040916081.jpg
(그림 1-1) DIMM(Dual In-line Memory Module)과 FBGA(Fine Ball Grid Array)로 구성된 DRAM
출처 : 삼성전자 메모리사업부


DRAM이란 온라인 마켓을 통해 주문하거나 오프라인 소매점에서 구입하는 '컴퓨터 메모리'를 의미합니다. 대부분의 컴퓨터에서는 (그림 1-1)과 같이 작은 PCB(Printed Circuit Board) 즉, 유비쿼터스 메모리 모듈에 소형 DRAM 칩이 부착된 형태의 부품으로 정의할 수 있습니다. 그림 속 여덟 개의 검정색 직사각형 모듈이 바로 DRAM으로, 이는 실리콘이 애워싸고 있는 플라스틱 조각이라고 할 수 있습니다.



2001obj___935294622.png
(그림 1-2) 전형적인 PC 구조 - 시스템은 DRAM을 주기억장치로 활용한다.


(그림 1-2)는 PC에서 DRAM의 위치를 나타내고 있습니다. DRAM 디바이스는 메모리 컨트롤러를 통해 프로세서에 간접적으로 연결되는데, 여기서 메모리 컨트롤러는 다수의 마이크로프로세서, 그래픽 코프로세서, 사우스브릿지 칩셋과의 커뮤니케이션은 물론, DRAM 인터페이스를 관장하는 노스브릿지 칩셋의 일부를 뜻합니다(사우스브릿지 칩셋은 시스템의 I/O 기능을 담당함). 간단히 '칩셋'이라 부르기도 합니다.

최근에는 노스브릿지와 사우스브릿지 칩셋을 여러 개의 칩이 아닌 단일 칩으로 제공하기도 하며, 일부 시스템은 두 기능을 한 다이에 융합하기도 합니다.


DRAM은 프로세서 외부 장치이기 때문에 SRAM 캐시나 스크래치 패드의 용량, 코어 구성 및 분석과 더불어 간과하지 말아야 할 것들이 존재합니다. 일반 소비자가 구매 시 필수적으로 고려해야 하는 요소들은 다음과 같습니다.


1. 용량

2. 시그널링

3. 인터페이스 토폴러지

4. 클러킹과 동기화

5. 타이밍 컨벤션


위의 요소들이 구매 과정에서 충분히 고려되지 않은 경우에는 시스템 최적화와 기능 측면에서 실패한 결과물이 도출될 수밖에 없습니다. 따라서 이번 글에서는 DRAM의 기본 기능과 구현 이슈들을 중점적으로 다루게 될 것입니다.





내부와 동작



2001obj___148815571.png
(그림 1-3) DRAM 내부의 기본 구조 - DRAM 메모리 어레이는 그리드 배열의 저장 셀을 가지고 있고, 저장 셀의 로우(가로)와 칼럼(세로)가 교차하는 지점을 가리킨다. 각 지점마다 1비트의 데이터가 저장된다.


각 비트마다 하나의 트랜지스터와 커패시터 쌍을 사용하는 랜덤 액세스 메모리(RAM)를 동적 랜덤 액세스 메모리(Dynamic Random-Access Memory), 축약하여 DRAM이라고 부릅니다.

(그림 1-3)은 DRAM 내부에 위치한 저장 셀을 위한 회로를 나타냅니다. DRAM은 셀에 전하를 저장하는 커패시터들의 누설 전류로 인해 전기적으로 완벽하지 않은 상태입니다. 그래서 각 DRAM의 커패시터에 저장된 정보를 보호하기 위해 주기적으로 새롭게 갱신(refresh°)해야만 하기 때문에 Dynamic(동적)이라고 합니다.


° : 리프레시는 DRAM 디바이스의 근간을 정의하는 동작이므로, DRAM 액세스 프로토콜을 다루는 글에서 보다 자세하게 설명할 예정입니다.


각 DRAM 다이는 하나 또는 그 이상의 메모리 어레이, 각 셀이 데이터의 한 비트를 갖는 저장 셀의 장방형 그리드(바둑판 같은)를 포함합니다. 배열들이 직사각형의 격자이기 때문에, 전형적인 격자형 구조와 관련된 용어라 생각하면 됩니다.

도로명 주소를 예로 들어도 좋은 비유가 되지 않을까 싶습니다. 만약 도시에서 특정한 장소에서 타인과 만나려고 할 때 간단히 도로명 주소를 서로 주고 받는다면 애매하지 않은 장소에서 쉽게 만날 수 있겠죠. 도로명 주소가 □□로 ○○길로 구성되고, 메모리 어레이는 로우(row)와 칼럼(column)으로 구성된다는 점 외에는 같다고 볼 수 있습니다.

표시된 로우와 칼럼이 있는 DRAM 칩의 메모리 어레이를 (그림 1-3)에서 볼 수 있습니다. 로우와 칼럼의 교차점을 식별함으로써(DRAM에 로우 어드레스와 칼럼 어드레스를 지정함으로써) 메모리 컨트롤러가 DRAM 칩 내부의 개별 저장 셀에 접근하여 데이터를 읽거나 쓰는 것을 가능하게 해줍니다.



2001obj___1597690694.png
(그림 1-4) DRAM의 데이터 출력 논리 구조 - DRAM이 단위 시간당 1비트 이상의 결과물을 산출하는 경우, 1비트씩의 데이터를 공급하는 어레이가 여러 개인 구조를 가진다.

 

DRAM을 구분하는 방법 중 하나는 내부 메모리 어레이의 개수입니다. 메모리 칩 내부의 메모리 어레이는 여러 가지 방법으로 작동합니다. 메모리 어레이는 전체적으로, 개별적으로, 또는 두 개씩 작동하기도 합니다. 메모리 어레이가 전체적으로 작동하도록 설계된 경우 하나의 유닛으로 작동되며 메모리 칩은 메모리 컨트롤러가 DRAM에 접속할 때마다 어레이의 개수와 동일한 비트 수를 송출하거나 수신합니다. 아주 간단한 구성의 경우, 한 개의 x4(by 4라고 함) DRAM은 DRAM이 최소 네 개의 메모리 어레이를 가지며 칼럼의 너비가 4비트라는 것을 나타냅니다(각각의 칼럼은 4비트만큼의 데이터를 읽거나 쓸 수 있음). x4 DRAM 부분에서, 각각 1비트의 데이터를 읽는 네 개의 어레이가 모여 메모리 컨트롤러가 한 개의 칼럼을 읽을 때마다 4비트의 데이터를 송출하게 되는 것입니다. 마찬가지로 한 개의 x8 DRAM은 최소 여덟 개의 메모리 어레이를 가지며, 칼럼 너비가 8비트라는 것을 의미합니다. (그림 1-4)는 각각 x2, x4, x8 DRAM의 내부 구조를 나타냅니다.


(그림 1-4)는 복합적인 어레이들을 보여주고 있지만 이것을 Bank(뱅크)라고 보긴 어렵습니다. 뱅크는 각각의 메모리 어레이의 집합체들이 독립적으로 작동할 때 이 집합체를 의미하는 개념으로 어레이와는 차이가 있습니다. 각 뱅크는 몇 가지 경우를 제외하고 다른 뱅크들이(같은 DRAM 디바이스 혹은 다른 DRAM 디바이스) 작동, Precharge(프리차지), 읽기 등의 작업을 하고 있는 동안에도 동시에 같은 작업을 수행하는 것이 가능하기에 독립적이라고 볼 수 있습니다.

이처럼 다중 독립 메모리 뱅크는 DRAM이 발명된 이례로 꾸준히 컴퓨터 설계에 이용되어 왔습니다. 특히 Interleaving(인터리빙) 다중 메모리 뱅크는 낮은 대역폭의 디바이스를 이용해 높은 대역폭의 메모리 버스를 확보하기 위해 사용되는 기술입니다. 데이터 버스는 인터리브 메모리 시스템에서 한 개의 DRAM 뱅크가 지원할 수 있는 것보다 더 빠른 주파수를 사용할 수 있는데, 이는 컨트롤 회로가 뱅크들 사이에서 속도 값을 얻기 위해 왔다 갔다 하며 Toggle(토글) 할 수 있다는 것을 의미합니다. 예를 들어 한 개의 DRAM 뱅크가 매 10ns마다 새로운 데이터를 생성한다고 가정한다면, DRAM은 두 개의 뱅크 사이에서 토글하며 매 5ns마다 새로운 메모리를 만들어 내거나, 네 개의 뱅크 사이에서 순차적으로 순환하며 매 2.5ns마다 새로운 메모리를 만들어 낼 수 있습니다. 이를 통해 효과적으로 데이터 속도를 두 배 또는 네 배로 가속할 수 있는 것입니다. 이 뱅크 인터리빙°° 기술을 통해 현대 DDRx SDRAM이 용량과 속도를 동시에 확보할 수 있게 되었습니다.

20여년 전 더 넓은 출력의 DRAM의 필요성이 대두되기 시작하여 현재는 x16 Bank(DDR4 SDRAM)나 x32 Bank(DDR5 SDRAM)가 보편적입니다.


°° : 보조기억장치의 RAID(Redundant Array of Independent Disks) 기술과 비슷합니다. RAID는 여러 개의 하드 디스크에 일부 중복된 데이터를 나눠서 빠르게 저장하는 기술입니다. 뱅크 인터리빙은 데이터를 여러 개로 나누는 것까지는 동일하지만 중복된 데이터를 저장하지 않는다는 점에서 RAID와 다릅니다. 하지만 어레이를 추가할 경우 전체적인 액세스 속도를 향상시키고 저장 용량을 증가시킬 수 있다는 점에서는 유사합니다.



2001obj___923652024.png
1GBit DDR4 SDRAM


2001obj___1767794205.png
2GBit DDR4 SDRAM


Quiz 1 : 동일한 세대의 기술로 제조되었고 클럭과 타이밍이 같지만 저장 용량이 다른 DRAM이 두 개 있습니다. 1GBit와 2GBit 중 어느 쪽이 액세스 속도가 더 빠를까요?

Quiz 2 : 뱅크의 개수, 클럭과 타이밍은 같지만 저장 용량만 다른 두 개의 DRAM이 있습니다. 어느 쪽이 액세스 속도가 더 빠를까요?


'DRAM은 세대가 지남에 따라 용량으로 개선된다.'



2001obj___2044360156.png

(그림 1-5) DIMM, Rank(랭크), Bank(뱅크), Array(어레이) - 시스템은 다수의 DIMM을 보유하고 있으며 각각의 DIMM은 한 개 이상의 랭크가 포함되어 있다. 각 랭크는 DRAM 디바이스의 그룹이며 각 DRAM 디바이스는 여러 뱅크들을 보유한다. 뱅크는 다수의 어레이로 구성되고 이는 데이터의 너비에 의해 결정된다.


시스템이 다중 DIMM들을 수용할 수 있기에, 각 DIMM은 독립적인 뱅크로 파악할 수 있습니다. 또한 각 DIMM의 DRAM들은 내부적으로 다중 독립 뱅크 기능을 수행할 수 있으므로 '랭크'라는 용어는 DIMM 레벨의 독립적인 동작과 내부 뱅크 레벨의 독립적 동작을 구분하기 위해 쓰입니다. (그림 1-5)는 요즘 DRAM 시스템에서 다양한 계층의 구성을 보여주고 있습니다. 시스템은 잠재적으로 여러 개의 독립적인 DIMM들로 구성될 수 있습니다. 각 DIMM은 한 개 혹은 여러 개의 독립적인 랭크들을 포함합니다. 여기서 각 랭크들은 복합체로 작동하는 DRAM 디바이스 세트를 뜻하는데, 각 DRAM 디바이스들은 내부적으로 한 개 혹은 여러 개의 독립적인 뱅크로서 동작이 가능합니다. 각 뱅크는 종속된 메모리 어레이들로 구성되어 있고, 어레이의 개수는 DRAM의 데이터 너비와 동일합니다(뱅크당 네 개의 종속 어레이를 가짐). 랭크와 뱅크 레벨에서 동시성(concurrency)을 가질 수 있다는 말은 메모리에 대한 요청이 파이프라인(Pipeline) 처리 기능을 통해 대역폭을 제공할 수 있다는 말과 동일합니다. 그리고 랭크 레벨에서 분기된 다중 DRAM과, 뱅크 레벨에서 분기된 다중 어레이를 가진다는 것은 병렬 처리 형태의 대역폭을 제공할 수 있다는 뜻입니다.


2001obj___51866303.png
(그림 1-6) JEDEC 스타일 메모리 버스 구조 - 하나의 채널을 담당하는 메모리 컨트롤러 시스템과 그에 연결된 메모리 모듈 두 개를 나타낸다. 이 메모리 모듈은 16비트 데이터 버스와 8비트 어드레스/커맨드 버스를 갖는다.


JEDEC 스타일 구성의 버스들은 기능과 구성에 따라 데이터, 어드레스, 컨트롤과 칩 셀렉트 버스로 구분됩니다. (그림 1-6)은 두 개의 메모리 모듈에 연결된 메모리 컨트롤러를 보여줍니다. DRAM에서 데이터를 송수신하는 데이터 버스는 상대적으로 넓다고 볼 수 있습다. 이는 주로 64비트 너비인데(주로 64비트 마이크로프로세서를 사용하므로), HEDT 시스템에서는 이 값이 더 커지기도 합니다. 전용 어드레스 버스는 로우와 칼럼 어드레스들을 DRAM으로 전달하는데, 이 너비는 DRAM 디바이스의 물리적인 저장공간에 비례하여 증가하고 있습니다. 컨트롤 버스는 로우와 칼럼 스트로브°°°(RAS#, CAS#), 아웃풋 인에이블(OE#), 클럭(CLK), 클럭 인에이블(CKE, DDR5에서 칩 셀렉트 신호와 통폐합됨)을 비롯해 기타 연관 신호들로 구성되어 있습니다. 이 신호들은 모두 시스템의 메모리 컨트롤러에서부터 모든 DRAM들과 연결되어 있습니다. 마지막으로 메모리 컨트롤러에서부터 각 랭크의 DRAM들과 연결된 칩 셀렉트 네트워크가 있습니다. 하나의 메모리 모듈은 DRAM 디바이스의 랭크 두 개를 가질 수 있는데, 시스템의 모든 DIMM에는 두 개의 개별적인 칩 셀렉트 네트워크가 있기 때문에 시스템의 물리적인 최대 메모리 양에 비례하여 이 네트워크도 증가한다고 볼 수 있습니다.

마지막으로 설명한 이 칩 셀렉트 버스는 JEDEC 스타일 메모리 시스템에 있어서 필수적입니다. 이 버스가 액세스 요청에 대한 의도적인 수신을 가능하게 하기 때문입니다. 칩 셀렉트 버스는 DRAM의 각 랭크마다 별도의 선로가 구축되어 있는데 이 선로를 통해 각각 DRAM 세트로 전송되어 해당 랭크의 DRAM들을 읽기/쓰기 가능 또는 불가능 상태로 전환하게 됩니다. 이는 각 버스에서 명령어 처리를 진행하거나 무시하기 위함입니다. 하나의 극단적인 예를 들자면, 모든 DRAM들이 같은 어드레스와 컨트롤 버스에 연결되어 있기 때문에 이론적으로는 하나의 액세스 요청에 의해 해당 랭크의 모든 DRAM이 일제히 반응할 수 있지만, 칩 셀렉트 버스가 이와 같은 현상이 벌어지는 것을 방지한다는 뜻입니다.


°°° : 스트로브(Strobe)는 유효한 데이터나 커맨드가 도착했음을 알려주는 신호입니다.


Quiz 3 : 랭크의 증가는 결국 메모리 컨트롤러가 제어해야 할 DRAM 디바이스가 증가하는 것을 의미합니다.

하나의 랭크(싱글 랭크)로 구성된 DIMM을 채널당 한 장으로 구성하는 것과 두 개의 랭크(듀얼 랭크)로 구성된 DIMM을 채널당 한 장으로 구성하는 두 개의 시스템이 있다면, 어느 쪽이 오버클러킹에 더 유리할까요? 



2001obj___742204162.png
(그림 1-7) 시스템 구조와 DRAM의 데이터 처리 단계 - DRAM에서 데이터를 읽어내는 것은 SRAM과 같이 간단하지 않다. 어떤 요청은 메모리 컨트롤러에 의해 의도적으로 처리가 지연되기도 한다.


(그림 1-7)은 마이크로프로세서와 메모리 컨트롤러, DRAM 디바이스에 초점을 맞추고 있는 것과 동시에, DRAM 요청에 포함된 여러 단계들을 보여주고 있습니다. 앞서 언급한 바와 같이, DRAM 디바이스는 메모리 컨트롤러를 통해 간접적으로 마이크로프로세서에 연결되어 있습니다. 즉, 마이크로프로세서는 네트워크의 여러 형태들(bus, point-to-point, crossbar 등등)을 통해 메모리 컨트롤러와 연결되어 있고, 메모리 컨트롤러는 또 다른 네트워크(bus, point-to-point 등등)를 통해 DRAM에 연결되어 있습니다. 메모리 컨트롤러는 마이크로프로세서와 DRAM 사이의 연락책 역할을 수행하면서 마이크로프로세서가 DRAM이 작동하는 세부 사항에 대해 알 필요가 없도록 하여 본연의 임무(정수와 부동소수 연산)에 충실할 수 있게 만들어줍니다. 대신 마이크로프로세서는 메모리 컨트롤러가 이해할 수 있는 요청들을 보내야 하고, 한 번에 여러 메모리 컨트롤러와도 통신이 가능합니다.

(그림 1-7)은 전형적인 DRAM의 읽기 동작 과정을 보여주기도 합니다. 마이크로프로세서는 커맨드를 발행하고, 큐(queue, 대기 목록에 보관하는 행위)한 후 메모리 컨트롤러로 전송합니다. 커맨드가 메모리 컨트롤러에 도달하면 DRAM이 준비되고 우선순위가 높은 작업들을 마칠 때까지 DRAM은 대기 상태가 됩니다.


'DRAM은 커맨드를 위해 존재한다.' 



2001obj___676012860.png
(그림 1-8) 다단계 DRAM 액세스 프로토콜 - 로우 어드레스는 sense amplifier가 비트라인 상의 DRAM 페이지를 감지하도록 만든다. 칼럼 어드레스는 DRAM 페이지의 부분집합을 버스 상에서 구동시킨다.


DRAM의 메모리 컨트롤러 인터페이스는 SRAM 인터페이스에 비교하여 상당히 복잡한 편입니다. 로우 어드레스 스트로브(#RAS, Row-Address Strobe)와 칼럼 어드레스 스트로브(#CAS, Column-Address Strobe)의 구성 요소들을 (그림 1-8)에서 확인할 수 있습니다. 앞서 (그림 1-3)에서 확인했던 워드라인과 비트라인의 교차점에 위치한 커패시터를 떠올려 봅시다. 이들이 트랜지스터를 통해 비트라인에 연결되어 있거나 워드라인에 의해 컨트롤되는 것을 확인했습니다. 이 DRAM 디바이스에서의 트랜지스터는 일종의 '스위치'라고 하는 것이 적절한데, 워드라인의 전압이 상승하면 워드라인에 부착되어 있던 모든 트랜지스터들이 동시에 켜지게 됩니다. 이로 인해 각각의 커패시터들이 관계된 비트라인에 연결됩니다. 워드라인과 비트라인의 교차점에 위치한 이런 커패시터들은 비트라인과 비교하여 상대적으로 많은 전하량을 지니고 있습니다. 이런 전기적 특성을 이용하여 sense amplifier라 불리는 특별한 회로를 커패시터가 비트라인에 연결될 때 저장된 값을 검출하기 위해 사용합니다. Sense amplifier는 비트라인들을 전압으로 프리차지(Precharge)하는데, 이때의 전압 레벨은 로직 레벨 0(Low)과 로직 레벨 1(High) 사이의 중간 값입니다. 커패시터가 트랜지스터를 통해 비트라인에 연결될 때 커패시터의 전압 레벨이 약간 변경되는데, Sense amplifier는 이 미세한 전압 레벨의 변동을 감지하고 비트라인의 전압을 로직 레벨 0이나 1로 끌어 당기게 됩니다. 이렇게 비트라인의 전압을 최고 또는 최저 전압으로 만드는 것은 프리차지 동작과는 반대이고, 트랜지스터가 커패시터를 'On' 상태로 유지하는 동안 전하의 재충전이 이루어지게 됩니다.


앞으로 돌아가 데이터의 '읽기' 과정을 다시 한 번 살펴보도록 하겠습니다.

첫 번째 단계에서는 메모리 컨트롤러는 마이크로프로세서에서 발행된 읽기 명령을 처리하기 위해 어드레스 신호를 메모리 시스템의 특정한 랭크와 이 랭크 범위 내의 뱅크. 동일 뱅크 내부의 로우와 칼럼에 맞는 구성 요소로 해체합니다. 이 로우와 칼럼 구성 요소를 로우 어드레스와 칼럼 어드레스라고 부릅니다. 뱅크 구분자는 한 개 혹은 그 이상의 어드레스 비트(BA0~BA7 등)로 구성되어 있습니다. 랭크 숫자(R0~R3 등)는 개별 칩 셀렉트 선로들 중 하나에 전송되고, 칩 셀렉트 신호(CS_n)를 발생시키며 종료됩니다.

두 번째 단계에서는 칩 셀렉트 신호가 식별된 랭크와 뱅크 내부의 적절한 로우를 활성화할 수 있도록 뱅크 구분자와 로우 어드레스를 어드레스 버스로 보내고, DRAM의 RAS(용어 위의 바는 로직 레벨 0일 때 활성화됨) 편에 신호를 보냅니다. 이는 선택된 DRAM의 특정 로우에 연결된 모든 데이터(수천 비트에 해당) sense amplifier로 보낸다는 뜻입니다. 여기까지 완료하는 데 일반적으로 수십 ns 정도 소요됩니다.

이렇게 Sense amplifier가 자신에게 옮겨진 데이터들을 잠시 보관함과 동시에 데이터의 이동으로 비어 버린 로우의 커패시터들의 값을 회복하여 비트라인이 적절한 로직 레벨로 당겨지면(로직 레벨 0과 1 사이의 절반 정도의 값을 갖도록 세팅됨), 메모리 컨트롤러는 칼럼을 읽어 원하는 데이터를 찾기 위한 마지막 단계를 수행합니다. 마이크로프로세서가 원하는 데이터를 지닌 뱅크의 DRAM 세트를 활성화하기 위해 칩 셀렉트 신호를 편성하고 어드레스 버스에 뱅크 구분자와 칼럼 어드레스를 보내며 동시에 DRAM의 CAS 핀에도 신호를 전송합니다. Sense amplifier는 메모리 컨트롤러가 원하는 CAS에 해당하는 수 비트의 특정 데이터만 추출하여 출력 드라이버에 연결한 뒤 데이터 버스를 구동합니다. 이렇게 칼럼 데이터를 읽는 것 또한 수십 ns가 소요됩니다.

최종적으로 메모리 컨트롤러는 전송받은 데이터를 마이크로프로세서에 전달하게 됩니다.


이렇게 RAS와 CAS로 분리된 단계를 거쳐서 불편하게 어드레스를 전송하는 이유는 DRAM 칩의 어드레스 I/O가 하나의 핀을 공유하기 때문에 발생합니다. 이것을 멀티플렉스 핀이라고 하며, 이를 통해 제조사는 제조 원가를 절감할 수 있게 됩니다.

DDR5에서는 ODT(On-die Termination) 핀과 CKE 핀을 없애고 칩 셀렉트 핀 하나로  통합하여 활용하고 있습니다. 이 또한 칩에서 핀이 증가하는 것을 방지하여 제조 원가를 절감할 수 있게 만듭니다. 


Quiz 4 : DRAM 디바이스에서 '리프레시'와 '읽기'의 차이점은 무엇일까요?




2001obj___129216228.png

(그림 1-9) 클럭 신호 - 보통 클럭은 사각형이나 사다리꼴 모양의 파형을 그린다. 이는 무한히 반복되며 '클럭 사이클'이라 부른다. 위와 같이 동일한 클럭은 같은 주파수를 가지게 되어 주어진 시간 동안의 사이클도 동일하다.


대부분의 컴퓨터 시스템은 인간의 심장 박동처럼 클럭이라는 특별한 신호를 갖습니다. 클럭은 'High(로직 레벨 1)'와 'Low(로직 레벨 0'를 동일한 간격°°°°으로 전송하게 됩니다. 이런 클럭 펄스의 상승 부분을 정(positive) 또는 상승(rising) 에지라고 하고, 하강 부분을 부(negative) 또는 하강(falling) 에지라고 합니다.

컴퓨터 시스템의 기본 클럭은 시스템 클럭 또는 글로벌 클럭이라고 하는데, 일반적으로 메인보드에서 생성합니다. 시스템 클럭은 마이크로프로세서와 메모리 컨트롤러에 연결된 많은 주변장치들도 구동합니다. 이런 클럭이 DRAM을 직접 구동하는 경우 동기식 DRAM(Synchronous DRAM, SDRAM)으로 부릅니다.


°°°° : DDR5에서 DCC(Duty Cycle Correction 또는 Duty Cycle Calibration)로 구현됩니다. 클럭 펄스의 High 신호와 Low 신호의 듀티 사이클 비율을 50:50으로 정확히 일치시키는 기능입니다.






DRAM 구조의 발전



SDR SDRAM


2001obj___96381725.png
(그림 1-10) SDR SDRAM의 읽기 동작에 대한 클럭 다이어그램 - CAS 2의 지연시간을 보여주고 있다.


(그림 1-10)은 마이크로프로세서의 요청들이 클럭 사이클을 통해 규칙적인 시간 간격으로 DRAM에 도달할 수밖에 없는 동기화 DRAM(SDRAM) 인터페이스를 보여주고 있습니다. SDRAM은 내부 래치가 내부 클럭 신호에 의해 컨트롤되는데, 가장 주된 장점은 모든 데이터와 제어 신호의 전송을 클럭 신호와 연계함으로써 타이밍을 좀 더 예측 가능하도록 만든다는 것입니다. 결과적으로 이러한 스킴(Scheme)에서는 신호 왜곡을 감소시킬 수 있습니다. 왜곡의 감소는 요청에 대한 더 빠른 응답을 가능하게 하며 이를 통해 처리량을 더 높일 수 있게 됩니다.

이 SDRAM은 버스트 모드(Burst mode)를 지원하는데, SDRAM 디바이스는 버스트 길이를 유지하는 프로그램 가능한 레지스터를 보유하고 있기 때문입니다. 이것을 통해 DRAM에서 다음 사이클에 얼마나 많은 칼럼들을 읽어야 하는지 결정할 수 있고, 결과적으로 몇 번의 사이클을 통해 특정 데이터를 처리할 수 있는지 예측 가능하게 만들어줍니다.



DDR SDRAM


2001obj___786801022.png
(그림 1-11) DDR SDRAM의 읽기 동작에 대한 클럭 다이어그램 - DDR SDRAM은 클럭과 소스 동기화 데이터 스트로브(DQS)를 모두 사용함으로써 높은 데이터 전송률을 달성했다. DRAM은 '쓰기' 동작 시 데이터를 취득하기 위해 DQS를 이용하는데, DRAM의 '리프레시'나 '읽기' 과정에서 발생하는 '쓰기'에는 메모리 컨트롤러가 전혀 개입하지 않는다는 점에서 대조된다.


DDR SDRAM(Double Data Rate Dynamic Random Access Memory)는 현대 DRAM 기술의 큰 성과입니다. 클럭의 양쪽 에지(상승과 하강 모두)에서 데이터를 이동시킴으로써(데이터 이외의 버스는 한쪽 에지 사용) 이용 가능한 데이터 대역폭이 SDR SDRAM의 두 배가 됩니다. 이런 데이터 전송 방식을 제외하면 DDR SDRAM과 SDR SDRAM은 매우 유사합니다. 동일한 신호 기술, 인터페이스 사양과 핀들을 가집니다. (그림 1-11)은 CAS-2인 읽기 동작 타이밍 다이어그램입니다.






오늘날 DRAM의 표준


DRAM은 상품입니다. 모든 DRAM 칩 또는 DIMM은 이론적으로 비슷한 사양(데이터 너비, 용량, 속도 등급, 인터페이스 등)을 가진 다른 것들과 동등합니다. 이러한 호환성을 좌우하는 표준을 설정하는 기구가 JEDEC입니다. JEDEC은 Solid-State Technology Association로 알려져 있습니다. EIA(Electronic Industries Alliance) 내부에서 하나의 의결 기구로 존재하다가 별도의 단체로 독립하였으며, 개별적인 반도체 디바이스와 통합 회로의 표준화를 다루고 있습니다. 50여개에 달하는 위원회와 이를 구성하는 소위원회를 거쳐 업무가 진행되고, 누구나 위원회의 멤버가 될 수 있습니다. 때문에 모든 개인들과 조직 대표들은 미래의 표준에 영향을 행사할 수 있도록 구성되어 있습니다. 특히 소위원회인 42.3은 DRAM 디바이스의 세계 표준을 달성(JC-42.3)하였습니다.

앞으로 작성하는 모든 글에서 사용하는 DRAM 디바이스에 대한 기술은 JEDEC 표준을 활용하도록 하겠습니다.



JEDEC SDRAM 기술의 특징


JEDEC SDRAM은 앞서 설명한 (그림 1-6)의 DRAM 시스템 구조를 이용합니다. 여기에는 네 가지의 다른 버스가 존재하는데, 이들은 각각의 기능에 따라 분류됩니다. 이 구조의 '메모리 버스'는 ① 데이터, ② 어드레스, ③ 컨트롤, ④ 칩 셀렉트 등 크게 네 가지 버스로 구성되어 있습니다. 이들은 특별한 경우를 제외한다면(컨트롤 정보가 다른 어드레스 버스 라인으로 전송된 경우같이) 고유의 지정된 기능만을 수행합니다.

데이터 버스는 다른 버스보다 상대적으로 대역폭이 넓습니다. 일반적인 PC 시스템의 경우 보통 64비트를 사용하는데, 이는 고성능 시스템(HEDT)에서 조금 더 넓어질 수 있습니다.

어드레스 버스의 폭은 DRAM 디바이스에 저장된 비트의 수에 비례하여 증가합니다. 최근의 어드레스 버스는 보통 15비트를 가집니다.

컨트롤 버스는 로우 스트로브와 칼럼 스트로브, 출력 인에이블, 클럭, 클럭 인에이블, 그리고 메모리 컨트롤러와 시스템의 모든 DRAM들을 연결하는 기타 유사 신호들로 구성되어 있습니다.

마지막으로 칩 셀렉트 네트워크라는 것이 있는데, 이것은 DRAM 랭크당 하나의 라인을 사용합니다. 당연히 시스템의 물리적 메모리 용량과 비례하여 라인의 개수가 증가하게 되고, 이 네트워크를 통해 DRAM의 랭크를 활성화하게 됩니다. 이를 통해 다른 DRAM 랭크들이 버스에서 수신한 명령들과는 동떨어진 명령을 특정 DRAM 랭크에만 보낼 수도 있게 되며, 데이터를 버스와 상관없이 읽고 쓰는 것도 가능하게 합니다.


SDRAM과 초기 비동기 DRAM의 가장 큰 차이점은 모든 활동들(명령, 데이터 전송)의 시간이 고정되어 있는 것에 대비한 시스템 내부의 클럭 신호 유/무입니다. 비동기 DRAM이 RAS와 CAS 신호를 스트로브로 사용하는(DRAM이 버스와 분리되는 어드레스나 데이터를 샘플링하도록 하는 직접적인 원인이 스트로브) 반면에, SDRAM은 클럭 자체를 스트로브로 사용하고 RAS와 CAS 신호는 클럭 스트로브와 때를 맞춰 스스로를 버스로부터 샘플링하는 단순한 명령에 불과하기 때문입니다. 타이밍 전송을 비교적 자유로운(덜 규칙적인) RAS와 CAS 스트로브 대신 규칙적으로 발생하는 클럭으로 대신하는 것은 더 넓은 대역폭으로 데이터를 처리할 수 있게 만든 것입니다. 이렇게 규칙적인 스트로브 신호를 타이밍 전송에 사용하는 경우, 시간 불확실성이 감소하고 데이터 전송률 증가를 가능하게 합니다.


여기서 주목해야 할 것이 있는데, 모든 타이밍 신호가 규칙적으로 발생하는 클럭을 필요로 하지 않는다는 점입니다. DDR SDRAM에서 클럭은 절대적으로 중요한 요소이지만, 쓰기 요청 부분의 데이터 전송의 경우 이 클럭을 무시할 수도 있습니다.

이는 DRAM이 클럭 대신 DQS(데이터 스트로브)처럼 개별적이고 규칙적인 신호를 통해 입력되는 데이터를 취득하게 된다는 것을 의미합니다.



SDR SDRAM


SDR(Single Data Rate) SDRAM은 모든 정보를 동기화시키기 위해 한쪽 에지 클럭을 사용합니다. 이는 다양한 버스(컨트롤, 어드레스, 데이터)의 모든 전송 과정들이 시스템 클럭의 한쪽 에지(Rising edge)에 맞추어 시작되고 종료된다는 의미입니다.

이는 다양한 버스들의 전송 과정이 이상적으로는 하나의 상승 에지에서 다음 상승 에지까지 유효하기 때문에, 하강 에지가 발생하는 동안에도 유효합니다. 이를 통해 클럭의 하강 에지를 이러한 신호들의 샘플링에만 활용하게 됩니다.

SDRAM은 초기 DRAM 구조에서는 찾아볼 수 없는 몇 가지 특성을 지니고 있는데, 이는 곧 버스트 길이(Burst Length)와 응답 대기시간의 프로그래밍이 가능하다는 점입니다.


프로그램 가능한 버스트 길이

SDRAM은 대역폭을 개선하기 위해 버스트 데이터라는 개념을 사용합니다. 데이터를 연달아 출력하기 위해 CAS 신호를 연속적으로 토글하는 대신, SDRAM은 일단 CAS 신호를 수신하고 프로그램 가능한 모드 레지스터에 저장된 값이 지시하는 비트 수 만큼을 클럭 토글에 맞춰 전송하거나 수신합니다. SDRAM이 로우 어드레스와 칼럼 어드레스를 수신하면, 레지스터에 저장되어 있는 버스트 길이 값에 상응하는 칼럼의 개수를 연달아 출력합니다. 예를 들어 모드 레지스터가 버스트 길이 8로 프로그램되어 있는 경우라면, DRAM은 자동적으로 연속하는 데이터의 칼럼 8개를 데이터 버스로 출력한다는 뜻입니다. 이는 마이크로프로세서의 요청에 맞춰 데이터 버스트를 위한 목적으로 CAS를 토글해야 하는 필요성을 제거시킴으로써, 메모리 시스템에서 병행 처리 가능성을 개선시킬 수 있습니다. 이는 동일한 커맨드를 계속 발행해야 하는 메모리 컨트롤러의 커맨드 버스의 사용 감소에서 기인하는 것으로, 메모리 컨트롤러는 이렇게 절약된 사이클 시간 동안 다른 뱅크나 랭크에 또 다른 요청을 보낼 수 있습니다.


프로그램 가능한 CAS 응답 대기시간(CAS Latency)

모드 레지스터는 SDRAM 칩의 CAS 응답 대기시간 또한 저장하고 있습니다. 여기서 응답 대기시간(레이턴시, Latency)은 지연의 척도로 활용하기도 합니다. CAS 응답 대기시간은 그 이름이 나타내는 바와 같이, CAS 명령을 수신한 후 데이터를 버스에 반환하는 시간을 SDRAM의 클럭 사이클 수로 나타낸 것을 뜻합니다. CAS 응답 대기시간을 필요한 값으로 설정하는 것은 서로 다른 테크놀러지 프로세스(모두가 다른 성능 특성을 가질 수도 있는)에서 제조한 다른 세대의 제품이 한 시스템에서 동일한 방식으로 작동할 수 있게 만들기도 합니다. 따라서 혼합된 성능의 제품들이 같은 시스템에서 용이하게 사용될 수 있고, 심지어 서로 다른 세대의 DRAM 디바이스들을 같은 메모리 모듈에 통합하여 사용하는 것도 가능합니다.



DDR SDRAM


DDR(Double Data Rate) SDRAM은 SDR SDRAM 구조에서는 발견할 수 없는 몇 가지 특징이 있습니다. 클럭의 양쪽(상승/하강) 에지에서 데이터를 전송한다는 것과 온 칩 지연동기회로(DLL, Delay-Locked Loop)를 보유하고 있다는 것입니다.


듀얼 에지 동기화

DDR SDRAM은 컨트롤 및 어드레스 전송을 동시에 진행하기 위해 SDRAM과 마찬가지로 한쪽 에지 클럭을 사용하는 반면, 데이터 전송 과정에서는 양쪽 에지 클럭을 사용합니다. 이는 몇몇 데이터 비트는 시스템 클럭의 상승 에지에 맞춰, 또 다른 몇몇은 하강 에지에 맞춰 데이터 버스에 전송하는 것을 의미합니다.


2001obj___742697536.png
(그림 1-12) 데이터 전송률에서의 버스 클럭 - 위의 그림 (a)는 클럭이 데이터 전송 주파수의 두 배에 달하는 한쪽 에지 클럭 스킴을 나타낸다. 아래의 그림 (b)는 데이터 전송 속도가 클럭 주파수와 동일한 양쪽 에지 클럭 스킴을 보여주고 있다.


(그림 1-12)는 두 개의 다른 클럭 배치에 따른 차이점을 나타냅니다. (a)는 데이터가 클럭의 상승 에지에서만 전송되는 SDR의 설계를 보여주고 있습니다. (b)의 설계는 위의 (a)와 비교했을 때 데이터들의 전송률이 2배 빠르고 데이터 또한 클럭의 상승 에지와 하강 에지 모두를 활용하여 전송하는 것을 보여줍니다.


한쪽 에지 클럭을 데이터 전송에 이용하는 시스템에서는 모든 데이터 아이(eye)마다 두 개의 클럭 에지가 존재하게 됩니다. 데이터 아이는 클럭 에지에 의한 양 끝부분으로 만들어진 유효 데이터 영역이며, 세 번째 클럭 에지는 데이터 전송 과정의 중간 지점 부근에서 찾아볼 수 있습니다. 따라서 버스에 데이터를 보내고 읽는 두 개의 작업을 수행하는 데 클럭 신호가 직접적으로 이용됩니다. 다만 한쪽 에지 클럭 스킴에서는 데이터가 클럭 사이클당 한 번만 전송될 수 있습니다.


양쪽 에지 클럭 스킴에서는 클럭 사이클당 2개의 데이터가 전송됩니다. 이것은 버스로 데이터를 보내거나 읽어내는 데 이용 가능한 클럭 에지의 수가 절반으로 감소한다는 것을 의미하기도 합니다. 이것은 각각의 데이터 아이당 오직 하나의 클럭 에지만 존재한다는 것을 의미합니다. 양쪽 에지 스킴에서 클럭 에지는 데이터와 '에지에 정렬(edge-aligned)'되거나 '가운데 정렬(center-aligned)'로 한정된다는 것의 의미합니다. 이는 클럭이 데이터를 버스로 출력하거나 버스에서 입력받을 수는 있지만, 두 가지를 한 번에 처리하는 것이 불가능하다는 것을 의미합니다. 물론 한쪽 에지 스킴에서는 가능합니다.


이렇게 양쪽 에지 클럭 스킴이 여러 기능을 동시에 수행하는 데 이용하는 데이터 전송 과정이, 더 작은 클럭 에지(상승이나 하강 중 하나)만으로도 가능하다는 것을 확인할 수 있습니다. 또한 데이터를 보내고 샘플링하는 데 있어 정확한 타이밍을 얻기 위한 다른 메커니즘이 필요하는 것도 추론이 가능합니다. 이것은 작은 클럭 에지를 보충하기 위해 양쪽 에지 신호 전송 스킴이 클럭을 제외한 부가적인 메커니즘이 필요하다는 뜻입니다.

예를 들자면 시스템 클럭에 따른 DDR SDRAM의 가운데 정렬된 데이터 스트로브는 DRAM에 수신된 데이터를 DRAM이 바로 샘플링에 돌입할 수 있도록 메모리 컨트롤러가 쓰기 과정을 제어한다는 것을 의미합니다. 메모리 컨트롤러는 가운데 정렬된 에지를 발생시키는 자체적 메커니즘을 제공하며, 이때의 스트로브 신호를 DQS라고 부릅니다.


온 칩 DLL

DDR SDRAM에서 온 칩 DLL은 DRAM에서 출발하는 데이터 및 DQS(데이터 스트로브) 신호를 메모리 컨트롤러의 글로벌 클럭과 동기화(JEDEC Standard 21-C)시킵니다. DLL은 DRAM의 읽기 과정에 사용되는 신호들을 동기화시키지만 쓰기에 사용하는 신호들은 무시합니다. 후자의 경우, 메모리 컨트롤러에서 DRAM에 쓰기 위해 보낸 DQS 신호가 메모리 컨트롤러에서 보낸 데이터와 동기화되며, DRAM이 데이터를 바로 샘플링하는 데 이용됩니다. 따라서 DDR SDRAM의 DLL 회로는 DRAM에서 전송되는 데이터와 메모리 컨트롤러의 클럭 신호를 동기화시켜, 데이터가 예정된 시간에 메모리 컨트롤러에 도달할 수 있게 만듭니다. 통상적으로 메모리 컨트롤러는 두 개의 내부 클럭을 가지고 있는데, 그중 하나는 글로벌 클럭과 동시성을 갖는 클럭이고, 나머지 하나는 90° 지연된 클럭으로, DRAM에서 들어오는 데이터를 샘플링하는 데 사용합니다. DQS가 데이터 읽기 작업과 같은 상태(쓰기 상태와 다름)에 있기 때문에 DQS는 메모리 컨트롤러가 데이터를 샘플링하는 데 직접 사용할 수 없습니다. 대신 DRAM에서 보낸 DQS 신호를 메모리 컨트롤러의 클럭과 정렬시키는 데만 이용합니다. 메모리 컨트롤러의 90° 지연된 클럭은 수신된 데이터를 샘플링하는 데만 사용한다고 했는데, 이는 DRAM의 DLL이 글로벌 클럭과 출력되는 데이터 사이에 최소한의 왜곡만 허용한다는 뜻입니다.

이제 DDR SDRAM에서 이와 같은 동기회로가 등장한 배경을 알아보도록 하겠습니다.


DRAM은 보통 마이크로프로세서의 외부에 위치하기에 DRAM의 설계자는 칩 간 신호를 전파하는 것에 관련된 이슈들을 명확히 인지해야 합니다. 칩 간의 커뮤니케이션에서 고성능 인터페이스를 구축하는 데 가장 큰 제약은 신호를 원하는 목적지로 전송하는 데 걸리는 '시간'의 변화(신호 타이밍의 불확실성)입니다. 

시스템의 불확실성을 감소시키는 방법에는 여러 가지가 있습니다. 여기에는 데이터와 함께 스트로브 신호를 전송하거나, 위상동기회로(PLL, Phase-Locked Loop)의 추가, DLL의 추가 또는 신호 경로의 길이를 맞춰 모든 신호가 비교적 동시에 목적지에 도착할 수 있게 만드는 방법(임피던스 매칭) 등이 포함됩니다.

PLL과 DLL의 기능은, 일반적으로 두 개의 주기적인 신호를 동시에 발생시켜 두 신호 사이에 일정량의 위상변이 또는 지연을 의도적으로 생성하는 것입니다. PLL과 DLL은 매우 유사해서 용어가 종종 혼용되기도 하지만, DLL은 주기적인 신호를 다른 신호와 매칭하기 위해 의도적으로 지연시키는 다양한 지연 설계 회로를 사용하고, PLL은 신호를 매칭하기 위해 새로운 주기 신호를 의도적으로 생성하는 발진기를 사용한다는 점에 다릅니다. PLL/DLL이 통신 인터페이스에 추가되는 경우 '폐쇄반복(closed-loop)' 시스템이라고 부르는데, 송신장치와 수신장치 회로 모두의 불확실성을 측정하여 소멸시킬 수 있을 뿐만 아니라, 수신하는 데이터 스트로브를 수신 데이터와 올바르게 정렬시킬 수 있도록 만듭니다.


2001obj___1090668189.png
(그림 1-13) 온 칩 DLL의 기능


(그림 1-13)은 DLL이 DDR SDRAM에서 어떻게 사용되는지 나타냅니다. 동시에 DLL이 해당 부분의 타이밍에 어떠한 영향을 끼치는지 보여주고 있습니다. 이런 의도적인 지연은 시스템의 클럭과 출력 데이터를 정렬하기에 충분하도록 설계됩니다.





DRAM 시스템 이슈



아키텍처와 스케일링

DRAM은 매 세대마다 대역폭의 개선과 채널 용량에 대한 비용을 고려해 왔습니다. 또한 액세스 단위에 드는 비용도 고려하게 됩니다. 시간과 공간 간의 균형이라는 트릭을 통해 DRAM 설계자들은 코어 스피드를 증가시키지 않고 I/O 핀의 데이터 전송률을 개선하기도 했습니다.

DDR은 2n 프리페치 구조를 통해 SDR보다 2배 빠른 데이터 전송 속도를 가지게 됐고, DDR2는 4n, DDR3/4는 8n(DDR4의 프리페치는 DDR3와 동일하지만 DDR3보다 뱅크의 수를 두 배로 증가시켜 데이터 전송률을 증가시킴), DDR5는 16n의 프리페치를 처리하게 되면서 DRAM이 한 번에 읽거나 쓸 수 있는 데이터의 양을 두 배로 증가시켜 왔습니다. 이는 프로세서들이 읽거나 쓸 수 있는 데이터의 양을 각 동작에서 두 배로 증가시킬 필요성이 있다는 것을 시사합니다. 하지만 SRAM 설계자들이 충분하다고 느낄 때까지 얼마나 많은 캐시 블럭을 증가시켜야 하는지에 대한 의문점은 여전합니다. 


토폴러지 및 타이밍

앞서 확인한 바와 같이 신호 무결성과 시스템의 구성 사이에는 직접적인 연결고리가 존재합니다. 즉 시스템 구성의 변화는 신호 무결성에도 상당한 영향을 미친다는 뜻입니다. 버스 토폴러지의 경우에도 마찬가지입니다. 타이밍 컨벤션도 이와 무관하지 않습니다. 토폴러지가 변경되면, 타이밍 컨벤션도 이에 따라 변경되기 마련입니다.


파워와 열손실

DRAM은 전통적으로 열 설계 전력이나 열 제거에 대한 고려를 크게 하지 않았습니다. 예를 들자면, DRAM과 DIMM에 보통 열 제거원(heat spreader)이 장착되지 않는다는 것입니다. 그러나 칩 간 핀당 신호 변동률이 1Gbps를 넘어서면서 전력과 열손실 문제가 심각하게 대두되기 시작했습니다. DDR5는 DDR4에서는 볼 수 없는 열을 발산하기 때문에 이제 전력 소모와 열 제거 또한 고려해야 할 문제입니다.






Dona nobis pacem.




※ JEDEC®의 고유 기술과 DRAM 디바이스에 관련된 내용은, 퀘이사존 사이트 내부(https://quasarzone.co.kr )에서의 한정된 이동, 재게시, 발췌 및 사용을 허가받았습니다.

신고

작성자

현재 레벨 : 슈퍼지구 괴물이네  회원
13,276 (65.5%)

    댓글 : 12
볼트로이  
내일 출근하는 길에 천천히 정독해야겠습니다 ㄷ...
이 귀한 자료 감사합니다.
괴물이네  
[@볼트로이] ㅎㅎ;; 좀 지루할 수도 있는 글입니다.
미뇽  
드디어!
1회차 정독중
괴물이네  
[@미뇽] 열심히 써볼게요.
삶은계란  
1번 2Gbit 2번 용량 작은쪽 3번 듀얼
맞는지 모르겠네요.
몇번더 정독해야겠네요.
어마어마한 글 입니다.

와.... 읽는데....
괴물이네  
[@삶은계란] ㅎㅎ 답은 쓰지 않겠습니다.
바람의로니  
이건 두고 두고 읽어야 하는 정말 좋은 자룝니다!! 귤 밖에 못드리는게 너무 아쉽네요.
괴물이네  
[@바람의로니] 과찬이십니다.
다1오  
괴물이네님 아니면 언제 이런 내용을 공부해볼 수 있을까 싶네요. 귀한 자료 감사합니다!!
괴물이네  
[@다1오] 항상 응원해 주셔서 감사합니다.
고급잉여  
내용이 괴물이네.
훌륭한내용이지만 일단 정독은 나중에할께요 ㅎㅎ 예체능이라서 머리가아파용
괴물이네  
[@고급잉여] ㅎㅎ 천천히 보세요. 소개부터 좀 복잡하긴 합니다.
분류 제목
페이스북에 공유 트위터에 공유 구글플러스에 공유 카카오스토리에 공유 네이버밴드에 공유