본문 바로가기

Rust/ExampleCode

Layered Architecture & MVC Pattern 기반의 채팅 애플리케이션 (서버&클라이언트)

반응형

개별 메시지

생성 시간: 22:03:14

🤖 AI 어시스턴트

채팅 애플리케이션 구조 제안 (Layered Architecture & MVC 기반)

Layered 아키텍처와 MVC 패턴을 활용하여 서버 클라이언트 구조의 채팅 애플리케이션을 만드는 방법을 한국어로 설명드리겠습니다. 기본적인 구조와 코드 예시를 포함하여 이해하기 쉽게 안내하겠습니다.

아키텍처 개요

  1. 모델 레이어 (Model Layer): 데이터 관리와 비즈니스 로직을 담당합니다. 주로 사용자 메시지의 저장 및 처리를 담당합니다.
  2. 뷰 레이어 (View Layer): 사용자 인터페이스를 구현합니다. 여기서는 콘솔 기반 UI를 예시로 사용하겠습니다.
  3. 컨트롤러 레이어 (Controller Layer): 사용자 입력을 받아 모델과 뷰 사이에서 중개 역할을 합니다.

코드 예시 구조

1. 모델 레이어 (models/chat_model.rs)

// models/chat_model.rs
pub struct ChatRoom {
    messages: Vec<String>, // 메시지 저장 공간
}

impl ChatRoom {
    pub fn new() -> Self {
        ChatRoom { messages: Vec::new() } // 초기화 함수
    }

    pub fn send_message(&mut self, message: String) {
        self.messages.push(message); // 메시지 추가 및 출력
        println!("Message sent: {}", message);
    }

    pub fn get_messages(&self) -> &Vec<String> { // 메시지 목록 반환
        &self.messages
    }
}

2. 뷰 레이어 (views/console_view.rs)

// views/console_view.rs
use crate::models::ChatRoom;

pub struct ConsoleView {
    chat_room: ChatRoom, // 모델 참조
}

impl ConsoleView {
    pub fn new() -> Self {
        ConsoleView { chat_room: ChatRoom::new() } // 초기화 함수 호출
    }

    pub fn display_messages(&self) {
        println!("현재 메시지 목록:");
        for msg in self.chat_room.get_messages() { // 메시지 표시
            println!("{}", msg);
        }
    }

    pub fn receive_input(&mut self) -> String { // 사용자 입력 받기
        print!("메시지를 입력하세요: ");
        std::io::stdout().flush(); // 입력 대기
        let mut input = String::new();
        std::io::stdin().read_line(&mut input).expect("입력 실패"); // 입력 받기 및 공백 제거
        input.trim().to_string() // 공백 제거 후 반환
    }
}

3. 컨트롤러 레이어 (controllers/chat_controller.rs)

// controllers/chat_controller.rs
use crate::models::ChatRoom;
use crate::views::ConsoleView;

pub struct ChatController {
    view: ConsoleView, // 뷰 참조
}

impl ChatController {
    pub fn new() -> Self {
        ChatController { view: ConsoleView::new() } // 초기화 함수 호출
    }

    pub fn handle_input(&mut self) {
        loop {
            self.view.display_messages(); // 메시지 표시
            let message = self.view.receive_input(); // 사용자 입력 받기
            self.view.chat_room.send_message(message); // 메시지 전송
        }
    }
}

실행 예시 (main.rs)

// main.rs
mod models;
mod views;
mod controllers;

use models::ChatRoom;
use views::ConsoleView;
use controllers::ChatController;

fn main() {
    let controller = ChatController::new(); // 컨트롤러 생성
    controller.handle_input(); // 입력 처리 시작
}

설명

  • 모델 레이어: ChatRoom은 메시지를 저장하고 전송하는 기능을 제공합니다.
  • 뷰 레이어: ConsoleView는 콘솔 기반 인터페이스를 통해 메시지를 표시하고 사용자 입력을 받습니다.
  • 컨트롤러 레이어: ChatController는 사용자 입력을 처리하고 모델과 뷰 사이에서 메시지 전송을 중개합니다.

이 구조는 간단한 채팅 애플리케이션의 기본 틀을 제공하며, 실제 구현 시에는 더 많은 기능 추가 (예: 사용자 인증, 메시지 필터링 등)와 함께 오류 처리 및 보안 고려사항이 필요할 것입니다. Rust의 타입 안전성과 강력한 기능 덕분에 이러한 복잡성을 효과적으로 관리할 수 있습니다.

 

"자체 개발한 private slm으로 추출한 내용입니다."

 

- 끝 -

반응형

'Rust > ExampleCode' 카테고리의 다른 글

Rust의 장점과 단점  (1) 2025.09.18
Rust 채팅 예제 코드 (서버/클라이언트)  (0) 2025.09.18