📘 동시 AI 서버 구축(1:1)
전체 코드
더보기
# ========================================================
# AI TCP/IP 서버 예제
# ========================================================
# 클라이언트로부터 텍스트 분석 요청(JSON)을 받아,
# 간단한 AI 분석(길이/감정/키워드)을 수행 후 결과를 JSON 형태로 응답하는 서버
# ========================================================
import socket # 네트워크 통신을 위한 기본 모듈
import json # JSON 직렬화/역직렬화용
# ========================================================
# 1. 서버 네트워크 설정
# ========================================================
HOST = '' # 서버의 IP 주소(Localhost)
PORT = 9999 # 사용할 포트 번호(0 ~ 65535 중 하나, 다른 서비스와 중복 금지)
# ========================================================
# 2. 분석 함수 정의
# ========================================================
def analyze_text(request):
"""
클라이언트의 유형(JSON)을 받아 분석 결과를 반환하는 함수
request: dict (예: {"mode": "sentiment", "text": "문장"})
"""
mode = request["mode"] # 분석 모드
text = request["text"]
#(1) 문자열 길이 분석
if mode == "length":
return {
"result": len(text),
"desc": f"문자 길이는 {len(text)}자 입니다."
}
#(2) 감정 분석(규칙 기반)
elif mode == "sentiment":
if any(word in text for word in ['좋아', '행복', '멋져', '훌륭']):
sentiment = "positive"
elif any(word in text for word in ['싫어', '불행', '짜증', '나빠']):
sentiment = "negative"
else:
sentiment = "neutral"
return {
"result": sentiment,
"desc": f"감정 분석 결과: {sentiment}"
}
#(3) 키워드 탐지
elif mode == "keyword":
keywords = ["AI", "서비스", "생산", "불량", "데이터"]
found = [k for k in keywords if k in text]
return {
"result": found,
"desc": f"키워드 발견: {', '.join(found) if found else '없음'}"
}
#(4) 지원하지 않는 모드 처리
else:
return {"error": f"지원하지 않는 분석 모드입니다.: {mode}"}
# ========================================================
# 3. TCP 서버 생성 및 설정
# ========================================================
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((HOST, PORT))
server_socket.listen()
print(f" AI 서버 실행 중... ({HOST}:{PORT})")
# ========================================================
# 4. 클라이언트 연결 수락
# ========================================================
client_socket, addr = server_socket.accept()
print(f" 클라이언트 연결됨: {addr}")
# ========================================================
# 5. 메시지 수신/응답 루프
# ========================================================
while True:
# 클라이언트로부터 데이터 수신 (최대 2KB)
data = client_socket.recv(2048).decode()
if not data:
# 데이터가 없으면 연결 종료
print(" 클라이언트 연결 종료 감지")
break
# 종료 명령어 수신 시 루프 종료
if data.lower() == "exit":
print(" 클라이언트 종료 요청 수신")
break
try:
# 수신된 문자열을 JSON으로 파싱
request = json.loads(data)
# 요청 분석 수행
result = analyze_text(request)
except json.JSONDecodeError:
# JSON 형식 오류 처리
result = {"error": "잘못된 JSON 형식입니다."}
# 응답을 JSON 문자열로 변환 후 인코딩
response = json.dumps(result, ensure_ascii=False)
client_socket.sendall(response.encode())
# -----------------------------------
# 6. 연결 종료
# -----------------------------------
client_socket.close()
server_socket.close()
print(" AI 서버 종료 완료")
함수 analyze_text를 생성하여 클라이언트의 요청 중 간단하게 AI 분석(길이/감정/키워드)을 송수신하는 코드예요.
1. 길이(length) 분석을 입력하고 문장을 작성하여 보내면 그 문장의 길이가 반환되고,
2. 감정(sentiment)에 설정된 단어가 포함된 문장을 입력하면 설정된 감정(positive, negative, neutral)이 반환되고,
3. 키워드(keyword)에 설정된 단어가 포함된 문장을 해당 키워드(keyword)가 반환되는 서버 코드예요.
'🔥 공부 > 🚹 Python 공부' 카테고리의 다른 글
| [PySpark] PySpark으로 파일 다루기(기본) (0) | 2025.11.20 |
|---|---|
| [Python] JSON 형태로 동시 AI 클라이언트 구축하기 (1) | 2025.11.12 |
| [Python] 데이터를 서버에 전송하고 출력하는 클라이언트 구축하기 (0) | 2025.11.12 |
| [Python] 클라이언트의 접속을 기다리고 송수신하는 서버 구축하기 (0) | 2025.11.12 |
| [Python] 파이썬 프로그래밍의 기초, 자료형_불 자료형 (0) | 2025.01.29 |