# Go 1.24의 중요한 개선사항들

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

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=18354](https://news.hada.io/topic?id=18354)
- GeekNews Markdown: [https://news.hada.io/topic/18354.md](https://news.hada.io/topic/18354.md)
- Type: news
- Author: [lemonmint](https://news.hada.io/@lemonmint)
- Published: 2024-12-20T10:17:15+09:00
- Updated: 2024-12-20T10:17:15+09:00
- Original source: [gosuda.org](https://gosuda.org/ko/blog/posts/whats-new-in-go-1-24-z83ff24d2)
- Points: 3
- Comments: 4

## Topic Body

![Overview of Go 1.24](https://cdn.gosuda.org/whats-new-in-go1.24/overview-ko.png)  
  
Go 1.24 버전은 성능, 보안 및 개발자 경험에 초점을 맞춘 다양한 개선 사항을 도입하여 중요한 릴리스가 될 것으로 보입니다. 이러한 변경 사항은 Go를 현대적인 애플리케이션을 구축하는 데 있어 더욱 강력하고 효율적으로 만드는 것을 목표로 합니다.  
  
#### 성능 향상  
  
대표적인 벤치마크 스위트에서 CPU 오버헤드를 2~3% 감소시키는 일반적인 성능 향상이 있었습니다. 이러한 개선 사항에는 새로운 내장 map 구현, 작은 객체의 더욱 효율적인 메모리 할당, 새로운 런타임 내부 뮤텍스 구현이 포함됩니다. 결과는 애플리케이션에 따라 다를 수 있습니다.  
  
#### 양자 내성 암호화  
  
ML-KEM-768 및 ML-KEM-1024를 구현하는 `crypto/mlkem` 패키지가 도입되었습니다. ML-KEM은 이전에는 Kyber로 알려졌으며 FIPS 203에 명시된 양자 내성 키 교환 메커니즘입니다. 이러한 추가 사항은 Go를 미래의 암호화 보안에 대비하게 합니다.  
  
#### 암호화된 클라이언트 헬로  
  
TLS에서 ECH(Encrypted Client Hello)를 지원합니다. 이 기능은 `Config.EncryptedClientHelloKeys` 필드를 채워서 활성화할 수 있으며, TLS 연결의 개인 정보 보호 및 보안을 강화합니다.  
  
#### 새로운 Swiss Table Map  
  
더 나은 성능을 위한 향상된 map 구현입니다. 이 새로운 구현은 Swiss Tables를 기반으로 하며, `GOEXPERIMENT=noswissmap` 빌드 플래그를 사용하여 비활성화할 수 있습니다.  
  
#### Sync Map 업데이트  
  
`sync.Map`에서 map 수정 성능이 향상되었습니다. 분리된 키 세트의 수정은 더 큰 map에서 경합할 가능성이 훨씬 적으며, map에서 낮은 경합 부하를 달성하는 데 필요한 준비 시간이 더 이상 없습니다. 문제가 발생하면 `GOEXPERIMENT=nosynchashtriemap`을 사용하여 이전 구현으로 되돌릴 수 있습니다.  
  
#### 향상된 JSON 마샬링  
  
JSON 마샬링 중 더 스마트한 구조체 필드 생략을 위한 새로운 `omitempty` 태그 옵션입니다. 마샬링할 때 `omitempty` 옵션이 있는 구조체 필드의 값이 0이면 생략됩니다. 필드 유형에 `IsZero() bool` 메서드가 있으면 해당 메서드를 사용하여 값이 0인지 여부를 확인합니다.  
  
#### 런타임 정리  
  
더 나은 리소스 관리를 위해 `SetFinalizer`를 대체하는 `AddCleanup` 함수가 도입되었습니다. `SetFinalizer`와 달리 파이널라이제이션을 위해 연결된 객체를 부활시키지 않으며, 여러 개의 정리를 단일 객체에 연결할 수 있습니다. 새 코드는 `SetFinalizer`보다 `AddCleanup`을 선호해야 합니다.  
  
#### go.mod의 도구 지시어  
  
`go.mod`의 도구 지시어를 사용하여 툴 종속성 추적이 개선되었습니다. 이를 통해 이전의 해결 방법인 "tools.go"라는 관례적인 이름의 파일에 도구를 공백 가져오기로 추가할 필요가 없어졌습니다.  
  
#### 디렉터리 제한 액세스  
  
제어된 파일 시스템 작업을 위한 새로운 `os.Root` 유형입니다. `os.Root` 유형은 특정 디렉터리 내에서 파일 시스템 작업을 수행할 수 있는 기능을 제공하여 지정된 경로 외부의 액세스를 방지합니다.  
  
#### 테스트 개선  
  
동시 코드 테스트를 위한 새로운 `testing/synctest` 패키지입니다. `synctest.Run` 함수는 격리된 "버블"에서 goroutine 그룹을 시작하고, `synctest.Wait` 함수는 현재 버블의 모든 goroutine이 차단될 때까지 기다립니다. 이 패키지는 실험적이며 빌드 시점에 `GOEXPERIMENT=synctest`를 설정하여 활성화해야 합니다.  
  
#### 빌드 캐시  
  
`go run` 실행 파일이 이제 더 빠른 실행을 위해 캐시됩니다. 이렇게 하면 캐시가 커지는 대신 반복 실행이 더 빨라집니다.  
  
#### Cgo 성능  
  
더 나은 Cgo 성능을 위한 새로운 `#cgo noescape` 및 `#cgo nocallback` 어노테이션입니다. `#cgo noescape cFunctionName`은 컴파일러에게 C 함수에 전달된 메모리가 이스케이프되지 않음을 알립니다. `#cgo nocallback cFunctionName`은 컴파일러에게 C 함수가 Go 함수를 다시 호출하지 않음을 알립니다.  
  
#### 약한 포인터  
  
회수를 방지하지 않고 메모리를 안전하게 참조하기 위한 약한 포인터에 대한 지원입니다. 약한 포인터는 값 연결을 위한 약한 map, 정규화 map 및 다양한 종류의 캐시와 같은 메모리 효율적인 구조를 생성할 수 있도록 제공되는 저수준 기본 요소입니다.  
  
#### 벤치마크 테스트 개선  
  
더 빠르고 오류가 적은 벤치마크를 위한 새로운 `testing.B.Loop` 메서드입니다. 벤치마크 함수는 `-count`당 정확히 한 번 실행되므로 비용이 많이 드는 설정 및 정리 단계가 한 번만 실행됩니다. 함수 호출 매개변수와 결과는 유지되므로 컴파일러가 루프 본문을 완전히 최적화하지 못합니다.  
  
Go 1.24 버전은 언어 및 해당 생태계의 다양한 측면에서 상당한 개선을 제공하는 중요한 릴리스가 될 것으로 보입니다.

## Comments



### Comment 32560

- Author: secret3056
- Created: 2024-12-20T12:21:58+09:00
- Points: 1

Go 사용하시는 분들 혹시 바라는 기능이 있으신가요?  
저는 `.?`이랑 `??` 같은 연산자랑 가능하면 매크로가 있었으면 좋겠네요.  
  
솔직히 struct tag는 실수입니다.

### Comment 32565

- Author: gkswnsqja
- Created: 2024-12-20T17:37:40+09:00
- Points: 1
- Parent comment: 32560
- Depth: 1

저도 개인적으로 매크로가 제발 있었으면 하네요, 언제까지 generate해야 하는지 ㅠ

### Comment 32561

- Author: qkrqjadn
- Created: 2024-12-20T12:50:55+09:00
- Points: 1
- Parent comment: 32560
- Depth: 1

struct tag가 실수인 이유가 어떤건지 궁금합니다

### Comment 32562

- Author: secret3056
- Created: 2024-12-20T13:48:12+09:00
- Points: 2
- Parent comment: 32561
- Depth: 2

도구의 도움을 받기 힘든게 가장 큰 문제입니다.  
  
- 문자열이다보니 오타가 나도 오류를 찾기 힘듭니다.  
- json을 제외하면 자동완성이나 인텔리센스가 안됩니다.  
- 여러 도구를 사용할 때 한 줄에 다 적어야 하는데 가독성이 떨어진다는 느낌을 피할 수 없습니다.  
  
gomodifytags도 나온지는 오랜데 VSC의 Go 익스텐션이랑 통합도 꽤 늦었습니다.
