Thinking Without Words: 자연어가 아닌 추상 토큰 사전(codebook)을 활용하는 지연 추론(Latent Reasoning)에 대한 연구 (feat. Abstract CoT)

Abstract Chain-of-Thought 소개

길어지는 사고의 사슬, 그리고 추론의 비용

수학 문제를 풀 때 우리는 종이 위에 단계별로 풀이를 적어 나갑니다. 각 단계마다 의식적으로 어떤 규칙을 적용했는지 적어두면 실수도 줄고, 다른 사람에게 풀이 과정을 설명하기도 쉬워집니다. 그러나 익숙한 문제를 반복해서 풀 때는 굳이 모든 단계를 일일이 적지 않습니다. 머릿속에서 빠르게 처리하고, 핵심적인 중간 계산만 메모하는 식으로 효율을 올립니다. 최근 대형 언어 모델(LLM)에게 도입된 사고의 사슬(Chain-of-Thought, CoT) 도 이와 비슷한 양상에 직면해 있습니다.

DeepSeek-R1, o1 계열, Qwen3 등 최신 추론 모델은 답을 내기 전에 자연어로 길고 명시적인 추론을 생성하면서 어려운 수학과 코딩 문제에서 큰 성과를 거뒀습니다. 그러나 이런 방식은 추론 시점의 비용을 가파르게 끌어올립니다. 한 문제를 풀기 위해 수천에서 수만 개의 토큰을 소비하는 일이 흔하고, 강화 학습(Reinforcement Learning) 단계에서는 길어진 trace가 학습 비용을 더욱 부풀립니다. 게다가 Lanham et al. (2023)Turpin et al. (2023)이 지적한 것처럼, 모델이 실제로 거치는 내부 추론 과정과 자연어로 출력된 CoT가 일치하지 않는 불충실(unfaithful) 한 경우도 적지 않습니다.

이러한 비용과 신뢰성 문제를 해결하기 위해 다양한 접근이 시도되어 왔습니다. 첫 번째 흐름은 CoT를 짧게 압축하는 방향입니다. TokenSkip, LightThinker 같은 연구들은 자연어 CoT의 중간 토큰을 학습 가능하게 건너뛰거나 단계별로 요약합니다. 그러나 자연어 토큰 공간 안에서 길이를 줄이는 만큼, 표현 효율의 한계가 분명히 존재합니다. 두 번째 흐름은 연속(continuous) 잠재 공간에서 추론하는 Coconut, CODI, Soft Thinking 같은 방법입니다. 추론 토큰을 자연어가 아닌 hidden state 벡터로 흘려보내 토큰 수를 크게 줄일 수 있지만, 검증 가능한 수학 문제 등에서는 여전히 자연어 CoT 대비 성능 격차가 남아 있습니다. 세 번째 흐름은 Goyal et al. (2024)pause token 처럼 의미 없는 채움 토큰(filler token)을 끼워 넣어 모델에게 추가 연산 시간을 주는 방식인데, 단독 사용으로는 거의 효과가 없다고 알려져 있습니다.

IBM Research AI의 Keshav Ramji, Tahira Naseem, Ramón Fernandez Astudillo가 발표한 이번 연구는 이 세 갈래의 한계를 동시에 우회할 수 있는 제3의 길을 제시합니다. 그것은 자연어를 쓰지도, 연속 벡터를 쓰지도 않고, 새로운 이산(discrete) 토큰들로 이루어진 별도의 사전(codebook) 을 만들어 그 위에서 추론을 수행하는 방식입니다.

핵심 아이디어: 새 사전으로 만드는 추상 추론 언어

연구진이 제안한 Abstract Chain-of-Thought(Abstract-CoT) 는 자연어 어휘 \mathcal{V} 와 별개로, 사전 학습 단계에서는 한 번도 본 적 없는 M 개의 새로운 추상 토큰(abstract token) 으로 이루어진 사전 \mathcal{V}_{\mathrm{abs}} 를 도입합니다. 추상 토큰들은 단순한 알파벳 식별자로 표기되며, 예를 들어 M=64 인 경우 <TOKEN_A>, <TOKEN_B>, ..., <TOKEN_Z>, <TOKEN_AA>, ... 와 같이 부여됩니다. 추상 시퀀스의 시작과 끝은 별도의 구분자 <beginabstract>, <endabstract> 로 감싸며, 모델은 응답을 생성하기 전에 다음과 같은 형태의 짧은 추상 trace를 먼저 출력합니다:

