네트워킹 전
프로그램 간의 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 문자열 전송
oop solid 원칙: 개방 폐쇄 원칙
OPen Closed Principle OCP
변경 x, closed
새기능추가 O open
CSS 약자, HTML 약자, HTTP 약자
클라이언트에서
fromJSON이 하는 일,,,
스트링을 받아서 자바에 넣음 ;?
맵객체를 만들어서 command 담고 ,
또 중괄호 있으니까 또 맵객체 만들어서 담음ㅁ ,, ?
저 상태로 넘기면 맵객체로 서버에 저장하구 막 또 맵으로 꺼낼때 하나하나 쳐서 해야돼서 (아래같이)
객체로 말고 문자열(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 만듬
*프로젝트 간에 클래스 공유하기
공유하고 싶은 클래스를 서브 프로젝트로 만들어 공유하기 !
'[네이버클라우드] 클라우드 기반의 개발자 과정 7기 > 웹프로그래밍' 카테고리의 다른 글
[NC7기-53일차(7월10일)] - 웹프로그래밍 34일차 (0) | 2023.07.10 |
---|---|
[NC7기-52일차(7월7일)] - 웹프로그래밍 33일차 (0) | 2023.07.07 |
[NC7기-50일차(7월5일)] - 웹프로그래밍 31일차 (0) | 2023.07.05 |
[NC7기-49일차(7월4일)] - 웹프로그래밍 30일차 (0) | 2023.07.04 |
[NC7기-48일차(7월3일)] - 웹프로그래밍 29일차 (0) | 2023.07.03 |