Python 2
13강. 전체 채팅 브로드캐스팅 구현
13강. 전체 채팅 브로드캐스팅 구현
2026.06.1213강 구현 중심 ⏱ 약 35분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 만들고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 12강까지 여러 클라이언트가 서버에 접속할 수 있었고, 서버는 접속 중인 클라이언트 목록도 관리했습니다. 하지만 클라이언트끼리 서로의 메시지를 볼 수는 없었습니다. 이번 강의에서는 그 마지막 연결을 완성합니다. 한 클라이언트가 보낸 메시지를 서버가 받아 나머지 클라이언트 전체에게 전달하는 것을 브로드캐스팅이라고 합니다.클라이언트 A: "안녕하세요" ↓서버가 메시지 수신 ↓clients 목록 순회 ↓클라이언트 B에게 전달클라이언트 C에게 전달(A에게는 보내지 않음) 서버 쪽 ..
12강. 접속자 목록 관리
12강. 접속자 목록 관리
2026.06.1212강 구현 중심 ⏱ 약 30분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 만들고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 11강에서 여러 클라이언트가 동시에 접속하고 각자 메시지를 주고받는 서버를 만들었습니다. 하지만 그 서버에는 중요한 빈자리가 하나 있었습니다. 서버가 현재 접속 중인 클라이언트들을 따로 기억하지 못한다는 것입니다. 이 상태로는 다음 질문에 답하기 어렵습니다.지금 몇 명이 접속 중인가?어떤 클라이언트 소켓들이 연결되어 있는가?A가 보낸 메시지를 B와 C에게 전달하려면 누구에게 보내야 하는가? 이번 강의에서는 서버 안에 clients 리스트를 만들고, 클라이언트가 접속하면 추가하고 종료하면 제거하는 구조를 구현합니..
11강. 스레드로 클라이언트 처리하기
11강. 스레드로 클라이언트 처리하기
2026.06.1211강 구현 중심 ⏱ 약 40분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 만들고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 10강에서 threading.Thread(target=함수, args=(...))` 구조를 익혔습니다. 이번 강의에서는 그 구조를 실제 서버 코드에 적용합니다. 10강의 work(name) 함수가 이번 강의에서 handle_client(client_socket, client_address) 함수로 바뀌는 것입니다.10강 (thread_basic.py):threading.Thread(target=work, args=("A",))11강 (chat_server/server.py):threading.Thread(tar..
10강 스레드 개념과 기초 사용법
10강 스레드 개념과 기초 사용법
2026.06.1210강 개념 중심 ⏱ 약 30분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 만들고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 개념 중심 강의입니다. 9강에서 현재 서버의 한계를 확인했습니다. 서버가 클라이언트 A와 대화 중이면 B와 C를 자연스럽게 처리하기 어렵고, 이를 해결하려면 클라이언트마다 독립적인 처리 흐름이 필요하다는 것을 이해했습니다. 그 독립적인 처리 흐름을 만드는 도구가 스레드입니다. 이번 강의에서는 아직 다중 접속 서버를 완성하지 않습니다. 대신 스레드가 무엇인지 이해하고, Python의 threading 모듈로 스레드를 만들고 실행하는 방법을 익힙니다. 스레드를 이해하기 위해 thread_basic.py라는 작은 연습 파일을 만들어 순차 ..
9강. 여러 클라이언트 접속 구조
9강. 여러 클라이언트 접속 구조
2026.06.129강 개념 중심 ⏱ 약 25분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 정리하고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 개념 중심 강의입니다. 8강까지 1:1 채팅 서버와 클라이언트를 완성했습니다. 서버가 실행되고, 클라이언트가 접속해 메시지를 주고받는 흐름을 직접 만들었습니다. 그런데 여기서 중요한 질문이 생깁니다. "사용자가 두 명이면 어떻게 되지?" 현재 서버에 A가 접속해 대화하는 중에 B가 접속을 시도하면,서버는 A와의 대화를 처리하느라 B를 바로 받기 어렵습니다. 이번 강의에서는 코드를 새로 작성하는 대신 이 질문을 먼저 이해합니다.왜 현재 서버는 한 명만 처리할까?여러 클라이언트를 처리하려면 어떤 구조가 필요할까?왜 접속자 목록과 스레드가..
8강. 1:1 터미널 채팅 완성하기
8강. 1:1 터미널 채팅 완성하기
2026.06.128강 구현 중심 ⏱ 약 35분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 만들고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 지금까지는 클라이언트가 메시지를 보내면 서버가 자동으로 응답했습니다.이번 강의에서는 서버와 클라이언트가 터미널에서 다음처럼 대화하는 구조를 만듭니다.클라이언트: 안녕하세요서버: 안녕하세요, 반갑습니다클라이언트: 오늘 테스트 잘 되나요?서버: 네, 잘 됩니다클라이언트: exit채팅 종료 이번 강의의 핵심은 세 가지입니다.1. 클라이언트가 메시지를 입력해서 서버로 보낸다.2. 서버가 받은 메시지를 출력하고 직접 답장을 입력한다.3. 둘 중 한쪽이 exit을 입력하면 채팅을 종료한다. 이번 강의에서 완성하는 1:1 터..
7강. 반복 송수신과 종료 처리
7강. 반복 송수신과 종료 처리
2026.06.127강 구현 중심 ⏱ 약 35분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 만들고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 6강에서는 메시지를 한 번 보내고 응답을 한 번 받은 뒤 프로그램이 종료되었습니다.이번 강의에서는 사용자가 여러 번 메시지를 보낼 수 있고, 종료를 원할 때까지 연결을 유지하는 구조를 만듭니다.클라이언트가 메시지를 입력한다 ↓서버로 메시지를 보낸다 ↓서버가 메시지를 받고 응답을 보낸다 ↓클라이언트가 응답을 출력한다 ↓이 과정을 반복한다 ← while True ↓사용자가 exit을 입력하면 종료한다 핵심은 while 반복문과 종료 조건입니다. 반복문은..
6강. 문자열 인코딩과 메시지 송수신
6강. 문자열 인코딩과 메시지 송수신
2026.06.126강 구현 중심 ⏱ 약 35분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 만들고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 5강까지는 서버와 클라이언트가 연결되는 것만 확인했습니다. 이번 강의에서는 클라이언트가 문자열 메시지를 서버로 보내고, 서버가 응답 메시지를 다시 클라이언트로 보내는 흐름을 구현합니다. Python의 문자열은 그대로 소켓으로 보낼 수 없습니다. send()는 문자열이 아니라 바이트 데이터를 보내는 함수이기 때문입니다. 보낼 때는 encode(), 받을 때는 decode()가 필요합니다.문자열 → encode() → 바이트 → send() → 네트워크 이동 → recv() → 바이트 → decode() ..
5강. 첫 번째 클라이언트 만들기
5강. 첫 번째 클라이언트 만들기
2026.06.125강 구현 중심 ⏱ 약 30분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 만들고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 4강에서 만든 서버는 아직 혼자 기다리고만 있었습니다. 이번 강의에서는 서버에 접속하는 첫 번째 클라이언트를 만듭니다. 이번 강의의 목표는 메시지를 보내는 것이 아닙니다. 먼저 다음 흐름을 확실히 완성합니다.① 서버 실행 ↓② 서버가 127.0.0.1:5000에서 대기 ↓③ 클라이언트 실행 ↓④ 클라이언트가 127.0.0.1:5000으로 접속 ↓⑤ 서버가 클라이언트 접속을 감지 ↓⑥ 연결 확인 후 종료이번 강의에서 가장 중요한 문장은 다음입니다. 서버..
4강. 첫 번째 서버 만들기
4강. 첫 번째 서버 만들기
2026.06.124강 구현 중심 ⏱ 약 25분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 만들고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 구현 중심 강의입니다. 3강에서 소켓의 역할과 서버-클라이언트 연결 흐름을 이해했습니다. 이번 강의에서는 그중 서버 쪽 흐름을 실제 Python 코드로 작성합니다. 아직 완성형 채팅 서버를 만들지는 않습니다. 이번 강의의 목표는 더 작고 분명합니다.1. 서버가 실행된다2. 서버 소켓을 만든다3. IP와 포트에 서버 소켓을 묶는다4. 클라이언트 접속을 기다리는 상태가 된다이번 강의에서 만드는 chat_server/server.py는 최종 채팅 프로젝트 서버의 출발점으로, 이후 강의에서 메시지 처리·다중 접속·GUI 연결 등 기능을 하나씩..
3강. 소켓의 역할과 동작 흐름
3강. 소켓의 역할과 동작 흐름
2026.06.123강 개념 중심 ⏱ 약 20분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 정리하고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 개념 중심 강의입니다. 1강과 2강에서 서버·클라이언트 역할, IP·Port, TCP 연결 방식을 배웠습니다.이번 강의는 그 개념들을 실제 Python 코드에서 다루기 위해 Socket 을 사용합니다. Socket은 IP, Port, TCP를 코드 안에서 사용할 수 있게 해 주는 프로그래밍 추상화입니다. 개발자는 TCP 연결이 내부에서 어떻게 만들어지는지 매번 직접 처리하지 않고, 소켓 함수 흐름을 따라 서버와 클라이언트를 구현합니다.서버: socket() → bind() → listen() → accept() → recv(..
2강. IP, Port, TCP 이해하기
2강. IP, Port, TCP 이해하기
2026.06.122강 개념 중심 ⏱ 약 25분 0. 학습 목표→ 이번 글에서 무엇을 이해하고, 무엇을 정리하고, 무엇을 확인할지 먼저 정리합니다.더보기0.1 이번 글에서 다룰 내용이번 글은 개념 중심 강의입니다. 1강에서 서버는 먼저 실행되어 기다리고, 클라이언트는 서버에 접속을 요청한다고 배웠습니다. 그런데 아직 중요한 질문이 남아 있습니다. 클라이언트는 서버가 어디에 있는지 어떻게 알까요? 서버가 있는 컴퓨터를 찾는 정보가 IP이고, 그 컴퓨터 안에서 어떤 프로그램으로 들어갈지 구분하는 번호가 Port 입니다. 그리고 서버와 클라이언트가 연결을 만든 뒤 데이터를 순서대로 주고받는 대표적인 방식이 TCP입니다. 이번 강의에서 배우는 IP, Port, TCP는 최종 채팅 프로젝트의 server.py와 network_cl..