---
title: "Java 정리 41"
date: "2019-01-14"
tags: ["Java"]
status: archived
verified: false
---

---

## Network 파일 전송

* Client-Server 프로그래밍
  * Network 파일 전송 시 **확장자가 중요**, 다른 확장자로 저장하면 읽히지 않는다.

![01](/md/legacy-assets/java/41/01.webp)

1. 클라이언트에서 서버로 파일명을 전송한다.
2. 서버는 클라이언트가 보내온 파일명을 받는다.
3. 클라이언트에서 전송할 파일의 크기(byte[]의 개수)를 센 후 서버에 전송
4. 서버는 읽어들인 파일의 크기(byte[]의 개수)를 받는다.
5. 클라이언트에서 서버로 파일을 전송.
6. 서버는 전송된 파일을 읽어서 storage에 생성한다.

* **예제 코드**
  * [서버](https://github.com/younggeun0/SSangYoung/blob/master/dev/workspace/sistJavaStudy2/src/date190114/FileServer.java)
  * [클라이언트](https://github.com/younggeun0/SSangYoung/blob/master/dev/workspace/sistJavaStudy2/src/date190114/FileClient.java)

![02](/md/legacy-assets/java/41/02.webp)


## 프로젝트 진행 순서

1. **아이템 선정** : 도시락 주문 프로그램
    * 요구사항 정의
        * 요구사항 정의서(Request For Proposal, RFP)
            * 클라이언트 측에서 작성
            * 때에따라 PM이 만들기도 함
2. **Scope & Boundary**
    * 개발 범위 선정
3. **화면 디자인**
4. **DB 설계**
    * ERD, Table 설계서 작성
5. **Class Diagram**
6. **코딩**
    * **단위테스트**
7. **통합 테스트**
    * 배포, 사용자매뉴얼 작성
8. **안정화**
9. **서비스**


## 도시락 주문 프로그램

* Java SE의 배운 모든 기능을 사용하여 만들 예정
  * 관리자, 사용자로 나눠짐

* **간단한 요구사항 정의**

![03](/md/legacy-assets/java/41/03.webp)

* **클라이언트 UI**

![04](/md/legacy-assets/java/41/04.webp)

![05](/md/legacy-assets/java/41/05.webp)

![06](/md/legacy-assets/java/41/06.webp)

* **서버 UI**

![07](/md/legacy-assets/java/41/07.webp)

![08](/md/legacy-assets/java/41/08.webp)

![09](/md/legacy-assets/java/41/09.webp)

![10](/md/legacy-assets/java/41/10.webp)

* **테이블 설계**
  * 논리모델과 물리모델, eXerd로 ERD 작업 후 포워드 엔지니어링으로 DB에 추가 수행

![11](/md/legacy-assets/java/41/11.webp)

![12](/md/legacy-assets/java/41/12.webp)

* **클래스 다이어그램**

![13](/md/legacy-assets/java/41/13.webp)

![14](/md/legacy-assets/java/41/14.webp)
