# Go 1.25 출시

> Clean Markdown view of GeekNews topic #22493. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=22493](https://news.hada.io/topic?id=22493)
- GeekNews Markdown: [https://news.hada.io/topic/22493.md](https://news.hada.io/topic/22493.md)
- Type: news
- Author: [lemonmint](https://news.hada.io/@lemonmint)
- Published: 2025-08-13T11:21:57+09:00
- Updated: 2025-08-13T11:21:57+09:00
- Original source: [go.dev](https://go.dev/blog/go1.25)
- Points: 9
- Comments: 4

## Summary

Go 1.25는 **툴체인 전반 개선**과 함께, 개발자가 환경 변수를 통해 직접 활성화할 수 있는 두 가지 **주요 실험적 기능**—성능 중심의 **GreenTea GC**와 엄격성·정확성을 높인 **json/v2 패키지**—을 도입합니다. 이러한 변화는 GC 효율성, 메모리 최적화, JSON 파싱/직렬화의 예측 가능성과 보안성 강화를 목표로 하며, 옵션 시스템과 모듈식 구조 도입으로 **확장성**과 **제어권**이 크게 향상되었습니다. 그 외에도 **컨테이너 환경 최적화(GOMAXPROCS 자동 조정)**, DWARF5 기반 **디버깅 정보 최적화**, **crypto 및 net/http 성능 향상**, 새로운 **동시성 테스트 패키지** 등, 생산성과 효율성 증진을 위한 다양한 변화들이 반영되어 있습니다.

## Topic Body

![Overview](https://cdn.gosuda.org/go-release-notes/overview-ko-lg-1.25.png)  
  
Go 1.25 버전이 정식으로 출시되었습니다. 이번 버전은 툴, 런타임, 컴파일러, 표준 라이브러리 전반에 걸친 개선 사항을 포함하며, 특히 사용자가 미리 체험하고 피드백을 제공할 수 있는 중요한 실험적 기능들을 선보입니다.  
  
- **주요 특징**:  
  - Go 1 버전과의 호환성 유지  
  - 툴, 런타임, 컴파일러, 라이브러리 등 광범위한 개선  
  - 새로운 실험적 기능(GreenTea GC, json/v2 패키지) 도입  
  
##### 핵심 실험적 기능  
  
Go 1.25는 성능 향상과 기능 개선을 목표로 하는 두 가지 주요 실험적 기능을 포함하고 있으며, 사용자는 환경 변수 설정을 통해 활성화할 수 있습니다.  
  
###### 새로운 GreenTea 가비지 컬렉터 (GC)  
  
수많은 작은 객체를 처리할 때 발생하는 GC 오버헤드를 줄여 성능을 향상시키는 것이 목표입니다.  
  
- **작동 방식**: 512바이트 미만의 작은 객체들을 8KiB 크기의 '메모리 스팬(Memory Span)' 단위로 그룹화하여 GC를 수행합니다. 이를 통해 메모리 지역성(locality)을 높여 CPU 캐시 효율을 극대화합니다.  
- **기대 효과**:  
  - 메모리 점프 비용 감소로 인한 GC 성능 향상  
  - 다중 코어 환경에서 효율적인 작동  
  - 작은 객체 할당 오버헤드 및 메모리 파편화 감소  
- **활성화 방법**: 빌드 시 `GOEXPERIMENT=greenteagc` 환경 변수 설정  
  
###### 새로운 `encoding/json/v2` 패키지  
  
기존 `encoding/json` (v1)의 일관성 부족, 예측 힘든 동작, 성능 문제를 해결하기 위해 새롭게 설계된 JSON 구현체입니다.  
  
- **핵심 목표**:  
  - **정확성 및 예측 가능성 향상**: 기본적으로 더 엄격한 규칙(예: 대소문자 구분, 중복 키 금지)을 적용하여 예기치 않은 동작을 줄입니다.  
  - **성능 개선**: 파싱 및 인코딩 엔진을 재설계하여 효율성을 높였습니다.  
  - **유연성 및 제어권 확대**: 정교한 옵션 시스템을 도입하여 개발자가 JSON 처리 방식을 세밀하게 제어할 수 있습니다.  
  
- **주요 변경점 (v1 대비 v2)**:  
  - **필드 이름 매칭**: v1의 대소문자 미구분 방식과 달리, v2는 기본적으로 **대소문자를 정확히 구분**합니다.  
  - **`omitempty` 태그 의미 변경**: v1이 Go 값의 '빈 상태'(0, false, nil 등)를 기준으로 생략했다면, v2는 인코딩된 JSON 값의 '빈 상태'(`null`, `""`, `{}`, `[]`)를 기준으로 생략합니다.  
  - **`nil` 슬라이스 및 맵 처리**: v1은 `null`로 마샬링했지만, v2는 기본적으로 각각 `[]` (빈 배열)과 `{}` (빈 객체)로 마샬링합니다.  
  - **배열 언마샬링**: v1은 JSON 배열과 Go 배열의 길이가 달라도 허용했지만, v2는 **길이가 정확히 일치**해야만 하고, 그렇지 않으면 오류를 반환합니다.  
  - **중복 키 처리**: v1은 중복된 키를 허용(마지막 값으로 덮어씀)했지만, v2는 기본적으로 **오류를 반환**하여 정확성과 보안을 강화합니다.  
  - **유효하지 않은 UTF-8 처리**: v1은 유효하지 않은 UTF-8 문자를 자동으로 대체(`\uFFFD`)했지만, v2는 기본적으로 **오류를 반환**하여 데이터 손상을 방지합니다.  
  
- **새로운 기능 및 구조**:  
  - **모듈식 구조**: 저수준의 구문 분석(`jsontext` 패키지)과 고수준의 의미 변환(`json/v2` 패키지)을 분리하여 코드 명확성과 성능을 개선했습니다.  
  - **강력한 옵션 시스템**: `json.Options`를 통해 다양한 동작을 세밀하게 제어할 수 있으며, v1의 동작을 완벽히 재현하는 것도 가능합니다.  
  - **외부 타입 처리**: `WithMarshalers`, `WithUnmarshalers` 옵션을 통해 `Marshaler/Unmarshaler` 인터페이스를 구현하지 않은 외부 패키지의 타입에 대한 직렬화/역직렬화 로직을 주입할 수 있습니다.  
  
- **활성화 방법**: 빌드 시 `GOEXPERIMENT=jsonv2` 환경 변수 설정  
  
##### 주요 변경 사항 및 개선점  
  
이번 릴리스에는 개발 생산성과 프로그램 실행 효율을 높이기 위한 다양한 개선이 이루어졌습니다.  
  
- **런타임 (Runtime)**  
  - **컨테이너 환경 인지 GOMAXPROCS**: Linux 환경에서 cgroup의 CPU 제한을 자동으로 인지하여 `GOMAXPROCS` 기본값을 설정하고, CPU 자원 변경 시 이를 동적으로 업데이트합니다.  
  - **Trace Flight Recorder**: 드문 버그를 디버깅하기 위해 메모리 내 링 버퍼에 런타임 트레이스를 지속적으로 기록하는 경량화된 추적 기능을 제공합니다.  
  
- **툴 및 컴파일러 (Tools & Compiler)**  
  - **nil 포인터 버그 수정**: Go 1.21부터 존재했던 nil 포인터 검사를 지연시키는 컴파일러 버그가 수정되어, 비정상적으로 성공하던 코드가 이제 정상적으로 패닉을 일으킵니다.  
  - **DWARF5 지원**: 디버깅 정보에 DWARF 버전 5를 사용하여 바이너리 크기와 링크 시간을 줄였습니다.  
  - **새로운 `go.mod ignore` 지시어**: `go` 명령어가 특정 디렉터리를 무시하도록 설정할 수 있습니다.  
  
- **표준 라이브러리 (Standard Library)**  
  - **`testing/synctest` 패키지 추가**: 동시성 코드 테스트를 지원하는 새로운 패키지로, 가상화된 시간 속에서 테스트를 격리 실행할 수 있습니다.  
  - **`crypto` 패키지 성능 향상**: FIPS 모드에서의 `ecdsa`, `ed25519` 서명 속도가 4배 빨라졌으며, SHA 해싱 속도도 개선되었습니다.  
  - **`net/http` CrossOriginProtection 추가**: 최신 브라우저의 Fetch 메타데이터를 사용하여 CSRF 공격을 방어하는 새로운 기능을 제공합니다.  
  
##### 포트 및 지원 변경  
  
- **macOS**: Go 1.25부터 macOS 12 Monterey 이상의 버전이 필요합니다.  
- **Windows**: 32비트 `windows/arm` 포트는 이번 릴리스를 마지막으로 지원이 중단될 예정입니다.

## Comments



### Comment 42463

- Author: gjen6s
- Created: 2025-08-13T12:25:34+09:00
- Points: 1

llm 통해서 이미지로 만들어진것 같은데 보기 좋네요

### Comment 42494

- Author: aqqnucs
- Created: 2025-08-13T20:29:38+09:00
- Points: 1
- Parent comment: 42463
- Depth: 1

혹시 이게 어떤 얘기일까요

### Comment 42497

- Author: kkweon
- Created: 2025-08-14T03:10:02+09:00
- Points: 1
- Parent comment: 42494
- Depth: 2

글 첫번째 줄에 한눈에 보기 좋게 정리된 이미지 링크가 있네요

### Comment 42459

- Author: lemonmint
- Created: 2025-08-13T11:29:04+09:00
- Points: 2

- Go 1.25 encoding/json v1 vs v2 비교: https://gosuda.org/ko/blog/posts/go-1-25-encoding-json-v1-vs-v2-z74a36b08  
- Go 런타임이 뺏어갈 녹차 한 잔의 여유, GreenTea GC: https://gosuda.org/ko/blog/posts/greentea-gc:-the-respite-of-a-cup-of-green-tea-seized-by-the-go-compiler-z72acc3f7