\tilde{z} = \texttt{<beginabstract>}~z_1~z_2~\dots~z_m~\texttt{<endabstract>}

여기서 m \leq m_{\max} 로 길이에 상한을 두며, 본 논문에서는 m_{\max}=128 을 사용합니다. 자연어 CoT가 수천 토큰에 달하는 것과 대조적으로, Abstract-CoT는 수십 개 수준의 짧은 토큰만으로 추론을 표현하도록 강제됩니다.

핵심적인 발상의 전환은 두 가지입니다. 첫째, 사전 학습 없이 사후 학습(post-training)만으로 모델이 새로운 어휘를 배워 사용할 수 있게 하는 것입니다. 둘째, 추상 토큰들을 자연어 CoT의 양자화 복제본이 아니라, 자체적인 추론 언어 로 학습시키는 것입니다. 이는 Su et al. (2025)의 Token Assorted나 CODI처럼 teacher CoT를 그대로 모사하지 않고, 모델이 새로운 경로로 추론할 여지를 주는 차별점입니다.

연구진은 Qwen3-8B, Qwen3-4B, Granite-4.0-Micro(3B) 모델에서 Abstract-CoT가 자연어 CoT 대비 최대 11.6\times 적은 추론 토큰을 사용하면서, MATH-500, AlpacaEval, HotpotQA, AIME'25, GPQA-Diamond에 걸쳐 비등하거나 더 나은 성능을 달성했다고 보고합니다. 더 흥미로운 발견은, 학습이 진행되면서 추상 토큰의 사용 빈도 분포가 자연어와 유사한 거듭제곱 법칙(power law) 을 따른다는 점입니다. 즉, 모델이 자연어와 비슷한 통계적 구조를 가진 새로운 "추론 언어"를 스스로 만들어낸다는 것입니다.

학습 레시피: 두 단계의 훈련 파이프라인

Abstract-CoT의 학습 레시피는 크게 두 단계로 구성됩니다. (1) 무작위로 초기화된 추상 토큰 임베딩에 의미를 부여하는 정책 반복(Policy-iiteration) 워밍업, 그리고 (2) 워밍업된 정책을 기반으로 추상 시퀀스를 더 잘 만들도록 학습하는 워밍업 후 (Warm-started) 강화 학습 입니다. 이 두 단계는 추상 토큰이 가진 cold-start 문제, 즉 임베딩이 처음에는 의미 없는 무작위 벡터에 불과하다는 근본적인 문제를 해결하기 위해 설계되었습니다.

Abstract-CoT의 전체 학습 파이프라인 / Two-stage training recipe of Abstract-CoT

제약된 디코딩(Constrained Decoding)

추상 trace를 생성하는 모든 단계에서 모델은 일반적인 언어 모델 디코딩이 아니라, 제약된 디코딩 을 수행합니다. 즉, 허용 토큰 집합을 \mathcal{A} = \mathcal{V}_{\mathrm{abs}} \cup \{\texttt{<endabstract>}\} 로 한정하고, 매 단계의 분포를 다음과 같이 정의합니다:

\pi_\theta^{\mathrm{abs}}(a \mid h) = \frac{\pi_\theta(a \mid h)\,\mathbf{1}[a \in \mathcal{A}]}{\sum_{u \in \mathcal{A}} \pi_\theta(u \mid h)}

이렇게 하면 모델은 자연어 토큰을 끌어다 쓸 수 없고, 오직 새 사전 안에서만 추상 trace를 만들어야 합니다. 또한 길이 상한 m_{\max} 에 도달하면 강제로 <endabstract> 를 출력하도록 처리합니다.

1단계: Bottlenecked SFT - 자연어 CoT를 정보 병목으로 통과시키기

