Python 2
24강. GUI에서 메시지 보내기
24강. GUI에서 메시지 보내기
2026.06.1224강 구현 중심 ⏱ 약 25분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 만들고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 23강에서 GUI가 서버에 접속하는 기능을 만들었습니다.하지만 보내기 버튼을 누르면 채팅창에 나: 메시지가 화면에만 임시로 추가될 뿐, 어디로도 전송되지 않았습니다.이번 강의에서는 그 임시 동작을 실제 네트워크 전송으로 바꿉니다. 이번 강의에서도 다른 클라이언트가 보낸 메시지를 GUI에서 받지는 않습니다. 목표는 한 방향, "GUI에서 서버로 보내기"입니다.메시지 입력 ↓보내기 버튼 클릭 또는 Enter 입력 ↓{"type": "chat", "content": "..."} 메시지 생성 ..
23강. GUI에서 서버 접속하기
23강. GUI에서 서버 접속하기
2026.06.1223강 구현 중심 ⏱ 약 25분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 만들고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 22강까지는 GUI 화면이 버튼 클릭과 Enter 입력에 반응했지만, 서버와는 완전히 분리된 상태였습니다. 입력한 메시지도 화면에만 추가될 뿐 어디로도 전송되지 않았습니다. 이번 강의에서 그 분리된 GUI와 서버 사이에 실제 소켓 연결을 만듭니다. 아직 메시지를 전송하지는 않습니다. 이번 강의의 목표는 더 작고 분명합니다.서버 실행 ↓GUI 창에서 "서버 접속" 버튼 클릭 ↓127.0.0.1:5000 서버에 소켓 연결 ↓상태 라벨이 "상태: 서버에 연결됨"으로 바뀜 ..
22강. 채팅 화면 레이아웃 만들기
22강. 채팅 화면 레이아웃 만들기
2026.06.1222강 UI 중심 ⏱ 약 20분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 만들고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 UI 중심 강의입니다. 21강에서 PySide6 기본 창과 위젯을 만들었습니다.창은 뜨고 위젯도 화면에 표시되지만, 아직 버튼을 눌러도 아무 반응이 없습니다. 이번 강의에서는 21강 chat_client/main.py를 수정해 두 가지를 합니다.첫째, 상태 라벨을 위로 올리고 채팅 표시 영역이 화면 대부분을 차지하도록 레이아웃을 정리합니다.둘째, 버튼 클릭과 Enter 입력을 같은 함수에 연결해 입력한 메시지가 채팅 표시 영역에 추가되는지 확인합니다. 아직 서버에 접속하거나 실제로 메시지를 전송하지 않습니다. 이번 강의의 목표는 화면..
21강. PySide6 기본 창과 위젯 구성
21강. PySide6 기본 창과 위젯 구성
2026.06.1221강 UI 중심 ⏱ 약 25분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 만들고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 UI 중심 강의입니다. 19강에서 화면은 ChatWindow가 담당하기로 정했고,20강에서는 터미널의 input()이 입력창으로, print()가 채팅 표시 영역으로 바뀐다는 대응 관계를 정리했습니다. 이번 강의에서는 그 위젯들을 실제로 화면에 배치합니다.아직 서버에 접속하거나 메시지를 보내지 않습니다. 이번 강의의 목표는 단 하나입니다.채팅 화면 뼈대가 화면에 뜨는 것화면에 무언가가 떠야 이후 강의에서 버튼 이벤트를 연결하고 서버 접속을 붙이는 작업이 가능해집니다. 아래 코드에서 ➕는 이번 단계에서 새로 추가된 줄, ✏️는 형태가 ..
20강. 터미널 채팅에서 GUI로
20강. 터미널 채팅에서 GUI로
2026.06.1220강 개념 중심 ⏱ 약 20분 0. 학습 목표→ 터미널 채팅 코드 중 무엇이 GUI에서 그대로 쓰이고, 무엇이 어디로 바뀌는지 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 개념 중심 강의입니다. 19강에서 코드를 ChatServer / ChatClient / ChatWindow로 나누는 역할 분리 기준을 잡았습니다.이번 강의에서는 그 분리를 전제로 터미널 채팅과 GUI 채팅 사이를 연결합니다.직접 코드를 작성하거나 파일을 만들지는 않습니다. 대신 한 가지 핵심 질문에 답합니다.지금까지 만든 코드 중 무엇이 GUI에서 그대로 쓰이고, 무엇이 바뀌는가?GUI로 넘어간다고 해서 네트워크 원리가 바뀌지 않습니다. 서버 접속, 메시지 전송·수신, JSON 프로토콜은 GUI에서도 그대로 사용합니다. 달..
19강. 클래스로 코드 구조화하기
19강. 클래스로 코드 구조화하기
2026.06.1219강 개념 중심 ⏱ 약 25분 0. 학습 목표→ 클래스가 왜 필요한지 이해하고, 기존 전역 변수·함수가 어느 클래스로 이동하는지 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 개념 중심 강의입니다. 18.5강까지 터미널 채팅 서버와 클라이언트를 완성했습니다.기능은 잘 동작하지만, 코드가 전역 변수와 함수로 흩어진 채 서로 얽혀 있습니다.이 상태에서 GUI를 붙이면 화면 코드와 네트워크 코드가 한 파일에 뒤섞여 오류 원인을 찾기 어려워집니다. 이번 강의에서는 지금 코드를 바로 리팩토링하지 않습니다. 먼저 클래스가 왜 필요한지, 어떤 역할을 어떻게 나누면 좋은지 이해하는 것이 목표입니다. 여기서 정리하는 역할 분리 기준은 이후 Part 5~7 전체에서 그대로 유지됩니다.구분내용이해할 것함수·전역 ..
18.5강. Part 1 ~ 4 코드 점검
18.5강. Part 1 ~ 4 코드 점검
2026.06.1218.5강 체크포인트 ⏱ 약 30분 0. 학습 목표→ 이번 글에서 무엇을 점검하고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 점검 중심 강의입니다.새 기능을 추가하기보다 지금까지 만든 코드를 다시 실행하면서 전체 흐름이 안정적으로 동작하는지 확인합니다. 지금까지 만든 기능은 다음과 같습니다.P1 네트워크 입문: IP, 포트, TCP, 소켓 개념P2 1:1 소켓 통신: 서버·클라이언트 연결, 메시지 송수신P3 다중 접속과 브로드캐스팅: 스레드, 접속자 목록, 전체 채팅P4 메시지 프로토콜: JSON, 패킷 경계, 메시지 타입 분기기능 하나씩은 잘 동작해도 전체로 연결했을 때 오류가 생길 수 있습니다. 이번 강의에서는 실행 순서, 파일 구성, 메시지 형식, 자주 발생하는 ..
18강. 시스템 메시지와 오류 메시지 처리
18강. 시스템 메시지와 오류 메시지 처리
2026.06.1218강 구현 중심 ⏱ 약 35분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 만들고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 17강까지 JSON 메시지를 안정적으로 분리해 Python 딕셔너리로 꺼낼 수 있게 됐습니다. 이번 강의에서는 꺼낸 메시지의 type 값을 보고 처리 방식을 나눕니다.type이 "chat" → 일반 채팅으로 브로드캐스팅type이 "system" → 입장·퇴장 같은 서버 알림type이 "error" → 잘못된 요청에 대한 오류 응답type이 "exit" → 클라이언트 연결 종료 처리입장 알림·퇴장 알림·일반 채팅·오류 메시지는 서로 다른 의미를 가집니다. 이 메시지들을 모두 같은 방식으로 출력하면 클라이..
17강. 패킷 경계와 메시지 구분 처리
17강. 패킷 경계와 메시지 구분 처리
2026.06.1217강 구현 중심 ⏱ 약 40분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 만들고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 16강에서 TCP 바이트 흐름과 패킷 경계 문제를 이해했습니다. 메시지가 붙거나 나뉘어 도착할 수 있고, recv() 한 번이 항상 메시지 하나와 일치하지 않는다는 것을 확인했습니다. 이번 강의에서는 그 문제를 실제 코드로 해결합니다. 해결 방법은 다음 다섯 단계입니다.① 메시지를 JSON 문자열로 만든다② 메시지 끝에 구분자 \n을 붙이고 전송한다.③ 받은 데이터는 buffer에 계속 모은다④ buffer 안에 \n이 있으면 메시지 하나를 잘라낸다⑤ 잘라낸 JSON 문자열을 Python 딕셔너리로 바꾼다16강..
16강. 패킷 경계란 무엇인가
16강. 패킷 경계란 무엇인가
2026.06.1216강 개념 중심 ⏱ 약 35분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 정리하고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 개념 중심 강의입니다. 15강까지 메시지 안에 type, sender, content 같은 규칙을 설계했습니다. 그런데 메시지 구조를 아무리 잘 정해도, 네트워크에서 받은 데이터가 항상 우리가 보낸 단위로 딱딱 나뉘어 도착하지는 않습니다. 초급자가 가장 많이 오해하는 지점이 바로 여기입니다.보낸 사람: send(메시지A) send(메시지B)기대하는 수신: recv() → A recv() → B실제 수신: recv() → AB 또는: recv() → A의 60% + rec..
15강. JSON 기반 메시지 타입 설계
15강. JSON 기반 메시지 타입 설계
2026.06.1215강 개념 중심 ⏱ 약 25분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 설계하고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 개념 중심 강의입니다. 14강에서 단순 문자열만으로는 메시지의 의미를 안정적으로 구분하기 어렵다는 것을 이해했습니다.메시지에 종류·보낸 사람·받는 사람·내용을 담는 규칙이 필요하다는 것도 정리했습니다. 이번 강의에서는 그 규칙을 JSON 구조로 구체화합니다.일반 채팅, 입장 알림, 퇴장 알림, 귓속말, 오류 메시지를 모두 다음처럼 종류와 내용이 분리된 구조로 표현합니다.{ "type": "chat", "sender": "user1", "content": "안녕하세요"} 이번 강의에서는 아직 코드를 실행하지 않습니다...
14강. 왜 메시지 규칙이 필요한가?
14강. 왜 메시지 규칙이 필요한가?
2026.06.1214강 개념 중심 ⏱ 약 25분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 정리하고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 개념 중심 강의입니다. 13강까지 만든 채팅 서버는 문자열 메시지를 주고받을 수 있습니다. 그런데 채팅 프로그램에 기능이 하나씩 더해지면 서버는 메시지의 의미를 구분해야 합니다."안녕하세요" ← 일반 채팅인가?"exit" ← 종료 명령인가? 아니면 'exit'이라는 단어를 채팅한 건가?"/w 민수 안녕" ← 귓속말인가? 서버가 이 규칙을 어떻게 아는가?"[ERROR] 없는 사용자" ← 오류 메시지인가? 사람은 문장을 보고 의미를 추측할 수 있지만, 프..