3. PySide6
47강. 최종 발표: README·시연
47강. 최종 발표: README·시연
2026.06.2347강 구현 중심 ⏱ 약 30분 0. 학습 목표→ 완성된 프로젝트를 README로 정리하고, 처음 보는 사람도 바로 실행할 수 있는 상태로 마무리합니다.더보기이번 글은 구현 중심 강의입니다.38강부터 46강까지, FastAPI WebSocket 서버와 PySide6 데스크톱 앱, 웹 관리창, MySQL 연동까지 하나의 프로젝트로 완성했습니다. 마지막으로 해야 할 일은 이 프로젝트를 "처음 보는 사람도 클론해서 바로 실행할 수 있도록" 정리하는 것입니다.코드는 이미 완성되어 있습니다. 이번 강의에서 새로 작성하는 파일은 README.md와 requirements.txt 두 개입니다. 그리고 전체 시연 순서를 한 번 정리합니다.구분내용만들 것requirements.txt — 의존 패키지 목록README.md..
46강. 데이터 저장: 메모리에서 MySQL로
46강. 데이터 저장: 메모리에서 MySQL로
2026.06.2346강 리팩토링 ⏱ 약 35분 0. 학습 목표→ 메모리 딕셔너리로 저장하던 사용자 정보와 로그인 기록을 MySQL 테이블로 옮겨, 서버를 재시작해도 데이터가 유지되게 만듭니다.더보기이번 글은 리팩토링 강의입니다. 45강까지 완성한 서버에는 한 가지 약점이 있습니다.users와 login_log가 파이썬 딕셔너리와 리스트로만 저장되기 때문에,서버를 재시작하면 회원가입한 계정과 로그인 기록이 모두 사라집니다. 이번 강의에서 이 두 저장소를 MySQL 테이블로 교체합니다.바뀌는 것은 server/app.py의 데이터 저장·조회 코드뿐입니다. WebSocket 흐름, 로그인·회원가입 API, 관리 페이지 HTML, PySide6 앱 코드는 전혀 손대지 않습니다.앱 동작도 전혀 달라지지 않습니다. 변화는 데이터가..
45강. 웹 관리창 만들기
45강. 웹 관리창 만들기
2026.06.2345강 구현 중심 ⏱ 약 25분 0. 학습 목표→ 브라우저에서 현재 접속자와 로그인 기록을 확인할 수 있는 관리 페이지를 서버에 추가합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 38강에서 그린 최종 구조도에는 PySide6 앱, FastAPI 서버, 웹 관리창 세 가지가 있었습니다. 앞 두 가지는 이미 완성됐습니다. 이번 강의에서 마지막 조각인 웹 관리창을 만듭니다. 브라우저에서 http://127.0.0.1:8000/admin을 열면 현재 접속자 목록과 로그인 기록이 표시됩니다. 관리 페이지는 새로고침으로 갱신하는 정적 스냅샷입니다. 실시간 자동 갱신은 이번 강의의 범위를 벗어납니다. 새로고침만으로도 현재 상태를 충분히 파악할 수 있고, 구현이 단순해서 FastAPI가 H..
44강. 앱 로그인 + 서버 인증 처리
44강. 앱 로그인 + 서버 인증 처리
2026.06.2344강 구현 중심 ⏱ 약 30분 0. 학습 목표→ 서버에 로그인 API를 추가하고, 앱이 채팅방에 들어가기 전에 인증을 거치도록 합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 43강까지 앱은 닉네임만 입력하면 바로 채팅방에 들어갈 수 있었습니다. 이번 강의에서 그 흐름에 로그인 단계를 추가합니다. 앱은 아이디·비밀번호를 서버에 HTTP로 보내고, 서버가 검증한 뒤 닉네임을 돌려줍니다. 검증에 성공하면 그 닉네임으로 WebSocket에 입장합니다. 이번 강의에서 사용자 정보는 메모리 딕셔너리에 저장합니다. 프로그램을 재시작하면 사라지는 임시 저장 방식입니다. 46강에서 이 부분을 MySQL로 교체합니다. 지금은 로그인 흐름 자체를 만드는 데 집중합니다.구분내용이해할 것HTTP ..
43강. PySide6 앱을 WebSocket으로 연결
43강. PySide6 앱을 WebSocket으로 연결
2026.06.2343강 구현 중심 ⏱ 약 40분 0. 학습 목표→ 이번 강의의 핵심 문제와 해결 구조를 먼저 잡습니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 39~42강에서 브라우저로 검증한 FastAPI 서버에 PySide6 데스크톱 앱을 연결합니다. 서버는 전혀 손대지 않습니다. 이번 강의에서 만드는 것은 desktop/main.py, 하나입니다. 이 강의가 이 파트에서 가장 까다로운 이유가 있습니다. PySide6는 Qt 이벤트 루프로 돌아가고, WebSocket 수신은 asyncio 이벤트 루프가 필요합니다. 두 루프는 서로 모르는 채 한 프로세스에서 함께 돌아야 합니다. 수신 루프를 GUI 스레드에서 직접 돌리면 화면이 멈춥니다. 해결책은 QThread 안에서 asyncio 루프를 ..
42강 귓속말
42강 귓속말
2026.06.2342강 구현 중심 ⏱ 약 20분 0. 학습 목표→ 특정 한 명에게만 전달되는 귓속말을 추가합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 41강까지 만든 서버는 메시지를 항상 전체에 브로드캐스트합니다.귓속말은 그 반대입니다. 보낸 사람과 받는 사람 단 둘에게만 전달해야 합니다. 이번 강의에서 프로토콜에 whisper 타입을 추가하고,닉네임으로 소켓을 역조회해 해당 한 명에게만 메시지를 보내는 기능을 구현합니다. 대상이 없을 때 오류 처리도 함께 다룹니다.구분내용이해할 것닉네임으로 소켓을 역조회하는 방식, 전체 전달과 1:1 전달의 차이만들 것server/app.py 수정, server/test_client.html 수정확인할 것귓속말이 보낸 사람과 받는 사람에게만 전달되는 것,..
41강. 사용자 목록 동기화
41강. 사용자 목록 동기화
2026.06.2341강 구현 중심 ⏱ 약 20분 0. 학습 목표→ 누가 채팅방에 있는지 모든 클라이언트가 실시간으로 알 수 있게 합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 40강까지 완성한 서버는 입장·퇴장 안내를 텍스트로 보내지만, 지금 채팅방에 누가 있는지는 알 수 없습니다.이번 강의에서 입장·퇴장이 일어날 때마다 서버가 현재 접속자 목록을 전체에 브로드캐스트하도록 추가합니다.클라이언트는 이 목록을 받아 화면 한쪽에 표시합니다.추가되는 내용은 작습니다. 40강 프로토콜에 user_list 타입 하나가 더해지고, 서버 두 곳과 HTML 한 곳이 바뀝니다.구분내용이해할 것입장·퇴장 이벤트마다 목록을 전체 전달하는 방식 — 클라이언트가 목록을 직접 유지하지 않는 이유만들 것server/ap..
40강. JSON 프로토콜과 닉네임
40강. JSON 프로토콜과 닉네임
2026.06.1240강 구현 중심 ⏱ 약 25분 0. 학습 목표→ 단순 문자열 메시지를 JSON 프로토콜로 바꾸고, 닉네임 입장·퇴장 처리를 추가합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 39강에서 만든 서버는 메시지를 단순 문자열로 주고받습니다.지금 상태로는 "누가 보낸 메시지인지", "시스템 안내인지 채팅인지"를 구분할 방법이 없습니다. 이번 강의에서 메시지 형식을 JSON으로 바꾸고, 첫 메시지로 닉네임을 등록하는 입장 처리를 추가합니다.이 프로토콜이 41강 사용자 목록, 42강 귓속말, 그리고 43강에서 PySide6 앱이 서버와 대화할 때까지 그대로 쓰입니다. 구분내용이해할 것메시지 타입(join · chat · leave)으로 서버가 상황을 구분하는 방식만들 것server/ap..
39강. FastAPI WebSocket 채팅 서버
39강. FastAPI WebSocket 채팅 서버
2026.06.1239강 구현 중심 ⏱ 약 30분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 만들고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 38강에서 FastAPI와 WebSocket의 개념을 정리했습니다. 이번 강의에서는 그 개념을 실제 코드로 옮겨, 브라우저에서 동작하는 간단한 채팅 서버를 만듭니다. 목표는 기존 소켓 프로젝트를 바꾸는 것이 아니라, 같은 채팅 기능이 WebSocket 방식에서는 어떻게 더 짧게 구현되는지 비교하며 확인하는 것입니다.FastAPI 앱 생성→ WebSocket 연결 받기→ 접속자 목록 관리→ 메시지 수신→ 전체 접속자에게 브로드캐스트→ 연결 종료 시 목록에서 제거구분내용이해할 것WebSocket 방식에도 접속자 목..
38강. FastAPI와 WebSocket 소개
38강. FastAPI와 WebSocket 소개
2026.06.1238강 개념 중심 ⏱ 약 20분 0. 학습 목표→ 소켓 경험을 FastAPI·WebSocket 구조로 잇고, 앞으로 만들 단일 백엔드의 큰 그림을 잡습니다.더보기0.1 이번 글에서 다룰 내용이번 글은 개념 중심 강의입니다. 37강까지 Python socket 모듈로 채팅 서버를 직접 만들었습니다.연결 수락·수신·송신·종료를 손으로 다루며 네트워크 통신의 내부 흐름을 익혔습니다. 이번 강의부터는 그 경험을 바탕으로 FastAPI와 WebSocket으로 같은 채팅을 다시 만듭니다.단, "다시 만드는 것"이 이 파트의 진짜 목표가 아닙니다.이번에 세우는 FastAPI 서버는 PySide6 데스크톱 앱과 웹 관리창이 함께 붙는 하나의 중심 백엔드가 됩니다. 이번 강의에서는 코드를 짜지 않습니다. 39강부터 코드..
37강. 예외 처리와 안정화 - 테스트와 버그 수정
37강. 예외 처리와 안정화 - 테스트와 버그 수정
2026.06.1237강 구현 중심 ⏱ 약 30분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 만들고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다.36강에서 최종 프로젝트 구조를 정리했습니다. 기능은 모두 들어 있지만, 기능이 있다고 해서 곧바로 "안정적인 프로그램"이 되는 것은 아닙니다. 정상 흐름만 만들어 두면 사용자가 예상 밖의 행동(서버가 꺼진 채 접속, 도중에 창 닫기 등)을 했을 때 프로그램이 그대로 멈춰 버립니다. 이번 강의에서는 실제 사용 중 생길 수 있는 오류 상황을 하나씩 점검하고 예외 처리를 더합니다.서버가 꺼져 있다 → 접속 실패를 안내하고 멈추지 않는다서버가 중간에 종료된다 → 연결 끊김을 감지해..
36강. 최종 프로젝트 통합 - 기능 연결과 구조 정리
36강. 최종 프로젝트 통합 - 기능 연결과 구조 정리
2026.06.1236강 구현 중심 ⏱ 약 25분 0. 학습 목표→ 새 기능 없이 흩어져 있던 코드를 정리하고, 제출·시연 가능한 최종 프로젝트 형태로 구조를 확정합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 지금까지 35강에 걸쳐 기능을 하나씩 추가하며 프로젝트를 키워 왔습니다.GUI 채팅 송수신,사용자 목록 동기화,귓속말,파일 전송과 저장까지모두 동작합니다. 이번 강의에서는 새 기능을 추가하지 않습니다.대신 흩어져 있던 코드의 자리를 정리하고, 제출·시연이 가능한 최종 프로젝트 형태로 구조를 확정합니다.구분내용이해할 것최종 프로젝트에서 각 파일이 맡는 역할과 역할 경계정리할 것제출 가능한 프로젝트 폴더 구조와 최종 실행 흐름확인할 것정리 후에도 채팅·귓속말·파일 전송이 깨지지 않고 동작하는..