워밍업의 첫 번째 하위 단계는 Bottlenecked SFT 입니다. 학습 데이터는 (프롬프트 x, 자연어 CoT c, 정답 y) 의 삼중쌍으로 주어지며, 추상 trace \tilde{z}^{(t)} 는 첫 iteration에서는 무작위로 샘플링되고, 이후에는 직전 iteration의 정책으로부터 제약된 디코딩을 통해 on-policy로 생성됩니다.

이 단계의 핵심은 학습 시퀀스 s = [x;c;\tilde{z};y] 에 대해 영리하게 설계된 블록 어텐션 마스크 를 적용한다는 점입니다. 위치를 프롬프트(\mathcal{X}), 자연어 CoT(\mathcal{C}), 추상 시퀀스(\mathcal{Z}), 정답(\mathcal{Y}) 으로 나눈 뒤, 다음 두 규칙을 강제합니다:

  • 추상 토큰 위치는 프롬프트와 자연어 CoT를 모두 볼 수 있다: \mathcal{A}_{i,j}=1 for i \in \mathcal{Z}, j \in \mathcal{X} \cup \mathcal{C} \cup \mathcal{Z}_{\leq i}
  • 정답 위치는 자연어 CoT를 볼 수 없다: \mathcal{A}_{i,j}=0 for i \in \mathcal{Y}, j \in \mathcal{C}. 정답은 오직 프롬프트와 추상 토큰만 볼 수 있습니다.

이 마스킹 구조는 자연어 CoT c 의 정보가 정답 y 에 전달되려면 반드시 추상 토큰을 거쳐야 한다 는 조건부 마르코프 구조 C \rightarrow H_{\mathcal{Z}_{\mathrm{abs}}} \rightarrow Y 를 강제합니다. 데이터 처리 부등식에 의해 다음 관계가 성립합니다:

I(C;Y \mid X,Z) \leq I(C;H_{Z_{\mathrm{abs}}} \mid X,Z)

즉, 추상 토큰의 hidden state가 자연어 CoT로부터 정답으로 흘러갈 수 있는 정보의 채널 용량(channel capacity) 을 결정하게 됩니다. 마치 좁은 파이프에 물을 흘려 보내듯이, 풍부한 자연어 CoT를 짧은 추상 시퀀스로 압축해 통과시키는 셈입니다. 이때 학습 손실은 추상 토큰과 정답 위치에 대한 마스킹된 SFT 손실로 정의됩니다:

\mathcal{L}_{\mathrm{SFT}}(\theta; x,c,\tilde{z},y) = -\sum_{j \in (\mathcal{Z}_{\mathrm{abs}} \cup \mathcal{Y})} \log \pi_\theta(s_j \mid s_{<j}; \mathcal{A})

2단계: Self-Distillation - 자연어 CoT 없이 추상 토큰만으로

Bottlenecked SFT는 자연어 CoT를 활용해 추상 토큰의 임베딩을 길들이지만, 실제 추론 시점에는 자연어 CoT가 주어지지 않습니다. 따라서 두 번째 하위 단계인 Self-Distillation 에서는 모델이 프롬프트 x 만으로 추상 trace를 생성하고 정답을 내는 능력을 학습합니다.

구체적으로 \tilde{z} \sim \pi_\theta^{\mathrm{abs}}(\cdot \mid x) 를 제약된 디코딩으로 샘플링하고, 정답 y 와 짝지어 distillation 데이터셋을 구성합니다. 그 다음 표준 causal SFT를 적용해 추상 토큰과 정답 모두에 대해 loss를 계산합니다:

\mathcal{L}_{\mathrm{Distill}}(\theta; x,\tilde{z},y) = -\sum_{j \in (\mathcal{Z}_{\mathrm{abs}} \cup \mathcal{Y})} \log \pi_\theta(s_j \mid s_{<j})

이 (Bottlenecked SFT → Self-Distillation) 사이클을 T 회 반복하는 것이 policy iteration warm-up 입니다. 본 논문에서는 T=3 을 사용했으며, 이는 강화 학습에서 평가-개선을 반복하는 정책 반복(policy iteration)의 발상을 차용한 것입니다.

3단계: Warm-Started GRPO - 추상 시퀀스의 RL 최적화

