Python 2
35.5강. P5~P7 통합 점검
35.5강. P5~P7 통합 점검
2026.06.1235.5강 점검 중심 ⏱ 약 20분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 강의는 점검 중심 강의입니다. 35강까지 P5~P7 파트를 거치며 GUI 채팅 프로그램의 주요 기능을 모두 구현했습니다.새 기능을 추가하기보다, 지금까지 만든 기능들이 서로 충돌 없이 함께 동작하는지 확인합니다. 각 기능을 따로 테스트할 때는 됐는데, 함께 실행하면 문제가 생기는 경우가 있습니다. 이번 강의에서 그 부분을 미리 찾아 정리합니다.PySide6 GUI 창 실행서버 접속과 연결 종료실시간 메시지 수신사용자 목록 동기화상대 선택 UI귓속말 전송귓속말 오류 처리파일 선택파일 전송 진행률 표시서버의 파일 수신과 저장구분내용이해할 것GUI 기능들이..
35강. GUI 파일 선택과 전송 상태 표시
35강. GUI 파일 선택과 전송 상태 표시
2026.06.1235강 UI 중심 ⏱ 약 25분 0. 학습 목표→ 파일 전송 상태를 GUI에 연결해, 사용자가 선택·전송 중·완료 상태를 화면에서 확인할 수 있도록 합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 UI 중심 강의입니다. 33강에서 파일 보내기, 34강에서 파일 저장하기를 완성했습니다.파일 전송 기능 자체는 동작하지만,GUI 화면에서 사용자가 선택한 파일이 무엇인지, 지금 전송 중인지, 완료되었는지 알기 어렵습니다.이번 강의에서는 파일 전송 상태를 표시하는 위젯을 main.py에 추가합니다.파일 선택 → 선택한 파일명 표시 → 전송 시작 메시지 표시 → 진행률 증가 → 전송 완료 또는 오류 표시구분내용이해할 것메인 스레드에서 진행률 바를 실시간으로 갱신하려면 ..
34강. 파일 수신과 저장 처리
34강. 파일 수신과 저장 처리
2026.06.1234강 구현 중심 ⏱ 약 30분 0. 학습 목표→ 서버가 file_info · file_chunk · file_end 메시지를 처리해 received_files/ 폴더에 파일을 저장하는 수신 쪽을 완성합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 33강에서 파일을 보내는 쪽(send_file())을 완성했습니다.서버에는 아직 파일 메시지를 처리하는 코드가 없었기 때문에 파일 조각들이 수신되고 사라졌습니다. 이번 강의에서는 받는 쪽을 완성합니다. 세 가지 핸들러 함수를 추가해 메시지 흐름을 저장 흐름으로 연결합니다.file_info 수신 → 저장 파일 준비 (파일 열기)file_chunk 수신 → Base64 디코딩 → 파일에 이어 쓰기 ← 반복file_end 수신 ..
33강. 파일을 조각으로 나누어 보내기
33강. 파일을 조각으로 나누어 보내기
2026.06.1233강 구현 중심 ⏱ 약 30분 0. 학습 목표→ 32강에서 설계한 메시지 구조를 코드로 옮겨, 파일을 읽어 조각으로 나누어 보내는 전체 흐름을 완성합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 32강에서 파일 전송 흐름을 file_info → file_chunk → file_end 세 단계 메시지로 설계했습니다.이번 강의에서는 그 설계를 실제 코드로 옮깁니다.protocol.py에 send_file() 함수를 추가하고,client.py의 ChatClient 클래스에 파일 전송 메서드를 연결합니다. 구분내용이해할 것파일을 조각으로 나누어 Base64로 변환한 뒤 전송하는 흐름, 파일 ID 생성 방식만들 것protocol.py에 send_file() 함수 추가, client.p..
32강. 파일 전송 개념과 메타데이터 설계
32강. 파일 전송 개념과 메타데이터 설계
2026.06.1232강 개념 중심 ⏱ 약 20분 0. 학습 목표→ 파일 전송을 세 단계 메시지로 나누는 이유와, 파일 조각을 JSON에 담기 위해 Base64가 필요한 이유를 이해합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 개념 중심 강의입니다. 31강에서 파일 전송에는 "메타데이터(파일 이름·크기) 먼저, 바이너리 내용 나중"이라는 원칙이 필요하다는 것을 이해했습니다. 이번 강의에서는 그 원칙을 실제 메시지 규칙으로 구체화합니다. 파일 전송 흐름을 세 종류의 메시지로 나누어 설계하고, 각 메시지에 어떤 필드가 필요한지 확정합니다.file_info → 파일 이름과 크기 안내file_chunk → 파일 내용 조각 전달 (여러 번 반복)file_end → 파일 전송 완료 안내파일 조각은 바이너리이므로 JSON에..
31강. 텍스트와 바이너리 데이터의 차이
31강. 텍스트와 바이너리 데이터의 차이
2026.06.1231강 개념 중심 ⏱ 약 20분 0. 학습 목표→ 텍스트와 파일을 네트워크로 보낼 때 무엇이 다른지, 왜 메타데이터가 필요한지 이해합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 개념 중심 강의입니다. 30강까지 문자열 메시지를 encode("utf-8")로 바이트로 바꿔 보냈습니다.파일도 결국 바이트로 보내는 것은 같습니다.그러나 텍스트 메시지와 파일 데이터는 해석 방식과 전송 규칙이 다릅니다.이번 강의에서는 코드를 작성하기 전에 그 차이를 이해합니다. 택배에 비유하면, 텍스트는 엽서입니다. 글자 하나하나의 의미가 그대로 보여 누구나 읽을 수 있습니다.파일은 봉인된 택배 상자입니다. 파일의 내용물은 하나하나의 의미가 없이 전체가 하나의 의미가 됩니다. 구분내용이해할 것텍스트와 바이너리는 모두 바이트..
30강. 귓속말 오류 처리와 표시 방식
30강. 귓속말 오류 처리와 표시 방식
2026.06.1230강 구현 중심 ⏱ 약 25분 0. 학습 목표→ 귓속말 오류를 GUI 사전 검사와 서버 검증 두 방어선으로 나눠 처리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 29강에서 귓속말 전송 자체는 완성했습니다.하지만 상대를 고르지 않은 경우,빈 메시지인 경우,자기 자신을 선택한 경우, 상대가 방금 퇴장한 경우처럼어긋나는 상황마다 적절한 안내가 없으면 사용자는 왜 안 되는지 알 수 없습니다.이번 강의에서는 귓속말 오류를 두 방어선으로 정리합니다.GUI 사전 검사 → 보내기 전에 미리 거름 (빠른 안내, 좋은 경험)서버 최종 검증 → 전송 후 마지막 안전장치 (정확한 검증)구분내용이해할 것귓속말 오류는 GUI 사전 검사와 서버 검증으로 나눠 처리한다는 점만들 것GUI show..
29강. 귓속말 메시지 전송 구현
29강. 귓속말 메시지 전송 구현
2026.06.1229강 구현 중심 ⏱ 약 30분 0. 학습 목표→ whisper 메시지 타입을 추가해 선택한 상대 한 명에게만 메시지를 전달합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 28강까지 사용자 목록에서 상대를 선택하고 selected_user에 저장할 수 있었습니다.하지만 그 선택은 화면에만 머물러 있었습니다. 이번 강의에서는 새 메시지 타입 whisper를 추가해,selected_user를 target으로 삼아 선택한 상대에게만 메시지를 보냅니다. 서버는 target과 주소가 일치하는 클라이언트를 찾아 그 한 명에게만 전달합니다.# 클라이언트GUI에서 사용자 선택 (28강 selected_user) ↓입력창에 메시지 작성 → 귓속말 버튼 클릭 ↓{"typ..
28강. 상대 선택 UI 만들기
28강. 상대 선택 UI 만들기
2026.06.1228강 UI 중심 ⏱ 약 20분 0. 학습 목표→ 사용자 목록을 클릭 가능한 UI로 만들고, 선택한 상대를 화면에 표시합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 UI 중심 강의입니다. 27강에서 오른쪽 사용자 목록(QListWidget)은 접속자를 보여 주기만 했습니다.이번 강의에서는 그 목록을 선택 가능한 UI로 만듭니다.항목을 클릭하면 선택한 상대가 selected_user에 저장되고 화면에 표시됩니다. 아직 귓속말 메시지를 서버로 보내지는 않습니다.이번 강의의 목표는 "누구에게 보낼지 고르는 화면 흐름"을 완성하는 것입니다. 아래 코드에서 ➕는 27강 코드까지 없던 새 줄, ✏️는 형태가 바뀐 줄을 뜻합니다.최종 정리 코드에는 마커 없이 깨끗한 코드만 싣습니다.구분내용이해할 것사용자 목록 ..
27강. 사용자 목록 동기화
27강. 사용자 목록 동기화
2026.06.1227강 구현 중심 ⏱ 약 30분 0. 학습 목표→ 서버 접속자 목록을 user_list 메시지로 GUI에 동기화하는 구조를 만듭니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 26강까지 GUI 클라이언트는 메시지 송수신과 종료 처리가 안정적으로 완성되었습니다.하지만 화면에 "누가 접속 중인지"가 보이지 않습니다.귓속말 기능은 특정 상대를 골라야 하므로, 화면에 현재 접속자 목록이 있어야 다음 파트로 나아갈 수 있습니다.이번 강의가 그 준비 단계입니다. 새 메시지 타입 user_list를 추가합니다.서버는 접속자 목록이 바뀔 때마다 모든 클라이언트에게 목록을 보내고, GUI는 오른쪽 패널에 그 목록을 표시합니다.클라이언트 접속 또는 종료 ↓서버가 clients 목록 갱..
26강. GUI 상태 관리와 연결 종료 처리
26강. GUI 상태 관리와 연결 종료 처리
2026.06.1226강 구현 중심 ⏱ 약 30분 0. 학습 목표→ GUI 클라이언트의 연결 상태 관리를 하나의 함수로 통일하고, 종료 시 서버에 제대로 알리는 구조를 만듭니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 25강까지 GUI 클라이언트는 서버에 접속하고, 메시지를 보내고, 다른 클라이언트의 메시지도 받을 수 있었습니다. 송수신 자체는 완성됐지만 종료 상황에서 빈틈이 있습니다. 창을 닫으면 서버에 퇴장 메시지가 전달되지 않고, 연결이 끊겨도 입력창과 버튼이 활성 상태로 남습니다. 이번 강의에서는 이 세 가지를 하나의 흐름으로 묶습니다.연결 전 → 접속 버튼 활성화, 입력창·보내기 버튼 비활성화연결 성공 → 접속 버튼 비활성화, 입력창·보내기 버튼 활성화연결 종료 → 서버에 ex..
25강. GUI에서 실시간 메시지 받기
25강. GUI에서 실시간 메시지 받기
2026.06.1225강 구현 중심 ⏱ 약 30분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 만들고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 24강까지는 GUI에서 서버로 메시지를 보낼 수 있었습니다. 하지만 서버에서 오는 메시지를 GUI 화면에 표시하지는 못했습니다. 이번 강의에서는 수신 스레드를 추가해 다른 사용자의 메시지, 시스템 메시지, 오류 메시지를 실시간으로 받아 화면에 표시합니다. 이로써 "보내기 + 받기"가 모두 연결됩니다. 핵심 주의점이 하나 있습니다. 수신 스레드에서 GUI 위젯을 직접 수정하지 않는다는 것입니다. PySide6에서는 화면 위젯을 안전하게 바꾸기 위해 Signal(신호)을 사용합니다.GUI 클라이언트가 서버에 접속한..