• SEARCH

    통합검색
  • GAMEZONE
    • 커뮤니티
      • 공지사항
      • 유저게시판
        • 등업게시판
        • 출석체크
        • 정회원 무료자료실
      • 스크린샷
      • 인증자료실
    • 리니지
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 메이플스토리
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 바람의나라
      • 자유게시판
      • 홍보게시판
      • 자료게시판
        • 유틸자료실
        • 소스자료실
        • 클라이언트
        • 팩 자료실
      • 연구게시판
        • 개발내역
        • 질문과답변
        • 기타
      • 강의게시판
        • DR
        • CR
        • 구버전
        • 클라이언트 개조
        • 노하우 게시판
        • 게임공략 & 팁
    • 다크에덴
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 믹스마스터
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 라그나로크
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 기타게임
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 게임강의
    • 비베&포토샵
      • 자유게시판
      • 자료실
        • 일반자료실
        • 포인트 자료실
      • 노하우게시판
      • 포토샵게시판
    • 모바일
      • 게임공략
      • 포인트 자료실
      • 유틸자료실
      • 자유게시판
  • 기타게임 소스자료실
    • 기타게임 소스자료실 기타 ()
    • [Go 공식문서 한국어 정리] ⓪24. 데이터 레이스 디텍터 상세 가이드

      • 오뉴노노
      • 2026.05.30 - 01:42 2

    [Go 공식문서 한국어 정리] ⓪24. 데이터 레이스 디텍터 상세 가이드

    원문 제목: Data Race Detector
    작성자: Go Team

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 1. 서론 — 이 문서가 다루는 내용
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    데이터 레이스는 동시 시스템에서 가장 흔하고 디버깅하기 어려운 버그 유형입니다.
    두 고루틴이 동일한 변수에 동시에 접근하고 하나 이상이 쓰기일 때 발생합니다.
    이 문서는 Go의 내장 레이스 디텍터를 상세히 다룹니다.

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 2. 핵심 개념
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    ① 레이스 디텍터 사용법
    -race 플래그를 go test, go run, go build, go install에 추가합니다.

    ② GORACE 환경 변수
    log_path: 레포트 출력 파일
    exitcode: 레이스 발견 시 종료 코드
    strip_path_prefix: 파일 경로 접두사 제거
    history_size: 메모리 접근 히스토리 크기
    halt_on_error: 첫 레이스 후 종료 여부
    atexit_sleep_ms: 종료 전 대기 시간

    ③ build tag race
    -race 빌드 시 race 태그가 정의됩니다.
    // +build !race로 레이스 디텍터에서 제외할 수 있습니다.

    ④ 전형적인 레이스
    - 루프 카운터 레이스: 클로저가 루프 변수를 공유
    - 의도치 않은 변수 공유: 고루틴에서 := 대신 = 사용
    - 보호되지 않은 전역 변수: 맵 동시 접근
    - 기본 타입 레이스: bool, int 등 동시 접근
    - 동기화되지 않은 send/close: 채널 동시 작업

    ⑤ 수정 방법
    - 루프 변수 복사
    - 고루틴 내에서 :=로 새 변수 선언
    - sync.Mutex 또는 sync.RWMutex 사용
    - sync/atomic 사용
    - 채널 receive로 동기화

    ⑥ 요구사항
    cgo 필요, C 컴파일러 필요(Darwin 제외)
    linux/amd64, linux/arm64, darwin/amd64, darwin/arm64, windows/amd64 등 지원

    ⑦ 성능 오버헤드
    메모리 5-10배, 실행 시간 2-20배 증가
    defer/recovery마다 8바이트 추가 할당
    장기 실행 고루틴에서 메모리가 무한 증가할 수 있음

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 3. 주요 내용 상세
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    루프 카운터 레이스:
    for i := 0; i < 5; i++ {
    go func() { fmt.Println(i) }()
    }
    → 고루틴이 모두 같은 i를 참조하여 55555 출력
    해결: go func(j int) { fmt.Println(j) }(i)

    의도치 않은 변수 공유:
    go func() { _, err = f1.Write(data) }()
    _, err = f2.Write(data)
    → err를 공유하여 레이스 발생
    해결: go func() { _, err := f1.Write(data) }()

    보호되지 않은 맵:
    var service map[string]net.Addr
    func RegisterService(...) { service[name] = addr }
    func LookupService(...) { return service[name] }
    → 맵 동시 쓰기/읽기 불안전
    해결: sync.Mutex로 보호

    기본 타입 레이스:
    type Watchdog struct{ last int64 }
    KeepAlive와 Start에서 w.last 동시 접근
    해결: atomic.StoreInt64 / atomic.LoadInt64 사용

    채널 send/close 레이스:
    go func() { c <- struct{}{} }()
    close(c)
    → send와 close가 동기화되지 않음
    해결: <-c로 receive 후 close

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 4. 실전 활용 / 예시
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    병렬 테스트를 go test -race로 실행합니다.
    부하 테스트에서 -race 바이너리를 사용합니다.
    CI/CD 파이프라인에 race detection 단계를 추가합니다.

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 5. 정리
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    레이스 디텍터는 동시성 버그를 찾는 필수 도구입니다.
    거짓 양성이 없으므로 모든 경고를 심각하게 다뤄야 합니다.
    테스트 커버리지가 높을수록 더 많은 레이스를 발견할 수 있습니다.

    📎 출처 링크
    https://go.dev/doc/articles/race_detector.html

    #Go #Golang #race #detector #concurrency #공식문서

    이 게시물을..
    N
    0
    0
    • [Go 공식문서 한국어 정리] ⑤4. Go 명령어 도구오뉴노노
    • 0
      오뉴노노

    오뉴노노 님의 최근 글

    [Rust 공식문서 한국어 정리] ⑭. Rustlings 11 2026 05.30 [Rust 공식문서 한국어 정리] ⑬. The Unstable Book 11 2026 05.30 [Rust 공식문서 한국어 정리] ⑫. Rust Cookbook 9 2026 05.30 [Rust 공식문서 한국어 정리] ⑪. The Little Book of Rust Macros 4 2026 05.30 [Rust 공식문서 한국어 정리] ⑩. Rust Design Patterns 12 2026 05.30

    오뉴노노 님의 최근 댓글

    ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30
    글쓴이의 서명작성글 감추기 
    댓글 쓰기 에디터 사용하기 닫기
    • view_headline 목록
    • 14px
    • [Go 공식문서 한국어 정리] ⑤4. Go 명령어 도구
    • 목록
      view_headline
    × CLOSE
    전체 던파 5 뮤 18 천상비 프로젝트신루 5 아이온 18 어둠의전설 28 리니지2 7 크로노스 5 칼온라인 3 기타 306
    기본 (305) 제목 날짜 수정 조회 댓글 추천 비추
    기타 정렬 검색
    • 포인트 획득 공지
      4
      2026.04.24 - 19:48 4639 4
    • 링크 업로드 관련 공지
      8
      2026.03.25 - 21:56 4496 8
    • 인증메일 공지
      2
      2026.03.15 - 16:42 4390 2
    • 파일링크 및 인증메일 발송 관련 문의 안내
      8
      2026.03.14 - 22:03 4984 8
    • 포인트 게시판 안내
      2026.02.28 - 19:14 5771
    • 게임존 사이트 변경 사항 안내
      9
      2026.02.26 - 01:07 7589 9
    • 소스자료는 직접 올려주세요
      2017.06.06 - 16:16 849
    305
    기타
    피파온라인 3 클라이언트
    lyw01234 2026.05.30 - 23:17 40
    304
    기타
    [Rust 공식문서 한국어 정리] ⑭. Rustlings
    오뉴노노 2026.05.30 - 08:38 11
    303
    기타
    [Rust 공식문서 한국어 정리] ⑬. The Unstable Book
    오뉴노노 2026.05.30 - 08:38 11
    302
    기타
    [Rust 공식문서 한국어 정리] ⑫. Rust Cookbook
    오뉴노노 2026.05.30 - 08:37 9
    301
    기타
    [Rust 공식문서 한국어 정리] ⑪. The Little Book of Rust Macros
    오뉴노노 2026.05.30 - 08:36 4
    300
    기타
    [Rust 공식문서 한국어 정리] ⑩. Rust Design Patterns
    오뉴노노 2026.05.30 - 08:36 12
    299
    기타
    [Rust 공식문서 한국어 정리] ⑨. Rust API Guidelines
    오뉴노노 2026.05.30 - 08:35 12
    298
    기타
    [Rust 공식문서 한국어 정리] ⑧. The Rust Performance Book
    오뉴노노 2026.05.30 - 08:34 7
    297
    기타
    [Rust 공식문서 한국어 정리] ⑦. Asynchronous Programming in Rust
    오뉴노노 2026.05.30 - 08:34 6
    296
    기타
    [Rust 공식문서 한국어 정리] ⑥. The Rust Edition Guide
    오뉴노노 2026.05.30 - 08:33 9
    295
    기타
    [Rust 공식문서 한국어 정리] ⑤. The Cargo Book
    오뉴노노 2026.05.30 - 08:32 1
    294
    기타
    [Rust 공식문서 한국어 정리] ④. The Rustonomicon
    오뉴노노 2026.05.30 - 08:32
    293
    기타
    [Rust 공식문서 한국어 정리] ③. The Rust Reference
    오뉴노노 2026.05.30 - 08:31
    292
    기타
    [Rust 공식문서 한국어 정리] ②. Rust By Example
    오뉴노노 2026.05.30 - 08:31
    291
    기타
    [Rust 공식문서 한국어 정리] ①. The Rust Programming Language (The Book)
    오뉴노노 2026.05.30 - 08:30 2
    290
    기타
    [Go 공식문서 한국어 정리] ⑤7. Codewalk: Share Memory By Communicating
    오뉴노노 2026.05.30 - 03:29 7
    289
    기타
    [Go 공식문서 한국어 정리] ⑤6. Codewalk: 마르코프 체인 텍스트 생성
    오뉴노노 2026.05.30 - 03:26 2
    288
    기타
    [Go 공식문서 한국어 정리] ⑤5. Codewalk: Go의 일급 함수
    오뉴노노 2026.05.30 - 03:25 1
    287
    기타
    [Go 공식문서 한국어 정리] ⑤4. Go 명령어 도구
    오뉴노노 2026.05.30 - 03:24 2
    286
    기타
    [Go 공식문서 한국어 정리] ⑤3. 통합 테스트 커버리지 프로파일링
    오뉴노노 2026.05.30 - 03:23 1
    • 1 2 3 4 5 6 7 8 9 10 .. 16
    • / 16 GO
  • GAMEZONE
 GAMEZONE all rights reserved.
by OrangeDay