워밍업이 끝나면 모델은 이미 그럴듯한 추상 trace를 생성할 수 있는 상태가 됩니다. 마지막 단계는 DeepSeekMathGRPO 알고리즘을 사용해 추상 trace의 품질을 강화 학습으로 최적화하는 것입니다. 각 프롬프트 x 에 대해 K 개의 trajectory \{(\tilde{z}_k, y_k)\}_{k=1}^{K} 를 샘플링하고, 보상 모델로 점수 \hat{R}_k 를 매긴 뒤, 그룹 내 표준화로 advantage를 계산합니다:

A_k = \frac{\hat{R}_k - \mathrm{mean}(\hat{R}_{1:K})}{\mathrm{std}(\hat{R}_{1:K}) + \epsilon}

목적 함수는 추상 trace와 응답 양쪽 모두에 정책 그래디언트를 흘리고, KL 정규화로 워밍업 모델로부터 멀어지지 않도록 제약합니다:

\mathcal{J}(\theta) = \mathbb{E}_x\left[\frac{1}{K}\sum_{k=1}^{K} A_k \left(\sum_{t \in \mathcal{Z}_{\mathrm{abs}}} \log \pi_\theta^{\mathrm{abs}}(z_{k,t} \mid x, z_{k,<t}) + \sum_{t \in \mathcal{Y}} \log \pi_\theta(y_{k,t} \mid x, \tilde{z}_k, y_{k,<t})\right) - \beta\,\mathrm{KL}(\cdot \,\|\, \cdot)\right]

특기할 점은, 검증 가능한 수학 문제뿐 아니라 일반적인 자연어 응답까지 포괄하기 위해 생성형 보상 모델(generative reward model)gpt-oss-20b를 medium thinking mode로 사용한다는 것입니다. 정답 매칭만으로 reward를 줄 수 없는 instruction-following이나 multi-hop QA에도 동일한 레시피가 통하도록 한 것입니다.

실험 결과: 11.6\times 적은 토큰으로 같은 성능 내기

실험 설계

학습에는 Olmo 3 Think 모델 개발에 사용된 Dolci-Think-SFT에서 60만 샘플을, RL에는 Dolci-Think-RL을 활용했습니다. 평가 벤치마크는 검증 가능 도메인의 MATH-500, 일반 instruction-following을 위한 AlpacaEval-LC-2.0, multi-hop QA의 HotpotQA, 그리고 더 어려운 추론 벤치마크인 AIME'25와 GPQA-Diamond입니다. 모델은 Qwen3-8B, Qwen3-4B, Granite-4.0-Micro(3B) 의 3종이며, Qwen3의 thinking mode는 꺼진 상태 에서 비교가 진행됩니다.

비교 대상 baseline은 (1) 직접 응답, (2) Pause Token 삽입, (3) Stepwise Internalization(ICoT-SI), (4) SFT(no CoT), (5) SFT(CoT), (6) SFT + RL(GRPO with Verbal CoT) 의 6종입니다. 추상 사전 크기는 M=64, 추상 시퀀스 최대 길이는 m_{\max}=128 토큰을 기본값으로 사용합니다.

토큰 효율과 성능의 동시 달성

핵심 결과는 \mathrm{ratio} = \frac{\mathbb{E}[|c_{\mathrm{verbal}}|]}{\mathbb{E}[m]} 로 정의되는 토큰 효율 지표로 요약됩니다. Abstract-CoT (Warm-up + RL) 는 다음과 같은 압축비를 달성했습니다:

  • MATH-500: 10.4\times ~ 11.6\times 더 적은 토큰
  • AlpacaEval: 1.9\times ~ 2.2\times 더 적은 토큰
  • HotpotQA: 4.0\times ~ 4.3\times 더 적은 토큰

성능 측면에서도 자연어 SFT + RL과 비등하거나 더 나은 결과를 보였습니다. 예컨대 AlpacaEval에서 Qwen3-8B는 baseline 대비 +2.4 점, Qwen3-4B는 +1.6 점, Granite 4.0 Micro는 +1.6 점의 win-rate 향상을 기록했습니다.

생성 토큰 수 대비 벤치마크 점수 / Tokens vs benchmark scores

