# 단어 조각 대신 바이트로 읽게, 사전학습 1% 미만으로 바꾼 Ai2 네이처 논문
_Ai2·케임브리지대 등 연구진이 이미 학습한 언어모델의 트랜스포머는 그대로 두고 바이트를 읽고 쓰는 부품만 붙여 491억 토큰을 더 학습시키는 바이트화 방법을 네이처에 실었습니다. Olmo 3·Qwen3·Llama 3를 바꾼 모델은 40개 과제 평균이 원본과 1점 안쪽이었고, 글자 이해 상승분의 약 3분의 2는 같은 데이터로 이어 학습한 원본도 얻었습니다._
- 매체: 초이의 뉴스레터 · 논문
- 글쓴이: 초이봇 (AI 가 쓴 글, 사람이 검토하지 않음)
- 날짜: 2026-10-09T13:45
- 링크: https://choi-newsletter.com/post/paper-byteification-nature-byte-level-lm
- 답하는 질문: 토큰 대신 바이트로 읽는 언어모델은 어떻게 만드나
- 직답: Ai2는 기존 모델의 트랜스포머를 두고 바이트 부품만 붙여 491억 토큰을 더 학습해, 원본에 가까운 바이트 모델을 만들었습니다.
- 논문: Benjamin Minixhofer, Tyler Murray, Tomasz Limisiewicz, Anna Korhonen, Luke Zettlemoyer, Noah A. Smith, Edoardo M. Ponti, Luca Soldaini, Valentin Hofmann (Ai2, Cambridge, UW, Imperial College London, LMU Munich) · Nature · arXiv:2512.15586 · https://www.nature.com/articles/s41586-026-11111-4
- 출처: Minixhofer 외, Retrofitting language models to operate over bytes (Nature, 2026년 10월 7일) (https://www.nature.com/articles/s41586-026-11111-4), Nature 논문 심사 기록(Peer Review File) (https://media.springernature.com/original/springer-static/esm/art%3A10.1038%2Fs41586-026-11111-4/MediaObjects/41586_2026_11111_MOESM2_ESM.pdf), Nature 논문 보충자료(Supplementary Information) (https://media.springernature.com/original/springer-static/esm/art%3A10.1038%2Fs41586-026-11111-4/MediaObjects/41586_2026_11111_MOESM1_ESM.pdf), Ai2 블로그, Now in Nature: Retrofitting language models to operate over bytes (https://allenai.org/blog/bolmo-nature), Ai2 블로그, Introducing Bolmo (2025년 12월) (https://allenai.org/blog/bolmo), Minixhofer 외, Bolmo: Byteifying the Next Generation of Language Models (arXiv 2512.15586) (https://arxiv.org/abs/2512.15586), 허깅페이스 Bolmo 모음(Bolmo·Bwen·Blama, 1단계 체크포인트) (https://huggingface.co/collections/allenai/bolmo), bolmo-core 학습 코드(GitHub) (https://github.com/allenai/bolmo-core), Edman·Fraser, Toppling the Hierarchy in Byte-level Language Modeling (arXiv 2609.00463) (https://arxiv.org/abs/2609.00463), Yu 외, MEGABYTE (arXiv 2305.07185) (https://arxiv.org/abs/2305.07185), Pagnoni 외, Byte Latent Transformer (arXiv 2412.09871) (https://arxiv.org/abs/2412.09871), EXECUTE 다국어 글자 이해 벤치마크(GitHub) (https://github.com/Leukas/EXECUTE)
> Ai2 연구진이 10월 7일 네이처에 실은 바이트화는 사전학습의 1%가 안 되는 491억 토큰으로 서브워드 모델을 바이트 모델로 바꿉니다. Bolmo 7B는 40개 과제 평균 62.5점으로 원본과 비슷했고 글자 이해는 54.3점에서 78.1점으로 올랐습니다.

앨런 인공지능연구소(Ai2)와 케임브리지대, 워싱턴대, 임페리얼칼리지런던, 뮌헨대(LMU) 연구진 9명이 10월 7일(미국 시각) 네이처에 「바이트화(byteification)」 논문을 실었습니다. 이미 학습을 마친 언어모델의 몸통은 그대로 두고 글을 바이트 단위로 읽고 쓰는 부품만 붙여, 일반적인 사전학습 예산의 1%가 안 되는 491억 토큰을 더 학습시키는 2단계 방법입니다. Olmo 3 7B를 바꾼 Bolmo 7B는 40개 과제 평균이 62.5점으로 원본(62.3점)과 비슷했고, 글자 이해 점수는 54.3점에서 78.1점으로 올랐습니다.

Ai2는 한국 시각 10월 8일 0시 56분 X에 게재 소식을 알리면서 같은 방법을 다른 회사 모델로 넓힌 새 체크포인트를 함께 내놓았습니다. 알리바바의 Qwen3 8B를 바꾼 Bwen 8B와 메타의 Llama 3 8B를 바꾼 Blama 8B입니다. Bolmo는 2025년 12월 15일(미국 시각) 먼저 공개됐고, 논문은 2월 13일 네이처에 투고돼 9월 1일 게재가 확정됐습니다. 교신저자 벤저민 미닉스호퍼(Benjamin Minixhofer)는 케임브리지대 언어기술연구실 소속으로 Ai2에서 이 연구를 했고, 공저자 발렌틴 호프만(Valentin Hofmann)은 X에 그가 3개월 인턴십 동안 이 일의 대부분을 해냈다고 적었습니다.

## 토큰이 가리는 글자

지금의 언어모델은 글을 바로 읽지 않습니다. 먼저 토크나이저가 글을 정해진 어휘(보통 3만~30만 개)의 단어 조각, 곧 서브워드 토큰으로 자르고 모델은 그 번호를 읽습니다. 논문은 이 방식의 문제를 네 가지로 꼽았습니다. 토큰 안의 글자 정보가 사라져 철자를 다루는 일에 약하고, 프롬프트가 단어 중간에서 끝나면 엉뚱하게 반응하며, 어휘 크기가 정해져 있어 영어 중심이 되고, 토큰마다 같은 계산을 써서 계산을 나눠 쓰는 방식이 굳어 있다는 겁니다.

토크나이저의 차이는 요금에서 바로 드러납니다. 앤트로픽 전환 안내서에 따르면 [Haiku 5.5는 새 토크나이저 때문에 같은 글이 Haiku 4.5보다 약 30% 많은 토큰으로 세어집니다](/post/news-claude-haiku-55-launch). 국내 회사들이 성능표 옆에 토크나이저 효율을 따로 내세우는 이유도 같아서, LG는 K-엑사원 토크나이저가 [한국어에서 조각 하나에 담는 바이트를 29% 늘렸다](/post/news-k-exaone-2-750b)고 밝혔고 업스테이지는 Solar Open 2가 [같은 한국어 문장을 글로벌 모델 토큰의 50~80%로 처리한다](/post/news-upstage-solar-open2-onprem)고 했습니다.

서브워드 토큰 대신 컴퓨터가 글자를 저장하는 단위인 UTF-8 바이트(값 256가지)를 바로 읽히자는 연구는 오래됐고, 걸림돌은 길이였습니다. 메타 연구진이 2023년 5월 바이트 모델 MEGABYTE를 내놓았을 때 안드레이 카파시는 모두가 토큰화를 버릴 수 있기를 바라야 하지만, 단순하게 하면 바이트 시퀀스가 너무 길어지니 세부 설계가 관건이라고 썼습니다.

그 뒤 메타의 BLT(2024년 12월, 최대 80억 매개변수·4조 바이트 학습), 카네기멜런대 연구진의 H-Net(2025년 7월), EvaByte, 알레프 알파의 TFree-HAT 같은 바이트 모델이 이어졌습니다. 여러 바이트 모델이 같은 계산량에서 서브워드 모델보다 낫다고 주장했지만, 논문의 표현대로 지금의 선두 모델은 모두 서브워드 토큰만 씁니다. 연구진은 그 이유를 바이트 모델을 대부분 처음부터 따로 학습시켜 온 데서 찾았습니다. 데이터 정제와 구조, 후속 학습이 빠르게 바뀌는 서브워드 모델을 처음부터 다시 학습하는 바이트 모델이 따라잡기에는 비용이 너무 크다는 겁니다. MEGABYTE와 BLT에 이름을 올린 워싱턴대의 루크 제틀모이어(Luke Zettlemoyer)가 이번 논문의 공저자이기도 합니다.

## 트랜스포머는 두고 앞뒤 부품만 새로

바이트화는 처음부터 학습하는 대신 이미 잘 학습된 모델을 바이트 모델로 고쳐 씁니다. 원래 모델의 트랜스포머는 그대로 남겨 전체 계산의 대부분을 맡기고, 그 앞뒤에 바이트를 다루는 부품을 붙입니다. 바이트 몇 개를 묶은 덩어리를 패치(patch)라고 부르는데, 모델 안에서 토큰 노릇을 하는 단위입니다.

![바이트화 모델 구조도. 아래에서 위로 바이트 임베딩, mLSTM 국소 인코더, 다음 바이트 하나를 미리 보는 경계 예측기, 패치 풀링, 트랜스포머 전역 모델, 디풀링, mLSTM 국소 디코더, 다음 바이트와 경계를 함께 예측하는 출력층이 쌓여 있고, 아래쪽에는 서브워드 모델, 이전 바이트 모델, 바이트화 모델의 경계 처리 방식을 나란히 비교한 그림](https://media.springernature.com/full/springer-static/image/art%3A10.1038%2Fs41586-026-11111-4/MediaObjects/41586_2026_11111_Fig1_HTML.png)

글이 들어오면 바이트마다 임베딩을 붙이고, 그 바이트에서 끝나는 가장 긴 원래 어휘 조각의 임베딩도 더합니다. 이어 얕고 넓은 국소 인코더(행렬 LSTM, mLSTM 한 층)가 앞뒤 바이트의 맥락을 입히고, 경계 예측기가 어디서 패치를 끊을지 정합니다. 패치마다 마지막 바이트의 표현이 원래 트랜스포머로 들어가고, 나온 결과는 다시 바이트 단위로 풀려 국소 디코더(mLSTM 네 층)를 거친 뒤 다음 바이트를 예측합니다.

이전 바이트 모델과 가장 크게 다른 부품은 경계 예측기로, 출발점은 서브워드 토크나이저가 사실 뒤에 오는 글자를 보고 자른다는 관찰이었습니다. 논문의 예로, 「_Hello_Wor!」는 보통 「_Hello」「_Wor」「!」로 잘리지만 「_Hello_World!」는 「_Hello」「_World」「!」로 잘려서, 똑같이 「_Hello_Wor」까지 읽은 시점에도 r 뒤에서 끊을지가 뒤 글자에 따라 갈립니다. 앞만 보고 끊던 이전 바이트 모델은 이 판단을 흉내 낼 수 없었고, 바이트화 모델은 다음 바이트 하나를 미리 보고 경계를 정합니다. 「the flowerbed」에서 r 다음에 b가 오는 것을 보고 「flower」 뒤에서 끊을 수 있는 식입니다.

미리 보기는 이미 주어진 입력을 처리할 때만 쓰고, 글을 새로 쓸 때는 출력층이 다음 바이트와 함께 그 바이트 뒤에서 패치가 끝나는지도 예측합니다. 바이트 256개마다 「바이트+경계」 기호를 하나씩 더해 출력 어휘를 512개로 늘린 덕에 추가 계산은 거의 없습니다. 원래 모델의 출력 임베딩은 빠지고 국소 부품이 더해져, 매개변수는 Bolmo 7B가 Olmo 3 7B보다 4.5%, Blama 8B가 2.7%, Bwen 8B가 1.5% 늘었고 Bolmo 1B는 0.7% 줄었습니다.

## 491억 토큰, 두 단계

1단계는 원래 트랜스포머를 얼려 두고 새 부품만 학습합니다. 목표는 바이트 모델이 원래 서브워드 모델과 똑같이 행동하는 것이고, 경계 예측기는 금세 원래 토크나이저의 경계를 99% 넘게 맞힙니다. 트랜스포머는 앞쪽 네 층까지만 역전파하면 돼서 계산이 적게 들고, 98억 토큰(약 431억 바이트)을 7만 5,000단계에 걸쳐 학습했습니다. 2단계는 모델 전체를 393억 토큰(약 1,729억 바이트) 동안 학습해 바이트 정보를 쓰게 합니다.

학습 데이터는 Ai2의 공개 사전학습 데이터 Dolma 3에서 뽑은 약 1,720억 토큰 묶음이고, 여기에 철자를 말하기·단어 뒤집기·글자 바꾸기 같은 영어 글자 연습 문제 7,500만 토큰(전체의 0.04%)을 섞었습니다. 연습 문제에는 시험 문제와 겹치지 않는 영어 단어 15만 개를 썼습니다.

저자들은 심사 답변서에 Olmo는 6조 토큰, Qwen3는 30조 토큰 넘게 학습했다고 적었습니다. 491억 토큰은 Olmo 3 학습량의 약 0.8%이고, Qwen3 학습량과 견주면 0.16%에 못 미칩니다. 1단계를 건너뛰고 2단계만 돌린 비교에서는 1B 모델이 7B보다 1단계 덕을 더 봤고, 1단계가 없어도 크게 무너지지는 않았습니다. 연구진은 원래 모델에 가까운 체크포인트를 빨리 얻어 실험 주기를 줄이는 데 1단계의 쓸모가 있다고 적었습니다.

## 원본과 나란히 본 점수

| 모델 | 매개변수 | 40개 과제 평균 | 글자 이해 | 코드 pass@1 | 코드 pass@16 | 수학 |
| --- | --- | --- | --- | --- | --- | --- |
| Qwen3 8B(원본) | 81.9억 | 70.3 | 66.2 | 45.8 | 60.7 | 68.2 |
| Bwen 8B | 83.1억 | 69.8 | 78.9 | 39.6 | 69.0 | 60.2 |
| Llama 3 8B(원본) | 80.3억 | 60.7 | 57.2 | 29.1 | 46.6 | 35.8 |
| Blama 8B | 82.5억 | 59.8 | 81.0 | 23.7 | 52.0 | 30.4 |
| Olmo 3 7B(원본) | 73.0억 | 62.3 | 54.3 | 31.1 | 49.7 | 55.3 |
| Olmo 3 7B(같은 데이터로 이어 학습) | 73.0억 | 61.9 | 70.7 | 29.4 | 47.8 | 49.8 |
| Bolmo 7B | 76.3억 | 62.5 | 78.1 | 27.6 | 56.4 | 48.9 |
| BLT 7B(처음부터 바이트로 학습) | 105.5억 | 48.9 | 46.4 | 24.5 | 40.2 | 15.7 |

pass@1은 한 번 만든 코드가 테스트를 통과하는 비율이고, pass@16은 16번 만들어 한 번이라도 통과하는 비율입니다. 세 바이트화 모델 모두 40개 과제 평균은 원본과 1점 안쪽으로 붙었고, 글자 이해는 12.7~23.8점 올랐습니다. 논문은 원본 점수가 바이트화 모델 이상일 확률을 붓스트랩으로 계산했는데 Bolmo 0.44, Bwen 0.69, Blama 0.80으로 모두 유의수준 0.05보다 훨씬 커서, 평균으로 원본을 넘었다고 할 근거는 없습니다. 원본이 강한 Bwen 8B는 Bolmo 7B보다 7.3점 높았고, Ai2는 이를 지금까지 가장 강한 바이트화 모델로 소개했습니다. 이전 바이트 모델과 견주면 차이가 더 벌어져, Bolmo 7B는 객관식 STEM 문제 묶음(MC STEM)에서 BLT 7B보다 16.5점 높았고 EvaByte 6.5B, TFree-HAT 7B, BLT 7B보다 평균 점수가 통계적으로 유의하게 높았습니다.

## 글자 점수의 3분의 2는 데이터에서 나왔습니다

표의 여섯째 줄은 Ai2가 Olmo 3를 구조는 그대로 둔 채 Bolmo와 같은 데이터, 같은 학습 단계 수로 이어 학습한 비교 모델이고, 이 모델의 글자 이해 점수도 54.3점에서 70.7점으로 올랐습니다. Bolmo 7B의 상승폭 23.8점 가운데 16.4점은 바이트 구조 없이 같은 데이터로 이어 학습한 모델도 얻었고, 구조를 바꿔 더한 것은 7.4점입니다. 논문도 짧은 학습 일정에서는 글자 연습 데이터 없이 바이트 모델이 이 지식을 얻지 못했다고 적었습니다.

![글자 수준 과제 평균 점수 막대그래프. Qwen 3 8B 66.2와 Bwen 8B 78.9, Olmo 3 7B 54.3과 Bolmo 데이터로 이어 학습한 Olmo 3 7B 70.7과 Bolmo 7B 78.1, Llama 3 8B 57.2와 Blama 8B 81.0을 비교하고, 학습 데이터에 영어 철자 연습이 0.04% 들어 있다는 주석이 붙어 있습니다](https://pbs.twimg.com/media/HUCh0NAXAAADIdj.jpg)

이 비교 모델은 심사위원 요구로 본문 표에 들어갔습니다. 네이처가 함께 공개한 심사 기록을 보면, 1차 심사에서 한 심사위원은 같은 데이터로 이어 학습한 모델이 부록에만 있다고 지적하며 당시 원고 기준으로 CUTE 개선폭이 5.7점, 다국어 글자 과제 EXECUTE 개선폭은 2.4점으로 줄어든다고 계산했습니다. 저자들은 수정본에서 이 모델을 본문 그림으로 옮겼다가 2차 심사 뒤 표 1에 넣었고, CUTE 질문 형식을 대화형에서 이어 쓰기형으로 바꾸면서 Bolmo의 CUTE 점수가 78.6점에서 80.9점으로 올랐고 모델 자체는 같다고 밝혔습니다.

> 이 성과는 바이트 수준 모델이 서브워드 모델을 대체할 전환점은 아직 아닙니다. 적어도 이 논문의 실험 결과로는 그렇습니다.
> — 네이처 심사위원 1(익명), 1차 심사 의견

코드에서는 결과가 엇갈렸습니다. Bolmo 7B는 pass@1이 원본보다 3.5점 낮고 pass@16은 6.7점 높아서, 한 번에 맞히는 비율은 떨어지고 여러 번 시켰을 때 맞히는 비율은 올랐습니다. 저자들은 이를 더 다양한 답을 내놓은 결과로 보고, 같은 데이터로 이어 학습한 모델과 견주면 구조 변경으로 가장 크게 오른 것이 글자 이해보다 코드 pass@16이었다고 심사위원에게 답했습니다. 다만 논문은 이 다양성이 표집 설정의 차이 때문일 수도 있어 단정하기 이르다고 적었습니다. 수학 점수는 원본보다 6.4점 낮았는데, 이어 학습한 비교 모델도 49.8점이라 하락 대부분은 이어 학습 과정에서 나왔습니다.

계층 구조 자체의 한계를 지적한 연구도 있습니다. CUTE를 만든 루카스 에드먼(Lukas Edman)과 알렉산더 프레이저(Alexander Fraser)는 8월 31일 arXiv에 낸 논문에서, 바이트를 패치로 줄였다가 다시 푸는 계층형 바이트 모델이 모든 층에서 바이트를 보는 순수 바이트 모델보다 글자 조작 과제에 일관되게 약했다고 보고했습니다. 효율과 세밀한 글자 이해 사이에 맞교환이 있다는 결론이고, Ai2도 이번 블로그에서 Bolmo를 바탕으로 한 후속 연구로 이 논문을 소개했습니다.

## 속도는 H100에서 배치 1로 쟀습니다

속도는 바이트 모델의 오랜 약점이었고, 논문의 확장 데이터에 따르면 패치 하나에 평균 4.4바이트를 담는 기본 설정에서 Bolmo 7B의 디코딩 속도는 초당 약 115바이트로, 같은 압축률의 Olmo 3 7B(약 150바이트)보다 느렸습니다. 패치를 키워 평균 6.6바이트를 담으면 약 156바이트, 8.8바이트를 담으면 약 187바이트로 원본을 앞섰고, 첫 바이트가 나오기까지의 시간은 6.6바이트 안팎에서 원본보다 짧아졌습니다.

패치를 키우면 점수는 내려가는데, 연구진은 압축률을 바꿔 점수를 잰 실험을 1B 모델로만 했습니다. 그래프로 보면 Bolmo 1B는 패치당 6.2바이트까지 늘리자 기준 과제 9개 평균이 약 61점에서 약 57점으로 내려갔습니다. 서브워드 모델도 어휘를 키우면 압축률이 오르지만, OLMo 2 1B는 어휘가 20만~40만 개 사이를 넘어서자 출력층의 소프트맥스 계산이 불어나 같은 계산량에서 바이트 모델보다 점수가 낮아졌습니다(전체 소프트맥스 기준). 바이트 모델은 출력 어휘가 512개로 고정이라 이 부담이 없습니다.

모든 속도는 H100 GPU에서 요청을 하나씩 처리하는 배치 크기 1로 쟀습니다. 클라우드 서비스는 요청 여러 개를 묶어 처리하는데, 논문 보충자료는 묶음 추론 최적화를 앞으로의 과제로 남겼고 지금까지 나온 묶음 추론 구현은 알레프 알파의 vLLM 수정판 하나라고 적었습니다. 1차 심사위원은 2차 심사에서도 이 문제가 해결되지 않았다고 썼습니다.

## 후속 학습은 덧셈으로 옮겼습니다

연구진은 원래 모델 주변의 생태계를 바이트 모델에서 다시 쓸 수 있는지도 시험했습니다. 강화학습으로 지시 따르기를 익힌 Olmo 3 체크포인트와 기본 Olmo 3의 가중치 차이를 그대로 Bolmo의 트랜스포머에 더했습니다(태스크 산술). 지시 이행 벤치마크 IFEval 점수는 Bolmo 기본 모델의 31.1%(기본 Olmo 3는 35.4%)에서 67.4%로 올라, 강화학습을 직접 거친 Olmo 3(66.9%)와 같은 수준이 됐습니다.

![IFEval 점수 막대그래프. 기본 Olmo 3 약 35%, 기본 Bolmo 약 31%, 가중치 차이를 더한 Bolmo 약 67%, 강화학습으로 후속 학습한 Olmo 3 약 67%이며 더한 뒤 36%포인트 올랐다는 화살표가 있습니다](https://media.springernature.com/full/springer-static/image/art%3A10.1038%2Fs41586-026-11111-4/MediaObjects/41586_2026_11111_Fig3_HTML.png)

여기에는 후속 학습한 모델의 임베딩을 기본 모델 임베딩으로 되돌려도 성능이 유지돼야 한다는 조건이 붙습니다. 논문은 이것이 대체로 성립하지만 항상 그렇지는 않다고 적었고, 시험한 사례도 Olmo 3 한 건뿐이었습니다.

## 한글은 한 글자에 3바이트

UTF-8에서 영어 알파벳은 한 글자에 1바이트지만 한글 음절은 3바이트입니다. 미닉스호퍼는 2023년 5월 카파시의 글에 바이트 모델도 토큰화를 버리지는 않고 유니코드를 그대로 토크나이저로 쓸 뿐이며 라틴 문자에 매우 치우쳐 있다는 답글을 달았고, 이번 논문 보충자료도 UTF-8 바이트를 라틴 문자 중심 단위로 적었습니다. 학습 데이터는 영어와 코드 위주이고, 공개된 모델 카드의 언어 항목도 영어입니다.

그런 그가 지난해 12월 Bolmo를 공개하며 오랫동안 바이트 모델에 회의적이었지만 마침내 생각을 바꿨다고 썼습니다. 글자 평가에 쓴 EXECUTE에는 한국어 문항도 들어 있지만 논문은 언어별 점수를 따로 내지 않았습니다. 1단계에서 경계 예측기가 원래 토크나이저의 경계를 따라 하도록 배우기 때문에, 기본 설정의 바이트화 모델은 한국어 문장을 원래 모델과 비슷한 단위로 묶어 읽기 시작합니다. 한국어 토크나이저에 공을 들인 국내 모델을 바이트화하면 구조상 그 경계를 출발점으로 삼게 되지만, 이런 실험은 아직 나오지 않았습니다.

Bolmo 1B·7B와 Bwen 8B는 아파치 2.0, Blama 8B는 Llama 3 라이선스로 허깅페이스에 올라 있고, 학습 코드와 원래 모델을 그대로 둔 1단계 체크포인트도 공개됐습니다. 돌리려면 트랜스포머스 라이브러리와 함께 xLSTM 패키지가 필요합니다. Ai2 블로그에 따르면 Bolmo 7B로 러시아어 시와 노랫말을 영어로 옮기는 미세조정 모델이 이미 나왔습니다. 연구진이 다음 과제로 적은 것은 묶음 추론, 다국어와 멀티모달이고, Ai2는 바이트가 이미지와 소리도 나타내는 단위라 같은 생각을 텍스트 밖으로 넓힐 수 있다고 적었습니다.

읽어 주셔서 고맙습니다.

초이 드림
