。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

[네이버클라우드] 클라우드 기반의 개발자 과정 7기/웹프로그래밍

[NC7기-51일차(7월6일)] - 웹프로그래밍 32일차

quarrrter 2023. 7. 6. 18:25

네트워킹 전

프로그램 간의 Data/file 공유 안 됨. 

 

파일을 별도 컴퓨터에 저장하고 거기에 접속해서 데이터 처리 

하지만 여러 사람이 동시에 편집하려고 하면 ,,, 어카쥐 ? 

 

중간에 프로그램을 하나둔다.

A가 머 할 일있으면 app에 요청. 그럼 app이 처리.

B가 머 할 일있으면 app에 요청. 그럼 app이 처리.

=> 동시에 접근하더라도 app 이 순서대로 관리할거니까 데이터가 깨질 일이 없다. 

=> 클라이언트앱이 서버앱에 요청 ! 

 

client / server 통신 규칙 (protocol) 

1. 데이터 등록 

Board 객체를 Json 스트링 문자열로 변환. 

client App

6. MAP으로 변환
1. board/add -->
2. Json 문자열 -->

5. 응답(JSON 문자열)
ServerApp
3. Json을 Board 객체로 변환 
BoardDao
4. insert()

 

Client




1. 요청정보 ->

3. <- 응답 정보
Server

2. 작업 수행 

 

1. 요청 정보 (JSON 문자열)

{ " command" : "데이터 이름/명령", 

 " data" : "JSON 문자열"  }

 

ex) { "command" : "board/insert",

        "data" : " {\"title\" :\"...\", \"content\":'\,,,\"} "  }

 

JSON 문자열 : 

{ command 값: 일반 문자열 

 data 값: JSON 문자열  }

"데이터이름/ 명령"
게시글: board
회원: member
독서록 : reading 
명령: 서버의 DAO 메서드 명

 

* 요청 정보 보내기 작업에 참여하는 객체들 : participants 

예) "게시글 등록하기" participants 

 

사용자(actor)가 BoardAddListener를 통해 입력하여

Board 객체에 new/ setting 하고

BoardDao에 insert()

(BoardDao를 상속 받은) BoardNetworkDao가 Server에 JSON 문자열 생성하여 전송. 

"board/insert"  <--command

"Board 객체의 JSON 문자열 <--data

Board 객체가 new Gson().toJson()을 통해 Json 형태로 serialize하여 주입? 

Board Dao가 Server에 Json 문자열 전송 

OPen Closed Principle OCP 적용된. .. O에 해당되는 그림임.

oop solid 원칙: 개방 폐쇄 원칙

OPen Closed Principle OCP

변경 x, closed

새기능추가 O open 

 

CSS 약자, HTML 약자, HTTP 약자 

 

클라이언트에서 

fromJSON이 하는 일,,, 

스트링을 받아서 자바에 넣음 ;?

맵객체를 만들어서 command 담고 , 

또 중괄호 있으니까 또 맵객체 만들어서 담음ㅁ ,, ? 

 

board로 넘겨버리면 ,,,,

저 상태로 넘기면 맵객체로 서버에 저장하구 막 또 맵으로 꺼낼때 하나하나 쳐서 해야돼서 (아래같이)

객체로 말고 문자열(JSON으로 바꿔서)로 담아버리깅...

문자열로 주고 받기 하면 간단함(위 코드 어쩌구 저쩌구가 아래같이 한방에 끝남 )

스트링으로 꺼내기 쉽게 ~
이렇게 하기 ,, !!!!

2. 응답 정보(JSON 문자열)

{ "status" : "실행 결과",
  "result" : "JSON 문자열" }
*실행결과
"success" : 성공
"failure" : 실패 
ex ) 성공 예
{ "status": "success",

  "result" : "{\"no\":12, ...}"  }
ex ) 실패 예
{ "status": "failure",
  "result" : "해당 번호의 데이터가 없습니다."  }

 

 

***데이터 전송/ 수신 기능을 캡슐화 하기 

1. 현황

boardNetworkDao 

- insert()

- list()

=> Client/Server 간에 네트워크 프로토콜이 변경되면 변경된 규칙에 따라 데이터를 입출력하도록 DAO 안의 모든 메서드를 변경해야 한다. 

 

2. 개선

통신 기능을 캡슐화해서 별도의 클래스로 분리한다.

BoardNetworkDao ------call-----> NetworkDriver

   .                             request()     .요청전송, 응답수신, JSON 변환 

=> 프로토콜이 변경되더라도 DAO는 영향을 받지 않는다.=> SOLID의 OCP(open closed principle) 기능수정삭제는 열려지만(기존코드 안 바꾸지만) 새기능은 추가 ㅎㅎ

 

 

 

+요청 정보를 담는 ,, 클래스 

bitcamp package에 net 패키지안에 request 만듬 

 

*프로젝트 간에 클래스 공유하기 

공유하고 싶은 클래스를 서브 프로젝트로 만들어 공유하기 ! 

밑에 applicaion 도 지움
server 에도 추가