특히 어려운 추론 벤치마크 결과가 인상적입니다. Qwen3-8B에서 GPQA-Diamond는 SFT + RL이 51.5\% 정확도를 1382 토큰으로 달성했는데, Abstract-CoT(Warm-up + RL)는 50.5\% 를 단 174 토큰으로 달성했습니다. 즉 7.9\times 의 토큰 효율로 거의 같은 정확도를 낸 것입니다. AIME'25에서도 SFT + RL의 25.6\% /9343 토큰 대비 Abstract-CoT는 24.4\% /3438 토큰으로, 2.7\times 의 효율을 기록했습니다.

워밍업의 결정적 역할

흥미로운 ablation은 cold-start RL과 warm-up 단독, warm-up + RL의 비교입니다. Cold-start RL (워밍업 없이 RL만 적용)은 종종 base 모델보다도 못한 성능을 보였고, 워밍업 단독 도 자연어 SFT(CoT) 에는 미치지 못했습니다. 그러나 두 단계가 결합 되면 자연어 SFT + RL을 따라잡거나 능가하는 결과가 나왔습니다. 이는 워밍업이 강화 학습이 탐색할 수 있는 의미 있는 임베딩 공간을 미리 만들어준다는 사실을 강하게 시사합니다.

또한 Pause Token fine-tuning은 토큰 수를 줄이는 데는 성공했지만, 거의 모든 설정에서 baseline보다 낮은 성능을 보였습니다. 이는 Goyal et al. (2024), Hao et al. (2025)이 지적한, "pause 토큰은 사전 학습 없이 fine-tuning만으로는 이득이 없다"는 관찰을 다시 한 번 확인해 줍니다. 반면 Abstract-CoT는 사전 학습 없이도 워밍업 + RL이라는 사후 학습 레시피만으로 동일한 류의 한계를 극복했다는 점에서 의미가 큽니다.

추상 추론 언어의 성질 분석

자연어와 닮은 거듭제곱 분포의 출현

연구진은 RL 학습 동안 추상 토큰의 사용 빈도가 어떻게 변하는지 추적했습니다. 워밍업 단계에서는 의도적으로 균등 분포로 토큰을 샘플링하지만, 학습이 진행되면서 분포가 점점 비대칭적으로 기울어집니다. 100만 episode의 warm-started RL이 끝난 시점에는, 한 토큰(<TOKEN_F>)이 압도적으로 많이 사용되고, 나머지 토큰들이 빈도 순으로 길게 늘어선 형태가 됩니다.

추상 토큰 빈도 분포의 진화와 Zipf 분포 / Token frequency distribution

이 분포는 Zipf 법칙으로 잘 알려진 자연어 단어 빈도와 매우 유사한 거듭제곱 법칙(power law) 형태를 띱니다. 사전 학습된 적도 없는 새 어휘가 자연어처럼 일부 토큰은 자주, 다른 토큰은 드물게 재사용되는 패턴을 보이는 것입니다. 연구진은 이를 모델이 "자주 등장하는 개념에는 특정 토큰을 재사용하고, 드문 개념에는 다른 토큰을 할당하는 학습"의 증거로 해석합니다. Cold-start RL에서는 이런 거듭제곱 분포가 잘 형성되지 않으며, 이는 워밍업이 임베딩 학습에서 결정적 역할을 한다는 추가 증거입니다.

순열(Permutation) 민감도 - 순서가 의미를 가지는가

Abstract-CoT가 단순한 토큰 집합이 아니라 순서를 가진 추론 시퀀스 인지를 검증하기 위해, 연구진은 생성된 trace를 무작위로 순열한 뒤 응답 품질이 어떻게 변하는지 측정했습니다. 자연어 CoT는 줄바꿈 단위로 단계들을 섞었고, Abstract-CoT는 토큰 단위로 무작위 순열을 적용했습니다.

결과는 두 방식 모두 명확한 성능 하락을 보였으며, 자연어 CoT의 하락 폭이 더 컸습니다. 그러나 Abstract-CoT 또한 상당한 폭으로 성능이 하락 했다는 점이 중요합니다. 이는 추상 시퀀스가 단순 채움(filler)이 아니라, 순서에 따라 의미가 달라지는 합성적(compositional) 구조 를 학습했음을 시사합니다. 특히 RL 단계가 이런 합성적 성질을 더 강화한다는 점도 관찰되었습니다.

