0Pricing
Go Academy · 강의

WebSocket 기초

실시간 양방향 통신

WebSocket 기초은(는) CoddyKit의 무료 Go Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Go Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

실시간 양방향 통신

HTTP는 요청과 응답 방식입니다. 클라이언트가 요청하고 서버가 응답하면 연결은 논리적으로 끝납니다. 채팅, 실시간 대시보드, 게임에는 지속적인 양방향 채널이 필요합니다. 이것을 제공하는 것이 WebSockets입니다.

업그레이드 핸드셰이크

WebSocket 연결은 특수한 헤더가 포함된 일반 HTTP 요청으로 시작합니다:

  • Upgrade: websocket
  • Connection: Upgrade

서버가 101 Switching Protocols로 응답하면 TCP 소켓을 재사용하여 전이중 프레임을 주고받습니다.

단순히 폴링을 사용하지 않는 이유

WebSockets가 나오기 전에는 앱이 폴링(반복 요청)이나 긴 폴링을 사용했습니다. 두 방식 모두 대역폭을 낭비하고 지연 시간을 늘립니다. WebSockets는 하나의 연결을 열린 상태로 유지하므로 양쪽에서 즉시 보낼 수 있습니다.

요청이 아닌 프레임

업그레이드가 완료되면 데이터는 HTTP 메시지가 아니라 가벼운 프레임으로 이동합니다. 프레임은 텍스트나 이진 데이터일 수 있으며, 핑/퐁과 연결 종료를 위한 제어 프레임도 있습니다.

전이중 통신

HTTP와 달리 양쪽 상대방은 응답을 기다리지 않고 언제든지 보낼 수 있습니다. 서버는 무언가 변경되는 즉시 알림을 푸시할 수 있고, 클라이언트는 동시에 입력을 보낼 수 있습니다.

ws와 wss

http/https와 마찬가지로 WebSockets에는 두 가지 방식이 있습니다:

  • ws:// 평문
  • wss:// TLS를 통한 연결(운영 환경에서 사용하십시오)

표준 라이브러리 지원

Go의 표준 라이브러리에는 net/http만으로 사용할 수 있는 WebSocket 구현이 없습니다. 커뮤니티에서는 github.com/gorilla/websocket 또는 nhooyr.io/websocket을 사용합니다. 다음 수업에서 gorilla를 다룹니다.

import "github.com/gorilla/websocket"

개념적 모델

WebSocket을 전화 통화라고 생각해 보십시오.

  • 전화 걸기 = HTTP 업그레이드 핸드셰이크
  • 연결된 통화 = 지속적인 연결
  • 양방향으로 대화하기 = 전이중 프레임
  • 전화 끊기 = 종료 프레임

메시지 유형

두 가지 데이터 프레임 유형이 가장 중요합니다.

  • 텍스트 프레임은 UTF-8(대개 JSON)을 전달합니다
  • 바이너리 프레임은 원시 바이트(protobuf, 이미지)를 전달합니다

제어 프레임(핑, 퐁, 종료)은 연결 자체를 관리합니다.

WebSocket이 유용한 곳

다음과 같은 경우에 특히 적합합니다.

  • 채팅 및 접속 상태
  • 실시간 거래 또는 스포츠 점수
  • 협업 편집
  • 멀티플레이어 게임 상태

서버에서 클라이언트로만 단방향 전송한다면 서버 전송 이벤트가 더 간단할 수 있습니다.

실행 가능: 프레임으로 표현하기

WebSocket 코드는 외부 라이브러리가 필요하므로, 여기서는 표준 라이브러리를 사용한 비유를 살펴봅니다. 이 함수는 메시지를 텍스트 또는 바이너리로 분류하여 프레임 유형을 보여 줍니다.

package main

import (
    "fmt"
    "unicode/utf8"
)

func frameType(data []byte) string {
    if utf8.Valid(data) {
        return "text"
    }
    return "binary"
}

func main() {
    fmt.Println(frameType([]byte("hello")))
    fmt.Println(frameType([]byte{0xff, 0x00, 0x01}))
}

빠른 확인

WebSocket 기초에 대한 이해도를 확인해 보십시오.

복습

WebSocket의 기초를 배웠습니다.

  • 지속적인 전이중 통신을 제공합니다
  • HTTP 업그레이드 핸드셰이크(101 응답)로 시작합니다
  • 데이터는 텍스트 또는 바이너리 프레임으로 흐르고, 제어 프레임이 연결을 관리합니다
  • 프로덕션에서는 wss://를 사용하며, Go에서는 gorilla/websocket 같은 라이브러리를 사용합니다

자주 묻는 질문

“WebSocket 기초” 강의는 무료인가요?

네 — “WebSocket 기초” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Go Academy 강의 전체를 잠금 해제할 수 있습니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“WebSocket 기초”에서 뭘 배우나요?

실시간 양방향 통신 브라우저에서 직접 실행하는 실습 코드로 Go Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Go Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Go Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“WebSocket 기초” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Go Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Go Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. WebSocket 기초
  2. gorilla/websocket 사용하기
  3. 메시지 브로드캐스트
  4. 연결 관리
← Go Academy(으)로 돌아가기