Skip to content
Hariming edited this page Nov 8, 2025 · 1 revision
  1. 프로젝트 개요 본 프로젝트는 자바(Java) 소켓 API를 이용한 '클라우드 계산기' 프로그램이다.

클라이언트-서버(Client-Server) 모델을 기반으로 하며, 클라이언트가 전송한 산술 연산 요청을 서버가 받아 처리한 후, 그 결과를 다시 클라이언트에게 반환한다.

서버는 스레드 풀(ThreadPool)을 사용하여 다수의 클라이언트 요청을 동시에 처리할 수 있도록 구현되었다. 또한 클라이언트와 서버는 본 프로젝트에서 정의한 ASCII 기반 응용 계층 프로토콜을 통해 통신한다.

  1. 프로토콜 및 메시지 포맷 정의 본 계산기 프로그램은 HTTP의 상태 코드 개념을 참고하여 자체 프로토콜을 정의하였다. 모든 메시지 포맷은 ASCII 텍스트와 공백으로 구분된다.

2-1. 클라이언트 요청 (Client → Server) 클라이언트의 요청은 [명령어] [피연산자1] [피연산자2] 형식을 따른다.

명령어: 4가지 기본 사칙연산을 지원한다.

ADD (덧셈)

SUB (뺄셈)

MUL (곱셈)

DIV (나눗셈)

요청 예시: ADD 10 20

2-2. 서버 응답 (Server → Client) 서버의 응답은 [상태 코드] [데이터] 형식을 따른다. 이는 단순 메시지가 아닌, 응답의 유형(type)과 의미(semantic)를 정의하여 처리하라는 과제 지침을 따른 것이다.

상태 코드 200 (Success)

계산이 성공적으로 완료되었음을 의미한다.

[데이터] 부분에는 실제 계산 결과 값이 포함된다.

예시: (요청: ADD 10 20) → (응답: 200 30.0)

상태 코드 400 (Bad Request)

클라이언트의 요청 자체가 잘못되었음을 의미한다. (예: 인수 개수 오류, 숫자 형식 오류)

[데이터] 부분에는 오류의 원인을 나타내는 문자열 코드가 포함된다.

예시: (요청: ADD 10) → (응답: 400 INVALID_ARGUMENTS)

상태 코드 500 (Server Error)

서버가 요청을 처리하는 중 내부 계산 오류가 발생했음을 의미한다. (예: 0으로 나누기)

[데이터] 부분에는 오류의 원인을 나타내는 문자열 코드가 포함된다.

예시: (요청: DIV 25 0) → (응답: 500 DIVIDE_BY_ZERO)

Clone this wiki locally