절단(Truncation) 민감도 - 짧은 trace의 견고함

또 다른 분석은 추론 trace를 k 개 토큰에서 강제로 잘랐을 때의 성능 변화입니다. 자연어 CoT는 본래 수천 토큰으로 학습되었기 때문에 32토큰으로 자르면 성능이 급격히 떨어집니다. 반면 Abstract-CoT는 이미 짧고 한정된 trace로 추론하도록 학습되었기 때문에 절단에 훨씬 덜 민감합니다. MATH-500에서 가장 큰 차이가 관찰되었고, AlpacaEval처럼 본래 추론 토큰이 적은 벤치마크에서는 양쪽 모두 영향이 작았습니다. 즉 Abstract-CoT는 작은 추론 예산 안에서 더 우아하게 성능 저하(graceful degradation)되는 특성을 갖습니다.

모델 크기 확장: Qwen3-32B로의 일반화

연구진은 부록에서 Qwen3-32B로 같은 레시피를 적용한 결과도 보고합니다. 결론은 8B 모델과 동일합니다: Abstract-CoT가 AlpacaEval과 HotpotQA에서 자연어 SFT + RL을 능가하면서도 각각 2.7\times, 4.4\times 적은 토큰을 사용했고, MATH-500에서는 11.0\times 적은 토큰으로 거의 같은 정확도를 달성했습니다. 추상 사전 크기 ablation도 M=2 부터 M=512 까지 진행되었으며, M=64 가 성능과 효율 모두에서 최적의 균형을 보였습니다. (상세한 ablation 결과는 논문의 Appendix A를 참고해주세요)

한계점과 향후 연구 방향

Abstract-CoT는 인간이 읽을 수 있는 자연어 CoT와, 통제가 어려운 완전 암묵적(implicit) 추론 사이의 중간 지점 에 위치합니다. 해석 가능성 측면에서는 자연어 CoT만큼 투명하지 않습니다. <TOKEN_F> 가 어떤 개념을 의미하는지 곧바로 읽어낼 수는 없으며, 거듭제곱 분포라는 통계적 단서 외에 토큰 단위의 의미 분석은 향후 연구 과제로 남아 있습니다. 이는 Korbak et al. (2025) 등이 제기한 CoT monitorability 문제와 직접 맞닿아 있으며, 추상 토큰을 새로운 분석 인터페이스로 삼는 후속 연구가 필요합니다.

또한 짧은 고정 길이의 추상 trace는 매우 긴 호흡의 추론을 요구하는 문제에서는 제약이 될 수 있습니다. 연구진은 향후 방향으로 (1) 문제 난이도에 따라 추상 시퀀스 길이를 적응적으로 조절하는 budget-adaptive 메커니즘, (2) 추상 사전 위에 계층적 구조를 부여해 재사용 가능한 subroutine 을 학습시키는 방안, (3) 더 큰 사전과 학습 compute로 추상 토큰의 개념 군집을 분석하는 mechanistic interpretability 연구 등을 제시했습니다.

이 연구는 사전 학습을 거치지 않은 새로운 어휘조차 사후 학습만으로 의미 있게 활용할 수 있음을 보였다는 점에서, "추론을 위한 언어를 모델이 스스로 만들 수 있는가"라는 더 큰 질문에 대한 한 가지 긍정적인 답이 됩니다. 자연어를 압축하거나 연속 공간으로 도피하지 않고도 충분한 효율을 얻을 수 있다는 사실은, 미래의 추론 모델이 인간 언어를 우회하면서도 통제 가능한 형태의 내부 표현을 학습할 수 있다는 가능성을 시사합니다.

:scroll: Thinking Without Words: Efficient Latent Reasoning with Abstract Chain-of-Thought 논문

"Abstract-CoT achieves up to 11.6\times fewer reasoning tokens while demonstrating comparable performance across mathematical reasoning, instruction-following, and multi-hop reasoning, and generalizes across language model families."

더 읽어보기




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:south_korea:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다!
텔레그램(Telegram)이나 Slack/Discord/Teams/Dooray/GoogleChat 등으로도 새 글 알림을 받으실 수 있습니다. :smiley:

:wrapped_gift: 아래:down_right_arrow:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck: