• 티스토리 홈
  • 프로필사진
    소쩍소쩍이
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
소쩍소쩍이
  • 프로필사진
    소쩍소쩍이
    • 분류 전체보기 (89)
      • 파이썬 (18)
        • 문제 및 예제 (8)
      • PySide6 (24)
        • Signal & Slot (6)
        • Layout (8)
        • Model & View (3)
        • File (4)
        • Resource (3)
      • Server - Client (17)
        • GUI 채팅 (1)
      • MySQL (4)
      • 리눅스 (5)
      • 아두이노 (0)
      • 일지 (20)
  • GitHub
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    # Home
    # 공지사항
    #
    # 태그
    # 검색결과
    # 방명록
    • JSON 기반 메시지 타입 설계
      2026년 06월 23일
      • 소쩍소쩍이
      • 작성자
      • 2026.06.23.:31

      JSON과 Python 딕셔너리 이해

      JSON은 데이터를 구조적으로 표현하는 형식이다. 모양이 Python 딕셔너리와 비슷해서 처음 볼 때는 거의 같은 것처럼 보인다.

      하지만 JSON은 네트워크로 주고받기 위한 문자열 형식이고, Python 딕셔너리는 프로그램 안에서 사용하는 데이터 구조이다.

       

      Python 딕셔너리와 JSON의 관계

      Python 딕셔너리 예시

      # Python 딕셔너리
      message = {
          "type": "chat",
          "sender": "user1",
          "content": "안녕하세요"
      }

      JSON 형식 예시

      {
          "type": "chat",
          "sender": "user1",
          "content": "안녕하세요"
      }

       

      상황 형태 함수
      보낼 때 Python 딕셔너리 → JSON 문자열 json.dumps()
      받을 때 JSON 문자열 → Python 딕셔너리 json.loads()

       

      핵심
      JSON은 데이터를 교환하기 위한 문자열 형식이고, Python 딕셔너리는 메모리상에 존재하는 데이터 구조이다.

       

      용어 비교

      JSON Python 설명
      Object ({ }) Dictionary / dict ({ }) 키와 값으로 이루어진 구조
      Array ([ ]) List / list ([ ]) 순서가 있는 목록
      string str 문자열
      number int / float 숫자
      boolean (true / false) bool (True / False) 참과 거짓. Python은 대문자로 시작
      null None 값이 없음을 의미

       

      서버 입장에서 JSON이 편한 이유

      JSON 방식은 메시지 종류가 늘어나도 처리 방식이 일정하다.

      새로운 메시지 타입이 생겨도 type 값 하나를 추가해서 구분할 수 있다.

      또한 JSON은 Python에서만 쓰이는 형식이 아니라 여러 언어에서 사용할 수 있는 범용 데이터 형식이다.

       

      주의
      JSON은 Python 딕셔너리와 모양은 비슷하지만 완전히 같은 것은 아니다.
      네트워크로 보낼 때는 반드시 문자열로 변환해야 한다.

       

      기본 메시지 구조 설계

      채팅 프로그램에서는 모든 메시지를 일정한 구조로 만들면 처리하기 쉽다.

      # 기본 메시지 구조 — 모든 메시지가 이 형태를 기반으로 한다
      {
          "type": "",      # 메시지 종류 — 서버가 이 값을 보고 처리 방식 결정
          "sender": "",    # 보낸 사람
          "target": "",    # 받는 사람 (귓속말 등 필요한 경우에만)
          "content": ""    # 실제 내용
      }

       

      항목 의미 설명
      type 메시지 종류 서버가 이 값을 보고 처리 방식을 결정한다. 항상 포함
      sender 보낸 사람 누가 보냈는지 표시할 때 사용
      target 받는 사람 귓속말처럼 특정 사용자에게 보낼 때만 포함
      content 실제 내용 채팅 메시지, 오류 설명 등 실제 데이터

       

      모든 메시지가 항상 4개의 항목을 모두 가져야 하는 것은 아니다. type은 항상 포함하는 것이 좋고, 나머지는 메시지 종류에 따라 필요한 것만 포함하면 된다.

       

      서버 처리 흐름

      메시지 수신
      ↓
      JSON 파싱 (json.loads)
      ↓
      type 확인
      ↓
      "chat" → 전체 채팅으로 브로드캐스팅
      "whisper" → 특정 사용자에게만 전달
      "join" → 입장 알림 브로드캐스팅
      "leave" → 퇴장 처리 + 목록에서 제거
      "error" → 오류 메시지 전송

       

      메시지 타입별 JSON 구조

      일반 채팅 (chat)

      전체 채팅방에 전달되는 메시지이다.

      {"type": "chat", "sender": "user1", "content": "안녕하세요"}

       

      입장 알림 (join)

      서버가 생성해서 전체 사용자에게 보내는 메시지이다.

      {"type": "join", "sender": "user1"}

       

      퇴장 알림 (leave)

      사용자가 나갈 때 사용하는 메시지이다.

      {"type": "leave", "sender": "user1"}

       

      귓속말 (whisper)

      특정 사용자에게만 전달하는 메시지이다. target 항목이 필요하다.

      {"type": "whisper", "sender": "user1", "target": "user2", "content": "비밀 메시지"}

       

      오류 메시지 (error)

      서버가 클라이언트에게 보내는 메시지이다. sender가 서버이므로 생략할 수 있다.

      {"type": "error", "content": "존재하지 않는 사용자입니다."}

       

      파일 전송 (file)

      이번 강의에서는 구현하지 않지만, 나중에 기능을 추가할 때 확장할 수 있다.

      {"type": "file", "sender": "user1", "filename": "report.pdf", "size": 102400}

       

      타입별 필요 항목

      type sender target content 설명
      chat 필요 — 필요 전체 채팅 메시지
      join 필요 — — 입장 알림
      leave 필요 — — 퇴장 알림
      whisper 필요 필요 필요 특정 사용자에게만 전달
      error — — 필요 오류 메시지

       

      문자열 방식과 JSON 방식 비교

      항목 문자열 방식 JSON 방식
      메시지 구분 문자열 내용을 직접 분석 type 값 확인
      기능 추가 if문과 분석 규칙 추가 type 값 하나 추가
      오류 가능성 띄어쓰기·순서 실수에 취약 항목 이름으로 접근하므로 안정적
      유지보수 어려움 쉬움
      최종 프로젝트 적합성 낮음 높음

       

      정리
      JSON은 네트워크에서 데이터를 주고받기 위한 문자열 형식이고, Python 딕셔너리는 프로그램 안에서 사용하는 데이터 구조이다.

      보낼 때는 json.dumps()로 딕셔너리를 JSON 문자열로 바꾸고, 받을 때는 json.loads()로 JSON 문자열을 다시 딕셔너리로 바꾼다.

      채팅 프로그램에서는 type을 기준으로 메시지 종류를 구분하면 채팅, 입장, 퇴장, 귓속말, 오류 메시지를 안정적으로 처리할 수 있다.

      'Server - Client' 카테고리의 다른 글

      패킷 경계와 메시지 구분 처리  (0) 2026.06.25
      패킷 경계란?  (0) 2026.06.25
      왜 메시지 규칙이 필요한가  (0) 2026.06.23
      전체 채팅 브로드캐스팅  (0) 2026.06.23
      접속자 목록 관리  (0) 2026.06.23
      다음글
      다음 글이 없습니다.
      이전글
      이전 글이 없습니다.
      댓글
    조회된 결과가 없습니다.
    스킨 업데이트 안내
    현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
    ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
    목차
    표시할 목차가 없습니다.
      • 안녕하세요
      • 감사해요
      • 잘있어요

      티스토리툴바